A certa altura do filme Matrix Reload, 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 permite mapeamento de portas utilizando diversas técnicas furtivas de reconhecimento além de identificar com boa precisão, o sistema operacional que roda no dispositivo remoto.
A vulnerabilidade explorada, como se vê na figura acima, SSHv1 CRC32, era uma vulnerabilidade real, mas o exploit (sshkuke), embora fosse fruto da imaginação do autor, é plenamente factível.
O que é o Buffer Overflow
A vulnerabilidade ssh1 crc32 foi descoberta no ano de 2001, afetava as versões SSH menor que 1.2.32, openSSH menor que 2.3 entre outras variações e era do tipo remote buffer overflow. A exploração dessa vulnerabilidade permite a injeção um código malicioso no servidor remoto para executar as mais variadas ações como por exemplo, abrir um shell para uso do atacante, eliminar regras do firewall, instalar um backdoor, matar processos, criar usuários, etc, ou no mínimo provocar uma negação de serviço.
Um buffer overflow é um ataque provocado por um erro de programação que gera uma exception no acesso à memória. Ele ocorre quando um processo tenta armazenar um dado além dos limites de um buffer de tamanho determinado, sobrescrevendo áreas de memória adjacentes a esse buffer, incluindo alguns endereços de controle fluxo ou ponteiros de memória utilizados pelo processador, o que normalmente causa um erro de “Segmentation Fault”, provocando o encerramento do programa.
Esses “endereços de controle de fluxo”, na realidade, são ponteiros para a próxima instrução a ser executada pelo processador e se cuidadosamente sobrepostos, podem provocar um desvio no fluxo de execução normal do programa para o código maléfico do atacante.
Abaixo, há um exemplo de como ocorre o ataque de buffer overflow. Basicamente, o atacante envia um dado com tamanho maior que o espaço alocado para a buffer, juntamente com um código malicioso, de tal forma que o endereço de retorno da função, contido na região chamada de EIP, seja sobreposto para apontar para o código do atacante.
“No caso específico dessa vulnerabilidade SSH1 CRC32, um conteúdo inteiro de 32 bits é atribuído à uma variável de 16 bits da rotina “deattack.c” e pode ser explorado remotamente pelo envio de um pacote cuidadosamente montado para esse fim.” [DrWhiteHat]
Para Reproduzir o ataque pode ser utilizado um programa escrito em linguagem C, comportando-se como um servidor, escutando uma porta TCP, que quando receber um dado por essa porta, exibe-o na console e envia uma mensagem de retorno ao cliente.
A compilação e execução do programa servidor é realizado numa máquina virtual VmWare (com um sistema em Linux, Debian por exemplo) e o ataque parte da máquina hospedeira.
Para fazer o ataque é usado um script em python com o payload ou shellcode (código malicioso) gerado pelo metasploit e realiza-se uma conexão reversa do servidor para o cliente na porta 4444. (Para ver o programa demonstrativo e o exploit acesse o link da página do DrWhiteHat)
REFERÊNCIAS
Megumi Jr – Invadindo Matrix – Entendendo o Buffer Overflow – 2008 em http://drwhitehat.wordpress.com/2008/10/17/invadindo-matrix-entendendo-o-buffer-overflow/
Mercy – Basic buffer overflow explained – 2002 em http://www.milw0rm.com/papers/97
Nenhum comentário:
Postar um comentário