Кис Кук представил новые патчи для улучшения безопасности стека ядра Linux

Linux
Кис Кук, бывший главный системный администратор kernel.org и руководитель группы безопасности Ubuntu, теперь работающий в Google над защитой Android и ChromeOS, выпустил набор патчей, которые рандомизируют смещения стека ядра при обработке системных вызовов. Патчи улучшают безопасность ядра, изменяя расположение стека, lили это делает атаки стека намного более сложными и менее успешными

Первоначальная идея патча принадлежит проекту PaX RANDKSTACK. В 2019 году инженер Intel Елена Решетова попыталась создать реализацию этой идеи, пригодную для включения в основной состав ядра Linux.


Впоследствии инициативу взял на себя Кес Кук. который представил подходящую реализацию для основной версии ядра и чьи исправления запланированы для версии 5.13 Linux.

По умолчанию режим будет отключен, и для его включения предлагается параметр командной строки ядра. "Randomize_kstack_offset = вкл / выкл»И настройки CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, Кроме того, накладные расходы на включение режима оцениваются примерно в 1% потери производительности.

Суть предлагаемой защиты заключается в выборе случайного смещения стека при каждом системном вызове., что усложняет определение структуры стека в памяти, даже если получена адресная информация, поскольку базовый адрес стека изменится при следующем вызове.

В отличие от реализации ПАКС РАНДК СТЕК, в патчах, предлагаемых для включения в ядро, рандомизация на начальном этапе не проводится, но после установки структуры pt_regs, что делает невозможным использование методов на основе ptrace для определения случайного смещения во время длительного системного вызова.

Поскольку защита стека ядра Linux постоянно улучшалась (отображение стека на основе vmap со страницами защиты, удаление thread_info, STACKLEAK), злоумышленникам приходилось искать новые способы работы своих эксплойтов.

Они использовали и продолжают полагаться на детерминизм стека ядра в ситуациях, когда VMAP_STACK и THREAD_INFO_IN_TASK_STRUCT они не имели отношения к делу. Например, следующие недавние атаки были бы затруднены, если бы смещение стека не было детерминированным между системными вызовами.

Назначение функции randomize_kstack_offset - добавить случайное смещение после того, как pt_regs был помещен в стек и до того, как остальная часть стека потоков будет использована во время обработки системного вызова, и изменять его каждый раз, когда процесс вызывает системный вызов. Источник случайности в настоящее время определяется архитектурой (но x86 использует младший байт rdtsc ()).

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

На x86 нет видимых изменений для этого, потому что хранитель стека уже безусловно отключен для модуля компиляции, но изменение требуется в arm64. К сожалению, нет атрибута, который можно использовать для отключения хранителя стека для определенных функций. Сравнение с функцией PaX RANDKSTACK: функция RANDKSTACK рандомизирует расположение начала стека (cpu_current_top_of_stack), то есть включает расположение структуры pt_regs в стеке.

на начальном этапе, в этом патче использовался тот же подход, но в ходе недавних обсуждений было определено, что это не имеет большого значения, поскольку если функция ptrace доступна злоумышленнику, вы можете использовать PTRACE_PEEKUSR для чтения / записи различных смещений в структуру pt_regs, наблюдения за поведением кеша при доступе к pt_regs и выяснения случайное смещение стека.

Наконец, упоминается, что начальная реализация поддерживает процессоры ARM64 и x86 / x86_64.


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован.

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

bool (истина)