Eduardo Mazza Max José Lins Timóteo Buffer overflow Eduardo Mazza Max José Lins Timóteo
Ameaças digitais Vírus SQL Injection Autenticação falsa Vírus tradicional Trojan [Worm] SQL Injection Autenticação falsa Senha de fácil acesso Setup sem senha E-Mail que engana
Definição O que é buffer overflow Tipos mais comuns Ultrapassa o tamanho do buffer Tipos mais comuns [Stack] Heap Necessita de bons conhecimentos
Aplicações Worms Derrubar um servidor Derrubar uma máquina comum Controle da máquina
Worms Sem uma ação do usuário Potencial alto (uma falha, várias máquinas) N para 1 e 1 para N
Derrubar um servidor Não precisa esgotar recursos Derruba vários de uma vez só
Controle da máquina Controlar X derrubar Nível de controle pode ser alto Até maior que o do usuário Garantir controle melhor ao invadir
Vantagens dessa técnica Anti-vírus Firewall Erro do programador Complexidade do sistema operacional
Anti-vírus Objetivos diferentes Geralmente analisa código de um arquivo
Firewall Computador servidor Computador cliente É necessário manter portas abertas Buffer overflow despercebido Computador cliente Para que aguardar conexões? Alguma utilidade contra buffer overflow Porém: HTTP
Erro do programador Exemplo void teste( char *s ) { char nome[200]; strcpy(nome,s); printf("Nome eh %s\n",nome); }
Erro do programador Linguagens de programação Alto nível x C++ Alto nível (Java, Visual basic, C#,...) Alto nível, mas não tão alto (C++) Alto nível x C++
SO complexo Má configuração de serviços Serviços habilitados por padrão Netstat –na
Dificuldades da técnica Organização da memória Onde existe a falha? Valor do ponteiro ASSEMBLY
Funcionamento buffer NOP NOP NOP NOP retorno XXXXXXXX NOP NOP instrução instrução
Exemplo void testar(char *codigo){ char texto[8]; strcpy(texto,codigo); return; }
Exemplo int main(int argc, char* argv[]) { const int N = 160000; char b[N]; for(int i = 0;i < N-1;i=i+2){ b[i] = '\x90'; b[i+1] = '\x90'; }
Exemplo b[12] = '\x9a'; b[13] = '\x8e'; b[14] = '\x10'; b[30] = '\xea '; b[31] = '\x9a'; b[32] = '\x8e'; b[33] = '\x10'; b[34] = '\x00'; b[35] = '\x1b'; b[36] = '\x00';
Prevenção Atualizações Escolha da linguagem Alto nível Nível não tão alto Utilização de funções mais seguras Filtrar os dados NOPs ADD AX,1, SUB AX,1
Conclusão Atacante Vítima É uma técnica difícil, mas muito eficiente quando se consegue implementar Não se limita a um único tipo de falha Várias possibilidades Vítima É uma dor de cabeça Basta estar conectado
Referências http://www.infosecwriters.com/text_resources/pdf/common_program_vul.pdf (135 págs.) http://www.blackhat.com/presentations/bh-usa-00/Greg-Hoglund/Hoglund-Buffer-Overflow.ppt http://www.cs.virginia.edu/~evans/crab/injection.ppt