Спецпроекты

ПО Безопасность

Уязвимость в ядре Linux позволяет обходить защиту от эксплойтов

Выявленная экспертами Cisco ошибка приводит к считыванию содержимого стековой памяти в ядре Linux. Тем самым появляется возможность обойти рандомизацию адресного пространства ядра, одного из ключевых защитных механизмов системы.

В обход KASLR

В ядре Linux обнаружилась уязвимость, позволяющая обходить один из ключевых защитных механизмов и считывать данные из ядра в некоторых устройствах.

Баг с индексом CVE-2020-28588, выявленный в функции /proc/pid/syscall, характерен для 32-битных устройств на базе процессоров ARM под управлением Linux. Проблема вызвана некорректной конверсией номерных значений при считывании файла, указывается в материале Threatpost.

С помощью нескольких команд злоумышленники могут заставить ядро Linux выдать 24 байта неинициализированной стековой памяти, что позволит обойти защитный механизм KASLR — рандомизацию адресного пространства ядра.

Как утверждают эксперты Cisco, обнаружившие уязвимость, атаку подобного рода невозможно определить удаленно. А в случае успеха у злоумышленников появляется возможность эксплуатировать ряд других уязвимостей ядра, если они не исправлены в атакованной системе.

linuks600.jpg
В ядре Linux нашлась серьезная брешь

Proc представляет собой специальную псевдофайловую систему в Unix-подобных системах, которая используется для динамического доступа к данным о системных процессах в ядре. Системная информация представлена в ней в виде иерархической файлоподобной структуры. Зная нужный идентификатор процесса, можно получить информацию о нем. Например, syscall — это файл в Linux, хранящий логи системных вызовов со стороны ядра.

Злоумышленник может эксплуатировать уязвимость, считывая данные из /proc/<pid>/syscall. «Мы видим эти данные в любой Linux-системе с ядром, сконфигурированным с CONFIG_HAVE_ARCH_TRACEHOOK, — говорится в публикации Cisco. — Этот файл выдает номер системного вызова и регистры аргументов для системных вызовов, которые в данный момент исполняются процессом. За этим следуют величины указателя стека и регистры счетчика программ. Выдаются значения всех шести регистров аргументов, хотя большая часть системных вызовов использует меньшее количество регистров».

Команды, позволяющие эксплуатировать уязвимость, выглядят как *# echo 0 > /proc/sys/kernel/randomize_va_space (# onlyneededforacleaneroutput), *$ while true; do cat /proc/self/syscall; done | uniq (# waits for changes)и *$ while true; do free &>/dev/null; done (# triggers changes).

Обновляться подано

Эксперты Cisco впервые обнаружили уязвимость на устройстве AzureSphere (версии 20.10), 32-битном устройстве на базе ARM и под управлением Linux. Баг присутствует во всех версиях ядра, начиная с v5.1-rc4. Уязвимы также версии 5.4.66 and 5.9.8. Обновления уже доступны, так что рекомендуется их установить как можно скорее.

«Уязвимости в ядре Linux находят довольно редко, но, в любом случае, это программный код, который пишут, тестируют и инспектируют люди, и от их ошибок никто не застрахован, — говорит Анастасия Мельникова, эксперт по информационной безопасности компании SEC Consult Services. — В любом случае, фактором защищенности является также количество специалистов, которые отслеживают возможные недочеты в ядре и информируют об этом разработчиков. В этом отношении ядро Linux находится в самом выигрышном положении».

Ранее в 2021 г. эксперты Symantec обнародовали две новые уязвимости в операционных системах на базе Linux, которые затрагивали некоторые подсистемы ядра операционной системы и позволяли обходить защиту от аппаратной уязвимости Spectre. Эти баги получили средние оценки по шкале угроз CVSS.

Перед этим, в марте были устранены сразу пять похожих уязвимостей в виртуальных сокетах ядра Linux, которые выявил эксперт по безопасности компании Positive Technologies Александр Попов. Этим уязвимостям была присвоена оценка 7,0 по шкале CVSS.

Роман Георгиев

Короткая ссылка