Возвратно-ориентированное программирование (ROP)
Что такое Возвратно-ориентированное программирование (ROP)?
Возвратно-ориентированное программирование (ROP)ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
Ховав Шахам представил ROP в 2007 году как способ обойти DEP/W^X. Злоумышленник портит стек и пишет цепочку адресов, каждый из которых указывает на короткий «гаджет», заканчивающийся RET. После каждого гаджета RET вытаскивает следующий адрес, и из существующих исполняемых байтов (libc, библиотек, программы) собирается тьюринг-полное вычисление. Существуют варианты JOP (jmp), COP (call) и SROP (фреймы сигналов). Именно ROP стал главной причиной стандартизации ASLR, CFI, стек-канареек, теневых стеков, Intel CET и языков с безопасной памятью; защита нацеливается на доступность гаджетов, целостность потока управления или безопасность памяти в исходном коде.
● Примеры
- 01
Эксплойт связывает гаджеты pop-rdi/syscall в glibc для вызова execve("/bin/sh").
- 02
Эксплойт ядра использует утечку KASLR и ROP к commit_creds(prepare_kernel_cred(0)).
● Частые вопросы
Что такое Возвратно-ориентированное программирование (ROP)?
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Возвратно-ориентированное программирование (ROP)?
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
Как работает Возвратно-ориентированное программирование (ROP)?
Ховав Шахам представил ROP в 2007 году как способ обойти DEP/W^X. Злоумышленник портит стек и пишет цепочку адресов, каждый из которых указывает на короткий «гаджет», заканчивающийся RET. После каждого гаджета RET вытаскивает следующий адрес, и из существующих исполняемых байтов (libc, библиотек, программы) собирается тьюринг-полное вычисление. Существуют варианты JOP (jmp), COP (call) и SROP (фреймы сигналов). Именно ROP стал главной причиной стандартизации ASLR, CFI, стек-канареек, теневых стеков, Intel CET и языков с безопасной памятью; защита нацеливается на доступность гаджетов, целостность потока управления или безопасность памяти в исходном коде.
Как защититься от Возвратно-ориентированное программирование (ROP)?
Защита от Возвратно-ориентированное программирование (ROP) обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Возвратно-ориентированное программирование (ROP)?
Распространённые альтернативные названия: ROP, Атака повторного использования кода, Return-to-libc.
● Связанные термины
- appsec№ 064
ASLR
ASLR случайным образом размещает код, стеки, кучи и библиотеки в памяти при каждом запуске, чтобы атакующий не мог предсказать целевые адреса для эксплойтов.
- appsec№ 303
DEP
Предотвращение выполнения данных (DEP, NX или W^X) помечает страницы памяти как неисполняемые, чтобы атакующий не мог запустить шеллкод, внедрённый в стек или кучу.
- appsec№ 217
Целостность потока управления
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
- appsec№ 1028
Теневой стек
Теневой стек — отдельный защищённый стек с копиями адресов возврата, позволяющий процессору обнаруживать порчу основного стека и блокировать ROP-атаки.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) — функция процессора, объединяющая аппаратный теневой стек и Indirect Branch Tracking (IBT) для блокировки ROP, JOP и COP.
- appsec№ 670
Безопасность памяти
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
● См. также
- № 1095Стек-канарейка
- № 1058SMEP / SMAP
- № 671Языки с безопасной памятью