Fonera

Aus FunkFeuer Wiki
Wechseln zu: Navigation, Suche

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:

http://convention.funkfeuer.at/wp-content/uploads/funkfeuer-convention-hardware-hacking-adrian-dabrowski.pdf

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.

Bild:Fonera_serial.jpg

  • 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:

Bild:Serial-max3232.gif

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:
hab ich noch ned probiert, weis jemand wie das geht? (bin ich mir sicher *g)

Jetzt, wo wir Stell 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 tcp—dport 22 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp—dport 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

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

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 tcp—dport 22 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp—dport 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/

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 :)