часть — назовем её триггер — то, благодаря чему путь
программы меняется от заданного ее разработчиком, и
программа начинает выполнять код, не предусмотренный
ее изначальной функциональностью. Например, пере-
записанный адрес возврата в стеке будет являться три-
ггером — точкой, с которой исполнение программы от-
клониться от нормального. В свою очередь, то, что будет
исполняться после срабатывания триггера — внедренный
код. Его называют полезной нагрузкой, или шеллкод (если
в результате исполнения кода вызывается командная обо-
лочка системы).
В самом простейшем случае шеллкод может разме-
ститься в буфере уязвимой программы. Однако, в насто-
ящее время, если в результате срабатывания триггера
исполнение передастся в область стека, практически на-
верняка шеллкод не сработает, а программа завершится
аварийно. Дело в том, что разработчики защитных меха-
низмов программ и операционных систем давно обра-
тили внимание на проблему эксплуатации программных
уязвимостей. В результате были разработаны и разраба-
тываются в настоящий момент разнообразные техники и
методы для противодействия и детектирования использо-
вания уязвимостей программного обеспечения. Так, в си-
стеме Windows эксплойт с шеллкодом в стеке, на который
передается управление сразу после срабатывания триг-
гера, не сработает по причине наличия технологии DEP —
Data Execution Prevention. Данная технология использует
(в случае поддержки со стороны процессора) NX/XD биты
элементов директорий и таблиц страниц [3, с. 751] и пре-
дотвращает выполнение кода в секции данных, стеке и куче.
Тем не менее, если эксплойт построен иным образом,
возможен обход технологии DEP. Существует класс атак,
основанных на использовании имеющегося в программе
кода. К данным техникам можно отнести атаки типа ret-
to-libc, возвратно-ориентированное программирование в
целом. Эксплойт может иметь в своем составе часть, от-
вечающую за изменение атрибутов памяти (помечать ее
как исполняемую) и копирование в эту область шеллкода.
После скопированный код получит управление.
Для противодействия таким случаям существует другая
технология — Address Space Layout Randomization —
рандомизация на уровне расположения в адресном про-
странстве. В результате исполняемые образы получают
возможность загружаться в адресное пространство про-
цесса по случайным (в определенном смысле) адресам, что
делает атаки на основе возвратно-ориентированного про-
граммирования практически невозможными с использо-
ванием этих модулей.
В целом, имеется множество различных деталей при
эксплуатации уязвимостей повреждения памяти (пере-
полнения буфера). В свою очередь, и технологии защиты
не ограничиваются DEP и ASLR, могут принимать раз-
нообразные формы — надстройки для компилятора, от-
дельные программы и др. Эксплойты, использующие
уязвимости, представляют собой один из наиболее дей-
ственных способов компрометации безопасности ком-
пьютерных систем. Можно утверждать, что в настоящий
момент вопросы эксплуатации уязвимостей и противодей-
ствия этому является актуальной областью компьютерной
безопасности.
Литература:
1. Фостер Дж., Лю В. Разработка средств безопасности и эксплойтов / Пер. с англ. — М.: Издательство «Русская
Редакция»; СПб.: Питер, 2007. — 432 стр.: ил.
2. Скляров, И. Программирование боевого софта под Linux / И. Скляров. — СПб.: БХВ-Петербург, 2007. —
416 с.: ил.
3. Касперски, К., Рокко Е. Искусство дизассемблирования / К. Касперски, Е. Рокко. — СПб.: БХВ-Петербург,
2008. — 891 с.: ил.
Do'stlaringiz bilan baham: |