FineIBT обновлен для Linux в качестве альтернативного подхода к управлению целостностью потока (CFI)

Еще в августе 2021 года Intel выпустила первоначальные исправления для «FineIBT» для ядра Linux, целью которых было объединить лучшее из их технологии управления потоком управления (CET) и целостности потока управления для эффективного повышения защиты безопасности ядра.

В прошлом году патчи FineIBT были обновлены, и на этой неделе инженер Intel Питер Зийлстра (Peter Zijlstra) разослал последние патчи FineIBT для Linux. Его последнее резюме этой работы FineIBT по обеспечению целостности потока управления для Linux сводится к следующему:
Реализуйте альтернативную схему CFI, которая сочетает в себе детализированную природу kCFI, а также в полной мере использует крупнозернистый аппаратный CFI, предоставляемый IBT.

Сравнение:

kCFI — это чисто программная схема CFI, основанная на возможности чтения текста, в частности инструкции *перед* целевым символом, и проверка хэша *перед* выполнением вызова (в противном случае поток управления уже скомпрометирован).

FineIBT представляет собой программно-аппаратную гибридную схему; гарантируя, что каждая цель ветки начинается с проверки хэша, можно разместить проверку хэша после ветки. Это имеет несколько преимуществ:

— нагрузка (хэш) исключена; нет памятки; нет требования RX.

— Состояние IBT WAIT-FOR-ENDBR означает остановку спекуляции; помещая проверку хеш-функции в непосредственную инструкцию после цели перехода, мы получаем минимальное окно для спекуляций, и в целом это является жизнеспособной защитой от SpectreBHB.

Очевидно, что этот патч основан на kCFI (upstream), но, кроме того, он также зависит от заполнения из патчей отслеживания глубины вызовов (tip/x86/core). Он использует это заполнение для размещения проверки хэша, в то время как сайты вызовов переписываются, чтобы изменить косвенную цель так, чтобы она находилась на 16 байтов впереди исходной цели, таким образом попадая в эту новую преамбулу.

Примечательно, что нет оборудования, которое требует отслеживания глубины вызовов (Skylake) и поддерживает IBT (Tigerlake и новее).

Этот код основан на последней работе по отслеживанию глубины вызовов на пути к основной версии Linux (вероятно, 6.2). См. эту серию исправлений для последнего обсуждения FineIBT, включая обсуждение дополнительных последствий для безопасности, которые следует учитывать. Посмотрим, к чему приведет эта работа FineIBT и удастся ли/когда ее подхватить основному ядру.
Поделиться:

Похожие публикации

Тут ничего нет

Нет комментариев