}w!"#$%&'()+,-./012345<ya MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Nástroj pro obnovu firmware ve WiFi routerech ASUS BAKALÁŘSKÁ PRÁCE Jakub Vavřík Brno, jaro 2007
Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: Mgr. Václav Lorenc ii
Shrnutí Práce se zaobírá problematikou firmware a jeho obnovy, zejména ve wifi routerech značky Asus. Pokrývá i mnohé další routery, ačkoliv to nebylo původně zamýšleno. Shrnuje současné dostupné nástroje a postupy při obnově a nastiňuje možná budoucí řešení. Zaobírá se vývojem a technickými detaily TFTP protokolu, který je základem principu obnovy firmware. Popisuje nově vzniklý nástroj a obnovu firmware. Rozebírá také vývojový proces tohoto nástroje a nastiňuje možná budoucí rozšíření funkcionality nástroje. V závěru zmiňuje některé firmware, použitelné pro obnovu, včetně několika opensource variant, značně rozšiřujících funkcionalitu zařízení. iii
Klíčová slova Asus wifi router, Firmware Restoration, TFTP, gfrt - graphical firmware restore tool, OpenWRT, Oleg s firmware iv
Obsah 1 Firmware a jeho obnova.................................. 1 1.1 Úvod.......................................... 1 1.2 Firmware........................................ 1 1.3 Wifi routery Asus a obnova firmware....................... 2 1.4 Stávající nástroje.................................... 3 2 TFTP protokol........................................ 6 2.1 Vývoj TFTP protokolu................................ 6 2.1.1 IEN 133.................................... 6 2.1.2 RFC 783 - THE TFTP PROTOCOL (REVISION 2)............. 8 2.1.3 RFC 1350 - THE TFTP PROTOCOL (REVISION 2)............ 9 2.1.4 RFC 1782 - TFTP Option Extension..................... 9 2.1.5 RFC 1783 - TFTP Blocksize Option..................... 10 2.1.6 RFC 1784 - TFTP Timeout Interval and Transfer Size Options...... 10 2.2 Princip přenosu dat TFTP protokolem....................... 10 2.2.1 Odeslání souboru na TFTP server..................... 11 2.2.2 Přijetí souboru z TFTP serveru....................... 11 3 gfrt - graphical firmware restore tool......................... 12 3.1 Požadavky na systém................................. 12 3.2 Implementace gfrtu................................. 13 3.2.1 Volba grafické knihovny........................... 14 3.2.2 Vývoj GUI................................... 15 3.2.3 Lokalizace................................... 15 3.2.4 Vývoj za použití Xtreme programming.................. 16 3.3 Možnosti rozšíření funkcionality.......................... 17 3.4 Postup při nahrávání firmware........................... 17 3.5 Web projektu...................................... 18 4 Dostupné firmware a OpenSource alternativy..................... 19 4.1 Oficiální firmware................................... 19 4.2 OpenSource alternativy............................... 19 4.2.1 Projekt OpenWrt............................... 20 4.2.2 Projekt Oleg s custom firmware....................... 20 4.3 Závěr.......................................... 21 Literatura............................................. 22 Rejstřík.............................................. 23 A schéma JTAG kabelu.................................... 24 v
Kapitola 1 Firmware a jeho obnova 1.1 Úvod Práce pojednává o problematice obnovy firmware v routerech značky Asus. V první kapitole obecně rozebírá problematiku obnovy firmware a vývojem firmware jako takového a zaobírá se podrobněji možnostmi obnovy firmware v routerech. Je zde zmíněn zajímavý projekt MN700 hack projekt, využívající firmware těchto routerů, poukazující na možnost přehrání opensource firmwarem i zařízení, jež původně na linuxovém firmware vůbec neběží. Dále jsou popsány stávající nástroje, jež jsou pro tento účel dostupné, spolu s jejich přednostmi a nedostatky. Druhá kapitola popisuje potřebu prozkoumání vlastností tftp protokolu a protokol samotný, včetně jeho vývoje za dobu jeho existence. Dále kapitola popisuje princip přenosu souborů tímto protokolem a objasňuje některé termíny, jež jsou využity dále v textu. Třetí kapitola práce se zaobírá nově vytvořeným nástrojem gfrt, jenž si klade za cíl poskytnout komfort výrobcem dodávaných utilit také uživatelům jiných platforem, než je výrobcem podporovaný windows. Popisuje požadavky pro spuštění, implementační detaily a výhledy možného rozšíření funkcionality do budoucna. Dále se zaobírá vývojovým procesem a rozebírá vývoj grafického rozhraní. Popisuje také možné postupy a důvody volby jednotlivých možností. Ve čtvrté kapitole se seznámíme s dostupnou sadou firmware pro routery, včetně jejich výhod a nevýhod, ale také jejich open source alternativ, jež mnohdy přinášejí i novou funkcionalitu. Dále je popsána webová stránka, jež v rámci vývoje vznikla. 1.2 Firmware Firmware je termín užívaný pro mikro programy uvnitř programovatelných čipů. Jedná se většinou bud to přímo o instrukce procesoru, nebo o konfigurační nastavení zařízení, případně jednodušší logiku zařízení. Původně se v zařízeních ukládal v ROM (read-only memory) čipech, ale se zvyšující se potřebou jeho přehrávání novější verzí a hlavně z důvodů úspory nákladů výrobců zařízení, se postupně přešlo k užívání EPROM (erasable programmable read-only memory) pamětem, později k EEPROM (electrically erasable pro- 1
1.3. WIFI ROUTERY ASUS A OBNOVA FIRMWARE grammable read-only memory) a dnes i FLASH 1 pamětem a SRAM (static random access memory) pamětem[1]. Dnes je již běžný uživatel počítače schopen, pomocí výrobcem dodaného specializovaného software, nahrát do zařízení nový firmware sám, během několika minut, avšak stále existují zařízení, u kterých se nelze obejít bez specializovaného hardware, určeného k nahrání firmware. Nejznámějším firmware, se kterým se s největší pravděpodobností setkal každý uživatel osobního počítače, aniž by si toho byl vědom, je BIOS (Basic Input/Output System). 1.3 Wifi routery Asus a obnova firmware Stejně jako jiná zařízení, i wifi routery firmy Asus obsahují firmware. Ten jako každý software obsahuje chyby, a tak není divu, že je potřeba čas od času firmware přehrát. Přehrání firmware se firmy svým zákazníkům snaží natolik zpřístupnit, že součástí většiny rozhraní pro správu a nastavení zařízení 2 je dnes jednoduchý nástroj pro nahrání novější verze firmware. Ovládání nástroje je jednoduché a zvládne s ním pracovat i méně zkušený uživatel, avšak cenou za tuto jednoduchost je omezená funkcionalita nástroje. Pokazí-li se cokoliv během nahrávání, je třeba použít specializovaných nástrojů pro následnou obnovu zařízení do funkčního stavu. Dalším nebezpečím, při této operaci, je samotný firmware. Ze zkušenosti vyplývá, že novější firmware nemusí přinést pouze zlepšení, jelikož ne všechna zařízení, ačkoliv jsou technickými parametry totožná, fungují se stejnou verzí firmware stejně dobře, a tak není výjimkou, že se starším firmware jelo zařízení lépe. Proto je potřeba si upgrade firmware dobře rozmyslet a hlavně vědět co dělám. Špatným nahráním firmware se může zařízení zničit a bez odborných znalostí a k obnově nutných technických prostředků je nemožné ho zachránit. Celé riziko je navíc navýšeno možností výpadku proudu během operace, jež automaticky znamená neúspěch. V takovém případě je třeba pokusit se o obnovu například pomocí nástroje dodávaného firmou Asus, jenž je založen na tftp protokolu, bohužel je však dostupný pouze pro platformu Windows. Předpokladem pro použití tohoto nástroje je, že stále funguje tftp server uvnitř zařízení, který lze také poškodit, ovšem jen ve výjimečných případech. Je-li i tento poškozen, pak nastupuje fyzický zásah do hardware a firmware se obnovuje přehráním přímo do čipu, respektive obnovením funkčnosti tftp serveru a nahráním pomocí výrobcem dodávaných nástrojů. Vetšina routerů pro domácí použití obsahuje řídící jednotku od firmy Broadcom a ta umožňuje například použití JTAG kabelu pro připojení čipu k počítači. JTAG kabel je k počítači připojen paralelním portem a propojuje některé z pinů paralelního portu k pinům čipu v routeru, případně k JTAG přípojce, kterou jsou některé modely vybaveny. Délka JTAG kabelu se doporučuje co nejkratší, jelikož při větší délce dochází během přenosu ke ztrátě dat a prodloužení doby nahrávání, která je už tak poměrně dlouhá a většinou se nahrávání nezdaří na první pokus. Tato metoda ovšem vyžaduje pokročilejší znalosti zejména v oblasti 1. zvláštní druh EEPROM paměti, která se může mazat pouze po blocích nebo celá pamět najednou, nevýhodou je degradace čipu, který se neustálým přehráváním ničí 2. jedna ze služeb poskytovaných firmware 2
1.4. STÁVAJÍCÍ NÁSTROJE elektrotechniky, JTAG rozhraní totiž nebylo původně k nahrávání programů, ale k testování a debuggingu[4], a také si JTAG kabel budete muset vytvořit doma sami, jelikož je k nesehnání. Vytvořit jeho nebufferovanou verzi není tak těžké, viz schéma příloha A.1. Čip broadcom a čipy s ním kompatibilní používá ve svých zařízeních i firma LinkSys a u routerů této firmy fungují téměř stejné postupy obnovy firmware. Zajímavostí v této oblasti je Microsoft MN700 hack projekt. Jedná se o projekt poskytující technické informace pro softwarovou konverzi Microsoft routeru MN700 na Asus router. Router MN700 je vybaven také Broadcom čipem a projekt poskytuje návod, jak přehrát pomocí JTAG kabelu firmware, původně obsahující WinCE 3 firmwarem od Asusu, případně jeho OpenSource variantami, respektive zprovoznit touto cestou tftp server v zařízení umožňující použít Asus utility pro obnovu firmware a nový firmware jím nahrát. Toto zařízení poskytuje velmi dobrý výkon co se týče kvality signálu, avšak firmware za moc nestojí, zejména kvůli poměrně velké nestabilitě zařízení při větší zátěži, a tak se autoři snaží spojit to dobré z obou firem v jeden produkt. Pokusy s touto modifikací jsou bezpečné, jelikož celý stávající firmware lze JTAG kabelem zazálohovat a případně obnovit[5]. Takto modifikovaný router funguje naprosto bezvadně a mnohem stabilněji, než s původním WinCE, navíc rozšiřuje stávající funkcionalitu zařízení. V rámci technických informací lze také nalézt návod na přidání přípojky USB rozhraní k routeru, jelikož čip v zařízení ho podporuje, nemá ho pouze vyveden. 1.4 Stávající nástroje V současné době je k dispozici několik nástrojů, sloužících k nahrání nového, případně k obnovení poškozeného firmware. Nevýhodou některých je však nepřístupnost méně zkušeným uživatelům, což platí zejména pro ty k použití mimo platformu windows. MEZI DOSTUPNÉ NÁSTROJE PATŘÍ: Firmware Restoration - Nástroj dodávaný firmou Asus v rámci balíku Asus wireless router utilities, určený k obnově firmware. Tento nástroj běží pouze na platformě Windows. Firma Asus se k podpoře jiných platforem příliš nehrne, a tak jsou méně zkušení uživatelé nuceni používat právě windows. Tento nástroj je zřejmě nejpropracovanějším a nejsnadněji použitelným ze všech dostupných nástrojů. Kromě možnosti přehrání, at už nového, či poškozeného firmware nabízí také pohodlnou autodetekci připojeného routeru v režimu obnovy, čímž uživateli usnadňuje celý proces obnovy, jelikož nemusí adresu routeru odhadovat metodou pokus a omyl. V režimu obnovy má totiž router pevnou IP adresu a ta se u jednotlivých modelů může lišit. Uživatelské rozhraní je velmi minimalistické, ale plně postačující danému účelu viz obr.1.1 S pomocí tohoto nástroje lze obnovu provést velmi snadno, a tak si projekt gfrt klade za hlavní cíl nabídnout alespoň stejně komfortní nástroj pro linuxovou platformu, při 3. microsoft windows určený pro malá zařízení 3
1.4. STÁVAJÍCÍ NÁSTROJE Obrázek 1.1: Firmware Restoration v1.3.0.0 - nástroj od firmy Asus zachování všech jeho vlastností a snadnosti použití. Nejzajímavější vlastností tohoto nástroje je bezesporu právě autodetekce připojeného routeru. Nástroj detekuje pouze routery přepnuté do režimu obnovy, přesněji pouze jejich IP adresy. Není schopen rozeznat přesný typ připojeného zařízení. Pokud by toho schopen byl, umožnilo by to vývoj ještě komfortnějšího nástroje, jenž by automaticky detekoval typ zařízení, zjišt oval by nejnovější verzi firmware a nabídl by před obnovou uživateli výběr z pro zařízení dostupných verzí firmware. Má-li projekt gfrt plně nahradit Firmware Restoration 4 na linuxové platformě, musí být také schopen detekovat routery v režimu obnovy. TFTP klient - Další možností, jak obnovit firmware v routerech Asus je s použitím nějakého pro danou platformu dostupného TFTP klienta. Většina linuxových distribucí je v současnosti vybavena jednoduchým tftp klientem, případně jej lze snadno získat. Součástí Windows XP je taktéž jednoduchý TFTP klient viz obr.1.2. Tento klient ovšem nepodporuje rozšíření protokolu Options Negotiation, což však jeho nasazení nebrání, pouze celý proces omezuje na výchozí nastavení klienta. Velkou nevýhodou obnovy pomocí TFTP klienta je nutná znalost IP adresy routeru, jenž má být obnoven. Důležité je také znát princip, na základě kterého se firmware do zařízení nahrává. Ne u všech modelů totiž stačí pouze odeslat soubor s firmware pomocí TFTP protokolu. U starších modelů routerů Asus je nejprve potřeba potvrdit nastavení IP adresy požadavkem na soubor ASUSSPACELINK\x01\x01\xa8\xc0 a 4. dostupný na stránce http://dlsvr02.asus.com/pub/asus/wireless/wl-500gp/utility_1670.zip 4
1.4. STÁVAJÍCÍ NÁSTROJE Obrázek 1.2: TFTP klient - součást Windows XP poté teprve odeslat požadavek na zápis nového firmware. K použití této metody se spíše uchylují uživatelé jiných platforem než je windows, jelikož ti jinou, pohodlnější alternativu nemají. flash.sh - Jedná se o bourne shell skript dodávaný s projektem OpenWrt. Skript používá tftp klienta běžně dostupného v linuxových distribucích. Jedná se vlastně pouze o částečnou automatizaci předešlé metody. Autorem skriptu, jehož část obstarává právě routery Asus je Oleg I. Vdovikin, který má na svědomí také projekt Oleg s custom firmware. Skript je dostupný v rámci download sekce projektu OpenWrt ve složce utils. Používá se s dvěma parametry, prvním je výrobce routeru a druhým je cesta k souboru s firmware. Za výrobce se udává bud to Asus nebo LinkSys, jelikož projekt OpenWrt je s většinou produktů obou firem kompatibilní. S tímto skriptem se občas objevují problémy a nelze s jeho pomocí firmware nahrát, avšak většinou je plně funkční a dobře slouží svému účelu. To je z dostupných nástrojů vše. Obdobně pohodlný nástroj jako je Firmware Restoration na ostatních platformách nenajdeme, a proto vznikl projekt gfrt graphical Firmware Restore Tool, jenž by měl nástroj Firmware Restoration plně nahradit uživatelům linuxových platforem. 5
Kapitola 2 TFTP protokol Základem všech dostupných nástrojů na obnovu firmware ve wifi routerech Asus je TFTP protokol. Zkratka TFTP označuje Trivial File Transfer Protocol. Protože tento protokol hraje v projektu gfrt významnou úlohu, bylo třeba dobře nastudovat jeho vývoj a současné možnosti použití, jelikož jednotlivé verze protokolu se od sebe výrazně liší, nebot řada rozšíření přidala do protokolu novou funkcionalitu, jež má poměrně značný vliv na celý průběh přenosu, ačkoliv je většina rozšíření zpětně kompatibilní. Na vývoji rozšíření tohoto protokolu měli největší podíl zaměstnanci firmy Hewlett Packard, jelikož firma tento protokol hojně využívala v praxi, a protože jim jeho funkcionalita nepostačovala, přispěli k vývoji nejedním rozšířením. Protože nebylo zcela jasné, která verze protokolu je využívána pro přenos firmware do wifi routerů asus, bylo třeba odchytit celý přenos a z provozu vypozorovat druhy a obsah přenášených paketů. Z tohoto odchyceného provozu vyplynulo, že server uvnitř zařízení podporuje rozšíření Options Negotiation (viz dále v této kapitole). Jelikož toto rozšíření bylo jedním z posledních vytvořených, bylo rozhodnuto implementovat tftp protokol v jeho poslední, nejnovější podobě. Tato kapitola popisuje a vysvětluje některé zkratky a termíny, jež jsou použity v následujících kapitolách, jež předpokládají čtenářovu znalost těchto faktů a principů přenosu. 2.1 Vývoj TFTP protokolu První nástin tohoto protokolu vznikl jako IEN 133 1 v roce 1980. Autorem protokolu byl Noel Chiappa, ale podílelo se na něm svými připomínkami, jež byli zapracovány do protokolu, vícero lidí. Trivial File Transfer Protocol slouží, jak název napovídá, k jednoduchému přenosu dat po síti. Je navržen nad UDP protokolem, ale je možné ho implementovat i nad jinými protokoly. Tento protokol lze také využít pro bootstrap loading u bezdiskových stanic, kde se také hojně využívá. 2.1.1 IEN 133 IEN 133 definuje první verzi TFTP protokolu. Na rozdíl od FTP protokolu umí tato verze pouze odesílat a přijímat data. Neumí vypisovat obsah adresářů a nepodporuje autentizaci 1. Internet Experiment Note - vzniklo jich něco málo přes 200 a po zániku NCP (Network Control Program) a přechodu na TCP/IP přešli autoři IEN na RFC 6
2.1. VÝVOJ TFTP PROTOKOLU uživatelů, ani vyjednávání nastavení jako je timeout. Podporuje tři režimy přenosu: netascii - modifikace běžného ascii (USA Standard Code for Information Interchange) upravená specifikací Telnet protokolu, jedná se o 8bitové ascii binary - přímo data po osmicích bytů mail - netascii posílané uživateli namísto souboru Veškeré pakety jsou zabaleny do ostatních hlaviček v pořadí Lokální medium, Internet protokol, Datagram, TFTP hlavička. Velikost bloku je definována na 512 bytů. Protokol obsahuje 5 druhů paketů, které se rozlišují obsahem a hlavně 2 bytovým příznakem opcode na začátku tftp paketu. Jsou to následující příznaky: 01 RRQ - read request packet příznak, následovaný jménem souboru, jedním nulovým bytem, režimem přenosu a ukončen jedním nulovým bytem viz obr.2.1 02 WRQ - write request packet příznak, následovaný jménem souboru, jedním nulovým bytem, režimem přenosu a ukončen jedním nulovým bytem viz obr.2.1 03 DATA - data packet příznak, následovaný dvěma byty, obsahujícími číslo bloku a blokem dat o velikosti 512 bytů, je-li blok dat menší, pak je to poslední paket přenosu viz obr.2.2 04 ACK - acknowledge packet příznak, následovaný dvěma byty s číslem potvrzovaného bloku viz obr 2.3 05 ERROR - error packet příznak, následovaný dvěma byty s error code, chybovou zprávou, blíže popisující chybu, a ukončený 1 nulovým bytem viz obr.2.4[2] Obrázek 2.1: WRQ/RRQ paket Dále IEN 133 definuje následující error code příznaky určující příčinu selhání přenosu: 0 - not defined, see error message (if any) 1 - file not found 2 - access violation 7
2.1. VÝVOJ TFTP PROTOKOLU Obrázek 2.2: DATA paket Obrázek 2.3: ACK paket 3 - disc full or allocation exceeded 4 - illegal TFTP operation 5 - unknown transfer ID Obrázek 2.4: ERR paket 2.1.2 RFC 783 - THE TFTP PROTOCOL (REVISION 2) Toto RFC rozšiřuje IEN 133. Podporuje opět tři režimy přenosu, pouze režim binary byl nahrazen režimem octet. Dále definuje 2 nové error code příznaky konkrétně: 06 - file already exists 07 - no such user[11] 8
2.1.3 RFC 1350 - THE TFTP PROTOCOL (REVISION 2) 2.1. VÝVOJ TFTP PROTOKOLU Toto RFC rozšiřuje RFC 783. Jedná se o druhou revizi tohoto protokolu a přináší tři významné změny a sice zdůrazňuje možnost postavení TFTP protokolu nad jiným protokolem, než je UDP, doporučuje nepoužívat zastaralý režim přenosu mail a především standardizuje tento protokol.[7]. 2.1.4 RFC 1782 - TFTP Option Extension Toto RFC rozšiřuje RFC 1350. Přidává do protokolu podporu pro Options negotiation - vyjednávání parametrů přenosu dat, při zachování kompatibility se staršími verzemi protokolu. Tyto parametry přenosu jsou připojovány k RRQ a WRQ paketům a RFC 1782 přidává nový paket s příznakem OACK - potvrzující příjetí požadovaného parametru přenosu. Parametry se k request paketu přidávají následovně: RRQ/WRQ příznak, jméno souboru, nulový byte, režim přenosu, nulový byte, opt, nulový byte, hodnota parametru, nulový byte, kde opt je string s parametrem (např. blksize) a lze definovat v řadě za sebou několik parametrů opt najednou viz obr.2.5. Nově definovaný paket OACK má opcode příznak s číslem 06, následovaný stejnou strukturou jako se připojuje za request pakety viz obr.2.6. Požadovaná hodnota parametru nemusí být shodná s hodnotou v OACK paketu. Žádné další options, které klient nepožadoval, se zde nesmí objevit. Nepřijme-li server parametr, posílá error paket s error code 08. RFC bylo autory upřesněno v květnu 1998 v RFC 2347, kde byl zdůrazněn požadavek na request pakety, jejichž délka s připojenými options nesmí přesáhnout 512 byte a vznikl návrh na standard[8]. Obrázek 2.5: OPT REQUEST paket dle RFC 1782 Obrázek 2.6: OACK paket dle RFC 1782 9
2.1.5 RFC 1783 - TFTP Blocksize Option 2.2. PRINCIP PŘENOSU DAT TFTP PROTOKOLEM Toto RFC rozšiřuje RFC 1350. Přidává do protokolu podporu nastavení velikosti bloku na větší hodnotu než doposud používanou 512 bytů. Toto nastavení se připojuje za request pakety následovně: RRQ/WRQ příznak, jméno souboru, nulový byte, režim přenosu, nulový byte, blksize (case insensitive string), nulový byte, hodnota požadované velikosti bloku, nulový byte. Pokud server nastavení přijme, posílá OACK paket s hodnotou stejnou, nebo menší než si vyžádal klient. Nepřijme-li, pak posílá error paket s error code 08. Poslední paket přenosu je data paket, jehož data část je menší než smluvená velikost bloku. Testovaní prováděné autory rozšíření prokázalo poměrně velký nárůst výkonu při zvětšení velikosti bloku, jelikož se zmenšil počet paketů, nutných k přenosu a zmenšila tedy zátěž potvrzováním paketů, velikost bloku ovšem nesmí přesáhnout MTU - v tom případě by režie provozu na vyrovnání se s fragmentací opět provoz zpomalila. Z tohoto RFC vznikl v květnu 1998 návrh na standard RFC 2348[9]. 2.1.6 RFC 1784 - TFTP Timeout Interval and Transfer Size Options Toto RFC rozšiřuje RFC 1350. Přidává do protokolu podporu nastavení timeout při přenosu a přidává přijímající straně možnost zjistit celkovou velikost souboru, již před začátkem přenosu. Požadovaný timeout se připojuje za request pakety následovně: RRQ/WRQ příznak, jméno souboru, nulový byte, režim přenosu, nulový byte, timeout (case-insensitive string), nulový byte, hodnota požadovaného timeout, nulový byte. Pokud server nastavení přijímá posílá OACK paket s hodnotou, která musí být stejná jako hodnota požadovaná. Požadavek na celkovou velikost se připojuje za request pakety následovně: RRQ/WRQ příznak, jméno souboru, nulový byte, režim přenosu, nulový byte, tsize (case-insensitive string), nulový byte, velikost přenášeného souboru, nulový byte. U RRQ paketů je velikost přenášeného souboru nula, a server vrací velikost požadovaného souboru v OACK paketu. Pokud je soubor příliš velký, může klient i server přerušit přenos paketem s error code 03. Z tohoto RFC vznikl v květnu 1998 návrh na standard RFC 2349[10]. 2.2 Princip přenosu dat TFTP protokolem Všechny přenosy TFTP protokolem začínají požadavkem na spojení. Pokud server spojení povolí, začnou se přenášet data. Každý datový paket s opcode DATA musí být potvrzen paketem s opcode ACK a číslem potvrzovaného bloku. Dojde-li ke ztrátě paketu během přenosu, dojde po timeoutu k retransmisi posledního paketu. Veškeré chyby jsou signalizovány pakety s opcode ERROR. Většina paketů s opcode ERROR způsobí ukončení přenosu a spojení, výjimku tvoří pouze chyba s nesprávným portem odesílatele, v tomto případě se paket odešle zpět. Pakety s opcode ERROR se nepotvrzují, takže dojde-li k jejich ztrátě, pak se spojení ukončí po několika timeoutech. [11]. 10
2.2.1 Odeslání souboru na TFTP server 2.2. PRINCIP PŘENOSU DAT TFTP PROTOKOLEM Pro přenos použijeme TFTP protokol s rozšířením RFC 1782. Odesílatel (A) pošle přijímající straně (B) WRQ se jménem souboru, režimem a požadovanými parametry přenosu na port 69. B má následující možnosti odpovědi 2 : OACK paketem - přijímá požadavek na zápis i parametry přenosu ACK paketem - přijímá požadavek na zápis, ale ne parametry přenosu 3 ERROR paketem - nepřijímá požadavek přenosu V případě, že je požadavek na zápis přijat, odesílá A první DATA paket s číslem 1 a čeká na potvrzení. B paket přijme a potvrzuje ACK s číslem 1. To se opakuje dokud nepřijde poslední paket přenosu, jenž přenáší menší blok dat než je velikost bloku[8]. 2.2.2 Přijetí souboru z TFTP serveru Počítač (A) pošle serveru (B) RRQ se jménem souboru, režimem a požadovanými parametry přenosu na port 69. B má následující možnosti odpovědi 4 : OACK paketem - přijímá požadavek na čtení i parametry přenosu DATA paketem - přijímá požadavek na čtení, ale ne parametry přenosu 5 ERROR paketem - nepřijímá požadavek na přenos V případě, že je požadavek pro čtení přijat, B odesílá DATA pakety, které jsou ze strany A potvrzovány ACK s příslušným číslem. To se opakuje dokud nepřijde paket s blokem dat menším než zvolená blocksize.[8]. 2. B odpovídá z jiného náhodně vybraného portu a A veškeré další pakety posílá na tento port 3. ACK paket potvrzuje v tomto případě datový blok s číslem 0 - to znamená přijetí požadavku 4. B stejně jako u přijímání souboru odpovídá z jiného náhodně vybraného portu a A veškeré ACK pakety posílá na tento port 5. tento paket rovnou obsahuje první blok požadovaných dat 11
Kapitola 3 gfrt - graphical firmware restore tool Tato aplikace vznikla jako náhražka windows verze Firmware Restoration utility, jelikož firma Asus v této oblasti linuxovou platformu nepodporuje. Hlavním cílem bylo po funkční stránce obsáhnout celou funkcionalitu této utility a vytvořit pohodlně ovladatelný grafický nástroj pro obnovu firmware na linuxové platformě, jenž by přinesl správcům linuxových strojů pohodlí poskytované windows utilitou. Při vývoji bylo třeba použít reverse engineeringu, aby se poodhalila podstata fungování autodetekce routerů a princip přenosu a automatického zresetování obnovovaného routeru. Vzhledem k tomu, že se jedná především o sít ovou komunikaci bylo učiněno několik pokusů o nahrání spojených s odchytáváním paketů pomocí běžně dostupného nástroje Wireshark 1. Během vývoje bylo zjištěno, že by nástroj mohl spolehlivě obnovovat i některé typy routerů značky LinkSys, a tak byla přidána podpora také pro tyto routery. Jsou to zejména ty typy, které jsou kompatibilní s projektem OpenWrt, o kterém bude zmíněno více v následující kapitole. Novější routery od firmy LinkSys používají k přenosu upravený tftp protokol, s rozšířenou hlavičkou paketů o string obsahující heslo. Takto je možné heslem zabránit nežádoucímu přehrání firmware. IP adresa, na kterou je v případě routeru LinkSys nový firmware odesílán, je nastavitelná v konfiguračním souboru gfrtu config.cfg. 3.1 Požadavky na systém Aplikace je poměrně nenáročná a díky volbě interpretovaného jazyka Perl, ve kterém byla napsána může běžet i na více platformách, testována však byla pouze na Linuxových distribucích Debian, Fedora a Ubuntu. Pro úspěšné spuštění a používání aplikace je třeba: Linux kompatibilní operační systém X server Gtk2 knihovnu interpreta jazyka Perl 1. Wireshark - původně známý jako projekt Ethereal slouží jako grafická obdoba programu tcpdump, dostupný na adrese http://www.wireshark.org/. Běžně dodávaná distribuce nerozezná tftp pakety definované v RFC1782, označuje je jako malfromed tftp pakety, ale je snadno rozšiřitelná, a tak lze podporu pro tyto pakety snadno doplnit. 12
3.2. IMPLEMENTACE GFRTU libglade knihovnu modul s podporou zpracování Glade souborů Gtk2::GladeXML 3.2 Implementace gfrtu Před zahájením implementace bylo třeba rozmyslet si, co bude aplikace umět a jak toho docílit. Protože dokumentace k Firmware Restoration není dostupná, bylo třeba zjistit jak vlastně nástroj pracuje. Toho šlo dosáhnout jedině odposlechem paketů při samotné činnosti aplikace. Na testovaném wifi routeru Asus wl500g premium bylo provedeno celkem trojí odposlouchávání. První, u kterého nebylo zařízení připojeno a nástroj se pokoušel o jeho detekci. Po dvanácti pokusech o detekci použitím TFTP RRQ paketu odeslaného na broadcastovou adresu, kdy zůstala aplikace bez odpovědi vypsala hlášení, že nelze nalézt žádný router v restore režimu. Následující pokus již měl zařízení připojené, avšak nebylo přepnuto do restore režimu. Nastala stejná situace s chybovým hlášením. Zařízení bylo tedy uvedeno do restore režimu a byl proveden třetí test. Ten téměř okamžitě zařízení rozeznal, z odpovědi na broadcastový požadavek rozpoznal jeho adresu a odeslal celý soubor s firmware. Jakmile přenos skončil došlo k automatickému zresetování zařízení a to již naběhlo s novým obnoveným firmware. Takto obnovený router se doporučuje ještě jednou manuálně restartovat, protože automatický restart občas neproběhne úplně v pořádku. Tento způsob detekce zařízení ovšem pouze vyplývá ze zjištěných faktů při přenosu a nemusí zcela odpovídat způsobu detekce, jaký skutečně používá nástroj pod windows. Pro případ, že by autodetekce zařízení selhala existuje možnost manuálně nastavit IP adresu, na kterou se bude firmware posílat v konfiguračním souboru config.cfg. V takovém případě je ale nutno zvolit možnost LinkSys router, nebot pouze v tomto režimu se bere na nastavenou adresu ohled. Součástí balíku Asus router utilities je totiž také aplikace s příznačným názvem device detector. Tato aplikace umožňuje rozeznat všechna Asus zařízení k počítači připojená prostřednictvím sítě. Jelikož tento nástroj detekuje zařízení včetně jeho druhu, lze předpokládat, že použivá složitějších metod detekce. Jednou z možností by mohlo být určování druhu zařízení na základě prefixu mac adresy, ale jedná se pouze o domněnku. Nyní bylo třeba rozmyslet si jazyk, v němž bude aplikace napsána. Zde se naskytly dvě možnosti. Bud to napsat celého tftp klenta a toho následně použít, či nalézt nějakou již hotovou knihovnu, jež by jeho použití umožňovala. Jelikož ve světě software platí heslo: Proč vynalézat znova kolo? byla zvolena varianta použití již existující knihovny. Po náročném hledání dostupných knihoven pro TFTP protokol, kdy se většina z nich nedala použít bezplatně či v Open Source projektu byl na výběr Perl, k němuž byl v CPAN dostupný modul s tftp klientem a jazyk Java, jenž pro tento účel není až tak vhodný, jelikož se jedná o malou aplikaci a docházelo by ke zdržení při inicializaci virtuálního stroje. Byl tedy zvolen Perl, zejména pro minimalistický zápis kódu a pro velmi snadnou práci s Gtk, jež Perl nabízí. Modul s tftp klientem bylo třeba poupravit, kvůli potřebě získání IP adresy routeru při počátečním broadcastingu, a také kvůli kontrole, zda příchozí odpověd přichází ze stejné 13
3.2. IMPLEMENTACE GFRTU adresy jako požadavek, což bylo pro detekci zařízení nežádoucí, jelikož jeho IP adresa nebyla předem známa. Odstraněním této kontroly sice došlo k omezení na sít, přes kterou se obnova firmware provádí, jelikož v dané síti nesmí být více přenosů TFTP protokolem současně, ale toto omezení bylo přijatelné vzhledem k nízké používanosti tohoto protokolu v běžné praxi a faktu, že zařízení bývá při obnově většinou propojeno sít ovým kabelem přímo s počítačem, z něhož se obnova provádí. Základ projektu tedy bylo na čem stavět, a tak vývoj započal grafickým rozhraním, jež se chtělo co nejvíce přiblížit nástroji Firmware Restoration. 3.2.1 Volba grafické knihovny Jelikož bez grafického rozhraní by aplikace jen stěží poskytovala stejné pohodlí jako její předloha na platformě windows, bylo třeba ho vyvinout. Jako první přišla na řadu volba grafické knihovny. Mezi nejznámější dostupné patří zejména knihovna GTK+, hojně užívaná v prostředí správce oken Gnome, knihovna Qt, užívaná v prostředí správce oken KDE a Widget toolkit, respektive jeho nástavby jako wxwidgets. Volbu grafické knihovny ovlivnil zejména jazyk, v němž bude aplikace napsána, ale významný podíl měla také jednoduchost použití a míra zkušeností s danou knihovnou a v neposlední řadě také její vhodnost pro daný účel. V počátcích vývoje dokonce vznikala aplikace ve více jazycích a až během vývoje bylo postupně od jednotlivých jazyků upouštěno, zejména pro pracnost zpracování, ale také pro nedostatek zkušeností s vývojem v daném jazyce. Finální verze aplikace je napsána v jazyce perl, jenž poskytoval nejkomfortnější přístup ke zpracování událostí, generovaných grafickým rozhraním, ale také pro minimalistický zápis zdrojového kódu, poskytujícího maximální funkcionalitu na několika málo řádcích. Jako grafická knihovna byla zvolena knihovna Gtk2, perlová implementace knihovny GTK+, zejména pro dobrou podporu napříč správci oken, ale také pro dobrou podporu v jazyce Perl a přehledně zpracovanou dokumentaci celé knihovny. Volba této knihovny také poskytuje možnost přenosu na jiné platformy a celý projekt se tak stává multiplatformním. Jedním z možných přístupů bylo napsat grafické rozhraní ručně přímo v jazyce perl. Tato možnost se později ukázala jako nejméně vhodná, zejména kvůli znesnadnění možnosti lokalizace, ale také pro svou pracnost a velmi malou dynamičnost při reakci na změnu rozložení komponent. Také při případném rozšiřování funkcionality nástroje a s tímto spojenou nutností přidání nových ovladacích prvků se toto řešení nejevilo jako příliš vhodné. Grafické rozhraní bylo tedy vytvořeno v programu Glade 2, který celý návrh rozhraní ukládá včetně všech atributů jednotlivých komponent do xml souboru a v aplikaci bylo zpracováno jako XML soubor pomocí modulu Glade-perl, jenž poskytuje Perl programátorům přístup k funkcím knihovny libglade, dovolující zpracování v Glade vytvořených souborů s uživatelským rozhraním a přístup k jednotlivým komponentám tohoto rozhraní. 2. grafický návrhář rozhraní pro Gtk2 knihovnu 14
3.2. IMPLEMENTACE GFRTU 3.2.2 Vývoj GUI První návrh grafického rozhraní, psaný ještě bez použití programu Glade v době, kdy ještě nebylo zcela jasné, co bude program dělat, byl napsán ručně v jazyce C viz obr 3.1.. Z výše uvedených důvodů nebylo toto řešení optimální, a tak bylo přepsáno do jazyka perl, za použití nástroje Glade. Návrh GUI zhotovený nástrojem Glade byl předělán tak, aby splňoval požadavky HIG, 3 ačkoliv se nezbavilo použití Frames, jež sice požadavkům HIG zcela neodporuje, avšak jejich použití se nedoporučuje, a stal se tak pro uživatele co nejpoužitelnější viz obr 3.2.. Záměrně je použito automatické rozložení, jelikož většina uživatelů má jinak nastavené své prostředí, a tak se velikost jednotlivých komponent přizpůsobuje podle nastavení prostředí a velikosti písma, čímž je zde také jakási základní podpora pro handicapovaných uživatelů, jelikož program respektuje jejich nastavení prostředí. Obrázek 3.1: První verze grafického rozhraní v jazyce C 3.2.3 Lokalizace Jelikož bývá u open source projektů dobrým zvykem aplikaci lokalizovat, nebot se tím aplikace stává přístupnější více uživatelům, bylo třeba lokalizovat i gfrt. Na výběr bylo několik lokalizačních frameworků, jež se liší zejména způsobem ukládání lokalizovaných textů. Mezi uvažovanými byl framework Msgcat, ukládající texty v polích, framework Gettext, ukládající texty v asociovaných polích s klíčem a framework Maketext, ukládající texty v tabulce. Nakonec byla pro lokalizaci zvolena knihovna gettext, jelikož se hojně používá ve větších projektech, a nástrojů na editaci *.po souborů, jež velmi usnadňují překladatelům jejich práci je dostatečné množství. Pro lokalizaci programu je potřeba překlad přiložených *.po souborů a jejich převod do binární podoby ve formátu *.mo a dále překlad samotného GUI uloženého ve formě XML souboru se jménem gfrt.glade. Vytvořený *.mo soubor se na- 3. Human Interface Guideline od autorů správce oken Gnome, popisující jak správně tvořit GUI v Gtk a čeho se vyvarovat, vzniklý za účelem jakéhosi jednotného stylu tvorby grafického rozhraní, ale také za účelem udržení jakési hranice použitelnosti 15
3.2. IMPLEMENTACE GFRTU Obrázek 3.2: Vývojová verze grafického rozhraní v jazyce Perl hraje do příslušné složky s názvem stejným jako je název daného locale. Locale se načítá z nastavení systému, není-li pro daný jazyk locale dostupné, použije se implicitní anglické nastavení, což je běžné chování gettextu. 3.2.4 Vývoj za použití Xtreme programming Při vývoji této aplikace byli použity prvky Feature driven developementu, avšak nebyla to čistě tato metoda, zejména kvůli poměrně malému rozsahu projektu a nízké potřebě strukturovaného návrhu. Aplikace se vyvíjela po cyklech, ve kterých postupně vznikaly kusy budoucí aplikace, jež byly konzultovány a na přání upravovány. Jako první vznikalo GUI, jež prošlo několika fázemi vývoje. Jakmile bylo GUI použitelné, bylo přiděláno dialogové okno pro výběr souboru, obsahujícího firmware, potvrzovací dialog pro ukončení aplikace a dopsána podpora stavových zpráv, jež se v GUI zobrazují, aby informovaly uživatele o stavu nahrávání a navedly ho jak dále postupovat. Poté byla připsána funkce samotné detekce routeru a nahrávání souboru s firmware. Vznikla tím první funkční verze gfrt, použitelná v praxi. Takto funkční aplikace byla konzultována a pro zpřístupnění méně zkušeným a anglicky nehovořícím uživatelům byly sepsány poslední požadavky na aplikaci, a to připsání filtrů na soubory do dialogového okna s výběrem souboru s firmware, podporu načítání nastavení z konfiguračního souboru a možnost použití lokalizace. Mezi nastaveními načítanými z konfiguračního souboru je timeout a retries coby parametry pro tftp část aplikace, vhodné zejména pro problémovou sít a v poslední řadě IP adresu, na kterou se má odesílat nový firmware v případě, že je zvolen typ routeru LinkSys. 16
3.3 Možnosti rozšíření funkcionality 3.3. MOŽNOSTI ROZŠÍŘENÍ FUNKCIONALITY Mezi dalšími zamýšlenými a zanalyzovanými funkcemi byla například kontrola formátu souboru s firmware, zda je to opravdu soubor s firmware, aby zbytečně nedocházelo k poškození zařízení nahráváním souboru, jenž by firmware neobsahoval. Jedním z formátů, ve kterých je nyní firmware dodáván je *.trx, jenž mimo hlavičky, obsahující nejrůznější informace, jako je verze obsaženého firmware, verze přístroje, pro který je firmware určen a podobně, neobsahuje žádný typický údaj, podle kterého by se dal soubor spolehlivě označit za formát *.trx. Druhým používaným formátem je *.bin jenž je podle dostupných materiálů trx image, obohacený o rozšířenou hlavičku, jelikož některé routery nebyly schopny trx soubory zpracovat. Tato hlavička taktéž neobsahuje nějaký rozlišitelný údaj typický pro bin soubor, a tak byla tato funkce z aplikace vypuštěna. Jedinou možností, jak výběr souboru s firmware omezit tedy zůstávají výběrové filtry v dialogu výběru souboru, jež myslím dostatečně zastávají tuto funkci. Mezi pokročilejší funkce, jež neumí ani Firmware Restoration, by patřila bezesporu možnost získání souboru s konfigurací. Tento lze získat pomocí webového rozhraní routeru, sloužícího k administraci, přes které ho lze rovněž nahrát zpět. Bylo by mnohem pohodlnější, kdyby gfrt uměl i získat a nahrát zpět tento konfigurační soubor, zejména z důvodů zálohy právě v případech obnovy firmware. Pak by se spuštěním obnovy firmware nahrála záloha konfigurace routeru, do zařízení by se nahrál nový firmware a opět by se naimportovala původní konfigurace zpět. Jednou z možností by bylo použití TFTP serveru v zařízení, jelikož konfigurační soubor má v sobě jistě uložen, avšak protože TFTP protokol, jak jsme si popsali v předchozí kapitole, nepodporuje výpis obsahu adresáře, bude se soubor s konfigurací jen těžko hledat. Druhou možností je právě použití http metod get a post, jež by se měli dát s úspěchem použít jako náhražka uživatelské interakce s webovým rozhraním. Do budoucna se jistě jedná o zajímavou možnost k rozšíření funkcionality gfrtu, ovšem pouze za předpokladu, že se stávající a nový firmware neliší v konfiguračních parametrech, jelikož s novým firmware často přichází nová funkcionalita a s ní spojená potřeba nových konfiguračních parametrů. 3.4 Postup při nahrávání firmware Pakliže se dostanete do situace, kdy bude Váš router nenávratně poškozen při nahrávání nového firmware prostřednictvím webového rozhraní, nebo si pouze chcete nahrát nový firmware, bez použití webového rozhraní a jste odkázáni pouze na platformu linux, nejlepší volbou je použití aplikace gfrt. Před zahájením samotné obnovy je třeba změnit adresu Vašeho počítače na adresu z rozsahu 192.168.1.0/24 s výjimkou 192.168.1.1, a ujistit se že sít je připojena a plně funkční. Poté jednoduše spustíte soubor gfrt.pl. Zobrazí se Vám okno s aplikací. Nejprve zvolíte typ routeru. Na výběr je router ASUS a router LinkSys. Volba ASUS znamená, že se aplikace pokusí o autodetekci zařízení, zatímco volba LinkSys načte adresu zařízení ze souboru config.cfg a firmware bude posílat na tuto načtenou adresu. Poté je třeba zvolit soubor obsahující firmware. Zde máte dvě možnosti. Bud to můžete cestu 17
3.5. WEB PROJEKTU zadat ručně do příslušného textového pole, nebo můžete použít pohodlnější způsob za použití tlačítka otevřít. V zobrazeném dialogovém okně výběru souboru máte možnost přepnutí si filtrování zobrazených souborů na formáty trx, bin, nebo všechny formáty souborů. Po zvolení souboru s firmware spustíte proces nahrávání tlačítkem detekuj router a odešli firmware. V okénku stavových zpráv se zobrazí informace o průběhu. Pokud zvolíte typ routeru LinkSys, budete muset v souboru config.cfg nastavit IP adresu, na které se router nachází. Pokud vše proběhlo jak mělo, zařízení se samo restartuje. Po restartování se můžete na zařízení přihlásit obvyklým způsobem. 3.5 Web projektu V rámci projektu byla také vytvořena webová stránka projektu 4. Jejím účelem je především prezentace a distribuce projektu, ale také centralizace zdrojů s fimrware, dostupnými pro routery značky Asus a Linksys, prostřednictvím odkazů na příslušné zdroje. Na stránce je také možno najít soubory, sloužící k lokalizaci. Lokalizované soubory budou postupně přidávány k balíku s aplikací, aby se aplikace stala co možná nejpřístupnější. Do budoucna je zamýšleno rozšířit stránky o možnost stahování a vyhledávání většiny dostupného firmware, jenž je možné prostřednictvím tohoto nástroje nahrávat a poskytnout tak kompletní řešení obnovy firmware wifi routerů na jednom místě. 4. Stránky lze nalézt na adrese http://www.fi.muni.cz/~xvavrik1/gfrt/ 18
Kapitola 4 Dostupné firmware a OpenSource alternativy Firmware ve wifi routerech je ve většině případů distribuce linuxu, běžící na čipu od firmy Broadcom. Tento čip, v závislosti na konkrétním typu, pracuje na frekvencích kolem 200 až 300 mhz. Routery bývají vybaveny flash pamětí (přibližně 4MB), kde je uložen samotný firmware a operační pamětí (přibližně 32MB). Routery jsou dále podle typu vybaveny až dvěma kusy konektorů USB 2.0 a umožňují tak připojení například tiskárny, webové kamery nebo externího disku. To, co ovšem činí tyto routery tak oblíbenými, jsou alternativní firmware, jež jsou pro tyto zařízení dostupné a mnohdy velmi rozšiřují jejich funkcionalitu. Použitím alternativního firmware můžete ze svého routeru snadno vyrobit bezpečnostní kameru, jež vám například při detekci pohybu zašle email, popřípadě sms na mobilní telefon, případně bude vše nahrávat na externí disk. 4.1 Oficiální firmware Oficiální firmware, podporovaný firmou Asus a dodávaný se zařízením je linux uzpůsobený práci na minimálním diskovém prostoru. Tento linux je však ořezaný o některé užitečné vlastnosti, jako možnost přihlášení se na router příkazovou řádkou a s tím spojenou jedinou možnost změny konfigurace pouze prostřednictvím webového rozhraní pro správu. 4.2 OpenSource alternativy OpenSource alternativy vycházejí ze zdrojových kódů Asusem dodávaného firmware, avšak rozšiřují jeho funkcionalitu o poměrně užitečnou sadu nástrojů. V poslední době také oficiální firmware přebírá část bugfix patchů z OpenSource projektů. Prostřednictvím těchto firmware lze na zařízení s připojeným externím diskem nainstalovat a spustit také běžné distribuce. Mezi takto používané patří například Gentoo či Debian. Použití těchto distribucí povyšuje router na méně výkonný počítač, jelikož na těchto distribucích lze spustit téměř jakoukoliv aplikaci, kterou daný hardware bude schopen provozovat. 19
4.2. OPENSOURCE ALTERNATIVY 4.2.1 Projekt OpenWrt Projekt OpenWrt 1 si klade za cíl dodat nejen sadu utilit, rozšiřujících dosavadní možnosti zařízení, ale komplexní minimalistickou distribuci. Celý systém je uložen na dvou filesystémech SquashFS, podporující pouze čtení, na němž je uložen právě firmware a JFFS2, což je filesystém vyvinutý pro flash paměti, podporující také zápis. Při prvním spuštění zařízení s tímto firmware je třeba ho restartovat, jinak nebude zápis na JFFS2 přístupný. Je to dáno metodou, jakou je tento filesystém na paměti vytvořen. V budoucnu lze očekávat nahrazení tohoto filesystému zbrusu novým systémem LogFS, který je rychlejší, kratší dobu se mountuje a má menší nároky na pamět, což je právě v tomto případě asi nejdůležitější. Po instalaci firmware by mělo být zařízení přístupné jak prostřednictvím telnet, tak prostřednictvím ssh. Po přihlášení se uživatel ocitne v příkazovém řádku busybox, odkud lze všechny parametry zařízení a spojení nastavit v konfiguračních souborech. Tyto konfigurační soubory byly nedávno přeorganizovány do adresáře /etc/config. Pro přidání dalšího software do zařízení slouží nástroj ipkg - the Itsy Package Management System[3]. Pomocí ipkg lze například zprovoznit na zařízení shaping provozu, p2p klienta pro sít torrent či dokonce http server s podporou php 2 [6]. Velmi silný nástroj, jenž OpenWrt poskytuje jsou zejména iptables, pomocí kterých lze udělat se sítí téměř cokoliv. OpenWrt také nabízí webové rozhraní pro konfiguraci, avšak busybox nepřekoná. Tento projekt byl prapůvodně napsán pro router LinkSys WRT54G a jemu podobné na čipu Broadcom založené routery. Dnes již podporuje celou řadu routerů. Konkrétní podporované typy lze nalézt na oficiálních stránkách projektu. 4.2.2 Projekt Oleg s custom firmware Olegův firmware 3 má k originálnímu firmware Asus mnohem blíže. Jedná se vlastně spíše o původní firmware s několika patchy a přidanými užitečnými nástroji. Ve své poslední verzi má tento firmware jako root filesystém EXT-3. Tento firmware rovněž dovoluje přihlášení prostřednictvím telnet či ssh. Po přihlášení uvítá uživatele rovněž příkazový řádek busybox, avšak postrádá některé v OpenWRT dostupné nástroje a naopak dodává jiné užitečné funkce. Sám o sobě je totiž busybox poměrně velký, a tak autoři obou projektů některé jeho části vypustili. Firmware je však standardně vybaven aplikacemi jako iptables, pro konfiguraci firewall či wondershaper, pro nastavení shapingu provozu. Po připojení externí tiskárny podporuje zařízení RAW protokol pro tisk. Tento firmware taktéž podporuje balíčkovací nástroj ipkg a instalaci nových aplikací, takže je taktéž velmi rozšiřitelný. Použitím alternativních firmware lze zařízení, původně označované za router, povýšit na něco víc, ne-li na méně výkonný server. Po připojení tiskárny může věrně sloužit jako sít ová tiskárna pro domácnost, připojením webové kamery získáme domácího hlídače, jenž zaznamená veškerý pohyb v okolí, připojením externího disku lze snadno zhotovit sít ové 1. domovská stránka projektu http://openwrt.org/ 2. jako ukázka běží http server i s podporou php na této adrese http://wl500.bravenec.org 3. domovská stránka projektu http://oleg.wl500g.info/ 20
4.3. ZÁVĚR úložiště dat, či dokonce soukromý FTP server. Možností využití je mnoho a neměli by být dostupné pouze uživatelům platformy windows. Proto je zde nástroj gfrt, se kterým se alternativní firmware stane opět o něco více dostupným méně zkušeným uživatelům. 4.3 Závěr V rámci této bakalářské práce jsem prozkoumal problematiku obnovy firmware ve wifi routerech Asus. Prozkoumal jsem stávající možnosti a kvůli nedostatečné podpoře na linuxové platformě navrhl a implementoval nástroj na obnovu, napodobující výrobcem dodávané řešení na platformě windows, čimž jsem vyhověl zadání této bakalářské práce. V rámci vývoje jsem se naučil lépe pracovat s knihovnou gettext a využil služeb knihovny libglade, jež velmi usnadňuje vývoj grafického rozhraní v GTK+. Prozkoumal jsem možnosti TFTP protokolu včetně jeho vývoje, vyzkoušel si práci se sítí v perlu a naučil se pracovat s lokalizačním frameworkem gettext. Tento nástroj by měl zpřístupnit možnost obnovy i méně zkušeným uživatelům linuxu, ale dobře poslouží i zkušenějším. Na webové stránce nástroje lze nalézt odkazy na vše k obnově potřebné, včetně dobře zpracovaných návodů a velmi dobré a svižné podpory na diskuzních fórech. Velmi zajímavou záležitostí v této oblasti je zejména možnost přehrání linuxovým firmware i zařízení, jež původně na linuxu neběží. Osobně jsem vyzkoušel na domácím routeru možnosti MN700 hack projektu a mohu vřele doporučit. Zařízení funguje mnohem stabilněji a navíc přibyly některé užitečné funkce, zejména shaping provozu. 21
Literatura [1] Barr, M.: "Memory Types", Embedded Systems Programming, May 2001. 1.2 [2] Sollins, K.: IEN 133 - The TFTP Protocol, 29 January 1980, IEN 133 <http://www. isi.edu/in-notes/ien/ien133.txt>. 2.1.1 [3] Guthrie, W.: Ipkg - Handhelds.org MoinMoin Wiki, 02 June 2006, ipkg - the Itsy Package Management System <http://handhelds.org/moin/moin.cgi/ipkg>. 4.2.1 [4] Faber, J.: JTAG Cables, 24 January 2007, OpenWrt- Docs/Customizing/Hardware/JTAG Cable - OpenWrt <http://wiki.openwrt. org/openwrtdocs/customizing/hardware/jtag_cable>. 1.3 [5] mn700 hack project, Microsoft MN700 hack project [Archive] - AsusForum Asus WL500g <http://wl500g.info/archive/index.php/t-1616.html>. 1.3 [6] OpenWrtDocs/Using, 19 October 2006, OpenWrtDocs <http://wiki.openwrt. org/openwrtdocs/using>. 4.2.1 [7] Sollins, K.: RFC 1350, July 1992, RFC1350 <http://rfc.net/rfc1350.html>. 2.1.3 [8] Malkin, G. a Harkin, A.: TFTP Option Extension, March 1995, RFC 1782 TFTP Option Extension <http://tools.ietf.org/html/rfc1782>. 2.1.4, 2.2.1, 2.2.2 [9] Malkin, G. a Harkin, A.: TFTP Blocksize Option, March 1995, RFC 1783 TFTP Blocksize Option <http://tools.ietf.org/html/rfc1783>. 2.1.5 [10] Malkin, G. a Harkin, A.: TFTP Timeout Interval and Transfer Size Options, March 1995, RFC 1784 TFTP Timeout Interval and Transfer Size Options <http://tools. ietf.org/html/rfc1784>. 2.1.6 [11] Sollins, K.: RFC 783, June 1981, RFC 783 <http://tools.ietf.org/html/ rfc783>. 2.1.2, 2.2 22
Rejstřík Firmware Restoration, 3 IEN 133, 6 JTAG kabel, 2 Microsoft MN700 hack projekt, 3 OpenWrt, 5 RFC 1350, 9 RFC 1782, 9 RFC 1783, 10 RFC 1784, 10 RFC 783, 8 TFTP protokol, 6 WinCE, 3 23
Příloha A schéma JTAG kabelu Obrázek A.1: schéma nebufferované verze JTAG kabelu 24