DEF CON 34 — Главная сцена — Взлом аппаратной CFI через Sigreturn — Омри Бен Бассат
DEFCONConference
0:00 / 0:00
DEF CON 34 — Главная сцена — Взлом аппаратной CFI через Sigreturn — Омри Бен Бассат
456 просмотров · 1 дн. назад
DEFCONConference
418 тыс. подписчиков
456 просмотров · 1 дн. назад
Современные системы ARM64 полагаются на аппаратную целостность потока управления (CFI), такую как PAC и BTI, для предотвращения классических эксплойтов ROP/JOP. Косвенные переходы должны приводить к допустимым целям, возвращаемые значения подписываются, а произвольные переходы должны завершаться.
Однако… это не так.
В этом докладе мы покажем, что по своей сути существует фундаментальный разрыв между обработкой сигналов POSIX и аппаратной целостностью потока управления. Sigreturn действует как встроенный, поддерживаемый ядром примитив обхода CFI, позволяющий осуществлять произвольные передачи потока управления с помощью специально созданных сигнальных кадров, обходя при этом принудительное применение CFI.
Затем мы рассмотрим, как это работает на практике в современных системах Linux и Android (включая новейшие устройства Ubuntu и Pixel): использование sigreturn в качестве практического примитива эксплуатации, затем поворот с помощью «безопасных для CFI поворотов стека», злоупотребление отсутствием принудительного применения BTI на vDSO и использование общих настроек по умолчанию GCC.
Я представлю пример реализации, демонстрирующий, как эти примитивы можно объединять в цепочки в классическом стиле SROP, и покажу, как можно расширить COOP/CFOP за пределы управления на уровне функций для достижения надежного выполнения произвольного кода, эффективно нарушая работу CFI снова и снова.