Buffer Overflow Group 
Bruno Cabral 
Thiago Emanuel 
Waldson Rodrigues 
São Cristovão-SE 
09 de Setembro de 2014
Roteiro da apresentação 
1. Contexto histórico 
2. O que é 
3. Como funciona 
4. Metasploit Framework 
5. Payload 
6. Expl...
Contexto Histórico 
A documentação mais antiga de Buffer Overflow data de 1988. 
Foi uma das muitas vulnerabilidades explo...
Contexto Histórico 
Em 1995, Thomas Lopatic redescobriu sozinho o buffer 
overflow e publicou seus achados na lista de ema...
Contexto Histórico 
Desde então, pelo menos 2 worms mais conhecidos 
exploraram buffer overflows para comprometer um 
núme...
Contexto Histórico 
Em 2003, o worm SQL Slammer colocou em risco máquinas rodando o Microsoft SQL Server 2000.
Contexto Histórico 
Hosts infectados do SQL Slammer as 05:29 de 25 de janeiro de 2003
Contexto Histórico 
Hosts infectados do SQL Slammer as 06:00 de 25 de janeiro de 2003
Contexto Histórico 
Ainda em 2003, buffer overflows em jogos licenciados para o vídeo-game Xbox da Microsoft foram 
explor...
O que é? 
Buffer Overflows foram entendidos por volta de 1972, quando o Computer Security Technology 
Planning Study (docu...
Antes de tudo...O que é um Buffer? 
Em computação, um buffer é uma região temporária da memória onde são guardados 
dados ...
Como funciona? 
O buffer overflow é um erro de programação que pode 
resultar em execução errônea de um programa, acesso 
...
Como funciona? 
Imagine que um programa declara duas estruturas de dados adjacentes na memória do computador: 
um vetor de...
Metasploit Framework 
É uma avançada plataforma Open Source, concebida especificamente com o objetivo de reforçar e 
acele...
Metasploit Framework 
O principal objetivo do MSF é criar um ambiente de pesquisa, desenvolvimento e exploração de 
vulner...
Payload 
- Tecnologia do Meterpreter Payload 
● No caso de um exploit, o payload é a parte do código injetada na vítima qu...
Exploits 
● É um programa de computador que gera uma porção de dados e sequencias de comandos que 
usufrui de vulnerabilid...
Exploits 
Como funciona? 
● Os exploits quase sempre se aproveitam de uma falha conhecida como buffer overflow (estouro 
d...
Tipos de ataques baseado em Buffer 
Overflow 
Os tipos mais comuns de ataques baseados em buffer overflow são: 
– Stack-ba...
Stack-based buffer overflow 
O processador lê uma série de instruções que são referenciadas por 
bytes. 
Com este conhecim...
Mas...o que são shellcodes? 
Shellcodes são pedaços de código legíveis ao 
processador, ou seja, bytes referentes às instr...
Heap-based buffer overflow 
É um tipo muito mais difícil de ser explorado devido ao fato do alvo ser a heap. Entre as 
dif...
Heap-based buffer overflow 
Para explorar um buffer overflow na heap é necessário encontrar uma vulnerabilidade em 
alguma...
Return-to-libc attack 
Uma das defesas para um ataque de buffer overflow baseado em pilha é não dar permissão de 
execução...
Return-to-libc attack 
O método para pular para uma função da libc é o mesmo do buffer overflow baseado em 
pilha: reescre...
Ferramentas preventivas 
Ferramentas de análise de vulnerabilidade local: Crystal, Deputy, Flawfinder etc... 
Ferramentas ...
Nessus
Nmap
Técnicas para evitar vulnerabilidades 
A solução tradicional é utilizar funções de biblioteca que não apresentem problemas...
Estudo de caso 
- Demonstração do Nessus 
- Invasão
Perguntas!?
Próximos SlideShares
Carregando em…5
×

Buffer overflow group

456 visualizações

Publicada em

Buffer overflow

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
456
No SlideShare
0
A partir de incorporações
0
Número de incorporações
82
Ações
Compartilhamentos
0
Downloads
10
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Buffer overflow group

  1. 1. Buffer Overflow Group Bruno Cabral Thiago Emanuel Waldson Rodrigues São Cristovão-SE 09 de Setembro de 2014
  2. 2. Roteiro da apresentação 1. Contexto histórico 2. O que é 3. Como funciona 4. Metasploit Framework 5. Payload 6. Exploit 7. Tipos de ataque baseados em Buffer Overflow 7.1- Stack 7.2- Heap 7.3- Return to libc 8. O que são shellcodes 9. Ferramentas Preventivas 9.1- Nessus 9.2- Nmap 10. Estudo de Caso 10.1- Nessus 10.2- Invasão utilizando exploit
  3. 3. Contexto Histórico A documentação mais antiga de Buffer Overflow data de 1988. Foi uma das muitas vulnerabilidades exploradas pelo Morris worm para se propagar pela internet. O programa-alvo foi um serviço Unix, chamado fingerd. O worm sobrescrevia uma flag autenticada do fingerd para criar uma nova cópia dele mesmo O Morris worm ou Internet worm foi um dos primeiros worms distribuídos pela Internet; trata-se também do primeiro worm a receber atenção da mídia. Ele foi escrito por Robert Tappan Morris, estudante da Cornell University e para despistar sua origem, foi disseminado a partir do MIT em 2 de Novembro de 1988. Curiosamente, hoje Robert Morris é professor do MIT. Disquete contendo o código fonte do worm Morris, no Museu de Ciências de Boston
  4. 4. Contexto Histórico Em 1995, Thomas Lopatic redescobriu sozinho o buffer overflow e publicou seus achados na lista de emails da Bugtraq. Um ano depois, Elias Levy (Também conhecido como Aleph One), publicou na revista Phrack, o artigo “Smashing the Stack for Fun and Profit” (Arrasando a Pilha por Diversão e Lucro), uma introdução passo-a-passo para realizar um stack-based buffer overflow. Link do artigo: http://pt.slideshare.net/alexeymiasoedov/smashing-the-stack-for- fun-and-profit
  5. 5. Contexto Histórico Desde então, pelo menos 2 worms mais conhecidos exploraram buffer overflows para comprometer um número grande de sistemas. Em 2001, o Code Red Worm explorou um buffer overflow no ISS (Internet Information Services) 5.0 da Microsoft. - Iniciou um ataque de negação de serviço distribuída (DDoS) na Casa Branca GET/default.ida? NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858% ucbd3%u7801%u9090%u6858%ucb d3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090% u8190%u00c3%u0003%u 8b00%u531b%u53ff%u0078%u0000%u00=a
  6. 6. Contexto Histórico Em 2003, o worm SQL Slammer colocou em risco máquinas rodando o Microsoft SQL Server 2000.
  7. 7. Contexto Histórico Hosts infectados do SQL Slammer as 05:29 de 25 de janeiro de 2003
  8. 8. Contexto Histórico Hosts infectados do SQL Slammer as 06:00 de 25 de janeiro de 2003
  9. 9. Contexto Histórico Ainda em 2003, buffer overflows em jogos licenciados para o vídeo-game Xbox da Microsoft foram explorados para permitir que softwares não licenciados rodassem no console sem a necessidade de modificações no hardware, conhecidas por modchips. O PS2 Independence Exploit também usou um buffer overflow para conseguir o mesmo efeito para o video-game Playstation 2 da Sony
  10. 10. O que é? Buffer Overflows foram entendidos por volta de 1972, quando o Computer Security Technology Planning Study (documento de planejamento de estudos da USAF) definiu a técnica como o seguinte: “Um código realizando tal função não checa os endereços de fonte e destino apropriadamente, permitindo que partes do monitor sejam superpostas pelo usuário. Isso pode ser usado para injetar códigos no monitor que irão permitir o usuário a tomar o controle da máquina.”
  11. 11. Antes de tudo...O que é um Buffer? Em computação, um buffer é uma região temporária da memória onde são guardados dados para serem transportados de um lugar para o outro. Uma aplicação freqüente de um buffer é quando dados são capturados de um dispositivo de entrada (um teclado ou mouse, por exemplo) e enviados à um dispositivo de saída (monitor,impressora). E overflow? O conceito básico de um overflow é um transbordamento, ou seja, um overflow ocorre quando o volume de determinado objeto ou substância é maior do que a capacidade de seu compartimento.
  12. 12. Como funciona? O buffer overflow é um erro de programação que pode resultar em execução errônea de um programa, acesso indevido à áreas de memória, terminação do programa ou uma possível falha de segurança em um sistema. Tecnicamente falando, um buffer overflow consiste em um processo de armazenar, em um buffer de tamanho fixo, dados maiores que o seu tamanho. Description The C library function char *strcpy(char *dest, const char *src) copies the string pointed to by src to dest. Declaration Following is the declaration for strcpy() function. char *strcpy(char *dest, const char *src)
  13. 13. Como funciona? Imagine que um programa declara duas estruturas de dados adjacentes na memória do computador: um vetor de caracteres de 8 bytes, A, e um inteiro de 2 bytes, B, enche A de zeros e B recebe o número 3, como no seguinte esquema: A palavra excessivo tem 9 letras, conseqüentemente, 10 caracteres, pois um caractere nulo é concatenado ao final para indicar o fim de uma string (vetor de caracteres). Separando a palavra em caracteres seria algo como: 'e', 'x', 'c', 'e', 's', 's', 'i', 'v', 'o','0', sendo o '0' o caractere nulo, que consiste em um um byte zerado. S abendo que cada caractere ocupa um byte, a string A, então, tem apenas 8 bytes, porém estamos inserindo 10 bytes, que é um tamanho maior do que A comporta.
  14. 14. Metasploit Framework É uma avançada plataforma Open Source, concebida especificamente com o objetivo de reforçar e acelerar o desenvolvimento, ensaio e utilização de exploits. Pequisa de vulnerabilidade de software. Possui centenas de exploits, payloads e ferramentas muito avançadas que nos permite testar vulnerabilidades em muitas plataformas, sistemas operacionais, e servidores. A primeira versão estável do MSF foi lançada em meados de 2004. Originalmente escrito em Perl, Assembler e C.
  15. 15. Metasploit Framework O principal objetivo do MSF é criar um ambiente de pesquisa, desenvolvimento e exploração de vulnerabilidades de software, fornecendo as ferramentas necessárias para o ciclo completo da pesquisa que pode ser divido basicamente em: ● Descoberta da vulnerabilidade; ● Análise; ● Desenvolvimento do exploit; ● Teste do exploit;
  16. 16. Payload - Tecnologia do Meterpreter Payload ● No caso de um exploit, o payload é a parte do código injetada na vítima que vai executar alguma ação: criar um usuário, iniciar um processo, apagar arquivos, … ● Um dos principais payloads do MSF é o Meterpreter. O Meterpreter tenta ser invisível ao sistema atacado.
  17. 17. Exploits ● É um programa de computador que gera uma porção de dados e sequencias de comandos que usufrui de vulnerabilidades de um programa de computador ou sistemas operacionais. ● “Hackers, criam exploits maliciosos com o intuito de demonstrar vulnerabilidades ( bugs) para ser corrigidas pelos criadores dos sistemas computacionais. ● Crackers criam EXPLOITS maliciosos a fim de ganhar acesso restrito a si próprio com a intenção de ganhar algum proveito”
  18. 18. Exploits Como funciona? ● Os exploits quase sempre se aproveitam de uma falha conhecida como buffer overflow (estouro de buffer). Essa situação possibilita que um código arbitrário seja executado, necessitando apenas que este seja devidamente posicionado dentro da área de memória do processo. Como se proteger? ● Antivírus e softwares atualizados, um firewall competente, prudência em suas atividades e com certa dose de sorte, pois a única maneira de permanecer completamente imune a estes processos seria isolar seu computador por completo.
  19. 19. Tipos de ataques baseado em Buffer Overflow Os tipos mais comuns de ataques baseados em buffer overflow são: – Stack-based buffer overflow – Heap-based buffer overflow – Return-to-libc attack
  20. 20. Stack-based buffer overflow O processador lê uma série de instruções que são referenciadas por bytes. Com este conhecimento, podemos então no exemplo do slide 11, ao invés de escrevermos um nome, poderíamos enviar os caracteres referentes aos bytes de instruções do processador e reescrever o IP como o endereço referente ao início dos bytes que acabamos de escrever. Deste modo, as instruções referentes aos bytes que escrevemos serão executadas, pois o IP aponta para o início dos bytes maliciosamente escritos, então, quando a subrotina terminar, o processador lerá a instrução apontada pelo IP, que será o primeiro byte que acabamos de escrever. Isto caracteriza uma injeção de código por buffer overflow, diretamente na pilha. É o tipo de ataque baseado em buffer overflow mais comum e simples. O código inserido é normalmente chamado de shellcode.
  21. 21. Mas...o que são shellcodes? Shellcodes são pedaços de código legíveis ao processador, ou seja, bytes referentes às instruções. Como geralmente shellcodes são passados como strings, representamos cada byte por “xNN”, onde “” significa que estamos passando um byte (não um caractere), “x” significa que seu valor está na base hexadecimal e NN é o valor do byte na base hexadecimal.
  22. 22. Heap-based buffer overflow É um tipo muito mais difícil de ser explorado devido ao fato do alvo ser a heap. Entre as dificuldades estão: – Na heap, não existem valores os quais o processador usa para saber qual a próxima operação a executar, apenas valores de organização do próprio heap. – Devido ao fato do heap crescer em direção aos valores maiores da memória e podermos apenas escrever nesta mesma direção, não é possível reescrever os valores de controle do bloco atual, apenas dos blocos posteriores. – Como a organização da heap pode variar, o atacante precisa saber qual é a implementação de heap do programa-alvo.
  23. 23. Heap-based buffer overflow Para explorar um buffer overflow na heap é necessário encontrar uma vulnerabilidade em alguma função interna de administração da heap, de modo que esta processe o buffer alvo na heap. Deste modo: – Precisamos explorar a heap para sobrescrever os valores de administração de um bloco alvo e assim inserir o shellcode, construindo um bloco malicioso na heap. – Os valores de administração devem ser alterados no bloco de forma que este, ao ser analisado por uma função, como free(), por exemplo, seja processado, diretamente ou por meio de outra função, como a unlink(), que é chamada dentro da free(), por exemplo. – Além de modificados para ativar uma função, os valores de administração devem ser reescritos para causar um overflow no frame da função que processa o bloco, para direcionar a execução do programa para o shellcode inserido. Outro modo de explorar o heap overflow é estourar o heap até chegar na pilha e então sobrescrever o IP do frame do topo da pilha.
  24. 24. Return-to-libc attack Uma das defesas para um ataque de buffer overflow baseado em pilha é não dar permissão de execução na pilha. Deste modo, não é possível tentar executar um shellcode na pilha. Existe uma alternativa, que é explorar um código que já existe nas rotinas do programa. Um código que está em quase qualquer coisa(incluindo o sistema operacional), são os códigos da libc, a biblioteca padrão do C. Além de estarem presentes na maioria dos sistemas, eles possuem uma posição estática na memória em um sistema.
  25. 25. Return-to-libc attack O método para pular para uma função da libc é o mesmo do buffer overflow baseado em pilha: reescrever o IP com o endereço da função desejada. O endereço de uma função da libc pode ser facilmente descoberto, em um ambiente sem proteção de aleatoriedade nos espaços de endereço, usando um programa de teste que imprima o endereço da função, por exemplo. Devemos, então, reescrever o IP com o endereço da função desejada, seu endereço de retorno e então seus argumentos.
  26. 26. Ferramentas preventivas Ferramentas de análise de vulnerabilidade local: Crystal, Deputy, Flawfinder etc... Ferramentas de análise de vulnerabilidade remota: Nessus, Snort, Tripwire, Nmap etc...
  27. 27. Nessus
  28. 28. Nmap
  29. 29. Técnicas para evitar vulnerabilidades A solução tradicional é utilizar funções de biblioteca que não apresentem problemas relacionados a buffer overflow. A solução na biblioteca padrão é utilizar as funções strncpy e strncat que recebem como argumento o número máximo de caracteres copiados entre as strings. A Tabela apresenta as funções nativas da linguagem com e seus respectivos riscos.
  30. 30. Estudo de caso - Demonstração do Nessus - Invasão
  31. 31. Perguntas!?

×