Теневой стек
Что такое Теневой стек?
Теневой стекТеневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки.
Теневой стек работает параллельно обычному стеку вызовов: каждый вызов помещает адрес возврата в оба стека, а возврат сравнивает их. Расхождение приводит к ловушке процессора и завершению процесса до использования испорченного адреса. Технику популяризировали академические работы по CFI, а в аппаратуре её реализуют Intel CET shadow stack и Arm v8.5-A Guarded Control Stack (GCS). Существуют программные реализации (LLVM SafeStack, clang -fsanitize=safe-stack) с потерями производительности и изоляции. Теневой стек защищает обратное ребро CFI; непрямые вызовы по-прежнему требуют CFI/IBT.
● Примеры
- 01
Windows 11 включает пользовательские теневые стеки на процессорах с CET.
- 02
Arm GCS обнаруживает переполнение стека, перезаписывающее сохранённый LR.
● Частые вопросы
Что такое Теневой стек?
Теневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Теневой стек?
Теневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки.
Как работает Теневой стек?
Теневой стек работает параллельно обычному стеку вызовов: каждый вызов помещает адрес возврата в оба стека, а возврат сравнивает их. Расхождение приводит к ловушке процессора и завершению процесса до использования испорченного адреса. Технику популяризировали академические работы по CFI, а в аппаратуре её реализуют Intel CET shadow stack и Arm v8.5-A Guarded Control Stack (GCS). Существуют программные реализации (LLVM SafeStack, clang -fsanitize=safe-stack) с потерями производительности и изоляции. Теневой стек защищает обратное ребро CFI; непрямые вызовы по-прежнему требуют CFI/IBT.
Как защититься от Теневой стек?
Защита от Теневой стек обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Теневой стек?
Распространённые альтернативные названия: Стек возвратов, Safe stack, GCS.
● Связанные термины
- appsec№ 217
Целостность потока управления
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) — функция процессора, объединяющая аппаратный теневой стек и Indirect Branch Tracking (IBT) для блокировки ROP, JOP и COP.
- appsec№ 925
Возвратно-ориентированное программирование (ROP)
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
- appsec№ 1095
Стек-канарейка
Стек-канарейка — это секретное значение между локальными буферами функции и сохранённым адресом возврата, позволяющее обнаружить переполнение стека до перехвата управления.
- appsec№ 064
ASLR
ASLR случайным образом размещает код, стеки, кучи и библиотеки в памяти при каждом запуске, чтобы атакующий не мог предсказать целевые адреса для эксплойтов.
- appsec№ 670
Безопасность памяти
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.