Стек-канарейка
Что такое Стек-канарейка?
Стек-канарейкаСтек-канарейка — это секретное значение между локальными буферами функции и сохранённым адресом возврата, позволяющее обнаружить переполнение стека до перехвата управления.
Стек-канарейки, предложенные Криспином Кованом и командой StackGuard в 1998 году, — это случайные значения, помещаемые в кадре стека между локальными переменными и сохранённым адресом возврата. Компилятор вставляет код установки канарейки на входе и проверки на выходе функции; при несоответствии программа завершается до использования испорченного адреса. Современные тулчейны включают это через -fstack-protector или /GS и используют случайное значение для процесса и завершающий байт (обычно 0x00), чтобы противостоять переполнениям, включающим канарейку. Канарейки дополняют, но не заменяют ASLR, DEP, CFI и языки с безопасной памятью.
● Примеры
- 01
GCC с -fstack-protector-strong добавляет канарейку в функции с массивами.
- 02
Опция /GS в MSVC обнаруживает переполнение от strcpy.
● Частые вопросы
Что такое Стек-канарейка?
Стек-канарейка — это секретное значение между локальными буферами функции и сохранённым адресом возврата, позволяющее обнаружить переполнение стека до перехвата управления. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Стек-канарейка?
Стек-канарейка — это секретное значение между локальными буферами функции и сохранённым адресом возврата, позволяющее обнаружить переполнение стека до перехвата управления.
Как работает Стек-канарейка?
Стек-канарейки, предложенные Криспином Кованом и командой StackGuard в 1998 году, — это случайные значения, помещаемые в кадре стека между локальными переменными и сохранённым адресом возврата. Компилятор вставляет код установки канарейки на входе и проверки на выходе функции; при несоответствии программа завершается до использования испорченного адреса. Современные тулчейны включают это через -fstack-protector или /GS и используют случайное значение для процесса и завершающий байт (обычно 0x00), чтобы противостоять переполнениям, включающим канарейку. Канарейки дополняют, но не заменяют ASLR, DEP, CFI и языки с безопасной памятью.
Как защититься от Стек-канарейка?
Защита от Стек-канарейка обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Стек-канарейка?
Распространённые альтернативные названия: StackGuard, Стековая cookie, GS cookie.
● Связанные термины
- appsec№ 064
ASLR
ASLR случайным образом размещает код, стеки, кучи и библиотеки в памяти при каждом запуске, чтобы атакующий не мог предсказать целевые адреса для эксплойтов.
- appsec№ 303
DEP
Предотвращение выполнения данных (DEP, NX или W^X) помечает страницы памяти как неисполняемые, чтобы атакующий не мог запустить шеллкод, внедрённый в стек или кучу.
- appsec№ 217
Целостность потока управления
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
- appsec№ 1028
Теневой стек
Теневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки.
- appsec№ 925
Возвратно-ориентированное программирование (ROP)
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
- appsec№ 670
Безопасность памяти
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
● См. также
- № 545Intel CET