SlideShare a Scribd company logo
1 of 31
Download to read offline
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. 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
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
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
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
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 
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
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.”
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.
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)
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.
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.
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;
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.
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”
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.
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
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.
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.
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.
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.
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.
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.
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...
Nessus
Nmap
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.
Estudo de caso 
- Demonstração do Nessus 
- Invasão
Perguntas!?

More Related Content

Similar to Buffer Overflow Group apresentação

Buffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxBuffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxJomarRich
 
Slide Palestra "Metasploit Framework"
Slide Palestra "Metasploit Framework"Slide Palestra "Metasploit Framework"
Slide Palestra "Metasploit Framework"Roberto Soares
 
Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploitsNauber Gois
 
Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)GuilhermeDutra48
 
Teste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasTeste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasSoftD Abreu
 
Introdução a Exploração de Software
Introdução a Exploração de SoftwareIntrodução a Exploração de Software
Introdução a Exploração de SoftwareKaique Bonato
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesAlisson Fuckner
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Thiago Dieb
 
Pdf e5-ss28
Pdf e5-ss28Pdf e5-ss28
Pdf e5-ss28LilianeR
 
Virinhos De Pc Ehehehehehh
Virinhos De Pc EhehehehehhVirinhos De Pc Ehehehehehh
Virinhos De Pc EhehehehehhTelmolopes4
 
Palestra Evolução e Perigos da Internet
Palestra Evolução e Perigos da InternetPalestra Evolução e Perigos da Internet
Palestra Evolução e Perigos da InternetFabrício Basto
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sitesDaskonet Dasko
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...SegInfo
 

Similar to Buffer Overflow Group apresentação (20)

Exploits
ExploitsExploits
Exploits
 
Buffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxBuffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptx
 
BUFFER OFFICIAL.pptx
BUFFER OFFICIAL.pptxBUFFER OFFICIAL.pptx
BUFFER OFFICIAL.pptx
 
Analise de Logs
Analise de LogsAnalise de Logs
Analise de Logs
 
Slide Palestra "Metasploit Framework"
Slide Palestra "Metasploit Framework"Slide Palestra "Metasploit Framework"
Slide Palestra "Metasploit Framework"
 
Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploits
 
Home hacking
Home hackingHome hacking
Home hacking
 
Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
 
Teste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasTeste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativas
 
Introdução a Exploração de Software
Introdução a Exploração de SoftwareIntrodução a Exploração de Software
Introdução a Exploração de Software
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
 
Malware
MalwareMalware
Malware
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
 
Pdf e5-ss28
Pdf e5-ss28Pdf e5-ss28
Pdf e5-ss28
 
Seguranca Cap09 Tanenbaum
Seguranca Cap09 TanenbaumSeguranca Cap09 Tanenbaum
Seguranca Cap09 Tanenbaum
 
Virinhos De Pc Ehehehehehh
Virinhos De Pc EhehehehehhVirinhos De Pc Ehehehehehh
Virinhos De Pc Ehehehehehh
 
Palestra Evolução e Perigos da Internet
Palestra Evolução e Perigos da InternetPalestra Evolução e Perigos da Internet
Palestra Evolução e Perigos da Internet
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sites
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
 

Buffer Overflow Group apresentação

  • 1. Buffer Overflow Group Bruno Cabral Thiago Emanuel Waldson Rodrigues São Cristovão-SE 09 de Setembro de 2014
  • 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. 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. 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. 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. Contexto Histórico Em 2003, o worm SQL Slammer colocou em risco máquinas rodando o Microsoft SQL Server 2000.
  • 7. Contexto Histórico Hosts infectados do SQL Slammer as 05:29 de 25 de janeiro de 2003
  • 8. Contexto Histórico Hosts infectados do SQL Slammer as 06:00 de 25 de janeiro de 2003
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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...
  • 28. Nmap
  • 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. Estudo de caso - Demonstração do Nessus - Invasão