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

21 августа 2017 года

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

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

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

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

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

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Проект OpenBSD представил технику защиты RETGUARD», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.