
Proxy transparente que descifra el tráfico SSL e imprime mensajes IRC.
Todos hemos oído una y otra vez que SSL sin verificación no es seguro. Si una conexión SSL no se verifica con un certificado en caché, cualquier atacante puede secuestrarla fácilmente. Así que en 2013, uno pensaría que ya habíamos eliminado este problema por completo. Los navegadores almacenan certificados en caché y advierten al usuario de manera muy clara cuando un sitio ha presentado un certificado autofirmado y no debe ser confiable; los proveedores de navegadores prácticamente han resuelto este problema. Sin embargo, HTTPS no es el único protocolo que usa SSL. Desafortunadamente, muchos clientes de estos otros protocolos no verifican por defecto, e incluso si lo hicieran, no hay garantía de una transferencia segura de certificados. Después de todo, ¿cuántas personas están dispuestas a pagar $50 por un certificado SSL para su servidor FTPS?
Un protocolo común que usa SSL pero que rara vez se verifica es IRC. Muchos clientes de IRC verifican por defecto, pero la mayoría de los usuarios desactivan esta opción porque los administradores de servidores IRC tienden a no comprar certificados SSL legítimos. Algunos clientes populares incluso dejan la verificación SSL desactivada por defecto (IRSSI, por ejemplo). Ya sabemos que esto no es prudente; cualquier atacante entre el usuario y el servidor de IRC puede ofrecer un certificado no válido y descifrar todo el tráfico del usuario (incluidos posiblemente mensajes sensibles). La mayoría de los usuarios ni siquiera consideran este hecho al conectarse a un servidor IRC "asegurado" con SSL.
El propósito de sslnuke es crear una herramienta orientada a descifrar e interceptar tráfico IRC "asegurado". Ya existen muchas herramientas que interceptan tráfico SSL, pero la mayoría de ellas están orientadas al tráfico HTTP. sslnuke apunta directamente a IRC para demostrar lo fácil que es interceptar comunicaciones "aseguradas". El uso de sslnuke es simple.
Primero, agrega una cuenta de usuario para que sslnuke se ejecute y añade reglas de iptables para redirigir el tráfico hacia ella:
# useradd -s /bin/bash -m sslnuke
# grep sslnuke /etc/passwd
sslnuke:x:1000:1000::/home/sslnuke:/bin/bash
# iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner 1000 -m tcp \
--dport 6697 --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 4444
Finalmente, inicia sesión como sslnuke, compila y ejecuta sslnuke:
# su -l sslnuke
# cd sslnuke
# make
# ./sslnuke
Ejecuta un cliente de IRC e inicia sesión en tu red IRC favorita usando SSL; los mensajes de IRC se imprimirán en stdout en sslnuke.
[*] Received connection from: 192.168.0.5:58007
[*] Opening connection to: 1.1.1.1:6697
[*] Connection Using SSL!
[*] irc.com -> AUTH (1.1.1.1): *** Looking up your hostname...
[*] irc.com -> AUTH (1.1.1.1): *** Found your hostname
[*] irc.com -> victim (1.1.1.1): *** You are connected to irc.vps-heaven.com with TLSv1.2-AES256-GCM-SHA384-256bits
[*] 192.168.0.5 -> nickserv (192.168.0.5): id hello
[*] [email protected] -> victim (1.1.1.1): Password accepted - you are now recognized.
sslnuke detectará automáticamente si un cliente usa SSL y determinará si debe usar SSL o no. El código también podría modificarse fácilmente para mostrar contraseñas de sitios web o datos FTP, cualquier cosa que use SSL. Para atacar a los usuarios de una red, sslnuke puede usarse junto con una herramienta de envenenamiento ARP, como la que se encuentra en Blackhat Library, o puede implementarse en una puerta de enlace.
Puedes ver una demostración en video de sslnuke en ascii.io.
Ahora, la parte importante: ¿cómo verificamos las conexiones SSL? El primer paso es transferir el certificado SSL a través de un medio alternativo; la mejor manera sería que el administrador te entregue el certificado directamente. Sin embargo, si esto no es posible, openssl puede descargar el certificado del servidor:
# openssl s_client -showcerts -connect irc.com:6697 </dev/null
Guarda el certificado en ~/.irssi/ssl/irc.com.crt. Lo mejor es ejecutar el comando desde una computadora en una red diferente a la tuya para evitar que sea interceptado. A continuación, para configurar IRSSI y que use el certificado, guarda una red:
/network add irc
/server add -ssl_cafile ~/.irssi/ssl/irc.com.crt -network irc -port 6697 irc.com
Si IRSSI alguna vez recibe un certificado no válido, te advertirá y se desconectará de inmediato. Sin embargo, para los verdaderamente paranoicos, se debe usar un servicio oculto de Tor o una VPN. Para configurar la redirección automática de servicios ocultos de Tor en Linux, se pueden ejecutar los siguientes comandos:
# echo "VirtualAddrNetwork 10.192.0.0/10" >> /etc/tor/torrc
# echo "AutomapHostsOnResolve 1" >> /etc/tor/torrc
# echo "TransPort 9040" >> /etc/tor/torrc
# echo "DNSPort 5353" >> /etc/tor/torrc
# killall -HUP tor
# iptables -t nat -A OUTPUT -p tcp -d 10.192.0.0/10 -j REDIRECT --to-ports 9040
# iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353
# ncat xxxxxxxxxxxxxxx.onion 6667
:irc.com NOTICE AUTH :*** Looking up your hostname...
:irc.com NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
^C
En última instancia, los clientes de IRC deberían usar una verificación de clave al estilo SSH. En la primera conexión, preséntale la huella digital del certificado al usuario, obliga al usuario a confirmarla y luego almacena el certificado en caché. Si cambia la próxima vez, no permitas la conexión.
El código fuente se puede descargar en Github.