Теневой стек
В компьютерной безопасности теневой стек — это механизм защиты процедуры сохраненного адреса возврата . [1] например, из-за переполнения буфера стека . Сам теневой стек — это второй, отдельный стек, который « затеняет программы » стек вызовов . В прологе функции функция сохраняет свой адрес возврата как в стеке вызовов, так и в теневом стеке. В эпилоге функции функция загружает адрес возврата как из стека вызовов, так и из теневого стека, а затем сравнивает их. Если две записи обратного адреса различаются, то обнаруживается атака; типичный вариант действий — просто закрыть программу или предупредить системных администраторов о возможной попытке вторжения. Теневой стек похож на канарейки стека в том, что оба механизма направлены на поддержание целостности потока управления защищенной программы путем обнаружения атак, которые подделывают сохраненный адрес возврата злоумышленником во время попытки эксплуатации .
Теневые стеки можно реализовать путем перекомпиляции программ с измененными прологами и эпилогами. [2] с помощью методов динамической двоичной перезаписи для достижения того же эффекта, [3] или с аппаратной поддержкой. [4] В отличие от стека вызовов, в котором также хранятся локальные переменные программы, переданные аргументы, нераспределенные регистры и другие данные, теневой стек обычно хранит только вторую копию адреса возврата функции.
Теневые стеки обеспечивают большую защиту адресов возврата, чем канарейки стека, которые полагаются на секретность значения канареек и уязвимы для атак с несмежной записью. [5] Сами теневые стеки можно защитить с помощью защитных страниц. [6] или со скрытием информации, так что злоумышленнику также потребуется найти теневой стек, чтобы перезаписать хранящийся там обратный адрес.
Подобно канарейкам стека, теневые стеки не защищают данные стека, кроме адресов возврата, и поэтому обеспечивают неполную защиту от уязвимостей безопасности, возникающих в результате ошибок безопасности памяти .
В 2016 году Intel объявила о предстоящей аппаратной поддержке теневых стеков с помощью своей технологии Control-flow Enforcement. [7]
Теневые стеки сталкиваются с некоторыми проблемами совместимости. После того, как программа выдает исключение или происходит longjmp , адрес возврата в верхней части теневого стека не будет соответствовать адресу возврата, полученному из стека вызовов. Типичное решение этой проблемы — извлекать записи из теневого стека до тех пор, пока не будет найден соответствующий адрес возврата, и завершать программу только тогда, когда совпадений в теневом стеке не найдено. [3]
программа Многопоточная , которая будет иметь стек вызовов для каждого выполняющегося потока, также будет иметь теневой стек, дублирующий каждый из стеков вызовов.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Дельшадтехрани, Лейла; Элдридж, Шайлер; Чанакчи, Садулла; Эгеле, Мануэль; Джоши, Аджай (01 января 2018 г.). «Нил: программируемый сопроцессор мониторинга» . Письма IEEE по компьютерной архитектуре . 17 (1): 92–95. дои : 10.1109/LCA.2017.2784416 . ISSN 1556-6056 .
- ^ «StackShield: инструмент защиты от техники «разрушения стека» для Linux» . Продавец.
- ^ Jump up to: а б Синнадурай, Сараванан; Чжао, Цинь; Вонг, Вен Фай (2008). «Прозрачный теневой стек времени выполнения: защита от вредоносных модификаций обратного адреса» (PDF) .
- ^ Оздоганоглу, Х.; Бродли, К. ; Виджайкумар, Т.; Куперман, Б. (2006). «SmashGuard: аппаратное решение для предотвращения атак на адрес возврата функции» (PDF) . Транзакции IEEE на компьютерах . 55 (10): 1271–1285. дои : 10.1109/TC.2006.166 .
- ^ Секереш, Ласло; Пайер, Матиас ; Вэй, Тао; Песня, Рассвет (2003). «SoK: Вечная война в памяти» (PDF) . Симпозиум IEEE по безопасности и конфиденциальности : 48–63.
- ^ Чие, Цикер; Сюй, Фу-Хау (2001). «RAD: решение на этапе компиляции для защиты от атак переполнения буфера». Материалы 21-й Международной конференции по распределенным вычислительным системам . стр. 409–417. дои : 10.1109/ICDSC.2001.918971 . ISBN 0-7695-1077-9 . S2CID 32026510 .
- ^ «Обзор технологии обеспечения контроля потока управления» (PDF) . Корпорация Интел .