WLAN-Ortung mit OpenWRT, Linux und Mac OS X

aus Nomads, der freien Wissensdatenbank

Inhaltsverzeichnis

Einleitung

Versuchsaufbau.
Die WLAN (Wirless Local Area Network) Technologie gehört mittlerweile zu den etablierten Standards, wenn es um die drahtlose Vernetzung von Computern, Routern und multimedialen kleinen Geräten, wie MP3-Playern oder Handys, geht. Dass die dabei verschickten Signale nicht nur zur Kommunikation genutzt werden können, verdeutlicht die WLAN-Fremdortung. Hierbei werden die durch die Clients verschickten Funksignale aufgefangen und anhand der Signalstärke ein ungefährer Abstand zum Versender ermittelt.

Sind die Positionen von einem oder meist mehrerer Empfänger bekannt, kann die Position des WLAN-Gerätes durch Triangulierung bestimmt werden. Hierzu kann die an der Humboldt-Universität zu Berlin entwickelte Software MagicMap eingesetzt werden, die sowohl Visualisierung als auch Positionsberechnung übernimmt und sich mit einem plattformunabhängigen Design auszeichnet. Die Empfangsgeräte zum Mitschneiden der WLAN-Signale sollten möglich klein, stromsparend, günstig und einfach zu installieren sein, um eine spätere Verbreitung zu beschleunigen. Im Rahmen des Projekten wurden dafür WLAN-Router der Firma Fonera verwendet, die geringe Ausmaße und mit 15€pro Stück einen geringen Preis aufweisen und nur mit Strom- und Netzwerkkabel installiert werden müssen. Das Ziel dieses Projektes war es nun die Fonera-Router mit einem lauffähigen Betriebssystem auf Linuxbasis zu flashen und anschließend eine Software zu programmieren, die mit Hilfe geeigneter Bibliotheken den Verkehr der WLAN-Schnittstelle auffängt, die Signalstärke extrahiert und zusammen mit der Mac-Adresse des Senders per WebService an einen MagicMap-Server schickt.


Vorgehensweise

Die Umsetzung der geforderten Aufgaben gestaltete sich iterativ, so dass periodisch Arbeitspakete definiert, auf die Teammitglieder verteilt und anschließend analysiert wurden. Auf Grundlage dieser Analyse wurde der Prozess erneut durchlaufen. In der ersten Phase ging es darum, eine gemeinsame Betriebssystembasis für die Fonera-Router zu schaffen. Hierzu wurden die Router einer Prüfung unterzogen, in wie weit ein aktuelles OpenWRT-Linux installiert und die Konnektivität über die LAN-Schnittstelle gegeben war. Parallel dazu wurde nach Software-Bibliotheken recherchiert, um das WLAN-Sniffing und die WebService-Kommunikation mit MagicMap zu vereinfachen. Nach dem sich herausgestellt hat, dass lediglich ein Fonera ein gebrauchsfähiges Betriebssystem aufwies, ging es daran, nach Möglichkeiten zu suchen, die Foneras mit einer neuen Version von OpenWRT zu flashen. Ausprobiert wurden in diesem Zuge das Flashen über ein umgelötetes Handydatenkabel sowie einem komplett neu gelöteten Adapter. Beide Versuche schlugen jedoch fehl. Parallel wurde eine Software mit Hilfe der WirelessTools- und cSOAP-Bibliotheken in der Programmiersprache C geschrieben, die auf dem einen funktionsfähigen Router lief. Da mit einem Router keine WLAN-Ortung durchzuführen ist, wurden Alternativen gesucht, um die gestellte Aufgabe zu lösen. Eine Lösung ergab sich dadurch, dass Teile der Aufgabenstellung aufgeweicht wurden, insofern wir von der Forderung nach möglichst kleinen, preiswerten Routern auf einfacher zu programmierende Laptop-Rechner umgestiegen sind. Mit Hilfe fertiger Software-Bibliotheken wurde so eine Software für Linux als auch für Mac OS X 10.6 gefertigt und deren Funktionalität auf einer Abschlusspräsentation nachgewiesen.

Flashen der Fonera-Router

Um die Fonera-Router zum WLAN-Sniffen zu verwenden benötigt man als Erstes SSH-Zugang um die erforderliche Software zu installieren. Das Betriebssystem des Router-Herstellers hat den SSH-Zugang allerdings deaktiviert. Daher sollte das freie Betriebssystem OpenWRT auf die Router geflasht werden. OpenWRT ist ein alternatives Betriebssystem für Router und andere Embedded-Devices. Das Flashen kann ohne SSH-Zugang nur über die serielle Schnittstelle des Fonera-Routers durchgeführt werden. [1] Für die Anbindung eines Computers an die serielle Schnittstelle des Routers braucht man entsprechende Kabel und Adapter, die in diesem Abschnitt noch näher beschrieben werden.

Ausgangslage

Insgesamt haben wir fünf Fonera-Router erhalten, auf denen potentiell schon OpenWRT installiert sein könnte. Alle Routern wurden einzeln per Ethernet-Kabel mit einem Computer verbunden, um mit Hilfe von Ping- und SSH-Werkzeugen (wie u.a. nmap, dmesg...) die IP-Adresse und das Betriebssystem des Routers zu erfahren, was aber bei nur einem Router zum Erfolg führte. Daher war nun die Aufgabe die anderen vier Router zu flashen. Dies wurde versucht über einen USB-To-Fonera-Adpater [2] [3] und einen Seriell-To-Fonera-Adapter [4] zu realisieren. Über ein Konsolenprogramm wie Minicom können dann Daten vom Computer zum Router und andersherum übertragen werden. Nachdem man Minicom installiert hat, muss man das Programm noch konfiguren. [5] [6] Dazu gibt man folgendes in die Konsole ein:

minicom -s

Unter dem Menüpunkt „Einstellungen zum seriellen Anschluss“ muss man den verwendeten seriellen Anschluss eintragen, in unserem Fall war das beispielsweise „/dev/ttyUSB0“. Außerdem muss bei „Bsp/Par/Bits“ die Einstellung „9600 8N1“ vorgenommen werden. „Hardware Flow Control“ und „Software Flow Control“ wurde beides auf „Nein“ gestellt.

USB-To-Fonera-Adapter

Nachdem sich gezeigt hatte, dass alle Foneras bis auf einer sich in einem Zustand befanden, der ein Zugreifen der Netzwerkschnittstellen unmöglich machte, ging es daran nach Alternativen zu suchen, um ein aktuelles OpenWRT auf den Routern zu installieren. Da die Foneras neben den Netzwerkschnittstellen lediglich eine interne serielle Schnittstelle mitbringen, ging es daran diese mit einem Computer zu verbinden. Eine Suche im Internet ergab, dass entweder ein aufwändiger Adapter gelötet oder mit Hilfe eines umgebauten Handykabels eine Verbindung zwischen Computer und Fonera hergestellt werden konnte. Die zweite Variante war weniger kosten- und zeitintensiv und kam ohne einen weiteren Adapter aus, was ausschlaggebend dafür war, diese als erstes auszuprobieren. Es wurde zuerst ein Siemens S65-USB-Datenkabel angeschafft und dieses nach gegebener Pinbelegung umgelötet, so dass der Stecker auf die interne serielle Schnittstelle passte. [7][8] Der Vorteil dieser Variante ist, dass in dem Kabel sowohl der USB-Seriell-Adapter als auch der Pegelwandler für den Fonera in handlicher Bauweise integriert ist.

Flashen mit dem USB-To-Fonera-Adapter

Leider war es nicht möglich über den USB-To-Fonera-Adapter die Router zu flashen, da die Verbindung nur schlecht oder gar nicht hergestellt werden konnte. Der Output in Minicom enthielt nur Fragmente des erwarteten Outputs und war sehr fehlerhaft, wodurch eine Kommunikation mit dem Router unmöglich war. Eventuell war das Kabel defekt oder nicht richtig gelötet.

Seriell-To-Fonera-Adapter

Nachdem die Benutzung des USB-To-Fonera-Adapters nicht zum gewünschten Erfolg geführt hat, blieb nur die zweite Variante zu testen. Dazu wurde nach einem Schaltplan eine entsprechende Schaltung auf einer Lochrasterplatine gelötet und mit Hilfe eines USB-Seriell-Adapters mit dem Computer verbunden. [9]

Schaltung oben. Schaltung unten.

Flashen mit dem Seriell-To-Fonera-Adapter

Mit diesem Adapter konnten wir leider auch kein besseres Ergebnis erzielen, da wiederum keinerlei Daten übertragen wurden.

Fonera an Seriell-To-Fonera-Adapter angeschlossen.

WLAN-Sniffing

MagicMap-Client auf Fonera

Da uns wenigstens ein brauchbarer Fonera-Router zur Verfügung stand, war es möglich einen MagicMap-Client für das mit OpenWRT betriebene Gerät zu implementieren und zu testen. Der Client wurde erst unter Ubuntu implementiert, getestet und später auf OpenWRT portiert. Um eine gute Performance zu erreichen wurde auf eine Implementierung in Java verzichtet und sich nur auf C beschränkt. Um das WLAN-Sniffing zu realisieren fiel die Entscheidung auf die Linux Wireless Extention APIs (libiw). Allerdings hat es sich später herausgestellt, dass es mit den verwendeten APIs nicht möglich ist, im Monitor Modus zu sniffen. Deswegen scannt der Client nur die Acess Points im aktiv Modus. Mit gSOAP, ein Open Source C und C++ Software-Entwicklungs-Toolkit für SOAP/XML-Webdienste, wurden C Stub und Skeleton Dateien mit der entsprechenden MagicMap Webservicefunktion erzeugt, um die gesammelte Daten an MagicMap zu senden. gSOAP beinhaltet zwei Werkzeuge:

  • „wsdl2h“ WSDL-Parser für die Konvertierung von WSDLs und XSD-Dateien in kommentierte C/C++-Definitionen, sowie Compiler für die Generierung von Code und XML-RPC Serialisierungsprogramme aus den kommentierten C/C++-Definitionen

wsdl2h -c -o magicMapClientForLaFonera.h http://phl.informatik.hu-berlin.de/magicmap/services/SessionFacade?wsdl http://phl.informatik.hu-berlin.de/magicmap/services/MapFacade?wsdl http://phl.informatik.hu-berlin.de/magicmap/services/PositionFacade?wsdl

  • „soapcpp2“ Stub-und Skeleton-Compiler für die Generierung von Code und XML-RPC Serialisierungsprogramme aus den kommentierten C / C + +-Definitionen

soapcpp2 -c -C -L -I.../gsoap/import magicMapClientForLaFonera.h

Laptops als WLAN-Sniffer

Nachdem sich die ursprüngliche Idee, den WLAN-Sniffer auf 4 Foneras zu installieren aufgrund der Probleme beim Flashen als schwierig erwiesen hat, wurde sich nach Alternativen umgeschaut um den Grundgedanken der WLAN-Ortung mit Anbindung an MagicMap trotzdem demonstrieren zu können. Auf der Suche nach WLAN-fähigen, transportablen Geräten, die möglichst leicht zu programmieren sind, fiel die Wahl schnell auf die im Team verfügbaren Laptops. Als Hardware standen somit zusätzlich ein MacBook Pro 15“ (Mid 2010) mit Mac OS X 10.6.4 zur Verfügung als auch zwei ASUS Eee PCs mit Ubuntu 10.04.

Versuchsaufbau mit Laptops.

Linux-Client

Linux Client
Um das WLAN-Sniffung unter Linux, in dem Fall Ubuntu (Version 10.04 LTS - Lucid Lynx), zu realisieren wurde TShark verwendet. Tshark ist die Konsolen-Variante von Wireshark, ein freies Programm zur Analyse von Netzwerk-Kommunikationsverbindungen. Wireshark ist auch für Windows und OS X erhältlich.

Mit Tshark wurde der Netzwerkverkehr analysiert und die Signalstärken aufgezeichnet. Die Daten wurden am Ende mit einem in Java geschrieben Webservice-Client an MagicMap geschickt. Um das Ganze zu automatisieren wurde mit der Programmiersprache Boo ein Skript geschrieben, welches die notwendigen Arbeitsschritte ausführt. Die Syntax von Boo ist an die Programmiersprache Python angelehnt. Um überhaupt Sniffen zu können muss der Computer zuerst in den Monitor-Mode, auch passiver Modus genannt, geschaltet werden. Dazu müssen unter Ubuntu folgende Befehle ausgeführt werden:

sudo service network-manager stop

sudo ifconfig wlan0 down

sudo iwconfig wlan0 mode monitor

sudo ifconfig wlan0 up

Danach kann man mit Tshark sniffen. Folgender Befehl startet Tshark, stellt die Dauer des Vorganges ein und formatiert den Output zu „SSID;MAC-Adresse;Signalstärke“:

sudo tshark -i wlan0 -a duration:5 -T fields -e wlan_mgt.ssid -e wlan.sa -e radiotap.dbm_antsignal -E separator=\;

Diese Daten werden von dem Boo-Skript gesammelt und in Objekte gespeichert um dann für jede MAC-Adresse den Durchschnitt der gemessenen Signalstärken zu erhalten. Schließlich werden die Informationen über die Webservice-Schnittstelle an MagicMap gesendet. Zum Schluss wird wieder in den Managed-Mode, bzw. in den aktiven Modus geschaltet:

sudo ifconfig wlan0 down

sudo iwconfig wlan0 mode managed

sudo ifconfig wlan0 up

sudo service network-manager start

Der Code und eine detaillierte Anleitung befindet sich im SVN unter https://devel-rok.informatik.hu-berlin.de/svn/magicmap/magicmap/trunk/magicmapembedded/TShark-Controller/.

Mac OS X-Client

Mac OS X Client

Das MacBook Pro verwendet einen BroadCom 43224-WLAN-Chip und ist damit kompatibel zu Kismet. Das WLAN-Sniff-Programm Kismet lässt sich für viele Betriebsysteme kompilieren und unterstützt viele WLAN-Chipsätze. Um die Software nicht vollständig auf Mac OS X portieren zu müssen, basiert der Client auf KisMAC, eine frei verfügbare Version von Kismet für Mac mit einer ansprechenden und einfach zu bedienenden Benutzeroberfläche. KisMAC ist in Deutschland verboten, aber ein Download über Google ist leicht zu finden. Das Programm schaltet automatisch den Passive Mode der Apple Airport Extreme-Karte ein und zeigt anschließend alle Daten über die gefundenen Clients übersichtlich an. Die Daten kann man über das Menü in Dateien in diversen Formaten speichern und auswerten. In ersten Tests stellte sich heraus, dass die Software genau unsere Anforderungen erfüllte:

  • Die Software schneidet passiv den WLAN-Verkehr mit und analysiert ihn.
  • Die Software läuft unter Mac OS X.
  • Die Software ermittelt die Signalstärken und MAC-Adressen der WLAN-Clients und gibt diese aus.

Da die Ausgabe der MAC-Adressen und Signalstärken standardmäßig graphisch passiert, war die erste Hürde diese Informationen in Java verfügbar zu machen, weil die spätere Controller-Software und die MagicMap-Anbindung in Java geschrieben werden sollten. Zusätzlich zur graphischen Ausgabe bietet KisMAC dafür die Möglichkeit die Messwerte per Hauptmenü auf die Festplatte zu schreiben. Um diesen Prozess zu automatisieren wurde AppleScript verwendet. Eine Scriptsprache für Mac OS X, die es erlaubt Handlungen zu in Code zu gießen und damit automatisiert ablaufen zu lassen. Per Java Scripting Engine, die unter Mac OS X eine AppleScript-Unterstützung bietet, konnte so das Problem des Extrahierens der wichtigen Informationen aus KisMAC mit Hilfe von AppleScript und Java gelöst werden. Für die Anbindung an MagicMap reichte es sich per Apache Axis die entsprechenden Java-Klassen aus der WSDL generieren zu lassen und somit komfortablen Zugriff auf die einzelnen Funktionen des MagicMap-WebService zu haben. Der Code und eine Anleitung in der Datei README findet sich im SVN unter:

Zuerst gilt es den Java-Webservice-Client mit Maven zu bauen, anschließend gilt das gleiche für den KisMAC-Controller.

Wenn KisMAC läuft sieht es ungefähr so aus. Lässt man den KisMAC-Controller in Eclipse laufen, zeigt er unten die gesnifften WLAN-Clients an und sendet sie an MagicMap:

Fazit

Leider blieb das Flashen der übrigen Foneras erfolglos. Um im Rahmen des Seminars trotzdem WLAN-Sniffing auszuprobieren entschieden wir uns unsere Laptops als Ersatz für die Fonera-Router zu verwenden. Im Gegensatz zu den Foneras sind die Laptops relativ einfach einzurichten und als temporäre Clients durchaus denkbar. Einen Fonera-Router auf das Sniffen vorzubereiten ist dagegen recht aufwendig. Die Anwendungsmöglichkeiten der WLAN-Fremdortung sind sicher vielseitig, allerdings herrscht in Deutschland diesbezüglich eine rechtliche Grauzone.

'Persönliche Werkzeuge