0Pricing
Cyber Security Academy · Aula

Programação Orientada a Retorno (ROP)

Encadeie gadgets ROP para contornar NX/DEP e criar exploits sem shellcode.

Programação Orientada a Retorno (ROP) é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.

Por que o ROP existe

Com NX/DEP, o código de shell injetado não pode ser executado. A Programação Orientada a Retorno (ROP) contorna isso encadeando pequenas sequências de código existentes (fragmentos) que terminam com instruções ret. Nenhum código novo é injetado — apenas a pilha e o código existente são usados.

O que é um fragmento de ROP?

Um fragmento é uma sequência curta de instruções que termina em ret, encontrada no binário ou nas bibliotecas carregadas. Exemplos: pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Os fragmentos são os blocos de construção das cadeias de ROP.

Encontrando fragmentos

Ferramentas para encontrar fragmentos de ROP em binários:

# ROPgadget:
ROPgadget --binary ./vuln --rop
# ropper:
ropper -f ./vuln --search "pop rdi"
# pwntools:
from pwn import *
elf = ELF("./vuln")
rop = ROP(elf)
rop.find_gadget(["pop rdi", "ret"])

Construindo uma cadeia de ROP

Uma cadeia de ROP é uma sequência de endereços de retorno na pilha. Quando o endereço de retorno sobrescrito é alcançado, o fluxo salta para o fragmento 1 (que faz algo útil e depois retorna), que remove o próximo endereço e salta para o fragmento 2, e assim por diante.

Sobrescrita de ret2plt e GOT

ret2plt chama funções por meio da PLT (Tabela de ligação de procedimentos) — útil para chamar puts() e vazar endereços da biblioteca C, usando-os depois para chamar system(). As estruturas PLT/GOT são previsíveis mesmo com ASLR para o binário principal (sem PIE).

Derrotando o ASLR com ROP

O ROP pode vazar o endereço de uma função da biblioteca C a partir da GOT usando um fragmento que chama puts(GOT_entry). O endereço vazado revela a base da biblioteca C. Calcule o deslocamento de system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: Programação Orientada a Sinais de Retorno

SROP usa a chamada de sistema sigreturn para carregar uma estrutura falsa de contexto de sinal, definindo todos os registradores como valores controlados pelo invasor em um único fragmento. É útil quando há poucos fragmentos disponíveis.

Variantes JOP e COP

Além do ROP:

  • JOP (Programação Orientada a Saltos) — encadeia fragmentos que terminam em jmp em vez de ret
  • COP (Programação Orientada a Chamadas) — encadeia fragmentos que terminam em call

Defesas como CFI (Integridade do fluxo de controle) têm como objetivo impedir todas essas técnicas.

Integridade do fluxo de controle (CFI)

CFI garante que desvios indiretos (chamadas e retornos) saltem apenas para destinos válidos. Ela interrompe o ROP validando o destino de retorno em relação a uma pilha sombra ou a uma lista de permissões. O Intel CET (Tecnologia de imposição do fluxo de controle) implementa CFI em nível de hardware.

Exemplo prático de ROP

Um ret2libc de 64 bits via ROP:

# pwntools ROP chain example:
from pwn import *
p = process("./vuln")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
elf = ELF("./vuln")
rop = ROP(elf)
# Leak puts GOT to get libc base
rop.puts(elf.got["puts"])
rop.main()

Resumo das mitigações

Proteções contra ROP:

  • CFI — valida os destinos dos desvios
  • Pilha sombra (CET) — cópia do endereço de retorno protegida por hardware
  • RELRO (completo) — torna a GOT somente leitura e impede sobrescritas
  • PIE — randomiza a base do binário e exige um vazamento para encontrar fragmentos

Verificação rápida: ROP

O que é um fragmento de ROP?

Recapitulação da lição

O ROP contorna NX/DEP encadeando sequências de código existentes (fragmentos que terminam em ret) — não é necessário injetar código de shell. Ferramentas para encontrar fragmentos: ROPgadget e ropper. ret2plt vaza endereços da biblioteca C para derrotar o ASLR. Defesas: CFI, pilhas sombra (Intel CET), PIE e RELRO completo. O ROP é a base da exploração moderna de binários.

Perguntas Frequentes

A aula “Programação Orientada a Retorno (ROP)” é grátis?

Sim — o texto completo de “Programação Orientada a Retorno (ROP)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.

O que vou aprender em “Programação Orientada a Retorno (ROP)”?

Encadeie gadgets ROP para contornar NX/DEP e criar exploits sem shellcode. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cyber Security Academy?

Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Programação Orientada a Retorno (ROP)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cyber Security Academy?

Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Transbordamentos de Buffer na Pilha
  2. Programação Orientada a Retorno (ROP)
  3. Vulnerabilidades de Strings de Formatação
  4. Exploração do Heap: Use-After-Free e Heap Spraying
← Voltar para Cyber Security Academy