Das nächste Skript soll auf Probe-Request-Pakete warten und mit einem gefälschten Probe-Response-Paket antworten, genauso als wäre es ein Accesspoint für dieses Netz. Anschließend wird der gesamte Anmelde-Prozess simuliert. Dadurch lenkt man Clients für beliebige Netze auf den eigenen Rechner um. Der Einfachheit halber verzichtet dieser Beitrag darauf, auch die nachfolgenden Data-Frames zu fälschen und er implementiert auch keinen DHCP-Server oder ähnliche Dienste.
Sollte die Attacke beim ersten Versuch nicht gelingen, kann das daran liegen, dass der Angreifer entweder zu weit vom Client entfernt ist oder der Traffic in der Umgebung zu hoch ist, sodass Scapy zu langsam antwortet. Letzteres lässt sich dadurch abmildern, dass das Programm mit dem Parameter »-s
«
gestartet wird, um es auf eine oder mehrere SSIDs zu beschränken. Zusätzlich kann man es mit dem Parameter »-a
«
auf einen Client festlegen.
In Listing 5 wird die Karte zuerst wieder in den Monitor-Modus geschaltet und der Netzwerkverkehr eingelesen. Dabei ruft das Skript für jedes Paket die Funktion »handle_packet()
«
auf und untersucht, um welche Art Paket es sich handelt. War es ein Probe-Request, sendet das Skript mithilfe der Funktion »send_probe_response
«
ein Probe-Response-Paket zurück.
Via Dot11Elt-Header werden Eigenschaften wie die SSID, die zur Verfügung stehenden Übertragungsraten (»Rates
«
), der Channel (»DSset
«
) und die erweiterten Übertragungsraten (»ESRates
«
) gesetzt. Die Übertragungsraten ermittelt das Skript vorher aus dem Probe-Request-Paket in der Funktion »get_rates()
«
. Findet es keine, gibt die Funktion zwei Standardwerte zurück, die für die Raten 1, 2, 5.5 und 11 MBit stehen. Weitere Elt-Header oder andere Übertragungsraten können am einfachsten mit Wireshark aus realem WLAN-Verkehr mitgelesen werden.
Hat die Funktion »handle_packet()
«
ein Authentication-Paket erhalten, kommt die Funktion »send_auth_response
«
zum Zug, die als Erstes überprüft, ob das Paket vom agierenden Skript selbst stammt. Die Authentication-Phase kennt nämlich keine unterschiedlichen Request- und Response-Pakete; sie unterscheiden sich nur in der Sequenznummer. Eins bedeutet Request, zwei steht für Response.
Bei einem eingelesenen Association-Request-Paket wird dagegen die Funktion »send_association_response()
«
bemüht. Sie erzeugt ein Association-Response-Paket und setzt die Übertragungsraten im Elt-Header.
Schon dieser kleine Exkurs in die WiFi-Welt zeigt, dass es eine ganze Reihe Angriffspunkte auf WiFi-Verbindungen gibt, die ohne allzu großen Aufwand ausnutzbar sind. Eine Verbesserung brachte die 2009 verabschiedete Standarderweiterung 802.11w, die Protected Management Frames definiert und außerdem WPA2 mit AES voraussetzt. Angriffe wie die oben vorgestellte Deauth-Attacke sind damit nicht mehr möglich. Allerdings müssen sowohl Accesspoint wie Client diesen Standard unterstützen. Bis jetzt hat er sich nicht breit durchgesetzt.
Listing 5
Man-in-the-Middle
Infos