Проект grsecurity представил первый выпуск набора патчей с реализацией механизма защиты RAP (Reuse Attack Protector) для ядра Linux, позволяющего блокировать работу эксплоитов, основанных на технике заимствования кусков кода
Техника заимствования кусков кода используется для эксплуатации переполнений буфера в условиях, когда в страницах памяти стека и буфера установлен запрет на исполнение кода. Для организации выполнения кода атакующего в таких условиях логика выполнения shell-кода формируется с использованием методов возвратно-ориентированного программирования (ROP) — атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания библиотечных функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков («гаджетов») для получения нужной функциональности. Для автоматизации выявления гаджетов применяются специальные инструменты. Используя готовые блоки машинных инструкций (гаджеты) можно организовать достаточно сложные операции, в том числе организовать работу условных операторов и циклов.
Реализованная на уровне ядра защита RAP основана на организации контроля за переходом в точку вызова функции. Для проверки адресов, по которым производится возврат из функций, используется проверочный ключ (RAP cookie), который сохраняется в резервном регистре (r12). Ключ вычисляется сразу после сохранения в стек адреса возврата и проверяется перед осуществлением выхода из функции. Если в момент выхода сохранённый и вычисленный ключи не совпадают, то переход на код функции был произведён не на начало функции.
Кроме отслеживания адресов возврата предлагается реализуемая на стороне компилятора техника определения какие функции могут быть вызваны из данного места и куда может быть возвращено управление. Данная часть защиты основана на идее категоризации функций по типам и определении допустимых мест, где могут применяться данные типы. При сборке приложения RAP формирует хэши, идентифицирующие используемые в программе функции, их параметры и тип возвращаемого значения. В процессе работы хэши проверяются на этапе косвенного вызова функции или выхода из функции.
Ранее предлагаемые способы защиты от атак с использованием методов возвратно-ориентированного программирования, как правило, основывались на рандомизации адреса загрузки библиотеки, который при технике ASLR меняется при каждом запуске программы. Слабая сторона такого способа в том, что атакующий может подобрать точку входа в библиотеку (определить адрес известной функции) и вычислить смещение для вызова используемых в эксплоите гаджетов, относительная позиция которых в библиотеке сохраняется. Для нарушения вычисленных атакующим смещений гаджетов предлагаются методы перемешивания всех функций системной библиотеки, но они достаточно ресурсоёмки, что мешает их практическому внедрению.
Предложенный проектом grsecurity подход позволяет достаточно надёжно блокировать атаки на основе заимствования кусков кода, но при этом оказывает минимальное влияние на производительность. Накладные расходы от применения RAP оцениваются в замедлении работы ядра на 5.4%, что ниже, чем при применении системы защиты от эксплуатации стека SSP (Stack Smashing Protector), используемой в Chrome OS. Отмечается, что в реальных условиях паразитная нагрузка от RAP заметно ниже, чем показатели синтетического теста, оценивающего производительность при наихудшем стечении обстоятельств.
Ваш компьютер на Windows 10 перестал быть быстрым после обновления системы? Мы подскажем, как устранить…
Это приложение для iPhone основано на приглашениях и аудио. С его помощью можно всё равно…
Одним из самых значительных изменений в операционной системе iOS 14 является возможность менять приложения по…
В системе Android 10 появился фреймворк для пузырей чатов, популярность которым принёс Messenger. Новая система…
От загрузки в режим Fastboot при помощи одной команды до установки модов без рута, есть…
Бета-версия операционной системы Android 11 в настоящее время доступна для устройств Google Pixel. Нужно посетить…