bk99.de entertain the web since 1997

La Fonera: Ein geschenkter Router, ein Hochkomma und der Weg zu SSH

Zusammenfassung

Im Februar 2007 stand eine La Fonera auf meinem Schreibtisch, der kleine WLAN-Router der Community Fon, und ich wollte darauf SSH-Zugang haben. Fon hatte das Gerät abgeschottet: Die Einstellungen kamen per SSH von einem Fon-Server, und nur signierte Firmware ließ sich aufspielen. Dieser Beitrag aus meinem alten Blog erklärt, wie Bastler das Gerät trotzdem öffneten, warum ein einzelnes Hochkomma dafür reichte und was man daraus über Shell-Code lernen kann.

Die Notiz von 2007

Viel stand nicht in meinem alten Blog. Unter der Überschrift „Nicest router in the blog ;-)“ und dem Untertitel „Den Fon mit ssh Zugriff ausrüsten“ verwies ich auf drei Seiten, auf denen die Arbeit schon gemacht war, und schloss mit dem Satz: „Bleibt nur eins zu sagen, wieder mal ein Sahnestück neue Hardware in meinem Zimmer.“ Dieser Beitrag holt nach, was hinter den Links steckte. Erhalten ist im Webarchiv nur die Seite von Stefan Tomanek; die beiden Blogs bingobommel.blogspot.com und blog.blase16.de hat es nicht gespeichert.

Was die Fonera war

Fon war eine Community, deren Mitglieder einen Teil ihres heimischen WLANs mit anderen teilten und dafür unterwegs die Zugänge der anderen nutzen durften. Die La Fonera war der Router dazu: Fon verschenkte ihn unter der Bedingung, dass man ihn anschloss und andere mitsurfen ließ. Er spannte zwei Netze auf, ein öffentliches mit dem Präfix FON_ und ein privates, mit WPA geschütztes für den eigenen Haushalt.

Technisch war das Modell FON2100 ein kleiner MIPS-Rechner: ein Atheros AR2315 mit 183 MHz, 16 MiB Arbeitsspeicher, 8 MiB Flash, WLAN nach 802.11b/g und ein einziger Netzwerkanschluss. Als Bootloader diente RedBoot, die Firmware war ein Ableger von OpenWrt. Für Bastler war das ein ideales Spielzeug, wenn man denn hineinkam.

Abgeschottet per Fernsteuerung

Fon hatte die Fonera bewusst verschlossen. Die Einstellungen wie Netzname oder WPA-Passwort machte man nicht am Gerät, sondern auf der Fon-Webseite. Beim Start und danach regelmäßig baute die Fonera eine SSH-Verbindung zu download.fon.com auf Port 1937 auf, meldete ihre MAC-Adressen und Firmwareversion und bekam als Antwort Shell-Befehle, die das Skript /bin/thinclient anschließend ausführte. Neue Firmware ließ sich nur aufspielen, wenn sie von Fon signiert war.

Das war mit der GPLv2 vereinbar: Fon veröffentlichte den Quelltext, musste aber nicht den Schlüssel herausgeben, mit dem sich eigene Firmware auf dem Gerät starten ließ. Genau solche Geräte waren damals ein Thema der Debatte um die GPLv3, die unter dem Stichwort Tivoisierung gegen solche Sperren vorging.

Ein Hochkomma öffnet das Gerät

Stefan Tomanek und Michael Kebe fanden den Weg hinein über den eigenen Netznamen. Fon baute aus dem Namen, den man auf der Webseite eintrug, eine Zeile Shell-Code, setzte ihn in einfache Hochkommas und ersetzte zur Sicherheit jedes Hochkomma im Namen durch \'. Auf dem Router entstand daraus zum Beispiel:

iwconfig ath0 essid FON_'YOURPUBLICESSID'

Der Schutz war wirkungslos, denn innerhalb einfacher Hochkommas kennt die Shell keinen Backslash als Fluchtzeichen. Die Handbuchseite der bash sagt es ausdrücklich: Ein einfaches Hochkomma kann zwischen einfachen Hochkommas nicht vorkommen, auch nicht mit Backslash davor. Ein Hochkomma im Netznamen beendete also die Zeichenkette, und alles nach einem Zeilenumbruch war ein neuer Befehl. Ausprobieren lässt sich das in jeder Shell:

$ echo 'foo\'bar'
>

Die Shell wartet auf ein weiteres Hochkomma, weil die Zeichenkette nach foo\ schon zu Ende war. Weil das Webformular solche Zeichen per JavaScript abwies, schickten die beiden den Namen mit dem Perl-Modul WWW::Mechanize. Ihr Skript shellfon.pl trug einen Netznamen ein, der die Firewall für Port 22 öffnete und den SSH-Server dropbear startete. Nach einem Neustart holte sich die Fonera ihre Einstellungen und führte damit die eigenen Befehle aus.

echo -e '/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT\n/etc/init.d/dropbear' | perl shellfon.pl email passwort

Katz und Maus mit Fon

Fon schloss die Lücke am 8. November 2006. Die beiden hatten vorgesorgt und Wege über die lokale Weboberfläche gesucht. Mit grammofon.pl ließ sich die Auslieferungsfirmware 0.7.0-4 öffnen: Gerät direkt an den Rechner anschließen, es meldete sich ohne Netz unter der Link-Local-Adresse 169.254.255.1, das Passwort war admin. Weil das ausgenutzte Formularfeld kurz war, setzte das Skript die Befehle in Stücken auf dem Router zusammen.

Sobald die Fonera ins Internet kam, aktualisierte sie sich auf 0.7.1-1, und grammofon funktionierte nicht mehr. Auch die neue Version hatte eine Lücke, die fondue.pl nutzte. Mit 0.7.1-2 am 3. Januar 2007 war auch sie zu, ein Nachfolger namens kolofonium war angekündigt. Das war ungefähr der Stand, als meine Fonera ankam. Welchen Weg ich am Ende genommen habe, ist in meiner Notiz nicht festgehalten.

Später setzte sich ein anderer Weg durch: über den Bootloader RedBoot, mit oder ohne serielle Konsole, und ein vollständiges OpenWrt statt der Fon-Firmware. Für die Installation gab es mit fon-flash sogar ein eigenes Werkzeug.

Was man daraus lernen kann

Die Fonera-Lücke ist ein Lehrstück über Shell-Code aus fremden Eingaben, und sie ist nicht gealtert. Wer Werte in einfache Hochkommas setzen muss, ersetzt jedes Hochkomma durch die Folge '\'', also Zeichenkette beenden, ein maskiertes Hochkomma, neue Zeichenkette beginnen. In der bash erledigt printf %q das zuverlässig. Besser ist es, gar keinen Shell-Code zusammenzubauen und Werte als Argumente oder über Konfigurationsdateien zu übergeben.

Bemerkenswert ist auch das Grundprinzip: Ein Gerät im eigenen Netz, das regelmäßig Befehle von einem Herstellerserver holt und ungeprüft ausführt. Stefan Tomanek empfahl damals, die Zeile mit . /tmp/.thinclient.sh auszukommentieren und die empfangenen Skripte zu sammeln, um zu sehen, was Fon schickt. Heute heißt dasselbe Prinzip Cloud-Verwaltung und steckt in vielen Routern, Kameras und Steckdosen. Mein Weg damals wie heute: Geräte, die es erlauben, mit OpenWrt betreiben, so wie meine Access Points und mein NAS.

Zahlen im Überblick

  • Die Notiz „Nicest router in the blog“ stand in meinem alten Plone-Blog, zuletzt geändert am 4. Februar 2007.
  • Die La Fonera FON2100 hatte einen Atheros AR2315 mit 183 MHz, 16 MiB RAM und 8 MiB Flash.
  • Die Fonera holte ihre Konfiguration per SSH über Port 1937 von download.fon.com.
  • Fon schloss die erste Lücke am 8. November 2006, die Firmware 0.7.1-2 vom 3. Januar 2007 die Lücke für fondue.pl.
  • In der bash beendet ein einfaches Hochkomma eine Zeichenkette in einfachen Hochkommas, auch mit Backslash davor.

Referenzen

Bemerkungen

  • Der Beitrag beruht auf meiner kurzen Notiz und vor allem auf der Archivfassung der Seite von Stefan Tomanek vom Januar 2007; die Angaben zur Hardware stammen aus der archivierten Geräteseite im OpenWrt-Wiki.
  • Fotos aus meiner damaligen Galerie hat das Webarchiv nicht gespeichert.

Originalnotiz im Webarchiv