Engenharia Reversa na
exploração de Software
$WHOAMI
Kaique Bonato
Analista de Segurança da Informação
com ênfase em segurança ofensiva.
OWASP Member e Hackthebox Player.
O que é Engenharia Reversa ?
Implicações na prática de E.R
✘ Propriedades intelectuais
✘ Patentes
✘ Implicações legais
Curiosidade
Conhecimento
Estudo de funcionamento
Necessidade
Análises
Modificações
Clonagem
Falta de documentação
Motivações
Os dois lados da moeda
Lado “bom”
Análise de malware
Procurar e corrigir erros em
software
Soluções anti-pirataria
Entre outras...
Lado “mal”
Exploração de vulnerabilidades
Quebra de patentes
Quebra de direitos intelectuais
Cheats
Pirataria
Entre outras...
Tipos de linguagens
Abstração
Endianness (Ordenação dos bytes)
little-endian
arquitetura Intel x86, AMD64
byte menos significativo primeiro
ex.: 127.0.0.1 –0x0100007F
big-endian
TCP/IP, RISC, Motorola
byte mais significativo primeiro
ex.: 127.0.0.1 –0x7F000001
Protection Rings
Chamadas de funções - Syscalls
Memória
Stack frame
Instruções
✘ Instruções são blocos que constroem
um programa
✘ Tradução do dissassembler
✘ Instrução MOV ECX, 0x42
✘ Opcodes B9 42 00 00
00
Registradores
✘ Registradores de uso geral são utilizados pela
CPU durante a execução do programa.
✘ Registradores segmentados são utilizados para
mapear seções da memória.
✘ Flags de status são utilizadas para a tomada de
decisões.
EIP (Instruction Pointer)
✘ Endereço da próxima instrução a ser
executada
✘ “Em um ataque, controle o EIP e seja
feliz”
Nosso objetivo é manipular o fluxo de execução do
programa para executar oque queremos.
Após controlarmos podemos apontar para execução do
nosso shellcode.
PRÁTICA
Obrigado!
Dúvidas?
Contatos
✘ Skype: kaique.bonato
✘ E-mail: Kaique.bonato@owasp.org
Créditos
✘ Template by SlidesCarnival
✘ Imagens by Unsplash

Engenharia Reversa na Exploração de Software

Notas do Editor

  • #4 Entender como algo foi feito
  • #5 O que vou enfrentar ? Li e aceitos os termos
  • #13 Memória para funções: variáveis locais, parâmetros Controle do fluxo do programa PUSH (empilha), POP (desempilha) LIFO, last in, first out ESP (stack pointer) e EBP (base pointer) Alocação de endereços top-down O objetivo da Stack é chamar funções. Existem 2 registradores na CPU associados à Stack, o EBP (Extended Base Pointer) e o ESP (Extended Stack Pointer) ESP aponta para o topo da Stack, e o EBP aponta para o início do frame. Quando uma função é chamada, argumentos, EIP e EBP são inseridos na stack. EBP é “setado” para o ESP, e o ESP é diminuído para criar espaço para as variáveis locais das funções.