Новости и события » Hi-Tech » Проект OpenBSD представил технику защиты RETGUARD

Проект OpenBSD представил технику защиты RETGUARD

Тео де Раадт (Theo de Raadt) представил предварительную реализацию техники защиты RETGUARD, которую планируется интегрировать в OpenBSD для усложнения выполнения эксплоитов, построенных с использованием заимствования кусков кода и приемов возвратно-ориентированного программирования (ROP, Return-Oriented Programming).

Суть метод защиты RETGUARD заключается в искажении адреса возврата обработчиков типовых функций системных библиотек и ядра - перед началом обработчика и перед командой возврата управления (ret) добавляется вызов "xorl %rsp,(%rsp)" для x86_64 или "xorl %esp,(%rsp)" для 32-разрядных систем x86. При штатном ходе выполнения первый xor инвертирует адрес возврата, а второй инвертирует второй раз, приведя его к изначальному виду. При выполнении эксплоита осуществляется переход на составляющий эксплоит блок заимствованных машинных инструкций (гаджет), точка входа в который как правило не совпадает с началом функции. Так как управление передано не на начало, а в определенную часть тела функции, первый "xor" будет пропущен и "xor" перед выходом исказит переданный эксплоитом адрес возврата.

Метод реализован в виде патча к компилятору clang, который на этапе компиляции производит автоматическую подстановка кода инвертирования адреса возврата во все функции. Для функций системной библиотеки и ядра, написанных на языке ассемблер, подготовлены отдельные патчи, в которых команды "xor" добавлены вручную. Для активации нового метода защиты в приложениях не требуется отдельных действий, достаточно наложить патч, после чего пересобрать gnu/usr.bin/clang и затем этим clang пересобрать систему.

Код пока оценивается как экспериментальный и предлагается для тестирования перед включением в основной состав OpenBSD. При этом работа базовой системы и большинства портов с предложенным патчем отмечается как не вызывающая нареканий. Тем не менее пока имеются отдельные проблемы при сборке нескольких крупных портов, в коде которых используются прямые манипуляции с адресами возврата.После отладки и интеграции защиты адресов возврата планируется реализовать похожую технику для усложнения использования гаджетов, в которых возврат управления обеспечен через подстановку адреса для команды jmp (pop/jmp или JOP).

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


Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх