Ist SSLsplit das richtige Tool, um HTTPS-Verkehr auf einem WLAN-Router abzufangen und neu zu verschlüsseln?

7

Ich möchte eine Schwachstellenuntersuchung für Produkte durchführen, die auf einer Vielzahl von Geräten ausgeführt werden, indem deren HTTPS-Verkehr abgefangen wird. Ich möchte die Geräte jedoch nicht ändern, außer ein benutzerdefiniertes Zertifikat zu installieren .

Es scheint, dass SSLsplit das tut, was ich will, da es ermöglicht, dass " Verbindungen transparent über eine Netzwerkadressübersetzungs-Engine abgefangen und zu SSLsplit umgeleitet werden ". Soweit ich weiß, müssen diese NAT-Regeln nicht auf dem Gerät definiert werden, auf dem die Anwendung ausgeführt wird, auf der MITM ausgeführt wird, und ich kann iptables anpassen , um den Routerverkehr über SSLsplit auf einem Gerät umzuleiten, auf dem Fruity Wifi oder OpenWRT ausgeführt wird .

Ist SSLsplit mit geänderten iptables-Regeln ausreichend und ein vernünftiger Weg, dies zu tun , oder müsste ich auch andere Teile des Linux-Netzwerksystems ändern?

ANMERKUNG: Für das System, das ich erstellen möchte, muss auf Geräten ein Zertifikat im vertrauenswürdigen Stammspeicher installiert sein, damit Sie sich für dieses Abfangen "anmelden" können. Ich versuche nicht, ein System aufzubauen, um beliebigen Verkehr von unwilligen Geräten abzufangen.

Andrey Fedorov
quelle
1
Dies ist das falsche Forum für diese Frage - sollte auf Security.stackexchange.com gestellt werden, dort wird es jedoch geschlossen, da entweder A) Sie versuchen, ein Waffensystem aufzubauen, oder B) den Unterschied zwischen SSLstripping und MITMing nicht verstehen.
Symcbean
2
@symcbean in der Tat, aber SSLstripping ist eine Art von MITMing selbst.
FarazX
@symcbean versucht definitiv nicht, SSLstrip zu verwenden, und ich versuche auch nicht, ein System zu erstellen, das auf Personen abzielt, die Ihnen keinen Administratorzugriff auf ihr Gerät gewährt haben, da die meisten Betriebssysteme (z. B. macOS, Windows) Administratorrechte benötigen, um neue Zertifikate zu installieren.
Andrey Fedorov

Antworten:

2

Sie haben hier zwei Teile: Das SSLsplit, mit dem die Webserver-Clients eine Verbindung herstellen, und NAT, das die Zieladressen in Paketen austauscht, um sie an den SSLsplit-Server umzuleiten.

NAT muss auf dem Router eingerichtet werden, den die Clientgeräte verwenden, und die Zieladresse der Pakete vom tatsächlichen Zielserver auf den SSLsplit-Server ändern.

Dann kann SSLsplit die Verbindung aufnehmen und seine Sache tun: Verbindung zum fremden Host herstellen (verfügbar im TLS-Handshake) und Weiterleiten der Antwort.

Aus Netzwerksicht ist das Einzige, dass Sie sicherstellen müssen, dass Clients solche Netzwerkoptionen erhalten, dass ihr Standard-Gateway auf einen Router verweist, der das NAT ausführt.

Tero Kilkanen
quelle
Vielen Dank! Dies ist mit einer Einschränkung sinnvoll: Wenn das NAT die Zieladressen in den IP-Paketen übersetzt, bevor sie an SSLsplit weitergeleitet werden, woher weiß SSLsplit, wo eine Verbindung hergestellt werden muss, um die Antwort zu ermitteln?
Andrey Fedorov
SSLSplit sendet die Antwort zurück an die IP-Adresse / den Port des NAT-Geräts, und das NAT-Gerät leitet das Paket nach dem Ändern der Ziel-IP-Adresse an das Client-Gerät zurück. Dies ist das Grundprinzip der Funktionsweise von NAT. Dies wird mithilfe von Statustabellen in der NAT-Tabelle erreicht, die die über das Gerät übertragenen TCP-Verbindungen verfolgen. en.wikipedia.org/wiki/Network_address_translation ist eine gute Erklärung, wie es im Detail funktioniert.
Tero Kilkanen
Danke, hab diesen Teil. Verstehe ich richtig, dass die SSLsplit-Binärdatei auch den externen Host erreicht, um festzustellen, wie die Antwort lautet? Woher weiß SSLsplit, mit welcher externen IP eine Verbindung hergestellt werden soll, wenn das NAT sie aus den IP-Paket-Headern entfernt und durch 127.0.0.1 ersetzt hat (oder wo immer SSLsplit ausgeführt wird)? Ist die Adresse auch in den TCP-Daten enthalten?
Andrey Fedorov
1
Der Name des Zielhosts ist in den TLS-Handshake-Daten enthalten.
Tero Kilkanen
Danke, ich habe das Wesentliche. Es sieht so aus, als würde dies als Server Name Identification (SNI) bezeichnet, obwohl SSLstrip etwas anderes unterstützt, das einfach als "NAT-Engine" bezeichnet wird. Es scheint in ihrem Handbuch gut dokumentiert zu sein, also werde ich von dort aus meine Lesungen fortsetzen. Ich hoffe, es ist in Ordnung, wenn ich Ihre Antwort bereinige und ein wenig mehr Details gebe, wenn ich das herausfinde.
Andrey Fedorov
5

Kurz gesagt, ja, es kann das richtige Tool sein, aber in der Tat macht es keine Chancen, wenn Sie SSLStrip , SSLSplit , Mitmproxy oder ein anderes Tool verwenden, das Ihre Arbeit erledigen kann. Sie sollten sich nur vor der Funktionsweise hüten.

Wie @Quantim erwähnt hat, ist dies nicht möglich, ohne ein benutzerdefiniertes Zertifikat / eine benutzerdefinierte Zertifizierungsstelle im Gerät hinter dem Router zu installieren / zu haben, da eine benutzerdefinierte Zertifizierungsstelle als Man-in-the-Middle für SSL-Verbindungen erforderlich ist und in der Lage sein muss, und zu generieren Bescheinigungen, denen das Opfer vertraut . Dabei muss das Opfer das Stammzertifizierungsstellenzertifikat des Angreifers in seinem Vertrauensspeicher haben. Die Erklärung, wie Zertifizierungsstellen funktionieren und wie Sie mit den genannten Tools das gewünschte Ergebnis erzielen können, geht über den Rahmen dieser Antwort hinaus. Je nach Clienttyp - Desktop-Browser oder Mobiltelefon - sollten Sie jedoch beachten, dass sich die Installation der Stammzertifikate etwas unterscheidet.

SSLsplit funktioniert ganz ähnlich wie andere transparente SSL-Proxy-Tools - wie Mitmproxy, das mehr Funktionen bietet und komplexer ist. Es fungiert als Man-in-the-Middle zwischen dem Client und dem eigentlichen Server. Vorausgesetzt, der Datenverkehr wird auf den Server umgeleitet, auf dem SSLsplit ausgeführt wird und abgehört wird, indem das Standard-Gateway , ARP-Spoofing , das Fälschen von DNS-Einträgen oder andere Mittel geändert werden . Mit anderen Worten, wie Sie vielleicht vermutet haben, nimmt SSLsplit SSL-Verbindungen auf eine Weise auf, die vorgibt, der eigentliche Server zu sein, mit dem der Client eine Verbindung herstellt und mit dem er kommunizieren möchte. Tatsächlich generiert es dynamisch ein Zertifikat und signiert es mit dem privaten Schlüssel eines CA-Zertifikats, dem der Client vertrauen muss - wird.

Um Ihre Frage zu beantworten: " Ist SSLsplit das richtige Tool, um HTTPS-Verkehr auf einem WLAN-Router abzufangen und neu zu verschlüsseln? ", Kann dies der Fall sein, aber wissen Sie genug, um dies zu tun? Wenn ja, knacken Sie den Jackpot mit Ihren Recherchen.

Und um zu antworten: " Ist SSLsplit mit geänderten iptables-Regeln ausreichend und ein vernünftiger Weg, dies zu tun, oder müsste ich auch andere Teile des Linux-Netzwerksystems ändern? ", Sollte ich sagen, wenn Sie Ihre IPTables korrekt konfiguriert haben Regelsätze und NAT / DNAT-Regeln, und wenn Ihre Clients das CA-Zertifikat als vertrauenswürdig betrachten können, ist dies ausreichend - mit geänderten iptables-Regelsätzen und der Umleitung des Client-Datenverkehrs zum Server werden Sie die Clients abfangen 'Verkehr weiter, wie bereits erwähnt. Übrigens müssen Sie beachten, dass das Wort " transparent " beim Rechnen bedeutet (eines Prozesses oder einer Schnittstelle), dass es funktioniert, ohne dass der Benutzer sich seiner Anwesenheit bewusst ist.

Auszug aus der Originaldokumentation:

SSLsplit unterstützt einfache TCP-, einfache SSL-, HTTP- und HTTPS-Verbindungen über IPv4 und IPv6. Für SSL- und HTTPS-Verbindungen generiert und signiert SSLsplit gefälschte X509v3-Zertifikate im laufenden Betrieb , basierend auf dem ursprünglichen Serverzertifikat Betreff DN und der Erweiterung subjectAltName . SSLsplit unterstützt die Server Name Indication (SNI) vollständig und kann mit RSA-, DSA- und ECDSA-Schlüsseln sowie DHE- und ECDHE-Chiffresuiten arbeiten. Abhängig von der OpenSSL-Version unterstützt SSLsplit SSL 3.0, TLS 1.0, TLS 1.1 und TLS 1.2 sowie optional auch SSL 2.0. SSLsplit kann auch vorhandene Zertifikate verwenden, für die der private Schlüssel verfügbar ist, anstatt gefälschte Zertifikate zu generieren. SSLsplit unterstützt CN-Zertifikate mit NULL-Präfix und kann OCSP-Anforderungen generisch ablehnen. Bei HTTP- und HTTPS-Verbindungen entfernt SSLsplit Antwortheader für HPKP , um das Anheften von öffentlichen Schlüsseln zu verhindern , damit HSTS dem Benutzer das Akzeptieren nicht vertrauenswürdiger Zertifikate ermöglicht , und alternative Protokolle, um das Umschalten auf QUIC / SPDY zu verhindern. Als experimentelles Feature unterstützt SSLsplit generisch STARTTLS-Mechanismen.


Umleitung

Da das OP wissen muss, wie Anforderungen an SSLsplit umgeleitet werden, aber keinen Proxy einrichten möchte - wie in den Kommentaren erwähnt -, werde ich einen kurzen Einblick in diese Vorgehensweise geben und hoffe, dass dies helfen wird:

Scenario 1 : If SSLsplit is on the OpenWRT which you are using - i.e. if SSLsplit is set on the GateWay which victims (clients) are connecting to :


                        |
         VICTIMS        |       ATTACKER
                        |
        +-------~+      |       (GATEWAY)       If SSLsplit is set on the Gateway users are gonna connect to, you only need to redirect some ports to those SSLsplit is listening on
        |        |      |                       SSLsplit will be running on two ports: 8080 for non-SSL TCP connections and 8443 for SSL connections.
        |        | ---> |
        |        |      |                       sysctl -w net.ipv4.ip_forward=1
        +~~~~~~~~+      |                       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    (HTTPS)
        +-------~+      |  \    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 636 -j REDIRECT --to-ports 8443    (LDAPS)
        |        |      |   \   |        |      iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443    (MSA)      Encryption = StartTLS
        |        | ---> | ===➤  |        |      iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443    (SMTPS)    Encryption = SSL
        |        |      |   /   |        |      iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443    (IMAPS)    Encryption = StartTLS
        +~~~~~~~~+      |  /    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080   (XMPP)
                        | /                     ...
        +-------~+      |
        |        |      |
        |        | ---> |
        |        |      |
        +~~~~~~~~+      |
                        |
                        |

Scenario 2 : AND IF SSLsplit is not set on the GateWay whic clients are connecting to - You will be in need of setting DNAT as the following :



         VICTIMS        |        GATEWAY
                        |
        +-------~+      |
        |        |      |
        |        | ---> |                                                       IPTables will be like this :
        |        |      |
        +~~~~~~~~+      |                                SSLsplit               iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination z.z.z.z:8443
                        | \                                                     iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination z.z.z.z:8443
        +-------~+      |  \    +~~~~~~~~+              +~~~~~~~~+              ...
        |        |      |   \   |        |              |        |        
        |        | ---> | ===➤  |        |  --------->  |        |              In this scenario, all packets arriving on the router with a destination of x.x.x.x/CIDR will
        |        |      |   /   |        |              |        |              depart from the router with a destination of z.z.z.z
        +~~~~~~~~+      |  /    +~~~~~~~~+              +~~~~~~~~+
                        | /
        +-------~+      |       Redirects desired connection from somewhere
        |        |      |       to somewhere else to desired ports.
        |        | ---> |
        |        |      |
        +~~~~~~~~+      |
                        |
                        |

Achten Sie darauf, den Wert net.ipv4.ip_forwardauf 1 zu setzen. Der Befehl, den ich oben verwendet habe, sysctl -wist nicht permanent. Wenn Sie es dauerhaft festlegen möchten, sollten Sie die Datei bearbeiten, in der /etc/sysctl.confSie eine Zeile mit hinzufügen können net.ipv4.ip_forward = 1.

Standardmäßig ist bei den meisten Linux-Distributionen die IP-Weiterleitung deaktiviert. Und meiner Meinung nach ist dies eine gute Idee, da die meisten Benutzer sie nicht benötigen. Da Sie jedoch einen Linux-Router / Gateway einrichten, der auch für VPN-Server (pptp oder ipsec) nützlich ist, müssen Sie die Weiterleitung aktivieren. Dies kann auf verschiedene Arten geschehen, wie ich Ihnen gezeigt habe.

FarazX
quelle
danke für die gründliche antwort. Ich verstehe, wie Zertifikate funktionieren. Meine Frage genauer, ob das Ausführen von SSLsplit und das Ändern von iptables-Regeln ausreichen oder ob es einen anderen Teil des Linux-Netzwerks gibt, den ich kennen / nachlesen sollte.
Andrey Fedorov
2
Der Client sollte den Fehler ignorieren und das Risiko akzeptieren, über Ihr selbstsigniertes Zertifikat Zugriff zu erhalten. Andernfalls benötigen Sie physischen Zugriff, um das CA-Zertifikat zu installieren. Wenn Sie alle haben können, können Sie in die Mitte des Clients und des tatsächlichen Servers treten, und es wird nichts anderes benötigt.
FarazX
1
Ich glaube, dieser Link kann Ihnen sehr helfen. Ich sagte, es würde den Rahmen dieser Antwort sprengen, aber Sie müssen wissen, wie Sie in die Mitte von Client und Server treten und wie Sie die Regeln umgehen - wenn Sie dies möchten. Im Allgemeinen können Sie Ihr Ziel jedoch nicht ohne CA-Zertifikat erreichen, oder Sie sollten den Client bitten, das Sicherheitsrisiko zu akzeptieren, das der Browser anzeigt. Dies ist jedoch kein professioneller Weg, zumindest ist dies nicht das, was ein Penetrationstester tun wird!
FarazX
1
@AndreyFedorov Ich habe meine Antwort aktualisiert. Ich denke, Sie können verstehen, was jetzt zu tun ist. Viel Glück, Junge.
FarazX
1
@AndreyFedorov Kein Problem Kumpel, wir suchen keine Punkte, ich wollte nur helfen und bin so glücklich, dass Ihr Problem gelöst ist. Viel Glück Kumpel;)
FarazX
1

Dies ist nicht möglich, ohne ein benutzerdefiniertes Zertifikat / eine benutzerdefinierte Zertifizierungsstelle auf dem Gerät hinter dem Router zu installieren. In anderen Fällen können Sie als beliebiger Netzwerkdienst fungieren. SSLsplit generiert nur ein eigenes Zertifikat oder verwendet eines, für das Sie einen privaten Schlüssel angeben

SSLsplit kann auch vorhandene Zertifikate verwenden, für die der private Schlüssel verfügbar ist, anstatt gefälschte Zertifikate zu generieren. SSLsplit unterstützt CN-Zertifikate mit NULL-Präfix und kann OCSP-Anforderungen generisch ablehnen

Quelle

In beiden Fällen erhält ein Client ohne Ihr benutzerdefiniertes Zertifikat / Ihre benutzerdefinierte Zertifizierungsstelle einen ungültigen Fehler beim Ausstellen des Zertifikats

Transparentes Abfangen bedeutet, dass Sie nicht jeden Host angeben müssen, den Sie abfangen möchten, und den gesamten Datenverkehr abfangen können. Dies ist jedoch immer noch MitM Attact unter SSL

Quantim
quelle
absolut. Das habe ich im ersten Satz meiner Frage mit "Installieren eines benutzerdefinierten Zertifikats" gemeint. Meine Frage ist, ob die Konfiguration von SSLsplit / iptables ausreicht, um dies zum Laufen zu bringen, oder ob es noch etwas gibt, über das ich Bescheid wissen sollte. wird klarstellen.
Andrey Fedorov