Проект grsecurity представил защиту от атак с использованием заимствования кусков кода
29 апреля 2016 года
Проект grsecurity, в рамках которого развивается серия надстроек для усиления безопасности ядра Linux, сообщил о важной вехе в своём развитии - в набор патчей grsecurity включён механизм защиты RAP, позволяющий блокировать работу эксплоитов, основанных на технике заимствования кусков кода. RAP реализован в форме плагина к GCC и распространяется под лицензией GPLv3. Блокирование атак обеспечивается благодаря применению двух механизмов: контроля возврата в точку вызова функции и определения какие функции могут быть вызваны из данного места и куда может быть возвращено управление.
Данная техника атак используется для организации выполнения кода атакующего при переполнении буфера в условиях, когда в страницах памяти стека и буфера установлен запрет на исполнение кода. Суть метода в применении для построения логики выполнения shell-кода возвратно-ориентированного программирования (ROP), оперирующего уже имеющимися в библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления, как правило, это окончания библиотечных функций. Работа эксплоита сводится к построению цепочки вызовов подобных блоков ("гаджетов") для получения нужной функциональности. В том числе через вызов гаджетов организуется работа условных операторов и циклов. Для автоматизации выявления гаджетов применяются специальные инструменты.
Ранее предлагаемые способы защиты от атак с использованием методов возвратно-ориентированного программирования, как правило, основывались на рандомизации адреса загрузки библиотеки, который при технике ASLR меняется при каждом запуске программы. Слабая сторона такого способа в том, что атакующий может подобрать точку входа в библиотеку (определить адрес известной функции) и вычислить смещение для вызова используемых в эксплоите гаджетов, относительная позиция которых в библиотеке сохраняется. Для нарушения вычисленных атакующим смещений гаджетов предлагаются методы перемешивания всех функций системной библиотеки, но они достаточно ресурсоёмки, что мешает их практическому внедрению. Разработчики OpenBSD попытались найти компромисс и предложили выполнять перекомпоновку системной библиотеки на этапе загрузки системы.
Подход RAP (Return Address Protection), предлагаемый в grsecurity, позволяет достаточно надёжно блокировать атаки на основе заимствования кусков кода и при этом оказывает минимальное влияние на производительность. Суть метода в организации проверки адресов, по которым производится возврат из функций. Для проверки используется проверочный ключ (RAP cookie), который сохраняется в резервном регистре (r12). Ключ вычисляется сразу после сохранения в стек адреса возврата и проверяется перед осуществлением выхода из функции. Если в момент выхода сохранённый и вычисленный ключи не совпадают, то переход на код функции был произведён не на начало функции.
Вторая часть защиты основана на идее категоризации функций по типам и определении допустимых мест, где могут применяться данные типы. При сборке приложения RAP формирует хэши, идентифицирующие используемые в программе функции, их параметры и тип возвращаемого значения. В процессе работы хэши проверяются на этапе косвенного вызова функции или выхода из функции.
Дополнение 1: В экспериментальной ветке grsecurity устранена DoS-уязвимость, позволяющая инициировать крах ядра при вставке слишком длинной строки в эмулятор терминала (например, "script /dev/null < /dev/zero"). В связи с этой уязвимостью разгорелся не совсем понятный конфликт - с одной стороны сведения о проблеме были адекватно приняты в форуме grsecurity и был сразу выпущен патч, но, с другой стороны, опубликованная на следующий день демонстрация простейшего метода эксплуатации проблемы в Twitter привела к блокировке анонсировавшего проблему пользователя и авторов ретвитов, а также к ограничению публичного доступа к каналу @grsecurity. Мотивы удаления пока не ясны, возможно это была реакция на волну троллинга и попытки дискредитации проекта.
Дополнение 2: Опубликован FAQ с подробным описанием принципов работы RAP и особенностей реализации.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.