
Proxy trasparente che decifra il traffico SSL e stampa i messaggi IRC.
Abbiamo sentito tutti ripetutamente che SSL senza verifica non è sicuro. Se una connessione SSL non viene verificata con un certificato memorizzato nella cache, può essere facilmente dirottata da qualsiasi aggressore. Quindi nel 2013, si penserebbe che questo problema sia stato del tutto eliminato. I browser memorizzano nella cache i certificati e avvisano molto chiaramente l'utente quando un sito ha presentato un certificato auto-verificato e non dovrebbe essere considerato attendibile; i produttori di browser hanno praticamente risolto questo problema. Tuttavia, HTTPS non è l'unico protocollo che usa SSL. Sfortunatamente, molti client per questi altri protocolli non verificano per impostazione predefinita, e anche se lo facessero, non c'è garanzia di un trasferimento sicuro del certificato. Dopotutto, quante persone sono disposte a pagare $50 per un certificato SSL per il proprio server FTPS?
Un protocollo comune che usa SSL ma è raramente verificato è IRC. Molti client IRC verificano per impostazione predefinita, ma la maggior parte degli utenti disattiva questa funzione perché gli amministratori dei server IRC tendono a non acquistare certificati SSL legittimi. Alcuni client popolari lasciano addirittura la verifica SSL disattivata per impostazione predefinita (IRSSI, per esempio). Sappiamo già che questo è imprudente: qualsiasi aggressore tra un utente e il server IRC può offrire un certificato non valido e decrittare tutto il traffico dell'utente (inclusi possibili messaggi sensibili). La maggior parte degli utenti non considera nemmeno questo fatto quando si connette a un server IRC "protetto" da SSL.
Lo scopo di sslnuke è scrivere uno strumento orientato alla decrittazione e all'intercettazione del traffico IRC "protetto". Esistono già molti strumenti che intercettano il traffico SSL, ma la maggior parte di questi è orientata al traffico HTTP. sslnuke punta direttamente a IRC per dimostrare quanto sia facile intercettare comunicazioni "protette". L'uso di sslnuke è semplice.
Per prima cosa, aggiungi un account utente con cui far girare sslnuke e aggiungi le regole iptables per reindirizzare il traffico verso di esso:
# 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
Infine, accedi come sslnuke, compila ed esegui sslnuke:
# su -l sslnuke
# cd sslnuke
# make
# ./sslnuke
Esegui un client IRC e accedi alla tua rete IRC preferita usando SSL; i messaggi IRC verranno stampati su stdout in 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 rileverà automaticamente un client che usa SSL e determinerà se usare o meno SSL. Il codice potrebbe anche essere facilmente modificato per mostrare le password dei siti web o i dati FTP, qualsiasi cosa usi SSL. Per attaccare utenti su una rete, sslnuke può essere usato in combinazione con uno strumento di ARP poisoning, come quello disponibile su Blackhat Library oppure può essere implementato su un gateway.
Una dimostrazione video di sslnuke è disponibile su ascii.io.
Ora passiamo alla parte importante: come verifichiamo le connessioni SSL? Il primo passo è trasferire il certificato SSL tramite un mezzo alternativo; il modo migliore sarebbe che l'amministratore ti consegni direttamente il certificato. Tuttavia, se questo non è possibile, openssl può scaricare il certificato dal server:
# openssl s_client -showcerts -connect irc.com:6697 </dev/null
Salva il certificato in ~/.irssi/ssl/irc.com.crt. È meglio eseguire il comando da un computer su una rete diversa dalla tua per evitare che venga intercettato. Successivamente, per configurare IRSSI all'uso del certificato, salva una rete:
/network add irc
/server add -ssl_cafile ~/.irssi/ssl/irc.com.crt -network irc -port 6697 irc.com
Se IRSSI riceve mai un certificato non valido, ti avviserà e si disconnetterà immediatamente. Tuttavia, per i veramente paranoici, si dovrebbe usare un servizio nascosto Tor o una VPN. Per configurare il reindirizzamento automatico al servizio nascosto Tor su Linux si possono eseguire i seguenti comandi:
# 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
In definitiva, i client IRC dovrebbero usare una verifica delle chiavi in stile SSH. Al primo collegamento, presenta l'impronta del certificato all'utente e obbligalo a confermarla, quindi memorizza il certificato nella cache. Se cambia la volta successiva, non consentire la connessione.
Il codice sorgente può essere scaricato su Github.