Fonera
Adrian Dabrowski hat auf der Funkfeuer Convention am 24.11.2006 einen Vortrag über Hardware Hacking gehalten, in dem es auch um die Fonera ging. Die Folien kann man hier downloaden:
Inhaltsverzeichnis
About
Die Fonera ist ein Wlan Router, der von http://www.fon.com verwendet wird, um mit dem Internetzugang anderer Leute Geld zu verdienen.
Die Fonera kostet $/ 29,95 und ist damit eigendlich recht günstig.
es gibt schon einige Möglichkeiten die Fonera Firmware zu ändern,
zum Beispiel einfach das bestehende Betriebsystem verändern,
es gibt jedoch auch schon Lösungen die ein komplett neues Betriebssystem aufspielen.
Es wird wohl nicht mehr lange dauern, bis fertige Software zur Verfügung steht, wie es bei den Linksysen bekannt ist, die Frage ist, ob FON nicht einiges dagegen unternehmen wird, z.b Änderung der Hardware.
Wichtig ist deshalb, dass man eine neue Fonera nicht erst ins Internet lässt, sondern gleich "bearbeitet"
Nachteile
- die Fonera ist eigendlich nicht dazu gedacht, dass man damit herumspielt, deshalb kommt man nur über Tricks hinein
- die Fonera hat ein extrem langsames Flash, das booten dauert länger als das Flashen bei einem WRT54GL ;-)
- die Pakete die es momentan gibt, sind fast alle experimentell, deshalb gibt es noch keine Webinterfaces etc. (es wird daran aber schon sehr intensiv gearbeit)
Systemeigenschaften im Originalzustand
Software
- Linux 2.4.36
- 2 WIFI Netze
- Privat, WPA, Lokales LAN + Internet
- Public, Captive Portal, nur Internet
- Captive Portal: Chilli
- Phoning Home
Hardware
- MIPS CPU
- Router600mA @ 5V (3W)
- Atheros Chipset -> Linux MADWIFI
- PSMA Antenne, 2,2dbi
- Atheros -90/-93dbm.
zum Vergleich: Linksys -65dBm@54Mbps, -80dBm@11Mbps
- 8 MB Serial Flash / 16 MB Flash
- Low Cost
Hacking
es gibt 2 wesentliche Methoden, wie man in die Fonera kommt, das Ziel ist aber immer das Gleiche:
eine Console mit root-Rechten zu erhalten
Es ist nützlich, sich zuerst die Methoden anzusehen, und dann eine auszuwählen.
Übersicht
FON hat in die Fonera einiges an Software hineingepackt, die "nach Hause telefoniert", um Updates einzuspielen, und als Heartbeat, das gilt es erst mal zu deaktivieren, FON könnte ja Updates einspielen.
Serielle Console
die Fonera hat im Inneren eine Stiftleiste, auf der eine Serielle Konsole mit 3,3V pegel liegt.
- VCC (3.3V) red
- GND blue
- RX white
- TX orange
Aufgrund der 3,3V kann man die Fonera nicht direkt an einen PC anstecken, man braucht dazu erst einen Level Shifter.
Geeignet ist der MAX3232
Schaltbild:
und nun starten wir auf dem PC/Laptop etc einen seriellen Konsolenclient mit den Einstellungen:
Speed 9600,n,8,1
- Windows:
Start>Programme>Zubehoer>Kommunikation>HyperTerminal und dann eine neue Verbindung mit den obigen Einstellungen
- Linux:
picocom -b 9600 /dev/ttyUSB0
gilt bei USB-RS232 Kabel. Gegebenenfalls /dev/ttyS0 ... bei seriellem Kabel.
Jetzt, wo wir Shell Zugriff haben, was machen wir nun?
SSH Server
als Erstes starten wir den SSH Server
/etc/init.d/dropbear start
Autostart für SSH Server einrichten
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
Firewall
nun editieren wir die Firewall:
vi /etc/firewall.user
mit i in den Insert-Mode gehen
die # vor den folgenden Zeilen wegnehmen:
iptables -t nat -A prerouting_rule -i $WAN -p tcpdport 22 -j ACCEPT iptables -A input_rule -i $WAN -p tcpdport 22 -j ACCEPT
ESC drücken, :wq eingeben und ENTER zum Speichern und den Editor zu verlassen
nun machen wir die Änderungen an der Firewall Aktiv:
/etc/firewall.user
nach Hause telefonieren Teil 1
Die Updatefunktion muss natürlich ausgeschaltet werden
hier editieren wir das Shell-Script, das das erledigt
vi /bin/thinclient
und machen bei der letzten Zeile ein # davor
# . /tmp/.thinclient.sh
nach Hause telefonieren Teil 2
unser editiertes Shellscript wird jede Stunde aufgerufen, unser Edit hilft aber nur, das eigendliche Script, was der Server schickt zu deaktivieren.
wer sehen will, was FON mit der Fonera anstellen wollte, kann das was jetzt kommt gerne weglassen, ich persöhnlich hasse allerdings Spionage.
also editieren wir den cronjob:
in der Datei /etc/crontabs/root ist original folgendes eingetragen:
0 * * * * /bin/thinclient cron
das editieren wir zu
#0 * * * * /bin/thinclient cron
oder löschen den Eintrag ganz hinaus
wir könnten zwar auch den crond stoppen, allerdings braucht Sven-Ola's OLSR paket einen cronjob
nach Hause telefonieren Teil 3
ja, die FON-Leute sind echt nervend ;-) es verbirgt sich noch ein kleiner heartbeat in /etc/init.d/N10conncheck
also
vi /etc/init.d/N10conncheck
und folgende Zeilen auskommentieren oder löschen:
while [ -z "$(/usr/bin/wget "http://download.fon.com/heartbeat.php" -O-)" ]; do sleep 1 done
Webinterface
ACHTUNG: habe unlängst eine weitere fonera bekommen, und versucht per Webhack reinzukommen, hat nicht mehr funktioniert. FON hat anscheinend (endlich) einen Patch dagegen aufgespielt dieser hack funktioniert somit nur mit alten Versionen, am Besten ausprobieren
hier nutzen wir einen Bug im AdminInterface
der Trick ist, dass wir hier einen Bug ausnützen. wir können nämlich in Eingabefeldern Befehle hineinschreiben, ohne dass die software das erkennt und abbricht.
bei einem marktreifen Produkt sollte sowas wirklich nicht sein!!
nahut, gehn wirs an.
dazu erstellen wir uns erst einmal 2 HTML files:
seite1.html:
<html>
<head></head><body><center>
<form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data">
<input name="username" value="$(/usr/sbin/iptables -I INPUT 1 -p tcp dport 22 -j ACCEPT)" size="68" />
<input type="submit" name="submit" value="Submit" />
</form>
</center></body></html>
seite2.html:
<html>
<head></head><body><center>
<form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data">
<input name="username" value="$(/etc/init.d/dropbear)" size="68" ><input type="submit" name="submit" value="Submit" />
</form>
</center></body></html>
nun stellen wir die LAN-Verbindung des PC/Laptops ein:
IP: 169.254.255.2 Subnet mask: 255.255.255.0
nun kann es losgehen:
Seite 1 aufrufen und auf Submit drücken.
am FON router einloggen
Default Login: username: admin passwort: admin
nun sieht man wahrscheinlich HTML quelltext im browser, auch das permission denied ganz oben ist normal.
nun Seite2 aufrufen und auf Submit drücken.
wenn nun alles geklappt hat kann man mit putty auf 169.254.255.1 connecten. dort als root und mit dem Passwort einloggen.
nun kommt im Grunde fast das Selbe wie bei Serieller Verbindung, nur dass wir einiges eben gerade eh schon gestartet haben.
SSH Server
Autostart für SSH Server einrichten
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
Firewall
nun editieren wir die Firewall:
vi /etc/firewall.user
mit i in den Insert-Mode gehen
die # vor den folgenden Zeilen wegnehmen:
iptables -t nat -A prerouting_rule -i $WAN -p tcpdport 22 -j ACCEPT iptables -A input_rule -i $WAN -p tcpdport 22 -j ACCEPT
ESC drücken, :wq eingeben und ENTER zum Speichern und den Editor zu verlassen
nun machen wir die Änderungen an der Firewall Aktiv:
/etc/firewall.user
nach Hause telefonieren Teil 1
Die Updatefunktion muss natürlich ausgeschaltet werden
hier editieren wir das Shell-Script, das das erledigt
vi /bin/thinclient
und machen bei der letzten Zeile ein # davor
# . /tmp/.thinclient.sh
nach Hause telefonieren Teil 2
unser editiertes Shellscript wird jede Stunde aufgerufen, unser Edit hilft aber nur, das eigendliche Script, was der Server schickt zu deaktivieren.
wer sehen will, was FON mit der Fonera anstellen wollte, kann das was jetzt kommt gerne weglassen, ich persöhnlich hasse allerdings Spionage.
also editieren wir den cronjob:
in der Datei /etc/crontabs/root ist original folgendes eingetragen:
0 * * * * /bin/thinclient cron
das editieren wir zu
#0 * * * * /bin/thinclient cron
oder löschen den Eintrag ganz hinaus
wir könnten zwar auch den crond stoppen, allerdings braucht Sven-Ola's OLSR paket einen cronjob
nach Hause telefonieren Teil 3
ja, die FON-Leute sind echt nervend ;-) es verbirgt sich noch ein kleiner heartbeat in /etc/init.d/N10conncheck
also
vi /etc/init.d/N10conncheck
und folgende Zeilen auskommentieren oder löschen:
while [ -z "$(/usr/bin/wget "http://download.fon.com/heartbeat.php" -O-)" ]; do sleep 1 done
Links
http://jauzsi.hu/2006/10/13/inside-of-the-fonera
http://wiki.freifunk-hannover.de/Fonera_mit_OLSR - FreiFunk Hannover WIKI
http://www.mariomix.net/mariomix-blog/2006/11/hacking-la-fonera-parte-3/ - Hacking Part 3
http://www.notmart.org/index.php/BlaBla/Hacking_la_fonera..._part_III - noch eine Anleitung Hacking Part 3, englisch
http://bingobommel.blogspot.com/ - Hacking Part 2
http://olsrexperiment.de/sven-ola/fonera/ - Sven-Ola's Pakete, OLSR
http://fon.rogue.be/lafonera-0.7.0-rev4/
http://fon.rogue.be/lafonera-experimental/
http://www.art-xtreme.com/blog/20061017/activar-ssh-en-la-fonera/ - Serieller Hack
http://www.easy2design.de/bla/?page_id=98 - Wenn der Fonera die KernelPanic-Krankheit hat: Debricking and more :)