Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
macstealer — MacStealer: Wi-Fi Client Isolation Bypass | Kitploit
Tools/GitHubGitHub/vanhoefm/macstealer
Wi-Fi AuditingVulnerability AnalysisExploitationInformation GatheringNetwork SecurityWireless SecurityPenetration TestingRed Teaming
GitHubvanhoefm/macstealer

macstealer

MacStealer: Wi-Fi Client Isolation Bypass

Repository anzeigen
55260vor 8 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

MacStealer: Umgehung der Wi-Fi-Client-Isolation

1. Einleitung

Dieses Repo enthält MacStealer. Es kann Wi-Fi-Netzwerke auf Umgehungen der Client-Isolation testen (CVE-2022-47522). Unser Angriff kann Verkehr zu anderen Clients auf der MAC-Ebene abfangen (stehlen), selbst wenn Clients daran gehindert werden, miteinander zu kommunizieren. Diese Schwachstelle betrifft Wi-Fi-Netzwerke mit böswilligen Insidern, bei denen unser Angriff die Client-Isolation umgehen kann, die manchmal auch als AP-Isolation bezeichnet wird. Der Angriff kann auch verwendet werden, um Dynamic ARP Inspection (DAI) zu umgehen, und kann wahrscheinlich auch verwendet werden, um andere Methoden zu umgehen, die verhindern, dass Clients einander angreifen. Der Angriff ist auch als Security-Context-Override-Angriff bekannt, siehe Abschnitt 5 unserer USENIX-Security-'23-Veröffentlichung (Repo).

Konkrete Beispiele für möglicherweise betroffene Netzwerke sind:

  • Enterprise-Netzwerke, in denen Benutzer einander möglicherweise nicht vertrauen und in denen Techniken wie Client-Isolation oder ARP-Inspektion eingesetzt werden, um zu verhindern, dass Benutzer einander angreifen. Zum Beispiel Firmennetzwerke mit Konten für sowohl Gäste als auch Mitarbeiter, Netzwerke wie eduroam und govroam usw.

  • Öffentliche Hotspots, die durch Passpoint (früher Hotspot 2.0) geschützt sind. Dies sind Hotspots, mit denen Sie sich automatisch und sicher verbinden können. Zum Beispiel kann es Sie nahtlos mithilfe der SIM-Karte Ihres Telefons authentifizieren.

  • Heim-WPA2- oder WPA3-Netzwerke, in denen Client-Isolation aktiviert ist. Dies umfasst Netzwerke mit einer separaten SSID für Gäste oder für unsichere (IoT-)Geräte. Es umfasst auch Netzwerke, in denen mehrere Passwörter verwendet werden, um Geräte weiter zu isolieren, was auch als Multi-PSK, Identity PSK, per-station PSK, oder EasyPSK bekannt ist. Siehe die Diskussion des Bedrohungsmodells für weitere Informationen.

  • Öffentliche Hotspots, die auf WPA3 SAE-PK basieren. Dies sind Hotspots, die durch ein gemeinsames öffentliches Passwort geschützt sind, bei denen ein Angreifer dieses öffentlich bekannte Passwort jedoch nicht missbrauchen kann.

Wir weisen darauf hin, dass unser Angriff VLANs nicht umgehen kann. Mit anderen Worten: Basierend auf aktuellen Experimenten kann unser Angriff nicht dazu verwendet werden, ein Gerät in einem anderen VLAN anzugreifen.

Das Repository mit weiteren Ergebnissen unserer USENIX-Security-'23 ist ebenfalls verfügbar.

2. Details zur Schwachstelle

Die Kernidee hinter dem Angriff ist, dass die Art und Weise, wie Clients authentifiziert werden, nichts damit zu tun hat, wie Pakete an den richtigen Wi-Fi-Client weitergeleitet werden. Die Authentifizierung erfolgt nämlich auf der Grundlage von Passwörtern, Benutzernamen, 802.1X-Identitäten und/oder Zertifikaten, aber sobald der Client verbunden ist, erfolgt die Weiterleitung von Paketen auf der Grundlage von MAC-Adressen. Ein böswilliger Insider kann dies ausnutzen, um Daten abzufangen, die für einen Wi-Fi-Client bestimmt sind, indem er ein Opfer trennt und sich dann unter der MAC-Adresse des Opfers verbindet (unter Verwendung der Anmeldedaten des Angreifers). Alle Pakete, die noch auf dem Weg zum Opfer waren, wie etwa Websitedaten, die das Opfer noch lud, werden nun stattdessen vom Angreifer empfangen.

Genauer gesagt besteht der Angriff aus drei Schritten:

  1. Das Opfer Daten anfordern lassen: Der Angreifer wartet zunächst, bis das Opfer (Client) eine Wi-Fi-Verbindung mit dem verwundbaren Access Point (AP) herstellt. Wir nehmen an, dass das Opfer dann eine Anfrage an einen Server im Internet sendet. Beispielsweise kann das Opfer eine HTTP-Anfrage an die (Klartext-)Website example.com senden. Das Ziel des Angreifers ist es, die Antwort abzufangen, die von der Website gesendet wird.

  2. Verbinden unter der MAC-Adresse des Opfers: Nachdem das Opfer Daten angefordert hat, beispielsweise durch das Senden eines HTTP-Request-Pakets, trennt der Angreifer das Opfer gewaltsam vom Netzwerk, bevor die Antwort am verwundbaren AP eintrifft. In unserem Beispiel bedeutet dies, dass das Opfer getrennt wird, bevor die Antwort von example.com am AP eintrifft. Sobald das Opfer getrennt ist, fälscht der Angreifer die MAC-Adresse des Opfers und verbindet sich mit dem Netzwerk unter Verwendung seiner eigenen Anmeldedaten. Das bedeutet, dass der Angreifer ein böswilliger Insider ist, der sich mit seinen eigenen Anmeldedaten mit dem Netzwerk verbinden kann, beispielsweise mit seinem eigenen Benutzernamen und Passwort in einem Enterprise-Wi-Fi-Netzwerk.

  3. Abfangen der Antwort: Sobald sich der Angreifer unter der MAC-Adresse des Opfers verbunden hat, ordnet der AP die neu generierten Verschlüsselungsschlüssel des Angreifers der MAC-Adresse des Opfers zu. Infolgedessen leitet der Router eingehende Pakete an die MAC-Adresse des Opfers weiter, wenn die Antwort vom Server am Wi-Fi-Netzwerk eintrifft – oder allgemein jeglicher eingehender Verkehr zum Opfer. In unserem Beispiel bedeutet dies, dass die Antwort von example.com vom Router an die MAC-Adresse des Opfers weitergeleitet wird. Der Angreifer verwendet jedoch jetzt diese MAC-Adresse. Das bedeutet, dass der AP die Antwort mit den Schlüsseln des Angreifers verschlüsselt. Mit anderen Worten: Der Angreifer empfängt nun sämtlichen ausstehenden Verkehr, der noch zum Opfer unterwegs ist.

Wir weisen darauf hin, dass abgefangener Verkehr durch Verschlüsselung auf höheren Ebenen wie TLS und HTTPS geschützt sein kann. Dennoch zeigt unser Angriff selbst bei Verwendung einer Verschlüsselung auf höherer Ebene immer noch die IP-Adresse, mit der ein Opfer kommuniziert. Dies wiederum offenbart die Websites, die ein Opfer besucht, was für sich genommen sensible Informationen sein können.

Standardmäßig fängt der Angriff keinen Verkehr ab, der vom Opfer gesendet wird, sondern kann nur Verkehr abfangen, der an das Opfer gesendet wird. Ein Angreifer kann jedoch Folgeangriffe versuchen, um auch den vom Opfer gesendeten Verkehr abzufangen. Insbesondere kann der Angreifer durch das Abfangen einer DNS-Antwort an das Opfer eine DNS-Antwort fälschen und den gesamten IP-Verkehr abfangen, der sowohl an das Opfer gesendet wird als auch vom Opfer gesendet wird.

Die Durchführung des obigen Angriffs ist nur dann sinnvoll, wenn im Zielnetzwerk Client-Isolation aktiviert ist. Andernfalls, wenn die Client-Isolation deaktiviert ist, kann ein böswilliger Insider andere Clients einfach direkt angreifen, indem er Techniken wie ARP-Spoofing verwendet (siehe die Client-Isolation-Tests).

Der Angriff ist gegen Enterprise-WPA1-, WPA2- und WPA3-Netzwerke identisch. Das liegt daran, dass der Angriff keine kryptografischen Eigenschaften von Wi-Fi ausnutzt, sondern missbraucht, wie ein Netzwerk bestimmt, an welchen Client Pakete gesendet, d. h. weitergeleitet, werden sollen.

Weitere Details zum Angriff finden Sie unter Security-Context-Override-Angriff (Abschnitt 5) in unserem Paper Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queues.

3. Mögliche Gegenmaßnahmen

3.1. Verhindern des Stehlens von MAC-Adressen

Um unseren Angriff abzuschwächen, kann ein AP Clients vorübergehend daran hindern, sich zu verbinden, wenn sie eine MAC-Adresse verwenden, die kürzlich mit dem AP verbunden war. Dies verhindert, dass ein Angreifer eine MAC-Adresse fälscht und ausstehende oder in der Warteschlange befindliche Frames abfängt, die für ein Opfer bestimmt sind. Wenn garantiert werden kann, dass sich der Benutzer hinter einer MAC-Adresse nicht geändert hat, kann dem Client die sofortige Wiederverbindung gestattet werden. Beachten Sie, dass diese Prüfung über alle APs erfolgen muss, die Teil desselben Verteilungssystems sind, und genauer gesagt über alle APs, zwischen denen Clients wechseln können, während sie ihre aktuelle IP-Adresse behalten.

3.1.1. Bei Verwendung gemeinsamer Passphrasen

Um kürzlich verbundene Benutzer sicher zu erkennen, kann ein AP eine Zuordnung zwischen der MAC-Adresse eines Clients und seinen zwischengespeicherten Sicherheitsassoziationen (z. B. seiner zwischengespeicherten PMK) speichern. Einem Client kann erlaubt werden, sich unter einer kürzlich verwendeten MAC-Adresse sofort (wieder) zu verbinden, indem er nachweist, dass er die mit dieser MAC-Adresse verknüpfte zwischengespeicherte Sicherheitsassoziation besitzt, z. B. durch Verbinden mit der korrekten zwischengespeicherten PMK.

Bei Verwendung von Multi-PSK, das auch als per-station PSK oder Identity PSK bekannt ist, kann der AP eine Zuordnung von kürzlich verbundenen MAC-Adressen und dem (eindeutigen) Passwort, das sie verwendet haben, speichern. Wenn ein Client eine Verbindung herstellt, prüft der AP, ob seine MAC-Adresse kürzlich verwendet wurde. Ist dies nicht der Fall oder ist es der Fall und der Client verwendet dasselbe Passwort wie zuvor, kann sich der Client normal verbinden. Wird jedoch dieselbe MAC-Adresse mit einem anderen Passwort verwendet, wird der Client gezwungen, eine vordefinierte Zeitspanne zu warten, bevor er sich erfolgreich verbinden kann.

Bei Verwendung von SAE-PK zur Sicherung von Hotspots ist die einzige uns bekannte Methode, um sicher zu erkennen, dass eine MAC-Adresse von demselben Benutzer wie zuvor wiederverwendet wird, das Vertrauen auf zwischengespeicherte Sicherheitsassoziationen (z. B. die mit der MAC-Adresse verknüpfte zwischengespeicherte PMK).

Die obigen Verteidigungsmaßnahmen gehen davon aus, dass nach einer gewissen Verzögerung keine ausstehenden Pakete mehr für das Opfer eintreffen. Um Datenlecks über diese Verzögerung hinaus zu verhindern, können Clients mit den Diensten, mit denen sie kommunizieren, eine Ende-zu-Ende-Verschlüsselung (wie TLS) verwenden.

3.1.1. Bei Verwendung von 802.1X-Authentifizierung und RADIUS-Erweiterungen

Bei Verwendung der 802.1X-Authentifizierung auf EAP-Basis basiert eine alternative, bessere Methode zur sicheren Erkennung kürzlich verbundener Benutzer auf der EAP-Identität, die sie während der 802.1X-Authentifizierung verwendet haben. Ein AP kann die EAP-Identität sicher vom RADIUS-Server lernen, der den Client authentifiziert hat, und eine Zuordnung von kürzlich verbundenen MAC-Adressen und ihrer entsprechenden EAP-Identität speichern. Wenn ein Client eine Verbindung herstellt, prüft der AP, ob seine MAC-Adresse kürzlich verwendet wurde. Ist dies nicht der Fall oder ist es der Fall und der Client verwendet dieselbe EAP-Identität wie zuvor, kann sich der Client normal verbinden. Wird jedoch dieselbe MAC-Adresse unter einer anderen EAP-Identität verwendet, wird der Client gezwungen, eine vordefinierte Zeitspanne zu warten, bevor er sich erfolgreich verbinden kann.

Eine Herausforderung besteht darin, dass der AP die 802.1X-Identität eines Clients aus Datenschutzgründen möglicherweise nicht immer kennt. Beispielsweise sind diese Informationen möglicherweise nur am heimischen AAA-Server verfügbar, und der AP erhält vom RADIUS-Server nur eine Chargeable User Identity. Diese Identität erlaubt es dem AP nicht, zwei Assoziationen desselben Geräts/derselben Anmeldedaten zu erkennen, da sich ihr Wert ständig ändern kann. Der AP empfängt jedoch die anonyme Identität in der EAP-Response/Identity, z. B. anonymous@realm, und kann sich darauf verlassen, um zumindest Benutzer aus verschiedenen Realms zu erkennen.

Um zu verhindern, dass Benutzer im selben Realm einander angreifen, ohne dem AP die Identität eines Clients preiszugeben, sind Kooperation und Änderungen am RADIUS-Server erforderlich. Insbesondere kann der RADIUS-Server aktualisiert werden, um zu erkennen, ob die MAC-Adresse kürzlich von einem anderen Benutzer im selben Realm (im jeweiligen lokalen Netzwerk) verwendet wurde. Der RADIUS-Server müsste dann informiert werden, wenn ein Client die Verbindung trennt, damit er weiß, wann eine MAC-Adresse zuletzt von einem seiner Benutzer verwendet wurde, und er muss über die MAC-Adresse jedes Clients informiert werden, der versucht, sich zu verbinden.

Eine letzte Anmerkung ist, dass dieser Ansatz, sich auf die EAP-Identität zu verlassen, zwar verhindern würde, dass verschiedene Benutzer einander angreifen, aber nicht verhindern würde, dass ein kompromittiertes Gerät ein anderes Gerät desselben Benutzers angreift. Das heißt, Angriffe würden nur zwischen verschiedenen Benutzern verhindert, nicht jedoch zwischen verschiedenen Geräten desselben Benutzers.

3.2. Schützen der MAC-Adresse des Gateways

Wichtig zu beachten ist, dass unser Angriff nicht auf das Abfangen von Paketen beschränkt ist, die an Wi-Fi-Clients gehen. Ein Angreifer könnte auch versuchen, eine Assoziation mit einer MAC-Adresse eines Standard-Gateways oder eines anderen Servers im lokalen Netzwerk herzustellen. Um solche Angriffe zu verhindern, kann der AP oder Controller Clients verbieten, eine MAC-Adresse zu verwenden, die der des Standard-Gateways entspricht. Allgemeiner kann eine Erkennung doppelter MAC-Adressen verwendet werden, wenn sich ein Wi-Fi-Client mit dem Netzwerk verbindet, um zu verhindern, dass Wi-Fi-Clients eine MAC-Adresse verwenden, die auch von anderen Geräten im Netzwerk verwendet wird.

3.3. Management Frame Protection (802.11w)

Die Verwendung von Management Frame Protection (MFP) würde den Angriff erschweren, aber nicht unmöglich machen. In früheren Arbeiten fanden wir einige Möglichkeiten, Clients zu trennen/deauthentifizieren, selbst wenn MFP verwendet wird. Aufgrund dieser Erfahrung scheint es immer eine Methode zu geben, einen Client gewaltsam vom Netzwerk zu trennen, selbst wenn MFP verwendet wird. Anders ausgedrückt: Es ist schwierig, Trennungs- und Deauthentifizierungsangriffe vollständig zu verhindern. Dennoch wäre MFP eine zusätzliche Hürde bei der Durchführung des Angriffs in der Praxis, daher kann es eine nützliche Gegenmaßnahme sein, um den Angriff in der Praxis zu erschweren (aber nicht unmöglich zu machen).

3.4. Verwendung von VLANs

Basierend auf vorläufigen Experimenten funktioniert der Angriff nicht über verschiedene VLANs hinweg. Mit anderen Worten: Der böswillige Insider, der den Angriff durchführt, muss sich im selben VLAN wie das Opfer befinden. Eine Gegenmaßnahme besteht daher darin, verschiedene Benutzergruppen in verschiedene VLANs zu unterteilen. Ein böswilliger Insider könnte den Angriff jedoch weiterhin gegen andere Benutzer im selben VLAN durchführen (d. h. die Client-Isolation umgehen).

Beachten Sie, dass Sie bei Verwendung von Multi-PSK (auch bekannt als per-station PSK oder Identity PSK) Clients abhängig von dem von ihnen verwendeten Passwort in verschiedene VLANs einordnen können. Mit anderen Worten: Sie können für jedes Passwort ein VLAN verwenden. Dies verhindert, dass Clients mit unterschiedlichen Passwörtern einander angreifen.

4. Voraussetzungen für das Tool

Das MacStealer-Tool funktioniert mit jeder Netzwerkkarte, die von Linux unterstützt wird. Wir haben MacStealer unter Ubuntu 22.04 getestet. Um die erforderlichen Abhängigkeiten unter Ubuntu 22.04 zu installieren, führen Sie Folgendes aus:

root@kitploit:~
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
	libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
	aircrack-ng rfkill

Klonen Sie nun dieses Repository, erstellen Sie die Tools und konfigurieren Sie eine virtuelle Python3-Umgebung:

root@kitploit:~
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh

Die obigen Anweisungen müssen nur einmal ausgeführt werden.

Nachdem Sie neue Codeänderungen per Git gezogen haben, müssen Sie ./build.sh und ./pysetup.sh erneut ausführen. Siehe das Änderungsprotokoll für einen detaillierten Überblick über Aktualisierungen an MacStealer seit Beginn der koordinierten Offenlegung.

5. Vor jeder Verwendung

5.1 Ausführungsumgebung

Jedes Mal, wenn Sie MacStealer verwenden möchten, müssen Sie zuerst die virtuelle Python3-Umgebung als Root laden. Dies kann folgendermaßen erfolgen:

root@kitploit:~
cd research
sudo su
source venv/bin/activate

Sie sollten nun Wi-Fi in Ihrem Netzwerkmanager deaktivieren, damit es MacStealer nicht stört. Optional können Sie mit sudo airmon-ng check prüfen, welche anderen Prozesse die drahtlose Netzwerkkarte verwenden und MacStealer möglicherweise stören könnten.

5.2. Netzwerkkonfiguration

Der nächste Schritt besteht darin, client.conf mit den Informationen des Netzwerks zu bearbeiten, das Sie testen möchten. Dies ist eine Konfiguration für wpa_supplicant, die zwei Netzwerkblöcke enthalten muss: einen für das Opfer und einen für den Angreifer. Eine Beispielkonfigurationsdatei zum Testen des fiktiven Netzwerks kuleuven lautet:

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"
}

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test: you can copy this from the previous block
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Attacker login: fill in login credentials representing the attacker
	identity="[email protected]"
	password="SomePassword"
}

Im Teil „network to test" müssen Sie den Namen des zu testenden Netzwerks und seine Sicherheitskonfiguration angeben. Siehe wpa_supplicant.conf für die Dokumentation zum Schreiben/Bearbeiten von Konfigurationsdateien und für Beispiel-Netzwerkblöcke für verschiedene Arten von Wi-Fi-Netzwerken. Im ersten Netzwerkblock müssen Sie unter „victim login" gültige Anmeldedaten angeben, die das simulierte Opfer darstellen. Im zweiten Netzwerkblock können Sie unter „network to test" genau dieselben Informationen angeben, aber Sie müssen Anmeldedaten angeben, die den simulierten Angreifer darstellen.

Im obigen Beispiel testet MacStealer einen Angriff, bei dem der Angreifer [email protected] ist und dieser Angreifer versucht, den Verkehr abzufangen, der an das Opfer [email protected] gesendet wird.

Standardmäßig verwendet das Skript die Konfigurationsdatei client.conf. Sie können eine andere Konfigurationsdatei verwenden, indem Sie den Parameter --config network.conf angeben, wobei Sie network.conf durch die Konfigurationsdatei ersetzen können, die Sie verwenden möchten.

Dieses Repository enthält außerdem die folgenden Beispielkonfigurationsdateien:

  • multipsk.conf: Eine Konfigurationsdatei zum Testen eines Netzwerks, das Multi-PSK verwendet, bei dem ein Passwort für vertrauenswürdige Geräte verwendet wird und ein zweites Passwort an Gäste vergeben wird.

  • saepk.conf: Eine Konfigurationsdatei zum Testen eines öffentlichen Hotspots, der SAE-PK verwendet.

Beachten Sie, dass es auch möglich ist, die Netzwerkblöcke zu bearbeiten, um einen bestimmten AP/BSS zu testen.

5.3. Serverkonfiguration

Standardmäßig sendet MacStealer bei allen Tests ein TCP-SYN-Paket an 8.8.8.8 auf Port 443, einen DNS-Server von Google. Wenn Sie einen anderen Server oder Port verwenden möchten, können Sie einen über den Parameter --server angeben. Zum Beispiel:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222

Sie können auch den Port hinzufügen, der in den TCP-SYN-Paketen verwendet werden muss:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222:80

Ersetzen Sie wlan0 durch den Namen Ihrer Wi-Fi-Schnittstelle und die IP-Adresse durch den Server, den Sie verwenden möchten. Dieser Server muss TCP-SYN/ACK-Antworten erneut senden und sollte idealerweise auch mehr als 10 Sekunden nachdem MacStealer das ursprüngliche TCP-SYN gesendet hat, ein erneut gesendetes SYN/ACK senden. Sie können dieses Wiederholungsverhalten mit dem Parameter --ping wie folgt testen:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222 --ping

MacStealer gibt Folgendes aus, falls der Server das erforderliche Wiederholungsverhalten aufweist:

root@kitploit:~
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.

Falls der angegebene Server keine TCP-SYN/ACK-Antworten sendet oder sie nicht ausreichend spät erneut sendet, gibt MacStealer Folgendes aus:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.

Der Grund, warum der Server ein SYN/ACK auch nach mehr als 10 Sekunden erneut übertragen muss, ist, dass es manchmal mehrere Sekunden dauern kann, sich als der simulierte Angreifer neu zu verbinden. Dieser Neuverbindungsprozess muss abgeschlossen sein, bevor der Server das letzte erneut übertragene TCP-SYN/ACK-Paket sendet.

6. Testen auf Schwachstellen

Die folgende Tabelle enthält gängige Befehle, die Sie beim Testen eines Netzwerks ausführen, zusammen mit einer kurzen Beschreibung dessen, was jeder Befehl tut. Unterhalb der Tabelle werden die Details zu jedem Befehl erläutert.

Wenn das getestete Netzwerk Management Frame Protection (802.11w) verwendet, geht das Tool davon aus, dass der Angreifer das Opfer weiterhin gewaltsam vom Netzwerk trennen kann. Diese Annahme basiert auf aktueller Forschung, die zeigte, dass Trennungsangriffe in der Regel weiterhin möglich sind, wenn auch weniger einfach oder allgemein, wenn MFP verwendet wird.

6.1. Plausibilitätsprüfungen

Bevor Sie auf Schwachstellen testen, können Sie die folgenden beiden Befehle verwenden, um zu bestätigen, dass MacStealer sich sowohl als Opfer als auch als Angreifer mit dem Netzwerk verbinden kann:

  • ./macstealer.py wlan0 --ping: verbindet sich mit dem Netzwerk unter Verwendung der Anmeldeinformationen des Opfers. Sobald die Verbindung hergestellt ist, wird ein TCP-SYN an den Server gesendet (standardmäßig 8.8.8.8 und kann geändert werden). MacStealer prüft, ob und wie oft das SYN/ACK (erneut) übertragen wird. Sie können dies verwenden, um zu bestätigen, dass die Anmeldeinformationen des Opfers korrekt sind, und um zu prüfen, dass der konfigurierte Server SYN/ACK-Antworten ordnungsgemäß erneut überträgt.

  • ./macstealer.py wlan0 --ping --flip: Dasselbe wie der obige Test, aber das Skript verbindet sich nun mit den Anmeldeinformationen des Angreifers. Sie können dies verwenden, um zu bestätigen, dass die Anmeldeinformationen des Angreifers korrekt sind.

6.2. Schwachstellentests (CVE-2022-47522)

  • ./macstealer.py wlan0: Testen Sie die Standardvariante des MAC-Adressen-Diebstahlangriffs. Der Angreifer verbindet sich erneut mit demselben AP/BSS wie das Opfer.

  • ./macstealer.py wlan0 --other-bss: Der Angreifer verbindet sich mit einem anderen AP/BSS desselben Netzwerks. Ein Netzwerk, das für diesen Test (ebenfalls) anfällig ist, ist in der Praxis leichter auszunutzen. Wenn sich nur ein einzelner AP/BSS in Funkreichweite befindet, läuft das Skript beim Verbinden als Angreifer in einen Timeout.

6.3. Client-Isolationstests (Ethernet-Ebene)

Das Ausnutzen der MAC-Adressen-Diebstahl-Schwachstelle ist nur dann sinnvoll, wenn Client-Isolation aktiviert ist oder wenn Techniken wie ARP-Inspektion verwendet werden, um zu verhindern, dass Clients einander angreifen. Andernfalls kann ein Angreifer einfachere Angriffe wie ARP-Vergiftung verwenden, um Datenverkehr abzufangen. Um zu testen, ob Client-Isolation aktiviert ist oder ob ARP-Inspektion vom Netzwerk verwendet wird, können Sie die folgenden Befehle verwenden:

  • ./macstealer.py wlan0 --c2c wlan1: Mit diesen Argumenten testet MacStealer, ob das Netzwerk Client-zu-Client-ARP-Vergiftungsverkehr vom Angreifer (wlan1) zum Opfer (wlan0) erlaubt. Hierbei ist wlan1 eine zweite drahtlose Netzwerkschnittstelle. Das Skript testet dann, ob bösartige ARP-Pakete vom Angreifer an das Opfer gesendet werden können.

  • ./macstealer.py wlan0 --c2c-eth wlan1: Dies ähnelt dem obigen Test, aber anstatt bösartige ARP-Pakete zu senden, sendet der Angreifer DNS-Pakete an das Opfer.

Die MAC-Adressen-Diebstahl-Schwachstelle sollte in der Praxis als Risiko betrachtet werden, wenn Client-zu-Client- Datenverkehr in einem der beiden obigen Tests blockiert wird (d. h. wenn Client-Isolation aktiviert ist oder wenn andere Techniken wie ARP-Inspektion verwendet werden, um zu verhindern, dass Benutzer einander angreifen).

Standardmäßig versucht MacStealer, sich mit beiden Schnittstellen mit demselben AP/BSS zu verbinden. Daher ist es wichtig, dass beide Netzwerkkarten dieselben Netzwerke sehen können (d. h. stellen Sie sicher, dass beide Netzwerk- schnittstellen dieselben Frequenzbänder und Kanäle unterstützen). Wenn Sie möchten, dass sich beide Clients mit einem anderen AP/BSS verbinden, können Sie den Parameter --other-bss verwenden.

Sie können den Parameter --flip-id verwenden, um zu testen, ob Datenverkehr vom Opfer (wlan0) in Richtung des Angreifers (wlan1) erlaubt ist.

6.4. Checkliste zur Fehlerbehebung

Falls MacStealer nicht zu funktionieren scheint, prüfen Sie Folgendes:

  1. Prüfen Sie, dass kein anderer Prozess die Netzwerkkarte verwendet (z. B. beenden Sie Ihren Netzwerkmanager). Möglicherweise sehen Sie die Ausgabe kernel reports: match already configured, wenn ein anderer Prozess die Netzwerkkarte ebenfalls verwendet.

  2. Wenn zuvor alles funktioniert hat, versuchen Sie, Ihren Wi-Fi-Adapter abzuziehen, Ihren Computer oder Ihre virtuelle Maschine neu zu starten, und versuchen Sie es dann erneut.

  3. Bestätigen Sie, dass Sie sich mit dem richtigen Netzwerk verbinden. Überprüfen Sie client.conf.

  4. Wenn Sie den Code mit git aktualisiert haben, führen Sie ./build.sh und ./pysetup.sh erneut aus (siehe Voraussetzungen).

  5. Wenn Sie eine virtuelle Maschine verwenden, versuchen Sie, MacStealer stattdessen von einer nativen Linux-Installation aus auszuführen.

  6. Führen Sie MacStealer mit dem zusätzlichen Parameter -dd aus, um zusätzliche Debug-Ausgaben von wpa_supplicant und von MacStealer selbst zu erhalten.

7. Erweiterte Verwendung

7.1. Testen der Client-Isolation auf IP-Ebene

Die standardmäßigen Client-Isolationstests prüfen, ob Datenverkehr auf der Ethernet- Ebene zwischen Clients erlaubt ist. Es ist auch möglich zu testen, ob IP-Ebene-Datenverkehr zwischen Clients erlaubt ist, indem Sie den folgenden Befehl verwenden:

root@kitploit:~
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]

Wenn IP-Ebene-Datenverkehr zwischen Clients erlaubt ist, ist es Clients weiterhin möglich, einander anzugreifen. Beispielsweise können dann ICMP-Redirect-Angriffe weiterhin möglich sein. Solche Angriffe sind umständlicher als ARP-Spoofing, sollten aber im Idealfall weiterhin verhindert werden, indem auch IP-Ebene-Datenverkehr zwischen Clients blockiert wird.

7.2. Testen allgemeiner Netzwerkeigenschaften

Die folgenden Tests können ausgeführt werden, um allgemeine Eigenschaften eines Netzwerks zu testen. Diese Tests stehen nicht in direktem Zusammenhang mit Schwachstellen, können aber verwendet werden, um das Verhalten eines Netzwerks besser zu verstehen.

  • ./macstealer.py wlan0 --same-id [--other-bss] [--flip]: Testen Sie, ob TCP-Verbindungen nach dem Trennen und erneuten Verbinden mit einem Access Point aktiv bleiben. Wenn Verbindungen nach dem erneuten Verbinden nicht aktiv bleiben, ist das Netzwerk wahrscheinlich nicht anfällig für die MAC-Adressen-Diebstahlangriffe. Ein großer Nachteil dieses Verhaltens ist, dass legitime Clients bei jedem erneuten Verbinden neue TCP-Verbindungen aufbauen müssen, wodurch dieses Netzwerk langsam und unzuverlässig erscheint (daher sollte stattdessen eine bessere Verteidigung verwendet werden).

    Sie können den Parameter --other-bss verwenden, um sich erneut mit einem anderen AP/BSS desselben Netzwerks zu verbinden. Sie können das Argument --flip verwenden, um diesen Test mit der Identität des Angreifers anstelle der Identität des Opfers durchzuführen.

  • ./macstealer.py wlan0 --flip: Testen Sie den normalen MAC-Adressen-Diebstahlangriff, aber tauschen Sie die Rollen von Angreifer und Opfer. Mit anderen Worten, der Angreifer verwendet die „Opfer-Anmeldeinformationen“ aus der Konfigurationsdatei, und das Opfer verwendet die „Angreifer-Anmeldeinformationen“.

  • ./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]: Testen Sie, ob Client-zu-Client-Datenverkehr zwischen zwei Geräten desselben Benutzers erlaubt ist. Siehe Client-Isolationstests für die Dokumentation zum Parameter wlan1.

    Sie können das Argument --flip verwenden, um diesen Test mit der Identität des Angreifers anstelle der Identität des Opfers durchzuführen.

7.3. Weitere Parameter

  • --delay seconds: Sie können den Parameter --delay verwenden, um eine Verzögerung in Sekunden vor dem erneuten Verbinden als Angreifer anzugeben.

  • -d oder -dd: Das Hinzufügen eines dieser Parameter erhöht die Debug-Ausführlichkeit des Skripts und der zugrunde liegenden wpa_supplicant-Instanz.

7.4. Testen eines bestimmten Access Points / BSS

Standardmäßig wählt MacStealer automatisch einen AP/BSS des Netzwerks aus, mit dem es sich verbindet und den es testet. Falls Sie ein Netzwerk mit mehreren APs/BSSes haben, können Sie einen bestimmten testen, indem Sie diesen AP/BSS im Netzwerkblock des Opfers mit dem Schlüsselwort bssid angeben. Sie können beispielsweise Folgendes verwenden:

root@kitploit:~
...

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"

	# This a specific AP/BSS
	bssid=00:11:22:33:44:55
}

...

Mit der obigen Konfiguration testet MacStealer 00:11:22:33:44:55. Das bedeutet, es wird sich sowohl als Opfer als auch als Angreifer mit diesem AP verbinden.

Sie können dies auch mit dem Parameter --other-bss kombinieren. In diesem Fall verbindet sich das Opfer mit 00:11:22:33:44:55, und der Angreifer verbindet sich mit einem anderen AP/BSS desselben Netzwerks.

Eine weitere Möglichkeit besteht darin, einen expliziten BSS/AP im Netzwerkblock des Opfers und des Angreifers anzugeben.

Beachten Sie, dass MacStealer höchstens 30 Sekunden lang nach dem angegebenen AP/BSS sucht. Wenn es den angegebenen AP/BSS nicht finden kann, beendet sich das Tool.

7.5. Testen eines SAE-PK-Netzwerks

Sie können ein SAE-PK-Netzwerk testen, indem Sie die folgende Konfigurationsdatei verwenden. Beachten Sie, dass für SAE-PK-Netzwerke kein Unterschied besteht, wie sich Opfer und Angreifer authentifizieren, d. h., sie verwenden beide dasselbe Passwort.

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test - attacker login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test - victim login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

8. Diskussion des Bedrohungsmodells

8.1. WPA-PSK-Authentifizierung

In der Praxis wird Client-Isolation auch in Netzwerken verwendet, die mit einem vorab geteilten Passwort gesichert sind. Beispielsweise bieten viele Router eine Option, ein Netzwerk für Gäste oder unsichere (IoT-)Geräte zu erstellen, bei dem die Clients in diesem Netzwerk isoliert sind, sodass sie einander nicht angreifen können. Der Sicherheits- vorteil der Verwendung von Client-Isolation in diesem Szenario kann jedoch infrage gestellt werden. Client-Isolation soll verhindern, dass ein böswilliger Insider andere angreift. Wenn der böswillige Insider jedoch das vorab geteilte Passwort kennt, kann er einfach einen gefälschten Klon (Evil Twin) erstellen, Opfer dazu verleiten, sich mit dieser böswilligen Kopie des Netzwerks zu verbinden, und dann andere Clients angreifen! Mit anderen Worten, die Verwendung von Client- Isolation in einem mit einem Passwort gesicherten Netzwerk bietet keine starke Sicherheit, ein böswilliger Client kann einen gefälschten AP erstellen, um weiterhin andere Clients anzugreifen.

8.2. Häufige Missverständnisse

  • Das Ziel unseres Angriffs ist es nicht, MAC-Adressen-Sperr-/Erlaubnislisten auf Access Points zu umgehen. Das Spoofing von MAC- Adressen zur Umgehung der MAC-Adressen-Filterung ist ein anderer und bekannter Angriff.

  • Das Ziel unseres Angriffs ist es nicht, die kostenpflichtige Verbindung einer Person in Wi-Fi-Hotspots zu übernehmen. Beispielsweise verlangen einige offene (oder geschützte) Hotspots, dass der Benutzer zahlt, bevor er auf das Internet zugreifen darf. Oft wird ein zahlender Abonnent anhand seiner MAC-Adresse erkannt, und ein Angreifer kann die MAC-Adresse eines Opfers spoofen, um Zugang zum Internet zu erhalten. Das ist nicht der Zweck unseres Angriffs; das Ziel von MacStealer ist es, Client-Isolation zu umgehen.

  • Unser Angriff betrifft auch Netzwerke, die sich gegen die Hole-196-Schwachstelle verteidigen. Beispielsweise sind Passpoint (früher Hotspot 2.0) Netzwerke dazu verpflichtet, die Hole-196-Schwachstelle zu verhindern, sind aber weiterhin anfällig für unseren Angriff.

  • Unser Angriff funktioniert in Netzwerken, die sich gegen ARP-Spoofing verteidigen. In schlecht gesicherten Wi-Fi-Netzwerken kann ein Angreifer trivialerweise ARP-Spoofing durchführen, um den Datenverkehr eines Opfers abzufangen, und unser Angriff ist nicht wirklich praktikabel. Moderne Netzwerke, die möglicherweise böswillige Insider enthalten, verlassen sich jedoch auf Client-Isolation oder andere Methoden, um Man-in-the-Middle-Angriffe zu verhindern. Unser Angreifer umgeht alle diese modernen Verteidigungen und ermöglicht es einem Angreifer weiterhin, Datenverkehr in Richtung eines Opfers abzufangen.

Zusammenfassend betrifft unser Angriff Wi-Fi-Netzwerke, in denen Clients daran gehindert werden, einander anzugreifen, was es einem Angreifer ermöglicht, Datenverkehr zu einem anderen Client abzufangen.

8.3. Zugewiesene CVE

Die meisten Anbieter verwenden CVE-2022-47522, um sich auf die Schwachstelle zur Umgehung der Wi-Fi-Client-Isolation zu beziehen, die in diesem Git-Repository diskutiert wird. Diese Schwachstelle entspricht dem Angriff in Abschnitt 5 von unserer Arbeit.

Leider verwenden andere Anbieter diese CVE auch, um sich auf die (streng genommen nicht zusammenhängende) Schwachstelle zu beziehen, die in Abschnitt 3 von unserer Arbeit diskutiert wird. Tatsächlich beschreibt die eigentliche Beschreibung der CVE, wie sie auf MITRE zu finden ist, unserer Meinung nach nur den Angriff in Abschnitt 3 unserer Arbeit. In der Praxis scheint es, dass CVE-2022-47522 verwendet wird, um sich auf alle Angriffe in unserer Arbeit zu beziehen, obwohl sie technisch unterschiedlich sind.

9. Änderungsprotokoll

Version 1.2 (in Arbeit)

  • README verbessert: Die Verwendung der CVE-Kennung wurde klargestellt.

  • README verbessert: Einleitung auf die Umgehung der Client-Isolation fokussiert, Verteidigungsmaßnahmen um 802.1X-Anmerkungen aktualisiert und um das Stehlen der MAC-Adresse des Standard-Gateways zu verhindern.

  • Parameter --delay hinzugefügt, um eine Verzögerung in Sekunden vor dem erneuten Verbinden als Angreifer anzugeben.

Version 1.1 (18. Januar 2023)

  • Standardmäßig wird 8.8.8.8 als Server verwendet anstelle von 216.58.208.100 (beides sind Google-Server).

  • Client-Isolationstests aktualisiert: standardmäßig Test mit ARP-Vergiftung auf Ethernet-Ebene. Zudem Option zum Senden von UDP-Daten mit Weiterleitung auf Ethernet-Ebene sowie ein Test mit Weiterleitung auf IP-Ebene.

  • README verbessert: Arten von Netzwerken, die betroffen sein können, aktualisiert. Diskussion darüber, ob passwortgeschützte WPA2- oder WPA3-Netzwerke betroffen sind, hinzugefügt. Erklärung der verschiedenen Befehle zum Testen von Client-zu-Client-Verkehr auf Ethernet- oder IP-Ebene.

  • README verbessert: Diskussion von MFP, Diskussion von VLANs als Abschwächung, Klarstellung, über welche APs die Identitätsprüfung durchgeführt werden muss, Angabe des Ports des Servers,

  • Ausgabe von MacStealer verbessert.

Version 1.0 (3. Januar 2023):

  • Erste Veröffentlichung für die Nutzung während der Embargofrist vorbereitet. Der Code basiert auf hostap-Commit 0f3f9cdcab6a.
Tool herunterladen
BefehlKurzbeschreibung
Plausibilitätsprüfungen
./macstealer.py wlan0 --pingAls Opfer verbinden und das Wiederholungsverhalten des Servers testen.
./macstealer.py wlan0 --ping --flipAls Angreifer verbinden und das Wiederholungsverhalten des Servers testen.
Schwachstellentests
./macstealer.py wlan0Die Standardvariante des MAC-Adressen-Diebstahlangriffs testen.
./macstealer.py wlan0 --other-bssDen Angreifer sich mit einem anderen AP verbinden lassen als das Opfer.
Client-Isolation: Ethernet-Ebene
./macstealer.py wlan0 --c2c wlan1Client-zu-Client-Verkehr auf Ethernet-Ebene testen (ARP-Vergiftung).
./macstealer.py wlan0 --c2c-eth wlan1Client-zu-Client-Verkehr auf Ethernet-Ebene testen (DNS).