
MacStealer: Wi-Fi Client Isolation Bypass
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.
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:
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.
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.
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.
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.
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.
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.
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.
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).
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.
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:
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:
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.
Jedes Mal, wenn Sie MacStealer verwenden möchten, müssen Sie zuerst die virtuelle Python3-Umgebung als Root laden. Dies kann folgendermaßen erfolgen:
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.
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:
# 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.
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:
./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:
./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:
./macstealer.py wlan0 --server 208.67.222.222 --ping
MacStealer gibt Folgendes aus, falls der Server das erforderliche Wiederholungsverhalten aufweist:
[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.
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.
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.
./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.
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.
Falls MacStealer nicht zu funktionieren scheint, prüfen Sie Folgendes:
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.
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.
Bestätigen Sie, dass Sie sich mit dem richtigen Netzwerk verbinden. Überprüfen Sie client.conf.
Wenn Sie den Code mit git aktualisiert haben, führen Sie ./build.sh und ./pysetup.sh erneut aus (siehe Voraussetzungen).
Wenn Sie eine virtuelle Maschine verwenden, versuchen Sie, MacStealer stattdessen von einer nativen Linux-Installation aus auszuführen.
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.
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:
./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.
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.
--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.
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:
...
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.
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.
# 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
}
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.
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.
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.
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):
| Befehl | Kurzbeschreibung |
|---|
./macstealer.py wlan0 --ping | Als Opfer verbinden und das Wiederholungsverhalten des Servers testen. |
./macstealer.py wlan0 --ping --flip | Als Angreifer verbinden und das Wiederholungsverhalten des Servers testen. |
./macstealer.py wlan0 | Die Standardvariante des MAC-Adressen-Diebstahlangriffs testen. |
./macstealer.py wlan0 --other-bss | Den Angreifer sich mit einem anderen AP verbinden lassen als das Opfer. |
./macstealer.py wlan0 --c2c wlan1 | Client-zu-Client-Verkehr auf Ethernet-Ebene testen (ARP-Vergiftung). |
./macstealer.py wlan0 --c2c-eth wlan1 | Client-zu-Client-Verkehr auf Ethernet-Ebene testen (DNS). |