Fonera

Aus FunkFeuer Wiki
Wechseln zu: Navigation, Suche

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:

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)
  • 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 Konsole mit root-Rechten zu erhalten

Es ist nützlich, sich zuerst die Methoden anzusehen, und dann eine auszuwählen.

beide haben Vor- und Nachteile.

Ü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

Vorteile:

  • dieser Hack wird wohl immer funktionieren, da er über die Hardware der Fonera geht

Nachteile:

  • man muss sich erst eine Schaltung bauen bzw. von jemandem der bereits eine hat ausborgen.

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

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

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

Webinterface

Vorteile:

  • der Hack kommt ohne Zugriff auf die Hardware aus.

Nachteile:

  • Fon kann und wird bei neuen Patches die Sicherheitslöcher immer wieder zustopfen, also weis man nicht ob das mit neuen Foneras funktionieren wird.

getestet mit 0.7.0 r4

ACHTUNG: ich habe unlängst den Hack mit Version 0.7.1 r1 durchzuführen, hat nicht mehr funktioniert.
FON hat anscheinend (endlich, je nachdem wie man es sieht ^^) 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)
Bei höheren Firmware-Versionen den Fonera Hard Reset probieren

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


das Script startet sich ausserdem noch beim Systemstart,

also /etc/init.d/N40thinclient in z.b /etc/init.d/noN40thinclient umbenennen

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 Firmware Version 0.7.0 r4 und 0.7.1 r1
geht nicht mehr mit 0.7.1 r2 -> downgrade auf Firmware Version 0.7.0 r4 mittels Fonera Hard Reset

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 (Public WLAN), 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 eine 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 beim Booten 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.

Über den Ethernet-Port der Fonera ins Netz - Dirty Hack

/etc/firewall.user

 iptables -t nat -I PREROUTING -s 192.168.0.2 -j ACCEPT     
 iptables -t nat -I POSTROUTING -s 192.168.0.2 -j MASQUERADE
 iptables -I INPUT -s 192.168.0.2 -j ACCEPT
 iptables -I FORWARD -s 192.168.0.2 -j ACCEPT

/etc/config/fon

 #config network lan
 #       option  mode    static
 #       option  ipaddr  192.168.10.1
 #       option  netmask 255.255.255.0
 #       option  dhcp    1
 
 
 config network wan
       option mode     'static'
       option ipaddr   '192.168.0.1'
       option netmask  '255.255.255.0'
 #     option gateway  '192.168.0.1'
       option dns      '193.238.157.16'

Client Konfiguration

 IP: 192.168.0.2
 Netmask: 255.255.255.0
 Gateway: 192.168.0.1
 DNS: 193.238.157.16

Voilá!

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

http://www.dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing#Flashing - Fonera auf DD-WRT flashen (expert section)