segunda-feira, 11 de julho de 2011

Um ataque man-in-the-middle ao SSL via SSLStrip

No ataque man-in-the-middle (MITM) o atacante intercepta a conexão entre a vítima e o servidor de maneira a analisar todos os dados da comunicação, conforme representado pela Figura 1. Além disso, o atacante “finge” ser a vítima na comunicação com o servidor. Uma condição para execução do man-in-the-middle é que a vítima e o atacante estejam na mesma subrede.

Para este teste aconselha-se a utilização da distribuição linux BackTrack, que apresenta na sua versão 5 várias ferramentas para teste de penetração. Dentre elas existem 6 para análise do SSL: ssldump, sslh, sslsniff, sslstrip, testssl.sh e thcsslcheck.
Figura 1 – Ataque man-in-the-middle, fonte OWASP.



SSLStrip
O SSLStrip é uma ferramenta desenvolvida por Moxie Marlinspike, apresentada pela primeira vez na black hat 2009 na palestra “New Tricks For Defeating SSL In Practice”. Pode-se descrever brevemente o funcionamento do SSLStrip da seguinte maneira:

A partir de um ataque de arp spoofing é possível modificar o cache arp da máquina da vítima de maneira que o endereço MAC do atacante se passe pelo endereço MAC do roteador, assim o alvo começa a enviar para o atacante todo o seu tráfego. O kernel da máquina do atacante redireciona o tráfego que não é destinado a porta 80 (http) ou 443 (https) para o roteador autêntico. O tráfego destinado para a porta 80 (http) ou 443 (https) é redirecionado para uma porta de escuta $listenPort, que por padrão é a 10000. Neste ponto, o SSLStrip recebe o tráfego http e realiza o ataque.

Portanto podemos dividir o ataque em 4 passos realizados a partir da máquina do atacante:
  1. Ativar o modo de redirecionamento de todo tráfego que passa pela máquina pelo comando:
    echo "1" > /proc/sys/net/ipv4/ip_forward
  2. Configurar a tabela de roteamento (iptables) para redirecionar o tráfego HTTP para o SSLStrip pelo comando:
    iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port "listenport"
  3. Rodar o SSLStrip especificando a porta de escuta, caso não seja passada nenhuma porta como argumento será considerada a 10000:
    sslstrip.py -l "listenport"
  4. Rodar o arpspoof com o intuito de configurar todas as máquinas da subrede a enviarem seus respectivos tráfegos:
    arpspoof -i "interface" -t "targetip" "gatewayip"
Exemplo de execução dos passos
  1. echo "1" > /proc/sys/net/ipv4/ip_forward
  2. iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
  3. sslstrip.py -l 10000
  4. Em outro terminal: arpspoof -i eth0 -t 10.0.0.15 10.0.0.254


Sessão
O SSLStrip pode possibilitar um ataque de sequestro de sessão. Este ataque consiste em explorar o mecanismo de controle de sessão, o qual é normalmente gerenciado através de um token de sessão. Após decifrar a conexão através do SSLStrip o atacante consegue visualizar toda a requisição HTTP, portanto também terá acesso ao token de sessão. De posse do token de sessão o atacante pode forjar requisições como se fossem originadas pelo usuário legítimo.Exemplo de uso do SSLStrip para realizar um sequestro de sessão:


Nenhum comentário: