Интересное

Опубликован механизм защиты RAP для ядра Linux

Проект grsecurity представил первый выпуск набора патчей с реализацией механизма защиты RAP (Reuse Attack Protector) для ядра Linux, позволяющего блокировать работу эксплоитов, основанных на технике заимствования кусков кода

. Набор патчей включает всю запланированную функциональность и опубликован под лицензией GPLv2 в публичной тестовой ветке grsecurity для ядра Linux 4.9 (стабильные ветки grsecurity распространяются платно).

Техника заимствования кусков кода используется для эксплуатации переполнений буфера в условиях, когда в страницах памяти стека и буфера установлен запрет на исполнение кода. Для организации выполнения кода атакующего в таких условиях логика выполнения shell-кода формируется с использованием методов возвратно-ориентированного программирования (ROP) — атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания библиотечных функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков («гаджетов») для получения нужной функциональности. Для автоматизации выявления гаджетов применяются специальные инструменты. Используя готовые блоки машинных инструкций (гаджеты) можно организовать достаточно сложные операции, в том числе организовать работу условных операторов и циклов.

Реализованная на уровне ядра защита RAP основана на организации контроля за переходом в точку вызова функции. Для проверки адресов, по которым производится возврат из функций, используется проверочный ключ (RAP cookie), который сохраняется в резервном регистре (r12). Ключ вычисляется сразу после сохранения в стек адреса возврата и проверяется перед осуществлением выхода из функции. Если в момент выхода сохранённый и вычисленный ключи не совпадают, то переход на код функции был произведён не на начало функции.

Кроме отслеживания адресов возврата предлагается реализуемая на стороне компилятора техника определения какие функции могут быть вызваны из данного места и куда может быть возвращено управление. Данная часть защиты основана на идее категоризации функций по типам и определении допустимых мест, где могут применяться данные типы. При сборке приложения RAP формирует хэши, идентифицирующие используемые в программе функции, их параметры и тип возвращаемого значения. В процессе работы хэши проверяются на этапе косвенного вызова функции или выхода из функции.

Ранее предлагаемые способы защиты от атак с использованием методов возвратно-ориентированного программирования, как правило, основывались на рандомизации адреса загрузки библиотеки, который при технике ASLR меняется при каждом запуске программы. Слабая сторона такого способа в том, что атакующий может подобрать точку входа в библиотеку (определить адрес известной функции) и вычислить смещение для вызова используемых в эксплоите гаджетов, относительная позиция которых в библиотеке сохраняется. Для нарушения вычисленных атакующим смещений гаджетов предлагаются методы перемешивания всех функций системной библиотеки, но они достаточно ресурсоёмки, что мешает их практическому внедрению.

Предложенный проектом grsecurity подход позволяет достаточно надёжно блокировать атаки на основе заимствования кусков кода, но при этом оказывает минимальное влияние на производительность. Накладные расходы от применения RAP оцениваются в замедлении работы ядра на 5.4%, что ниже, чем при применении системы защиты от эксплуатации стека SSP (Stack Smashing Protector), используемой в Chrome OS. Отмечается, что в реальных условиях паразитная нагрузка от RAP заметно ниже, чем показатели синтетического теста, оценивающего производительность при наихудшем стечении обстоятельств.


В анонсе также упоминается о подготовке расширенной коммерческой реализации RAP, демонстрирующую более высокую производительность, снабжённую средствами статического анализа во время компиляции, включающую дополнительный высоко оптимизированный вероятностный механизм XOR-защиты адресов возврата, поддерживающую C++ и LTO (оптимизация на этапе связывания). Коммерческая редакция развивается для организации финансирования продолжения разработки и проведения исследований в новых направлениях. Также отмечается, что подана заявка на получение патента, описывающего методы, лежащие в основе технологии RAP.
HelpUTeam

Recent Posts

Windows 10 стала работать медленнее после установки обновления? Исправим это

Ваш компьютер на Windows 10 перестал быть быстрым после обновления системы? Мы подскажем, как устранить…

3 года ago

Описание приложения-чата по приглашениям Clubhouse

Это приложение для iPhone основано на приглашениях и аудио. С его помощью можно всё равно…

3 года ago

Изменение почтового клиента по умолчанию в iOS 14 на Outlook, Spark, Gmail и другие

Одним из самых значительных изменений в операционной системе iOS 14 является возможность менять приложения по…

4 года ago

Включение пузырей уведомлений в чатах на Android 11

В системе Android 10 появился фреймворк для пузырей чатов, популярность которым принёс Messenger. Новая система…

4 года ago

Как настроить беспроводную отладку в Android 11

От загрузки в режим Fastboot при помощи одной команды до установки модов без рута, есть…

4 года ago

Главные проблемы Android 11 Beta и следует ли устанавливать её

Бета-версия операционной системы Android 11 в настоящее время доступна для устройств Google Pixel. Нужно посетить…

4 года ago