Return-Oriented Programming
¿Qué es Return-Oriented Programming?
Return-Oriented ProgrammingROP es una tecnica de explotacion por reutilizacion de codigo que encadena secuencias cortas terminadas en RET para ejecutar computacion arbitraria sin inyectar codigo nuevo.
Hovav Shacham presento ROP en 2007 para esquivar DEP/W^X. El atacante corrompe la pila y escribe una cadena de direcciones que apuntan a gadgets cortos terminados en RET. Tras ejecutar cada gadget, RET extrae la siguiente direccion y se obtiene un computo Turing-completo construido solo con bytes ejecutables existentes (libc, librerias, el programa). Existen variantes como JOP (saltos), COP (llamadas) y SROP (signal frames). ROP es la razon principal por la que se estandarizaron ASLR, CFI, canarios, shadow stacks, Intel CET y los lenguajes con seguridad de memoria; las defensas atacan la disponibilidad de gadgets, la integridad del flujo o la seguridad de memoria en el codigo fuente.
● Ejemplos
- 01
Exploit que encadena gadgets pop-rdi/syscall de glibc para llamar a execve("/bin/sh").
- 02
Exploit del kernel que usa una fuga de KASLR y ROP a commit_creds(prepare_kernel_cred(0)).
● Preguntas frecuentes
¿Qué es Return-Oriented Programming?
ROP es una tecnica de explotacion por reutilizacion de codigo que encadena secuencias cortas terminadas en RET para ejecutar computacion arbitraria sin inyectar codigo nuevo. Pertenece a la categoría de Seguridad de aplicaciones en ciberseguridad.
¿Qué significa Return-Oriented Programming?
ROP es una tecnica de explotacion por reutilizacion de codigo que encadena secuencias cortas terminadas en RET para ejecutar computacion arbitraria sin inyectar codigo nuevo.
¿Cómo funciona Return-Oriented Programming?
Hovav Shacham presento ROP en 2007 para esquivar DEP/W^X. El atacante corrompe la pila y escribe una cadena de direcciones que apuntan a gadgets cortos terminados en RET. Tras ejecutar cada gadget, RET extrae la siguiente direccion y se obtiene un computo Turing-completo construido solo con bytes ejecutables existentes (libc, librerias, el programa). Existen variantes como JOP (saltos), COP (llamadas) y SROP (signal frames). ROP es la razon principal por la que se estandarizaron ASLR, CFI, canarios, shadow stacks, Intel CET y los lenguajes con seguridad de memoria; las defensas atacan la disponibilidad de gadgets, la integridad del flujo o la seguridad de memoria en el codigo fuente.
¿Cómo defenderse de Return-Oriented Programming?
Las defensas contra Return-Oriented Programming combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Return-Oriented Programming?
Nombres alternativos comunes: ROP, Ataque de reutilizacion de codigo, Return-to-libc.
● Términos relacionados
- appsec№ 064
ASLR
La aleatorización del espacio de direcciones distribuye al azar la ubicación en memoria de código, pilas, montones y librerías para impedir que un atacante prediga direcciones.
- appsec№ 303
DEP
La prevencion de ejecucion de datos (DEP / NX / W^X) marca paginas de memoria como no ejecutables para impedir que un atacante ejecute shellcode inyectado en pila o monton.
- appsec№ 217
Integridad del flujo de control
La integridad de flujo de control (CFI) restringe las llamadas indirectas y los retornos del programa a un conjunto precomputado de destinos legitimos, bloqueando ROP y JOP.
- appsec№ 1028
Shadow stack
Una shadow stack es una pila protegida y separada que guarda copias de las direcciones de retorno para detectar manipulaciones de la pila normal y bloquear ataques ROP.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) es una caracteristica de CPU que combina shadow stack hardware e Indirect Branch Tracking (IBT) para bloquear ROP, JOP y COP.
- appsec№ 670
Seguridad de memoria
La seguridad de memoria es la propiedad de que un programa nunca lee, escribe ni ejecuta memoria que no haya asignado legitimamente, evitando clases enteras de vulnerabilidades.
● Véase también
- № 1095Canario de pila
- № 1058SMEP / SMAP
- № 671Lenguajes con seguridad de memoria