EXPLOIT
Derrubando muros para invadir !
Neste tutorial, vamos analizar uma forma de “entrar” em um sistema explorando um local totalmente inesperado, uma invasão que derruba literalmente a parede e não tenta entrar tradicionalmente pelas portas. É um pouco louco mesmo, parece coisa de Robocop, enquanto todos vigiam as portas para ipedir a entrada de um hacker, então se dá conta que a invasão já aconteceu, e foi através de um local totalmente inesperado.
Neste caso, não vai adiantar filtrar portas, alias … não vai adiantar mesmo removendo as portas todas do sistema, o recurso exploit é bruto, e explora o erro no código através de um processo extremamente imaginativo, que dá bons frutos depois que se descobre uma forma de Invadir.
Antes de tudo, a possibilidade de invasão por esta técnica só é possivel porque o código não foi testando em todas suas possibilidade, ou seja, oque aconteceria se algum o erro ocorrer ? haverá consistência ? “Ops!”, não ! e esta falta de consistência não ficará impune.
Um erro de código, ou … um código testado somente sob um aspecto funcional e não amplo, incluindo a possibilidade de uma ação fora do normal que daria acesso através de um setor totalmente inesperado.
Base para Entender o Exploit:
1- Ump programa de Computador é dividido em várias partes, mas basicamente para entendermos exploit, precisamos nos ater a 2 partes essenciais que são os 2 setores visados pelo Exploit (seção de DADOS e seção de Código):
Na imagem acima vemos um programa, com uma pequena parte dele reservado a dados (parte vermelha), e a maior parte reservada a programação (códigos), e no decorrer da execução do programa, que pode ser qualquer um (calculadora, Word, servidor de páginas, etc).
No decorrer da execução do programa, ele pode pedir que o usuário entre com informações, ele então armazena-as na parte de dados (parte vermelha), ele pode também ler informações de um banco de dados, ou ainda receber como parâmetro de página, enfim… é um local (o vermelho) destinado a guardar qualquer tipo de informação (dados) que o programa necessite.
ESTE É O PULO DO GADO DO HACKER ! Ele envia muito mais informações que o programa possa absorver em seu setor reservado para guardar dados, então ocorre um “estouro” , um “buffer overflow” ! Com o estouro da área de dados o programa vai receber em sua área de códigos, informações que não são executáveis, então ao receber informações do tipo Nome, endereço, rua, cidade, etc… na área de execução (azul) o programa Trava não é mesmo ? Mas Espere !!! E se for introduzido partes de programa na área de dados e for provocado o estouro ????
VOIALÁ !!!! Temos uma manifestacão Hacker ! O segredo todo é o seguinte, o computador vai ficar executando tudo que existe na parte azul, então se eu provocar um estouro e fazer um programa meu ir parar ali, então ele vai ser executado certo ? E se a função deste meu programa intruzo for puxar um outro programa maior pela internet e instalar no computador ? Temos um vírus…. Se este programa que invadiu a área azul configurar o servidor com uma senha que eu conheça, depois é só digitar a senha e ter acesso ao servidor… já era ! o sistema foi invadido.
Agora vamos a um visual mais técnico, chega de imagens … (mas foram bem uteis para copreender )
Um Programa completo, podemos interpretar a parte veremlha (dados) como aquela variavel chamada Buff[100], e o restante é o programa que é executado pelo computador, o problema todo é esta variável ( Buff[100] ) , se for introduzido mais de 100 caracteres (letras) para este programa, ocorre um erro, o chamado overflow, oque faz os dados invadirem a parte importante que é onde as coisas são executadas.
int main(int argc, char *argv[])
{
char buff[100];
strcpy(buff, argv[ 1 ]);
return 0;
}
O exemplo acima parece bastante inofensivo , mas são partes que podem acontecer em programas gigantescos do Windows ou até de um grande servidor armazenador de Senhas, etc.
Os tipos de dados que o Hacker fornecem, seriam códigos executáveis que poderiam habilitar o compartilhamento da rede do computador atacada, e desta forma se acessado externamente, ou poderia ainda alterar a senha mestre de um servidor.