teste de intrusão em redes corporativas

Download Teste de Intrusão Em Redes corporativas

Post on 11-Aug-2015

25 views

Category:

Technology

3 download

Embed Size (px)

TRANSCRIPT

  1. 1. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r 16 Exploits 16.1 Objetivos Entender o que um Buffer Overflow Aprender como explorar uma falha dessa categoria Fornecer informaes para a realizao do exame da certificao NOP (Network Offensive Professional) da empresa Immunity Objetivos Entender o que um Buffer Overflow Aprender como explorar uma falha dessa categoria Fornecer informaes para a realizao do exame da certificao NOP (Network Offensive Professional) da empresa Immunity 16.2 O que um exploit? Um exploit, em segurana da informao, um programa de computador, uma poro de dados ou uma sequncia de comandos que se aproveita das vulnerabilidades de um sistema computacional como o prprio sistema operativo ou servios de interao de protocolos (ex: servidores Web).
  2. 2. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r Mas afinal, o que um exploit? Um exploit, em segurana da informao, um programa de computador, uma poro de dados ou uma sequncia de comandos que se aproveita das vulnerabilidades de um sistema computacional So geralmente elaborados por hackers como programas de demonstrao das vulnerabilidades, a fim de que as falhas sejam corrigidas, ou por crackers a fim de ganhar acesso no autorizado a sistemas. Por isso muitos crackers no publicam seus exploits, conhecidos como 0days, e o seu uso massificado deve-se aos script- kiddies. Quem cria exploits? Programadores habilidosos Hackers Crackers Pesquisadores
  3. 3. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r Quatro sites que podem ser usados como fonte de exploits so: www.milw0rm.com www.securityfocus.com www.packetstormsecurity.com www.metasploit.com Fontes de exploits www.milw0rm.com www.securityfocus.com www.packetstormsecurity.com www.metasploit.com
  4. 4. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r 16.3 Organizao dos Processos na Memria Organizao dos processos na memria Todos leram o material introdutrio? extremamente importante para entendermos como uma explorao acontece! Ok... Ento vamos ver uma breve reviso do material introdutrio Para entendermos como funciona um buffer overflow, ns precisaremos entender como funciona a pilha (stack). A regio de texto fixa pelo programa e inclui as instrues propriamente ditas e os dados somente leitura. Esta regio corresponde ao segmento de texto do binrio executvel e normalmente marcada como somente-leitura para que qualquer tentativa de escrev-la resulte em violao de segmentao (com o objetivo de no permitir cdigo auto-modificvel). Os processos em execuo so divididos em quatro regies: texto, dados, pilha e heap. A pilha um bloco de memria contguo utilizado para armazenar as variveis locais, passar parmetros para funes e armazenar os valores de retornos destas. O endereo de base da pilha fixo e o acesso estrutura realizado por meio das instrues PUSH e POP implementadas pelo processador. O registrador chamado "ponteiro de pilha" (SP) aponta para o topo da pilha. A pilha consiste em uma seqncia de frames que so colocados no topo quando uma funo chamada e so retirados ao final da execuo. Um frame contm os
  5. 5. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r parmetros para a funo, suas variveis locais, e os dados necessrios para recuperar o frame anterior, incluindo o valor do ponteiro de instruo no momento da chamada de funo. Dependendo da implementao, a pilha pode crescer em direo aos endereos altos ou baixos. O ponteiro de pilha tambm de implementao dependente, podendo apontar para o ltimo endereo ocupado na pilha ou para o prximo endereo livre. Como o texto trata da arquitetura Intel x86, iremos utilizar uma pilha que cresce para os endereos baixos, com o ponteiro de pilha (registrador ESP) apontando para o ltimo endereo da pilha. Alm de um ponteiro de pilha, tambm conveniente contar com um "ponteiro de frame" (FP) que aponta para um endereo fixo no frame. A princpio, variveis locais podem ser referenciadas fornecendo-se seus deslocamentos em relao ao ponteiro de pilha. Entretanto, quando palavras so inseridas e retiradas da pilha, estes deslocamentos mudam. Apesar de em alguns casos o compilador poder corrigir os deslocamentos observando o nmero de palavras na pilha, essa gerncia cara. O acesso a variveis locais a distncias conhecidas do ponteiro de pilha tambm iria requerer mltiplas instrues. Desta forma, a maioria dos compiladores utiliza um segundo registrador que aponta para o topo da pilha no incio da execuo da funo, para referenciar tanto variveis locais como parmetros, j que suas distncias no se alteram em relao a este endereo com chamadas a PUSH e POP. Na arquitetura Intel x86, o registrador EBP utilizado para esse propsito. Por causa da disciplina de crescimento da pilha, parmetros reais tm deslocamentos positivos e variveis locais tm deslocamentos negativos a partir de FP. A primeira instruo que um procedimento deve executar quando chamado salvar o FP anterior, para que possa ser restaurado ao fim da execuo. A funo ento copia o registrador de ponteiro de pilha para FP para criar o novo ponteiro de frame e ajusta o ponteiro de pilha para reservar espao para as variveis locais. Este cdigo chamado de prlogo da funo. Ao fim da execuo, a pilha deve ser restaurada e a execuo deve retomar na instruo seguinte de chamada da funo, o que chamamos de eplogo. As instrues CALL, LEAVE e RET nas
  6. 6. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r mquinas Intel so fornecidas para parte do prlogo e eplogo em chamadas de funo. A instruo CALL salva na pilha o endereo da instruo seguinte como endereo de retorno da funo chamada. A instruo RET deve ser chamada dentro do procedimento e restaura a execuo no endereo que est no topo da pilha. Introduo - Memory Space
  7. 7. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r Introduo aos registradores Esta aula baseada em IA32 EAX, EBX e ECX Pode user usado para armazenar dados e endereos, offsets, dentre outras funes ESP (Stack Pointer) Aponta para o topo da pilha EIP (Instruction Pointer) Contm o endereo da prxima instruo de mquina a ser executada 16.4 Shellcode Shellcode um grupo de instrues assembly em formato de opcode para realizar diversas funes como chamar uma shell, ou escutar em uma porta. Geralmente, um shellcode utilizado para explorar determinada vulnerabilidade, ganhando-se controle sobre a aplicao vulnervel e podendo-se executar qualquer instruo desejada. Exemplo de shellcode mais simples possvel: Shellcode = xbbx00x00x00x00xb8x01x00x00x00xcdx80 A imagem a seguir mostra detalhes sobre a criao do shellcode:
  8. 8. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r Introduo ao shellcode O que um shellcode? Um simples exemplo que executa um exit() Shellcode = xbbx00x00x00x00xb8x01x00x00x00xcdx80 O shellcode acima no injetvel, pois possui Null Bytes (/x00), o que caracteriza um final de string. Portanto, ao usarmos o shellcode acima, o programa encontrar o final da string e parar, no executando o restante do nosso payload. Mais detalhes veremos logo abaixo. Shellcode Injetvel: x31xdbxb0x01xcdx80
  9. 9. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r No exemplo de explorao de um Stack Overflow, utilizaremos um outro shellcode, que se encarregar de executar o /bin/sh ao invs de executar a funo exit(), como o shellcode acima faz. Shellcode O shellcode anterior no injetvel, pois possui Null Bytes. Shellcode Injetvel: x31xdbxb0x01xcdx80 16.5 Buffer Overflow Um buffer overflow acontece quando um programa vulnervel a esse tipo de falha tenta copiar mais informaes para dentro de um buffer do que esse buffer
  10. 10. Teste de Intruso em Redes Corporativas (407) ___________________________________________________________________ w w w . 4 l i n u x . c o m . b r consegue suportar. Para visualizar isso, a mesma coisa que pegar uma garrafa de refrigerante de 2 litros e virar ela toda num copo de 500ml. Com certeza ocorrer uma sujeira na mesa em que isso foi feito, e a mesma coisa que ocorre na memria, um esparramado de caracteres sobre a memria que ir sobrescrever informaes importantes assim como o refrigerante sujou toda a toalha da mesa. Buffer Overflow Um buffer overflow acontece quando um programa vulnervel a esse tipo de falha tenta copiar mais informaes para dentro de um buffer do que esse buffer consegue suportar O que acontece quando tentamos colocar uma garrafa de 600ML de coca em um copo que cabe apenas 300ML? As vulnerabilidades de buffer overflow so consideradas ameaas crticas de segurana, apesar de ser uma falha bem conhecida e bastante sria, que se origina exclusivamente na ignorncia do programador referente a aspectos de segurana durante a implementao do programa, o erro se repete sistematicamente a cada nova verso ou produto liberado. Este tipo de vulnerabilidade tem sido largamente utilizado para a penetrao remota de computadores ligados a uma rede, onde um atacante annimo tem como objetivo obter acesso ilegal ao computador vulnervel. Mesmo software considerado seguro, como o OpenSSH, j apresentou o problema, e tambm softwares famosos como o Sendmail e mdulos do A