Целостность потока управления
Что такое Целостность потока управления?
Целостность потока управленияЦелостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
CFI была формализована Абади, Будиу, Эрлингссоном и Лигатти в 2005 году. Компилятор строит граф потока управления, для каждой точки косвенного вызова определяет допустимые цели и вставляет проверки в местах вызовов и возвратов. Практические реализации: LLVM CFI (прямые рёбра через типовые бакеты), Microsoft Control Flow Guard, kCFI ядра Linux и аппаратные варианты — Intel CET-IBT и Arm BTI для косвенных переходов плюс теневой стек для возвратов. ROP/JOP-цепочки нарушают допустимое множество рёбер и блокируются. Основные ограничения — широкие классы эквивалентности в C/C++ и несовместимые интерфейсы.
● Примеры
- 01
Microsoft Control Flow Guard отклоняет косвенный вызов через испорченную vtable в Edge.
- 02
Ядро Linux 6.x с kCFI блокирует ROP-цепочку в уязвимости драйвера.
● Частые вопросы
Что такое Целостность потока управления?
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Целостность потока управления?
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
Как работает Целостность потока управления?
CFI была формализована Абади, Будиу, Эрлингссоном и Лигатти в 2005 году. Компилятор строит граф потока управления, для каждой точки косвенного вызова определяет допустимые цели и вставляет проверки в местах вызовов и возвратов. Практические реализации: LLVM CFI (прямые рёбра через типовые бакеты), Microsoft Control Flow Guard, kCFI ядра Linux и аппаратные варианты — Intel CET-IBT и Arm BTI для косвенных переходов плюс теневой стек для возвратов. ROP/JOP-цепочки нарушают допустимое множество рёбер и блокируются. Основные ограничения — широкие классы эквивалентности в C/C++ и несовместимые интерфейсы.
Как защититься от Целостность потока управления?
Защита от Целостность потока управления обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Целостность потока управления?
Распространённые альтернативные названия: CFI, Control Flow Guard, kCFI.
● Связанные термины
- appsec№ 1028
Теневой стек
Теневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) — функция процессора, объединяющая аппаратный теневой стек и Indirect Branch Tracking (IBT) для блокировки ROP, JOP и COP.
- appsec№ 925
Возвратно-ориентированное программирование (ROP)
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
- appsec№ 064
ASLR
ASLR случайным образом размещает код, стеки, кучи и библиотеки в памяти при каждом запуске, чтобы атакующий не мог предсказать целевые адреса для эксплойтов.
- appsec№ 303
DEP
Предотвращение выполнения данных (DEP, NX или W^X) помечает страницы памяти как неисполняемые, чтобы атакующий не мог запустить шеллкод, внедрённый в стек или кучу.
- appsec№ 670
Безопасность памяти
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
● См. также
- № 569Jump-Oriented Programming (JOP)
- № 1095Стек-канарейка
- № 581KASLR
- № 1058SMEP / SMAP
- № 671Языки с безопасной памятью
- № 953Свойства безопасности Rust