Plötzlich und unerwartet hab ich ein kleines Spielzeug geschenkt bekommen, eine Jumping Sumo Drone aus dem Hause Parrot. Natürlich ist sie wie jedes Spielzeug nur ein Spielzeug, und wird vom Hersteller und vom Nutzer so behandelt. Das Gerät erstellt einen kleinen WLAN AP auf den man sich mit seinem Handy verbinden und über eine Anwendung für Android und iOS das ganze Steuern kann. Möchte man einen Laptop nutzen gibt es keine offizielle Lösung, dafür aber ein schönes Projekt auf github Namens libsumo (-> https://github.com/iloreen/libsumo).
Natürlich gibt es genauso keine Option die Verbindung in irgendeiner Weise zu verschlüsseln. Alles was ich dafür gefunden habe sind ein paar Threads im Parrot Forum wo sich vereinzelt jemand aufgeregt hat, aber auch nur ignoriert wurde. Weiter gibt es noch diverse Software welche diese Geräte Kapern kann, eben weil das WLAN unverschlüsselt ist (-> https://github.com/samyk/skyjack). Alles was Parrot an Sicherheit anzubieten hat ist eine whitelist für MAC Adressen (via iptables) … .
Da auf dem Gerät glücklicherweise ein kleines Linux läuft und einen Telnet Server aktiv hat, kann man problemlos darauf verbinden und nach ein paar Stunden rätseln und ein bisschen Hilfe von Armin (eigentlich hat er die ganze Arbeit gemacht) erstellt dieses Spielzeug nun einen WPA2 verschlüsselten AP. Ein wenig erschreckend ist jedoch, das es so einfach ist, das man sich fragen muss wieso der Hersteller so etwas nicht benutzt, oder zumindest als Option anbietet (-> weil es Spielzeug ist).
Die Probleme gehen aber schon vorher los, das Spielzeug hat einen kleinen Li-Poly Akku mit 550mAh bei 3,7V – was in etwa 2Wh entspricht, mit den Angaben ist es nicht unglaubwürdig das der Akku nach 20 Minuten wieder geladen werden muss. Natürlich schaltet es sich für den Ladevorgang über USB aus, was bedeutet das man 20 Minuten daran arbeiten kann, und dann eine Stunde warten bis es geladen ist. So etwas ist in keinster Weise akzeptabel, also wird das Ding geöffnet, an die Akkukontakte ein bisschen Draht angelötet und das ganze von außen mit 4,1V aus einem Labornetzteil Versorgt, damit kann man zumindest ungestört arbeiten.
Die Telnet Verbindung ist einfach, das Gerät selber hat die IP 192.168.2.1 und lauscht auf port 23. Das eigentliche Script welches den den AP bei Start konfiguriert liegt unter /bin/bcm_wifi_config_parsing.sh, hier wird weder hostapd noch wpa_supplicant verwendet, sondern eine eigene binary (bcmwl) die über das script aufgerufen alles erledigt. Diese ist ebenfalls in der Lage den AP mit WPA2 zu verschlüsseln oder auch als Client in ein solches Netzwerk zu verbinden. (Disclaimer: Man sollte beachten das ein verändern des scripts das WLAN unbrauchbar machen kann, wodurch man nicht mehr per telnet auf die Drone verbinden kann um es Rückgängig zu machen! Deswegen sollte man zum ausprobieren einfach ein anderes script bauen welches man manuell aufruft, dann kann man das WLAN immer durch einen Neustart zurücksetzen. Aber jeder der in der Lage ist das script zu bearbeiten sollte das wissen?)
Die einfachste Lösung besteht nun darin, nach der Konfiguration des unverschlüsselten AP einfach das ganze neu zu konfigurieren. Dazu einfach die folgenden Zeilen am Ende der Datei /bin/bcm_wifi_config_parsing.sh einfügen. Diese Einstellungen erzeugen einen WPA2 Verschlüsselten AP „JumpingWPACookie“ mit „1234isnotasafepassword“ als PSK. Alle Funktionen zu der binary sind in der Hilfe dazu zu finden.
bcmwl down
bcmwl ap 1
bcmwl auth 0
bcmwl wsec 4
bcmwl sup_wpa 1
bcmwl wpa_auth WPA2-PSK
bcmwl set_pmk 1234isnotasafepassword
bcmwl ssid JumpingWPACookie
bcmwl up
Nach dem System(neu)start wird nun ein unverschlüsseltes Netzwerk erstellt welches kurz danach in ein verschlüsseltes verwandelt wird. Wenn man ein wenig Motivation hat kann man das Script weiter anpassen und die Erstellung des unverschlüsselten APs direkt ersetzen, und vielleicht sogar Einstellungen aus einer konfigdatei lesen.
Da ich im Internetz keine Anleitung zu bcmwl gefunden hab, gibt es im Anhang die Anleitung sowie, für alle die es interessiert, das Originale bcm_wifi_config_parsing.sh script -> jumping-sumo.zip.