Return-Oriented Programming
O que é Return-Oriented Programming?
Return-Oriented ProgrammingROP e uma tecnica de exploracao por reuso de codigo que encadeia pequenas sequencias de instrucoes terminadas em RET para executar computacao arbitraria sem injetar codigo.
Hovav Shacham apresentou ROP em 2007 para contornar DEP/W^X. O atacante corrompe a pilha e escreve uma cadeia de enderecos que apontam para gadgets curtos terminados em RET. Apos cada gadget, RET retira o proximo endereco e produz-se uma computacao Turing-completa apenas com bytes executaveis existentes (libc, bibliotecas, programa). Variantes incluem JOP (jmp), COP (call) e SROP (signal frames). O ROP foi a principal motivacao para padronizar ASLR, CFI, canarios, shadow stacks, Intel CET e linguagens com seguranca de memoria; as defesas atacam disponibilidade de gadgets, integridade de fluxo ou seguranca de memoria no codigo-fonte.
● Exemplos
- 01
Exploit encadeia gadgets pop-rdi/syscall da glibc para chamar execve("/bin/sh").
- 02
Exploit de kernel combina fuga de KASLR e ROP para commit_creds(prepare_kernel_cred(0)).
● Perguntas frequentes
O que é Return-Oriented Programming?
ROP e uma tecnica de exploracao por reuso de codigo que encadeia pequenas sequencias de instrucoes terminadas em RET para executar computacao arbitraria sem injetar codigo. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Return-Oriented Programming?
ROP e uma tecnica de exploracao por reuso de codigo que encadeia pequenas sequencias de instrucoes terminadas em RET para executar computacao arbitraria sem injetar codigo.
Como funciona Return-Oriented Programming?
Hovav Shacham apresentou ROP em 2007 para contornar DEP/W^X. O atacante corrompe a pilha e escreve uma cadeia de enderecos que apontam para gadgets curtos terminados em RET. Apos cada gadget, RET retira o proximo endereco e produz-se uma computacao Turing-completa apenas com bytes executaveis existentes (libc, bibliotecas, programa). Variantes incluem JOP (jmp), COP (call) e SROP (signal frames). O ROP foi a principal motivacao para padronizar ASLR, CFI, canarios, shadow stacks, Intel CET e linguagens com seguranca de memoria; as defesas atacam disponibilidade de gadgets, integridade de fluxo ou seguranca de memoria no codigo-fonte.
Como se defender contra Return-Oriented Programming?
As defesas contra Return-Oriented Programming costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Return-Oriented Programming?
Nomes alternativos comuns: ROP, Ataque de reuso de codigo, Return-to-libc.
● Termos relacionados
- appsec№ 064
ASLR
A aleatorizacao do espaco de enderecos coloca codigo, pilhas, heaps e bibliotecas em posicoes aleatorias da memoria para impedir que um atacante preveja enderecos.
- appsec№ 303
DEP
A prevencao de execucao de dados (DEP / NX / W^X) marca paginas de memoria como nao executaveis para impedir que um atacante execute shellcode injetado em pilha ou heap.
- appsec№ 217
Integridade do fluxo de controlo
A integridade do fluxo de controlo (CFI) restringe chamadas indiretas e retornos a um conjunto pre-calculado de destinos legitimos, bloqueando ROP e JOP.
- appsec№ 1028
Shadow stack
Uma shadow stack e uma pilha separada e protegida que guarda copias dos enderecos de retorno para o processador detetar manipulacoes na pilha normal e bloquear ROP.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) e uma funcionalidade da CPU que combina shadow stack por hardware e Indirect Branch Tracking (IBT) para bloquear ROP, JOP e COP.
- appsec№ 670
Seguranca de memoria
A seguranca de memoria e a propriedade de um programa nunca ler, escrever ou executar memoria que nao tenha alocado legitimamente, eliminando classes inteiras de vulnerabilidades.
● Veja também
- № 1095Canario de pilha
- № 1058SMEP / SMAP
- № 671Linguagens com seguranca de memoria