17.09.2021

Представлены патчи для рандомизации адресов стека ядра Linux при системных вызовах

Кис Кук (Kees Cook), бывший главный сисадмин kernel.org и лидер Ubuntu Security Team, ныне работающий в компании Google над обеспечением защиты Android и ChromeOS, опубликовал набор патчей с реализацией рандомизации смещений в стэке ядра при обработке системных вызовов. Патчи повышают безопасность ядра путём изменения размещения стека, что делает атаки на стек значительно более сложным и менее успешным занятием. Начальная реализация поддерживает процессоры ARM64 и x86/x86_64.

Изначальная идея патча принадлежит проекту PaX RANDKSTACK. В 2019 году Елена Решетова, инженер из фирмы Intel, попробовала создать реализацию данной идеи, пригодную для включения в основной состав ядра Linux. Позже инициативу подхватил Кис Кук, который и представил реализацию пригодную для основного варианта ядра. Патчи планируется включить в состав выпуска 5.13. Режим будет отключён по умолчанию. Для включения предложены параметр командной строки ядра «randomize_kstack_offset=on/off» и настройка CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Накладные расходы при включении режима оцениваются приблизительно в 1% потери производительности.

Суть предложенной защиты в выборе случайного смещения стека при каждом системном вызове, что усложняет определение раскладки стека в памяти, даже получив данные об адресах, так как при следующем системном вызове базовый адрес стека изменится. В отличие от реализации PaX RANDKSTACK в предложенных для включения в ядро патчах рандомизация выполняется не на начальной стадии (cpu_current_top_of_stack), а после выставления структуры pt_regs, что делает невозможным использование методов на основе ptrace для определения рандомизированного смещения в процессе работы длительно выполняемого системного вызова.

Источник.