Viable ROP-free roadmap for i386/armv8/riscv64/alpha/sparc64 https://undeadly.org/cgi?action=article;sid=20230925061225 #openbsd #retguard #rop #rop-free #security #roadmap
Что такое retguard
Removing ROP Gadgets from OpenBSD (EuroBSD 2018, Todd Mortimer)
random cookie
) из ELF-секции .openbsd.randomdata
.random cookie ^ return address
).saved value ^ return address
). Если результат вычисления не совпадает с ассоциированным с функцией случайным значением (random cookie
), то исполнение прерывается.Что изменилось в 7.3
Теперь механизм retguard
внедрен в заглушки системных вызов пользовательского режима (libc
, ld.so
, базовые программы) для архитектуры amd64
(как это уже есть для архитектуры arm64
).
Это серьезно усложнят использование кода заглушек системных вызовов (в частности инструкции syscall
) в качестве элементов #ROP цепочек (наряду с уже используемыми механизмами #aslr и перелинковки libc.so
и ld.so
).
retguard for amd64 system calls https://undeadly.org/cgi?action=article;sid=20230111063250 #openbsd #retguard #ROP #security
More improvements to #RETGUARD from mortimer@, including some refactoring for portability. Oh, and #OpenBSD/arm64 support. :flan_cool:
https://marc.info/?l=openbsd-cvs&m=153409318102748&w=2
https://marc.info/?l=openbsd-cvs&m=153409363302905&w=2
https://marc.info/?l=openbsd-cvs&m=153409411702999&w=2
Todd Mortimer just landed his #RETGUARD mitigation work (aka #clang -fret-protector) into #OpenBSD -current, and enabled by default.
Theo de Raadt on #RETGUARD: return-address protection using #clang: https://marc.ttias.be/openbsd-tech/2017-08/msg00349.php #OpenBSD
"The preamble XOR's the return address at top of stack with the stack pointer value itself."
"ROP attack methods are impacted because existing gadgets are transformed to consist of '<gadget artifacts> <mangle ret address> RET'."
"That pivots the return sequence off the ROP chain in a highly unpredictable and inconvenient fashion."