4. NÍVEIS DE SOFTWARE
- Estruturas Internas dos Softwares
- Camadas de abstração
- Níveis de abstração
- Esconder detalhes para as camadas acima
- Compilação: alto-nível para baixo-nível
- Binários
PE == Portable Executable
ELF == Executable and Linkable Format
12. STACK (PILHA)
- 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.
15. Nosso objetivo é manipular o fluxo do programa, assim fazendo com que ele
execute o que queremos.
16. Após controlarmos o fluxo, apontamos a próxima instrução para o executar o
shellcode.
17. FUZZING
O que é Fuzzing?
É um técnica cujo objetivo é identificar falhas em softwares por meio de
processos automatizados ou semi-automatizados.
Enviamos pacotes “mal formados” para testar as entradas de dados.
Testes automatizados utilizamos frameworks, como o sulley.
18. EXPLOIT DEVELOPMENT
- Exploit
Código que explora a vulnerabilidade.
- Payload
Payload é a carga que é transportada pela conexão.
- Shellcode
Este é o código que gera a conexão e nos da uma shell.
19. STACK BASED BUFFER
OVERFLOW
O que é Buffer ?
Na programação, o buffer é uma variável
(conhecida como array ou vetor) que
armazena uma quantidade X de bytes.
Por exemplo, se um buffer tiver a
capacidade de armazenar 10 bytes, só
conseguiria guardar uma palavra de 8
bytes(sendo cada carácter 1 byte), pois o
último byte é "nulo" para o programa
saber que a palavra termina ali.
char buffer[8];
20. Transbordando o buffer
- Nesta imagem nós transbordamos o buffer enviando mais
bytes do que ele suporta, executamos o software dentro do
GDB e o mesmo deu segmentation fault em 0x41414141.
21. Sobrescrevendo o EIP
- Olhando os registradores podemos ver que o EIP foi
sobrescrito por 0x41414141 como vimos no slide anterior, 41
em hexa corresponde a letra “A”.