}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Nástroj pro obnovu firmware ve WiFi routerech ASUS ˇ B AKALÁ RSKÁ PRÁCE
Jakub Vavˇrík
Brno, jaro 2007
Prohlášení Prohlašuji, že tato bakaláˇrská práce je mým puvodním ˚ autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich cˇ erpal, v práci rˇ ádnˇe cituji s uvedením úplného odkazu na pˇrí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ˇcky Asus. Pokrývá i mnohé další routery, aˇckoliv to nebylo puvodnˇ ˚ e zamýšleno. Shrnuje soucˇ asné dostupné nástroje a postupy pˇri obnovˇe a nastinuje ˇ možná budoucí rˇ ešení. Zaobírá se vývojem a technickými detaily TFTP protokolu, který je základem principu obnovy firmware. Popisuje novˇe vzniklý nástroj a obnovu firmware. Rozebírá také vývojový proces tohoto nástroje a nastinuje ˇ možná budoucí rozšíˇrení funkcionality nástroje. V závˇeru zminuje ˇ nˇekteré firmware, použitelné pro obnovu, vˇcetnˇe nˇekolika opensource variant, znaˇcnˇe rozšiˇrujících funkcionalitu zaˇrízení.
iii
Klíˇcová 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 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Wifi routery Asus a obnova firmware . . . . . . . . . . . . . . . . . . 1.4 Stávající nástroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 TFTP protokol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Vývoj TFTP protokolu . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 IEN 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 RFC 783 - THE TFTP PROTOCOL (REVISION 2) . . . . . . . . 2.1.3 RFC 1350 - THE TFTP PROTOCOL (REVISION 2) . . . . . . . 2.1.4 RFC 1782 - TFTP Option Extension . . . . . . . . . . . . . . . . 2.1.5 RFC 1783 - TFTP Blocksize Option . . . . . . . . . . . . . . . . 2.1.6 RFC 1784 - TFTP Timeout Interval and Transfer Size Options . 2.2 Princip pˇrenosu dat TFTP protokolem . . . . . . . . . . . . . . . . . . 2.2.1 Odeslání souboru na TFTP server . . . . . . . . . . . . . . . . 2.2.2 Pˇrijetí souboru z TFTP serveru . . . . . . . . . . . . . . . . . . 3 gFRT - graphical firmware restore tool . . . . . . . . . . . . . . . . . . . . 3.1 Požadavky na systém . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Implementace gFRTu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Volba grafické knihovny . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Vývoj GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 Lokalizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 Vývoj za použití Xtreme programming . . . . . . . . . . . . . 3.3 Možnosti rozšíˇrení funkcionality . . . . . . . . . . . . . . . . . . . . . 3.4 Postup pˇri nahrávání firmware . . . . . . . . . . . . . . . . . . . . . . 3.5 Web projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Dostupné firmware a OpenSource alternativy . . . . . . . . . . . . . . . . 4.1 Oficiální firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 OpenSource alternativy . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Projekt OpenWrt . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Projekt Oleg’s custom firmware . . . . . . . . . . . . . . . . . . 4.3 Závˇer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rejstˇrík . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A schéma JTAG kabelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 2 3 6 6 6 8 9 9 10 10 10 11 11 12 12 13 14 15 15 16 17 17 18 19 19 19 20 20 21 22 23 24
v
Kapitola 1
Firmware a jeho obnova 1.1
Úvod
Práce pojednává o problematice obnovy firmware v routerech znaˇcky Asus. V první kapitole obecnˇe rozebírá problematiku obnovy firmware a vývojem firmware jako takového a zaobírá se podrobnˇeji možnostmi obnovy firmware v routerech. Je zde zmínˇen zajímavý projekt MN700 hack projekt, využívající firmware tˇechto routeru, ˚ poukazující na možnost pˇrehrání opensource firmwarem i zaˇrízení, jež puvodnˇ ˚ e na linuxovém firmware vubec ˚ nebˇeží. Dále jsou popsány stávající nástroje, jež jsou pro tento úˇcel dostupné, spolu s jejich pˇrednostmi a nedostatky. Druhá kapitola popisuje potˇrebu prozkoumání vlastností tftp protokolu a protokol samotný, vˇcetnˇe jeho vývoje za dobu jeho existence. Dále kapitola popisuje princip pˇrenosu souboru˚ tímto protokolem a objasnuje ˇ nˇekteré termíny, jež jsou využity dále v textu. Tˇretí kapitola práce se zaobírá novˇe vytvoˇreným nástrojem gFRT, jenž si klade za cíl poskytnout komfort výrobcem dodávaných utilit také uživatelum ˚ jiných platforem, než je výrobcem podporovaný windows. Popisuje požadavky pro spuštˇení, implementaˇcní detaily a výhledy možného rozšíˇrení 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 duvody ˚ volby jednotlivých možností. Ve cˇ tvrté kapitole se seznámíme s dostupnou sadou firmware pro routery, vˇcetnˇe jejich výhod a nevýhod, ale také jejich open source alternativ, jež mnohdy pˇrináš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ˇr programovatelných cˇ ipu. ˚ Jedná se vˇetšinou bud’to pˇrímo o instrukce procesoru, nebo o konfiguraˇcní nastavení zaˇrízení, pˇrípadnˇe jednodušší logiku zaˇrízení. Puvodnˇ ˚ e se v zaˇrízeních ukládal v ROM (read-only memory) cˇ ipech, ale se zvyšující se potˇrebou jeho pˇrehrávání novˇejší verzí a hlavnˇe z du˚ vodu˚ úspory nákladu˚ výrobcu˚ zaˇrízení, se postupnˇe pˇrešlo k užívání EPROM (erasable programmable read-only memory) pamˇetem, pozdˇeji k EEPROM (electrically erasable pro1
1.3. WIFI ROUTERY ASUS A OBNOVA FIRMWARE grammable read-only memory) a dnes i FLASH1 pamˇetem a SRAM (static random access memory) pamˇetem[1]. Dnes je již bˇežný uživatel poˇcítaˇce schopen, pomocí výrobcem dodaného specializovaného software, nahrát do zaˇrízení nový firmware sám, bˇehem nˇekolika minut, avšak stále existují zaˇrízení, u kterých se nelze obejít bez specializovaného hardware, urˇceného k nahrání firmware. Nejznámˇejším firmware, se kterým se s nejvˇetší pravdˇepodobností setkal každý uživatel osobního poˇcítaˇce, aniž by si toho byl vˇedom, je BIOS (Basic Input/Output System).
1.3
Wifi routery Asus a obnova firmware
Stejnˇe jako jiná zaˇrízení, i wifi routery firmy Asus obsahují firmware. Ten jako každý software obsahuje chyby, a tak není divu, že je potˇreba cˇ as od cˇ asu firmware pˇrehrát. Pˇrehrání firmware se firmy svým zákazníkum ˚ snaží natolik zpˇrístupnit, že souˇcástí vˇetšiny rozhraní 2 pro správu a nastavení zaˇrízení je dnes jednoduchý nástroj pro nahrání novˇejší verze firmware. Ovládání nástroje je jednoduché a zvládne s ním pracovat i ménˇe zkušený uživatel, avšak cenou za tuto jednoduchost je omezená funkcionalita nástroje. Pokazí-li se cokoliv bˇehem nahrávání, je tˇreba použít specializovaných nástroju˚ pro následnou obnovu zaˇrízení do funkˇcního stavu. Dalším nebezpeˇcím, pˇri této operaci, je samotný firmware. Ze zkušenosti vyplývá, že novˇejší firmware nemusí pˇrinést pouze zlepšení, jelikož ne všechna zaˇrízení, aˇckoliv jsou technickými parametry totožná, fungují se stejnou verzí firmware stejnˇe dobˇre, a tak není výjimkou, že se starším firmware jelo zaˇrízení lépe. Proto je potˇreba si upgrade firmware dobˇre rozmyslet a hlavnˇe vˇedˇet co dˇelám. Špatným nahráním firmware se muže ˚ zaˇrízení zniˇcit a bez odborných znalostí a k obnovˇe nutných technických prostˇredku˚ je nemožné ho zachránit. Celé riziko je navíc navýšeno možností výpadku proudu bˇehem operace, jež automaticky znamená neúspˇech. V takovém pˇrípadˇe je tˇreba pokusit se o obnovu napˇrí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ˇredpokladem pro použití tohoto nástroje je, že stále funguje tftp server uvnitˇr zaˇrízení, který lze také poškodit, ovšem jen ve výjimeˇcných pˇrípadech. Je-li i tento poškozen, pak nastupuje fyzický zásah do hardware a firmware se obnovuje pˇrehráním pˇrímo do cˇ ipu, respektive obnovením funkˇcnosti tftp serveru a nahráním pomocí výrobcem dodávaných nástroju. ˚ Vetšina routeru˚ pro domácí použití obsahuje rˇ ídící jednotku od firmy Broadcom a ta umožnuje ˇ napˇríklad použití JTAG kabelu pro pˇripojení cˇ ipu k poˇcítaˇci. JTAG kabel je k pocˇ ítaˇci pˇripojen paralelním portem a propojuje nˇekteré z pinu˚ paralelního portu k pinum ˚ cˇ ipu v routeru, pˇrípadnˇe k JTAG pˇrípojce, kterou jsou nˇekteré modely vybaveny. Délka JTAG kabelu se doporuˇcuje co nejkratší, jelikož pˇri vˇetší délce dochází bˇehem pˇrenosu ke ztrátˇe dat a prodloužení doby nahrávání, která je už tak pomˇernˇe dlouhá a vˇetšinou se nahrávání nezdaˇrí na první pokus. Tato metoda ovšem vyžaduje pokroˇcilejší znalosti zejména v oblasti 1. zvláštní druh EEPROM pamˇeti, která se muže ˚ mazat pouze po blocích nebo celá pamˇet’ najednou, nevýhodou je degradace cˇ ipu, který se neustálým pˇrehráváním niˇcí 2. jedna ze služeb poskytovaných firmware
2
1.4. STÁVAJÍCÍ NÁSTROJE elektrotechniky, JTAG rozhraní totiž nebylo puvodnˇ ˚ e k nahrávání programu, ˚ ale k testování a debuggingu[4], a také si JTAG kabel budete muset vytvoˇrit doma sami, jelikož je ˇ k nesehnání. Vytvoˇrit jeho nebufferovanou verzi není tak tˇežké, viz schéma pˇríloha A.1. Cip broadcom a cˇ ipy s ním kompatibilní používá ve svých zaˇrízeních i firma LinkSys a u routeru˚ této firmy fungují témˇerˇ 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 cˇ ipem a projekt poskytuje návod, jak pˇrehrát pomocí JTAG kabelu firmware, puvodnˇ ˚ e obsahující WinCE3 firmwarem od Asusu, pˇrípadnˇe jeho OpenSource variantami, respektive zprovoznit touto cestou tftp server v zaˇrízení umožnující ˇ použít Asus utility pro obnovu firmware a nový firmware jím nahrát. Toto zaˇrízení poskytuje velmi dobrý výkon co se týˇce kvality signálu, avšak firmware za moc nestojí, zejména kvuli ˚ pomˇernˇe velké nestabilitˇe zaˇrízení pˇri vˇetší zátˇeži, a tak se autoˇri snaží spojit to dobré z obou firem v jeden produkt. Pokusy s touto modifikací jsou bezpeˇcné, jelikož celý stávající firmware lze JTAG kabelem zazálohovat a pˇrípadnˇe obnovit[5]. Takto modifikovaný router funguje naprosto bezvadnˇe a mnohem stabilnˇeji, než s puvodním ˚ WinCE, navíc rozšiˇruje stávající funkcionalitu zaˇrízení. V rámci technických informací lze také nalézt návod na pˇridání pˇrípojky USB rozhraní k routeru, jelikož cˇ ip v zaˇrízení ho podporuje, nemá ho pouze vyveden.
1.4
Stávající nástroje
V souˇcasné dobˇe je k dispozici nˇekolik nástroju, ˚ sloužících k nahrání nového, pˇrípadnˇe k obnovení poškozeného firmware. Nevýhodou nˇekterých je však nepˇrístupnost ménˇe zkušeným uživatelum, ˚ což platí zejména pro ty k použití mimo platformu windows. ˇ : M EZI DOSTUPNÉ NÁSTROJE PAT RÍ Firmware Restoration - Nástroj dodávaný firmou Asus v rámci balíku Asus wireless router utilities, urˇcený k obnovˇe firmware. Tento nástroj bˇeží pouze na platformˇe Windows. Firma Asus se k podpoˇre jiných platforem pˇríliš nehrne, a tak jsou ménˇe zkušení uživatelé nuceni používat právˇe windows. Tento nástroj je zˇrejmˇe nejpropracovanˇejším a nejsnadnˇeji použitelným ze všech dostupných nástroju. ˚ Kromˇe možnosti pˇrehrání, at’ už nového, cˇ i poškozeného firmware nabízí také pohodlnou autodetekci pˇripojeného routeru v režimu obnovy, cˇ ímž uživateli usnadnuje ˇ 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 modelu˚ muže ˚ lišit. Uživatelské rozhraní je velmi minimalistické, ale plnˇe postaˇcující danému úˇcelu 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 alesponˇ stejnˇe komfortní nástroj pro linuxovou platformu, pˇri 3. microsoft windows urˇcený pro malá zaˇrí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ˇejší vlastností tohoto nástroje je bezesporu právˇe autodetekce pˇripojeného routeru. Nástroj detekuje pouze routery pˇrepnuté do režimu obnovy, pˇresnˇeji pouze jejich IP adresy. Není schopen rozeznat pˇresný typ pˇripojeného zaˇrízení. Pokud by toho schopen byl, umožnilo by to vývoj ještˇe komfortnˇejšího nástroje, jenž by automaticky detekoval typ zaˇrízení, zjišt’oval by nejnovˇejší verzi firmware a nabídl by pˇred obnovou uživateli výbˇer z pro zaˇrízení dostupných verzí firmware. Má-li projekt gFRT plnˇe nahradit Firmware Restoration4 na linuxové platformˇe, 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ˇejakého pro danou platformu dostupného TFTP klienta. Vˇetšina linuxových distribucí je v souˇcasnosti vybavena jednoduchým tftp klientem, pˇrípadnˇe jej lze snadno získat. Souˇcástí Windows XP je taktéž jednoduchý TFTP klient viz obr.1.2. Tento klient ovšem nepodporuje rozšíˇrení 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. Duležité ˚ je také znát princip, na základˇe kterého se firmware do zaˇrízení nahrává. Ne u všech modelu˚ totiž staˇcí pouze odeslat soubor s firmware pomocí TFTP protokolu. U starších modelu˚ routeru˚ Asus je nejprve potˇreba 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ˇcá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ˇejší alternativu nemají. flash.sh - Jedná se o bourne shell skript dodávaný s projektem OpenWrt. Skript používá tftp klienta bˇežnˇe dostupného v linuxových distribucích. Jedná se vlastnˇe pouze o cˇ ásteˇcnou automatizaci pˇredešlé metody. Autorem skriptu, jehož cˇ ást obstarává právˇe routery Asus je Oleg I. Vdovikin, který má na svˇedomí 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ˇema 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ˇetšinou produktu˚ obou firem kompatibilní. S tímto skriptem se obˇcas objevují problémy a nelze s jeho pomocí firmware nahrát, avšak vˇetšinou je plnˇe funkˇcní a dobˇre slouží svému úˇcelu. To je z dostupných nástroju˚ vše. Obdobnˇe 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ˇel nástroj Firmware Restoration plnˇe nahradit uživatelum ˚ linuxových platforem.
5
Kapitola 2
TFTP protokol Základem všech dostupných nástroju˚ na obnovu firmware ve wifi routerech Asus je TFTP protokol. Zkratka TFTP oznaˇcuje Trivial File Transfer Protocol. Protože tento protokol hraje v projektu gFRT významnou úlohu, bylo tˇreba dobˇre nastudovat jeho vývoj a souˇcasné možnosti použití, jelikož jednotlivé verze protokolu se od sebe výraznˇe liší, nebot’ rˇ ada rozšíˇrení pˇridala do protokolu novou funkcionalitu, jež má pomˇernˇe znaˇcný vliv na celý prubˇ ˚ eh pˇrenosu, aˇckoliv je vˇetšina rozšíˇrení zpˇetnˇe kompatibilní. Na vývoji rozšíˇrení tohoto protokolu mˇeli nejvˇetší podíl zamˇestnanci firmy Hewlett Packard, jelikož firma tento protokol hojnˇe využívala v praxi, a protože jim jeho funkcionalita nepostaˇcovala, pˇrispˇeli k vývoji nejedním rozšíˇrením. Protože nebylo zcela jasné, která verze protokolu je využívána pro pˇrenos firmware do wifi routeru˚ asus, bylo tˇreba odchytit celý pˇrenos a z provozu vypozorovat druhy a obsah pˇrenášených paketu. ˚ Z tohoto odchyceného provozu vyplynulo, že server uvnitˇr zaˇrízení podporuje rozšíˇrení Options Negotiation (viz dále v této kapitole). Jelikož toto rozšíˇrení bylo jedním z posledních vytvoˇrených, bylo rozhodnuto implementovat tftp protokol v jeho poslední, nejnovˇejší podobˇe. Tato kapitola popisuje a vysvˇetluje nˇekteré zkratky a termíny, jež jsou použity v následujících kapitolách, jež pˇredpokládají cˇ tenáˇrovu znalost tˇechto faktu˚ a principu˚ pˇrenosu.
2.1
Vývoj TFTP protokolu
První nástin tohoto protokolu vznikl jako IEN 1331 v roce 1980. Autorem protokolu byl Noel Chiappa, ale podílelo se na nˇem svými pˇripomínkami, jež byli zapracovány do protokolu, vícero lidí. Trivial File Transfer Protocol slouží, jak název napovídá, k jednoduchému pˇrenosu 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ˇe 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ˇrijímat data. Neumí vypisovat obsah adresáˇru˚ a nepodporuje autentizaci 1. Internet Experiment Note - vzniklo jich nˇeco málo pˇres 200 a po zániku NCP (Network Control Program) a pˇrechodu na TCP/IP pˇrešli autoˇri IEN na RFC
6
2.1. VÝVOJ TFTP PROTOKOLU uživatelu, ˚ ani vyjednávání nastavení jako je timeout. Podporuje tˇri režimy pˇrenosu: •
netascii - modifikace bˇežného ascii (USA Standard Code for Information Interchange) upravená specifikací Telnet protokolu, jedná se o 8bitové ascii
•
binary - pˇrímo data po osmicích bytu˚
•
mail - netascii posílané uživateli namísto souboru
Veškeré pakety jsou zabaleny do ostatních hlaviˇcek v poˇradí Lokální medium, Internet protokol, Datagram, TFTP hlaviˇcka. Velikost bloku je definována na 512 bytu. ˚ Protokol obsahuje 5 druhu˚ paketu, ˚ které se rozlišují obsahem a hlavnˇe 2 bytovým pˇríznakem opcode na zaˇcátku tftp paketu. Jsou to následující pˇríznaky: •
01 RRQ - read request packet pˇríznak, následovaný jménem souboru, jedním nulovým bytem, režimem pˇrenosu a ukonˇcen jedním nulovým bytem viz obr.2.1
•
02 WRQ - write request packet pˇríznak, následovaný jménem souboru, jedním nulovým bytem, režimem pˇrenosu a ukonˇcen jedním nulovým bytem viz obr.2.1
•
03 DATA - data packet pˇríznak, následovaný dvˇema byty, obsahujícími cˇ íslo bloku a blokem dat o velikosti 512 bytu, ˚ je-li blok dat menší, pak je to poslední paket pˇrenosu viz obr.2.2
•
04 ACK - acknowledge packet pˇríznak, následovaný dvˇema byty s cˇ íslem potvrzovaného bloku viz obr 2.3
•
05 ERROR - error packet pˇríznak, následovaný dvˇema byty s error code, chybovou zprávou, blíže popisující chybu, a ukonˇcený 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ˇríznaky urˇcující pˇríˇcinu selhání pˇrenosu: •
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ˇruje IEN 133. Podporuje opˇet tˇri režimy pˇrenosu, pouze režim binary byl nahrazen režimem octet. Dále definuje 2 nové error code pˇríznaky konkrétnˇe: •
06 - file already exists
•
07 - no such user[11]
8
2.1. VÝVOJ TFTP PROTOKOLU 2.1.3 RFC 1350 - THE TFTP PROTOCOL (REVISION 2) Toto RFC rozšiˇruje RFC 783. Jedná se o druhou revizi tohoto protokolu a pˇrináší tˇri významné zmˇeny a sice zduraz ˚ nuje ˇ možnost postavení TFTP protokolu nad jiným protokolem, než je UDP, doporuˇcuje nepoužívat zastaralý režim pˇrenosu mail a pˇredevším standardizuje tento protokol.[7]. 2.1.4 RFC 1782 - TFTP Option Extension Toto RFC rozšiˇruje RFC 1350. Pˇridává do protokolu podporu pro Options negotiation - vyjednávání parametru˚ pˇrenosu dat, pˇri zachování kompatibility se staršími verzemi protokolu. Tyto parametry pˇrenosu jsou pˇripojovány k RRQ a WRQ paketum ˚ a RFC 1782 pˇridává nový paket s pˇríznakem OACK - potvrzující pˇríjetí požadovaného parametru pˇrenosu. Parametry se k request paketu pˇridávají následovnˇe: RRQ/WRQ pˇríznak, jméno souboru, nulový byte, režim pˇrenosu, nulový byte, opt, nulový byte, hodnota parametru, nulový byte, kde opt je string s parametrem (napˇr. blksize) a lze definovat v rˇ adˇe za sebou nˇekolik parametru˚ opt najednou viz obr.2.5. Novˇe definovaný paket OACK má opcode pˇríznak s cˇ íslem 06, následovaný stejnou strukturou jako se pˇripojuje 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ˇrijme-li server parametr, posílá error paket s error code 08. RFC bylo autory upˇresnˇeno v kvˇetnu 1998 v RFC 2347, kde byl zduraznˇ ˚ en požadavek na request pakety, jejichž délka s pˇripojenými options nesmí pˇresá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.2. PRINCIP P RENOSU DAT TFTP PROTOKOLEM 2.1.5 RFC 1783 - TFTP Blocksize Option Toto RFC rozšiˇruje RFC 1350. Pˇridává do protokolu podporu nastavení velikosti bloku na vˇetší hodnotu než doposud používanou 512 bytu. ˚ Toto nastavení se pˇripojuje za request pakety následovnˇe: RRQ/WRQ pˇríznak, jméno souboru, nulový byte, režim pˇrenosu, nulový byte, blksize (case insensitive string), nulový byte, hodnota požadované velikosti bloku, nulový byte. Pokud server nastavení pˇrijme, posílá OACK paket s hodnotou stejnou, nebo menší než si vyžádal klient. Nepˇrijme-li, pak posílá error paket s error code 08. Poslední paket pˇrenosu je data paket, jehož data cˇ ást je menší než smluvená velikost bloku. Testovaní provádˇené autory rozšíˇrení prokázalo pomˇernˇe velký nárust ˚ výkonu pˇri zvˇetšení velikosti bloku, jelikož se zmenšil poˇcet paketu, ˚ nutných k pˇrenosu a zmenšila tedy zátˇež potvrzováním paketu, ˚ velikost bloku ovšem nesmí pˇresáhnout MTU - v tom pˇrípadˇe by režie provozu na vyrovnání se s fragmentací opˇet provoz zpomalila. Z tohoto RFC vznikl v kvˇetnu 1998 návrh na standard RFC 2348[9].
2.1.6 RFC 1784 - TFTP Timeout Interval and Transfer Size Options Toto RFC rozšiˇruje RFC 1350. Pˇridává do protokolu podporu nastavení timeout pˇri pˇrenosu a pˇridává pˇrijímající stranˇe možnost zjistit celkovou velikost souboru, již pˇred zaˇcátkem pˇrenosu. Požadovaný timeout se pˇripojuje za request pakety následovnˇe: RRQ/WRQ pˇríznak, jméno souboru, nulový byte, režim pˇrenosu, nulový byte, timeout (case-insensitive string), nulový byte, hodnota požadovaného timeout, nulový byte. Pokud server nastavení pˇrijímá posílá OACK paket s hodnotou, která musí být stejná jako hodnota požadovaná. Požadavek na celkovou velikost se pˇripojuje za request pakety následovnˇe: RRQ/WRQ pˇríznak, jméno souboru, nulový byte, režim pˇrenosu, nulový byte, tsize (case-insensitive string), nulový byte, velikost pˇrenášeného souboru, nulový byte. U RRQ paketu˚ je velikost pˇrenášeného souboru nula, a server vrací velikost požadovaného souboru v OACK paketu. Pokud je soubor pˇríliš velký, muže ˚ klient i server pˇrerušit pˇrenos paketem s error code 03. Z tohoto RFC vznikl v kvˇetnu 1998 návrh na standard RFC 2349[10].
2.2
Princip pˇrenosu dat TFTP protokolem
Všechny pˇrenosy TFTP protokolem zaˇcínají požadavkem na spojení. Pokud server spojení povolí, zaˇcnou se pˇrenášet data. Každý datový paket s opcode DATA musí být potvrzen paketem s opcode ACK a cˇ íslem potvrzovaného bloku. Dojde-li ke ztrátˇe paketu bˇehem pˇrenosu, dojde po timeoutu k retransmisi posledního paketu. Veškeré chyby jsou signalizovány pakety s opcode ERROR. Vˇetšina paketu˚ s opcode ERROR zpusobí ˚ ukonˇcení pˇrenosu a spojení, výjimku tvoˇrí pouze chyba s nesprávným portem odesílatele, v tomto pˇrípadˇe se paket odešle zpˇet. Pakety s opcode ERROR se nepotvrzují, takže dojde-li k jejich ztrátˇe, pak se spojení ukonˇcí po nˇekolika timeoutech. [11]. 10
ˇ 2.2. PRINCIP P RENOSU DAT TFTP PROTOKOLEM 2.2.1 Odeslání souboru na TFTP server Pro pˇrenos použijeme TFTP protokol s rozšíˇrením RFC 1782. Odesílatel (A) pošle pˇrijímající stranˇe (B) WRQ se jménem souboru, režimem a požadovanými parametry pˇrenosu na port 69. B má následující možnosti odpovˇedi2 : •
OACK paketem - pˇrijímá požadavek na zápis i parametry pˇrenosu
•
ACK paketem - pˇrijímá požadavek na zápis, ale ne parametry pˇrenosu3
•
ERROR paketem - nepˇrijímá požadavek pˇrenosu
V pˇrípadˇe, že je požadavek na zápis pˇrijat, odesílá A první DATA paket s cˇ íslem 1 a cˇ eká na potvrzení. B paket pˇrijme a potvrzuje ACK s cˇ íslem 1. To se opakuje dokud nepˇrijde poslední paket pˇrenosu, jenž pˇrenáší menší blok dat než je velikost bloku[8]. 2.2.2 Pˇrijetí souboru z TFTP serveru Poˇcítaˇc (A) pošle serveru (B) RRQ se jménem souboru, režimem a požadovanými parametry pˇrenosu na port 69. B má následující možnosti odpovˇedi4 : •
OACK paketem - pˇrijímá požadavek na cˇ tení i parametry pˇrenosu
•
DATA paketem - pˇrijímá požadavek na cˇ tení, ale ne parametry pˇrenosu5
•
ERROR paketem - nepˇrijímá požadavek na pˇrenos
V pˇrípadˇe, že je požadavek pro cˇ tení pˇrijat, B odesílá DATA pakety, které jsou ze strany A potvrzovány ACK s pˇríslušným cˇ íslem. To se opakuje dokud nepˇrijde paket s blokem dat menším než zvolená blocksize.[8].
2. B odpovídá z jiného náhodnˇe vybraného portu a A veškeré další pakety posílá na tento port 3. ACK paket potvrzuje v tomto pˇrípadˇe datový blok s cˇ íslem 0 - to znamená pˇrijetí požadavku 4. B stejnˇe jako u pˇrijímání souboru odpovídá z jiného náhodnˇe 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ˇcní stránce obsáhnout celou funkcionalitu této utility a vytvoˇrit pohodlnˇe ovladatelný grafický nástroj pro obnovu firmware na linuxové platformˇe, jenž by pˇrinesl správcum ˚ linuxových stroju˚ pohodlí poskytované windows utilitou. Pˇri vývoji bylo tˇreba použít reverse engineeringu, aby se poodhalila podstata fungování autodetekce routeru˚ a princip pˇrenosu a automatického zresetování obnovovaného routeru. Vzhledem k tomu, že se jedná pˇredevším o sít’ovou komunikaci bylo uˇcinˇeno nˇekolik pokusu˚ o nahrání spojených s odchytáváním paketu˚ pomocí bˇežnˇe dostupného nástroje Wireshark1 . Bˇehem vývoje bylo zjištˇeno, že by nástroj mohl spolehlivˇe obnovovat i nˇekteré typy routeru˚ znaˇcky LinkSys, a tak byla pˇridána podpora také pro tyto routery. Jsou to zejména ty typy, které jsou kompatibilní s projektem OpenWrt, o kterém bude zmínˇeno více v následující kapitole. Novˇejší routery od firmy LinkSys používají k pˇrenosu upravený tftp protokol, s rozšíˇrenou hlaviˇckou paketu˚ o string obsahující heslo. Takto je možné heslem zabránit nežádoucímu pˇrehrání firmware. IP adresa, na kterou je v pˇrípadˇe routeru LinkSys nový firmware odesílán, je nastavitelná v konfiguraˇcním souboru gFRTu config.cfg.
3.1
Požadavky na systém
Aplikace je pomˇernˇe nenároˇcná a díky volbˇe interpretovaného jazyka Perl, ve kterém byla napsána muže ˚ bˇežet i na více platformách, testována však byla pouze na Linuxových distribucích Debian, Fedora a Ubuntu. Pro úspˇešné spuštˇení a používání aplikace je tˇreba: •
Linux kompatibilní operaˇcní systém
•
X server
•
Gtk2 knihovnu
•
interpreta jazyka Perl
1. Wireshark - puvodnˇ ˚ e známý jako projekt Ethereal slouží jako grafická obdoba programu tcpdump, dostupný na adrese http://www.wireshark.org/. Bˇežnˇe dodávaná distribuce nerozezná tftp pakety definované v RFC1782, oznaˇcuje je jako malfromed tftp pakety, ale je snadno rozšiˇritelná, a tak lze podporu pro tyto pakety snadno doplnit.
12
3.2. IMPLEMENTACE GFRTU •
libglade knihovnu
•
modul s podporou zpracování Glade souboru˚ Gtk2::GladeXML
3.2
Implementace gFRTu
Pˇred zahájením implementace bylo tˇreba rozmyslet si, co bude aplikace umˇet a jak toho docílit. Protože dokumentace k Firmware Restoration není dostupná, bylo tˇreba zjistit jak vlastnˇe nástroj pracuje. Toho šlo dosáhnout jedinˇe odposlechem paketu˚ pˇri samotné cˇ innosti aplikace. Na testovaném wifi routeru Asus wl500g premium bylo provedeno celkem trojí odposlouchávání. První, u kterého nebylo zaˇrízení pˇripojeno 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 zustala ˚ aplikace bez odpovˇedi vypsala hlášení, že nelze nalézt žádný router v restore režimu. Následující pokus již mˇel zaˇrízení pˇripojené, avšak nebylo pˇrepnuto do restore režimu. Nastala stejná situace s chybovým hlášením. Zaˇrízení bylo tedy uvedeno do restore režimu a byl proveden tˇretí test. Ten témˇerˇ okamžitˇe zaˇrízení rozeznal, z odpovˇedi na broadcastový požadavek rozpoznal jeho adresu a odeslal celý soubor s firmware. Jakmile pˇrenos skonˇcil došlo k automatickému zresetování zaˇrízení a to již nabˇehlo s novým obnoveným firmware. Takto obnovený router se doporuˇcuje ještˇe jednou manuálnˇe restartovat, protože automatický restart obˇcas neprobˇehne úplnˇe v poˇrádku. Tento zpusob ˚ detekce zaˇrízení ovšem pouze vyplývá ze zjištˇených faktu˚ pˇri pˇrenosu a nemusí zcela odpovídat zpusobu ˚ detekce, jaký skuteˇcnˇe používá nástroj pod windows. Pro pˇrípad, že by autodetekce zaˇrízení selhala existuje možnost manuálnˇe nastavit IP adresu, na kterou se bude firmware posílat v konfiguraˇcním souboru config.cfg. V takovém pˇrípadˇe je ale nutno zvolit možnost LinkSys router, nebot’ pouze v tomto režimu se bere na nastavenou adresu ohled. Souˇcástí balíku Asus router utilities je totiž také aplikace s pˇríznaˇcným názvem device detector. Tato aplikace umožnuje ˇ rozeznat všechna Asus zaˇrízení k poˇcítaˇci pˇripojená prostˇrednictvím sítˇe. Jelikož tento nástroj detekuje zaˇrízení vˇcetnˇe jeho druhu, lze pˇredpokládat, že použivá složitˇejších metod detekce. Jednou z možností by mohlo být urˇcování druhu zaˇrízení na základˇe prefixu mac adresy, ale jedná se pouze o domnˇenku. Nyní bylo tˇreba rozmyslet si jazyk, v nˇemž bude aplikace napsána. Zde se naskytly dvˇe možnosti. Bud’to napsat celého tftp klenta a toho následnˇe použít, cˇ i nalézt nˇejakou již hotovou knihovnu, jež by jeho použití umožnovala. ˇ Jelikož ve svˇetˇe software platí heslo: „Proˇc vynalézat znova kolo?“ byla zvolena varianta použití již existující knihovny. Po nároˇcném hledání dostupných knihoven pro TFTP protokol, kdy se vˇetšina z nich nedala použít bezplatnˇe cˇ i v Open Source projektu byl na výbˇer Perl, k nˇemuž byl v CPAN dostupný modul s tftp klientem a jazyk Java, jenž pro tento úˇcel není až tak vhodný, jelikož se jedná o malou aplikaci a docházelo by ke zdržení pˇri 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ˇreba poupravit, kvuli ˚ potˇrebˇe získání IP adresy routeru pˇri poˇcáteˇcním broadcastingu, a také kvuli ˚ kontrole, zda pˇríchozí odpovˇed’ pˇrichází ze stejné 13
3.2. IMPLEMENTACE GFRTU adresy jako požadavek, což bylo pro detekci zaˇrízení nežádoucí, jelikož jeho IP adresa nebyla pˇredem známa. Odstranˇením této kontroly sice došlo k omezení na sít’, pˇres kterou se obnova firmware provádí, jelikož v dané síti nesmí být více pˇrenosu˚ TFTP protokolem souˇcasnˇe, ale toto omezení bylo pˇrijatelné vzhledem k nízké používanosti tohoto protokolu v bˇežné praxi a faktu, že zaˇrízení bývá pˇri obnovˇe vˇetšinou propojeno sít’ovým kabelem pˇrímo s poˇcítaˇcem, z nˇehož se obnova provádí. Základ projektu tedy bylo na cˇ em stavˇet, a tak vývoj zapoˇcal grafickým rozhraním, jež se chtˇelo co nejvíce pˇriblížit nástroji Firmware Restoration.
3.2.1 Volba grafické knihovny Jelikož bez grafického rozhraní by aplikace jen stˇeží poskytovala stejné pohodlí jako její pˇredloha na platformˇe windows, bylo tˇreba ho vyvinout. Jako první pˇrišla na rˇ adu volba grafické knihovny. Mezi nejznámˇejší dostupné patˇrí zejména knihovna GTK+, hojnˇe užívaná v prostˇredí správce oken Gnome, knihovna Qt, užívaná v prostˇredí správce oken KDE a Widget toolkit, respektive jeho nástavby jako wxWidgets. Volbu grafické knihovny ovlivnil zejména jazyk, v nˇemž bude aplikace napsána, ale významný podíl mˇela také jednoduchost použití a míra zkušeností s danou knihovnou a v neposlední rˇ adˇe také její vhodnost pro daný úˇcel. V poˇcátcích vývoje dokonce vznikala aplikace ve více jazycích a až bˇehem vývoje bylo postupnˇe od jednotlivých jazyku˚ upouštˇeno, 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ˇejší pˇrí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ˇekolika málo rˇ ádcích. Jako grafická knihovna byla zvolena knihovna Gtk2, perlová implementace knihovny GTK+, zejména pro dobrou podporu napˇríˇc správci oken, ale také pro dobrou podporu v jazyce Perl a pˇrehlednˇe zpracovanou dokumentaci celé knihovny. Volba této knihovny také poskytuje možnost pˇrenosu na jiné platformy a celý projekt se tak stává multiplatformním. Jedním z možných pˇrístupu˚ bylo napsat grafické rozhraní „ruˇcnˇe“ pˇrímo v jazyce perl. Tato možnost se pozdˇeji ukázala jako nejménˇe vhodná, zejména kvuli ˚ znesnadnˇení možnosti lokalizace, ale také pro svou pracnost a velmi malou dynamiˇcnost pˇri reakci na zmˇenu rozložení komponent. Také pˇri pˇrípadném rozšiˇrování funkcionality nástroje a s tímto spojenou nutností pˇridání nových ovladacích prvku˚ se toto rˇ ešení nejevilo jako pˇríliš vhodné. Grafické rozhraní bylo tedy vytvoˇreno v programu Glade2 , který celý návrh rozhraní ukládá vˇcetnˇe všech atributu˚ jednotlivých komponent do xml souboru a v aplikaci bylo zpracováno jako XML soubor pomocí modulu Glade-perl, jenž poskytuje Perl programátorum ˚ pˇrístup k funkcím knihovny libglade, dovolující zpracování v Glade vytvoˇrených souboru˚ s uživatelským rozhraním a pˇrístup k jednotlivým komponentám tohoto rozhraní.
2. grafický návrháˇr rozhraní pro Gtk2 knihovnu
14
3.2. IMPLEMENTACE GFRTU 3.2.2 Vývoj GUI První návrh grafického rozhraní, psaný ještˇe bez použití programu Glade v dobˇe, kdy ještˇe nebylo zcela jasné, co bude program dˇelat, byl napsán „ruˇcnˇe“ v jazyce C viz obr 3.1.. Z výše uvedených duvod ˚ u˚ nebylo toto rˇ ešení optimální, a tak bylo pˇrepsáno do jazyka perl, za použití nástroje Glade. Návrh GUI zhotovený nástrojem Glade byl pˇredˇelán tak, aby splnoval ˇ 3 požadavky HIG, aˇckoliv se nezbavilo použití Frames, jež sice požadavkum ˚ HIG zcela neodporuje, avšak jejich použití se nedoporuˇcuje, a stal se tak pro uživatele co nejpoužitelnˇejší viz obr 3.2.. Zámˇernˇe je použito automatické rozložení, jelikož vˇetšina uživatelu˚ má jinak nastavené své prostˇredí, a tak se velikost jednotlivých komponent pˇrizpusobuje ˚ podle nastavení prostˇredí a velikosti písma, cˇ ímž je zde také jakási základní podpora pro handicapovaných uživatelu, ˚ jelikož program respektuje jejich nastavení prostˇredí.
Obrázek 3.1: První verze grafického rozhraní v jazyce C
3.2.3 Lokalizace Jelikož bývá u open source projektu˚ dobrým zvykem aplikaci lokalizovat, nebot’ se tím aplikace stává pˇrístupnˇejší více uživatelum, ˚ bylo tˇreba lokalizovat i gfrt. Na výbˇer bylo nˇekolik lokalizaˇcních frameworku, ˚ jež se liší zejména zpusobem ˚ ukládání lokalizovaných textu. ˚ 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íˇcem a framework Maketext, ukládající texty v tabulce. Nakonec byla pro lokalizaci zvolena knihovna gettext, jelikož se hojnˇe používá ve vˇetších projektech, a nástroju˚ na editaci *.po souboru, ˚ jež velmi usnadnují ˇ pˇrekladatelum ˚ jejich práci je dostateˇcné množství. Pro lokalizaci programu je potˇreba pˇreklad pˇriložených *.po souboru˚ a jejich pˇrevod do binární podoby ve formátu *.mo a dále pˇreklad samotného GUI uloženého ve formˇe XML souboru se jménem gfrt.glade. Vytvoˇrený *.mo soubor se na3. Human Interface Guideline od autoru˚ správce oken Gnome, popisující jak správnˇe tvoˇrit GUI v Gtk a cˇ eho se vyvarovat, vzniklý za úˇcelem jakéhosi jednotného stylu tvorby grafického rozhraní, ale také za úˇcelem 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ˇríslušné složky s názvem stejným jako je název daného locale. Locale se naˇcítá z nastavení systému, není-li pro daný jazyk locale dostupné, použije se implicitní anglické nastavení, což je bˇežné chování gettextu.
3.2.4 Vývoj za použití Xtreme programming Pˇri vývoji této aplikace byli použity prvky Feature driven developementu, avšak nebyla to cˇ istˇe tato metoda, zejména kvuli ˚ pomˇernˇe malému rozsahu projektu a nízké potˇrebˇe strukturovaného návrhu. Aplikace se vyvíjela po cyklech, ve kterých postupnˇe vznikaly kusy budoucí aplikace, jež byly konzultovány a na pˇrání upravovány. Jako první vznikalo GUI, jež prošlo nˇekolika fázemi vývoje. Jakmile bylo GUI použitelné, bylo pˇridˇeláno dialogové okno pro výbˇer souboru, obsahujícího firmware, potvrzovací dialog pro ukonˇcení 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ˇripsána funkce samotné detekce routeru a nahrávání souboru s firmware. Vznikla tím první funkˇcní verze gFRT, použitelná v praxi. Takto funkˇcní aplikace byla konzultována a pro zpˇrístupnˇení ménˇe zkušeným a anglicky nehovoˇrícím uživatelum ˚ byly sepsány poslední požadavky na aplikaci, a to pˇripsání filtru˚ na soubory do dialogového okna s výbˇerem souboru s firmware, podporu naˇcítání nastavení z konfiguraˇcního souboru a možnost použití lokalizace. Mezi nastaveními naˇcítanými z konfiguraˇcního souboru je timeout a retries coby parametry pro tftp cˇ ást aplikace, vhodné zejména pro problémovou sít’ a v poslední rˇ adˇe IP adresu, na kterou se má odesílat nový firmware v pˇrípadˇe, že je zvolen typ routeru LinkSys. 16
ˇ 3.3. MOŽNOSTI ROZŠÍ RENÍ FUNKCIONALITY
3.3
Možnosti rozšíˇrení funkcionality
Mezi dalšími zamýšlenými a zanalyzovanými funkcemi byla napˇríklad kontrola formátu souboru s firmware, zda je to opravdu soubor s firmware, aby zbyteˇcnˇe nedocházelo k poškození zaˇrízení nahráváním souboru, jenž by firmware neobsahoval. Jedním z formátu, ˚ ve kterých je nyní firmware dodáván je *.trx, jenž mimo hlaviˇcky, obsahující nejruznˇ ˚ ejší informace, jako je verze obsaženého firmware, verze pˇrístroje, pro který je firmware urˇcen a podobnˇe, neobsahuje žádný typický údaj, podle kterého by se dal soubor spolehlivˇe oznaˇcit za formát *.trx. Druhým používaným formátem je *.bin jenž je podle dostupných materiálu˚ trx image, obohacený o rozšíˇrenou hlaviˇcku, jelikož nˇekteré routery nebyly schopny trx soubory zpracovat. Tato hlaviˇcka taktéž neobsahuje nˇejaký rozlišitelný údaj typický pro bin soubor, a tak byla tato funkce z aplikace vypuštˇena. Jedinou možností, jak výbˇer souboru s firmware omezit tedy zustávají ˚ výbˇerové filtry v dialogu výbˇeru souboru, jež myslím dostateˇcnˇe zastávají tuto funkci. Mezi pokroˇcilejší funkce, jež neumí ani Firmware Restoration, by patˇrila bezesporu možnost získání souboru s konfigurací. Tento lze získat pomocí webového rozhraní routeru, sloužícího k administraci, pˇres které ho lze rovnˇež nahrát zpˇet. Bylo by mnohem pohodlnˇejší, kdyby gFRT umˇel i získat a nahrát zpˇet tento konfiguraˇcní soubor, zejména z duvod ˚ u˚ zálohy právˇe v pˇrípadech obnovy firmware. Pak by se spuštˇením obnovy firmware nahrála záloha konfigurace routeru, do zaˇrízení by se nahrál nový firmware a opˇet by se naimportovala puvodní ˚ konfigurace zpˇet. Jednou z možností by bylo použití TFTP serveru v zaˇrízení, jelikož konfiguraˇcní soubor má v sobˇe jistˇe uložen, avšak protože TFTP protokol, jak jsme si popsali v pˇredchozí kapitole, nepodporuje výpis obsahu adresáˇre, bude se soubor s konfigurací jen tˇežko hledat. Druhou možností je právˇe použití http metod get a post, jež by se mˇeli dát s úspˇechem použít jako náhražka uživatelské interakce s webovým rozhraním. Do budoucna se jistˇe jedná o zajímavou možnost k rozšíˇrení funkcionality gFRTu, ovšem pouze za pˇredpokladu, že se stávající a nový firmware neliší v konfiguraˇcních parametrech, jelikož s novým firmware cˇ asto pˇrichází nová funkcionalita a s ní spojená potˇreba nových konfiguraˇcních parametru. ˚
3.4
Postup pˇri nahrávání firmware
Pakliže se dostanete do situace, kdy bude Váš router nenávratnˇe poškozen pˇri nahrávání nového firmware prostˇrednictví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ˇred zahájením samotné obnovy je tˇreba zmˇenit adresu Vašeho poˇcítaˇce na adresu z rozsahu 192.168.1.0/24 s výjimkou 192.168.1.1, a ujistit se že sít’ je pˇripojena a plnˇe funkˇcní. Poté jednoduše spustíte soubor gfrt.pl. Zobrazí se Vám okno s aplikací. Nejprve zvolíte typ routeru. Na výbˇer je router ASUS a router LinkSys. Volba ASUS znamená, že se aplikace pokusí o autodetekci zaˇrízení, zatímco volba LinkSys nacˇ te adresu zaˇrízení ze souboru config.cfg a firmware bude posílat na tuto naˇctenou adresu. Poté je tˇreba zvolit soubor obsahující firmware. Zde máte dvˇe možnosti. Bud’to mužete ˚ cestu 17
3.5. WEB PROJEKTU zadat ruˇcnˇe do pˇríslušného textového pole, nebo mužete ˚ použít pohodlnˇejší zpusob ˚ za použití tlaˇcítka otevˇrít. V zobrazeném dialogovém oknˇe výbˇeru souboru máte možnost pˇrepnutí si filtrování zobrazených souboru˚ na formáty trx, bin, nebo všechny formáty souboru. ˚ Po zvolení souboru s firmware spustíte proces nahrávání tlaˇcítkem detekuj router a odešli firmware. V okénku stavových zpráv se zobrazí informace o prubˇ ˚ ehu. 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ˇehlo jak mˇelo, zaˇrízení se samo restartuje. Po restartování se mužete ˚ na zaˇrízení pˇrihlásit obvyklým zpusobem. ˚
3.5
Web projektu
V rámci projektu byla také vytvoˇrena webová stránka projektu4 . Jejím úˇcelem je pˇredevším prezentace a distribuce projektu, ale také centralizace zdroju˚ s fimrware, dostupnými pro routery znaˇcky Asus a Linksys, prostˇrednictvím odkazu˚ na pˇríslušné zdroje. Na stránce je také možno najít soubory, sloužící k lokalizaci. Lokalizované soubory budou postupnˇe pˇridávány k balíku s aplikací, aby se aplikace stala co možná nejpˇrístupnˇejší. Do budoucna je zamýšleno rozšíˇrit stránky o možnost stahování a vyhledávání vˇetšiny dostupného firmware, jenž je možné prostˇrednictvím tohoto nástroje nahrávat a poskytnout tak kompletní rˇ ešení obnovy firmware wifi routeru˚ na jednom místˇe.
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ˇetšinˇe pˇrípadu˚ distribuce linuxu, bˇežící na cˇ ipu od firmy Broadcom. Tento cˇ ip, v závislosti na konkrétním typu, pracuje na frekvencích kolem 200 až 300 mhz. Routery bývají vybaveny flash pamˇetí (pˇribližnˇe 4MB), kde je uložen samotný firmware a operaˇcní pamˇetí (pˇribližnˇe 32MB). Routery jsou dále podle typu vybaveny až dvˇema kusy konektoru˚ USB 2.0 a umožnují ˇ tak pˇripojení napˇríklad tiskárny, webové kamery nebo externího disku. To, co ovšem cˇ iní tyto routery tak oblíbenými, jsou alternativní firmware, jež jsou pro tyto zaˇrízení dostupné a mnohdy velmi rozšiˇrují jejich funkcionalitu. Použitím alternativního firmware mužete ˚ ze svého routeru snadno vyrobit bezpeˇcnostní kameru, jež vám napˇríklad pˇri detekci pohybu zašle email, popˇrípadˇe sms na mobilní telefon, pˇrípadnˇe bude vše nahrávat na externí disk.
4.1
Oficiální firmware
Oficiální firmware, podporovaný firmou Asus a dodávaný se zaˇrízením je linux uzpusobený ˚ práci na minimálním diskovém prostoru. Tento linux je však oˇrezaný o nˇekteré užiteˇcné vlastnosti, jako možnost pˇrihlášení se na router pˇríkazovou rˇ ádkou a s tím spojenou jedinou možnost zmˇeny konfigurace pouze prostˇrednictvím webového rozhraní pro správu.
4.2
OpenSource alternativy
OpenSource alternativy vycházejí ze zdrojových kódu˚ Asusem dodávaného firmware, avšak rozšiˇrují jeho funkcionalitu o pomˇernˇe užiteˇcnou sadu nástroju. ˚ V poslední dobˇe také oficiální firmware pˇrebírá cˇ ást bugfix patchu˚ z OpenSource projektu. ˚ Prostˇrednictvím tˇechto firmware lze na zaˇrízení s pˇripojeným externím diskem nainstalovat a spustit také bˇežné distribuce. Mezi takto používané patˇrí napˇríklad Gentoo cˇ i Debian. Použití tˇechto distribucí povyšuje router na ménˇe výkonný poˇcítaˇc, jelikož na tˇechto distribucích lze spustit témˇerˇ jakoukoliv aplikaci, kterou daný hardware bude schopen provozovat. 19
4.2. OPENSOURCE ALTERNATIVY 4.2.1 Projekt OpenWrt Projekt OpenWrt1 si klade za cíl dodat nejen sadu utilit, rozšiˇrujících dosavadní možnosti zaˇrízení, ale komplexní minimalistickou distribuci. Celý systém je uložen na dvou filesystémech SquashFS, podporující pouze cˇ tení, na nˇemž je uložen právˇe firmware a JFFS2, což je filesystém vyvinutý pro flash pamˇeti, podporující také zápis. Pˇri prvním spuštˇení zaˇrízení s tímto firmware je tˇreba ho restartovat, jinak nebude zápis na JFFS2 pˇrístupný. Je to dáno metodou, jakou je tento filesystém na pamˇeti vytvoˇren. V budoucnu lze oˇceká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ˇet’, což je právˇe v tomto pˇrípadˇe asi nejduležitˇ ˚ ejší. Po instalaci firmware by mˇelo být zaˇrízení pˇrístupné jak prostˇrednictvím telnet, tak prostˇrednictvím ssh. Po pˇrihlášení se uživatel ocitne v pˇríkazovém rˇ ádku busybox, odkud lze všechny parametry zaˇrízení a spojení nastavit v konfiguraˇcních souborech. Tyto konfiguraˇcní soubory byly nedávno pˇreorganizovány do adresáˇre /etc/config. Pro pˇridání dalšího software do zaˇrízení slouží nástroj ipkg - the Itsy Package Management System[3]. Pomocí ipkg lze napˇríklad zprovoznit na zaˇrízení shaping provozu, p2p klienta pro sít’ torrent cˇ i dokonce http server s podporou php2 [6]. Velmi silný nástroj, jenž OpenWrt poskytuje jsou zejména iptables, pomocí kterých lze udˇelat se sítí témˇerˇ cokoliv. OpenWrt také nabízí webové rozhraní pro konfiguraci, avšak busybox nepˇrekoná. Tento projekt byl prapuvodnˇ ˚ e napsán pro router LinkSys WRT54G a jemu podobné na cˇ ipu Broadcom založené routery. Dnes již podporuje celou rˇ adu routeru. ˚ Konkrétní podporované typy lze nalézt na oficiálních stránkách projektu. 4.2.2 Projekt Oleg’s custom firmware Oleguv ˚ firmware3 má k originálnímu firmware Asus mnohem blíže. Jedná se vlastnˇe spíše o puvodní ˚ firmware s nˇekolika patchy a pˇridanými užiteˇcnými nástroji. Ve své poslední verzi má tento firmware jako root filesystém EXT-3. Tento firmware rovnˇež dovoluje pˇrihlášení prostˇrednictvím telnet cˇ i ssh. Po pˇrihlášení uvítá uživatele rovnˇež pˇríkazový rˇ ádek busybox, avšak postrádá nˇekteré v OpenWRT dostupné nástroje a naopak dodává jiné užiteˇcné funkce. Sám o sobˇe je totiž busybox pomˇernˇe velký, a tak autoˇri obou projektu˚ nˇekteré jeho cˇ ásti vypustili. Firmware je však standardnˇe vybaven aplikacemi jako iptables, pro konfiguraci firewall cˇ i wondershaper, pro nastavení shapingu provozu. Po pˇripojení externí tiskárny podporuje zaˇrízení RAW protokol pro tisk. Tento firmware taktéž podporuje balíˇckovací nástroj ipkg a instalaci nových aplikací, takže je taktéž velmi rozšiˇritelný. Použitím alternativních firmware lze zaˇrízení, puvodnˇ ˚ e oznaˇcované za router, povýšit na nˇeco víc, ne-li na ménˇe výkonný server. Po pˇripojení tiskárny muže ˚ vˇernˇe sloužit jako sít’ová tiskárna pro domácnost, pˇripojením webové kamery získáme domácího hlídaˇce, jenž zaznamená veškerý pohyb v okolí, pˇripojením externího disku lze snadno zhotovit sít’ové 1. domovská stránka projektu http://openwrt.org/ 2. jako ukázka bˇeží 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 ER úložištˇe dat, cˇ i dokonce soukromý FTP server. Možností využití je mnoho a nemˇeli by být dostupné pouze uživatelum ˚ platformy windows. Proto je zde nástroj gFRT, se kterým se alternativní firmware stane opˇet o nˇeco více dostupným ménˇe zkušeným uživatelum. ˚
4.3
Závˇer
V rámci této bakaláˇrské práce jsem prozkoumal problematiku obnovy firmware ve wifi routerech Asus. Prozkoumal jsem stávající možnosti a kvuli ˚ nedostateˇcné podpoˇre na linuxové platformˇe navrhl a implementoval nástroj na obnovu, napodobující výrobcem dodávané rˇ ešení na platformˇe windows, cˇ imž jsem vyhovˇel zadání této bakaláˇrské práce. V rámci vývoje jsem se nauˇcil lépe pracovat s knihovnou gettext a využil služeb knihovny libglade, jež velmi usnadnuje ˇ vývoj grafického rozhraní v GTK+. Prozkoumal jsem možnosti TFTP protokolu vˇcetnˇe jeho vývoje, vyzkoušel si práci se sítí v perlu a nauˇcil se pracovat s lokalizaˇcním frameworkem gettext. Tento nástroj by mˇel zpˇrístupnit možnost obnovy i ménˇe zkušeným uživatelum ˚ linuxu, ale dobˇre poslouží i zkušenˇejším. Na webové stránce nástroje lze nalézt odkazy na vše k obnovˇe potˇrebné, vˇcetnˇe dobˇre zpracovaných návodu˚ 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ˇrehrání linuxovým firmware i zaˇrízení, jež puvodnˇ ˚ e na linuxu nebˇeží. Osobnˇe jsem vyzkoušel na domácím routeru možnosti MN700 hack projektu a mohu vˇrele doporuˇcit. Zaˇrízení funguje mnohem stabilnˇeji a navíc pˇribyly nˇekteré užiteˇcné 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
. 2.1.1 [3] Guthrie, W.: Ipkg - Handhelds.org MoinMoin Wiki, 02 June 2006, ipkg - the Itsy Package Management System . 4.2.1 [4] Faber, J.: JTAG Cables, 24 January 2007, OpenWrtDocs/Customizing/Hardware/JTAG Cable - OpenWrt . 1.3 [5] mn700 hack project, Microsoft MN700 hack project [Archive] - AsusForum – Asus WL500g . 1.3 [6] OpenWrtDocs/Using, 19 October 2006, OpenWrtDocs . 4.2.1 [7] Sollins, K.: RFC 1350, July 1992, RFC1350 . 2.1.3 [8] Malkin, G. a Harkin, A.: TFTP Option Extension, March 1995, RFC 1782 TFTP Option Extension . 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 . 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 . 2.1.6 [11] Sollins, K.: RFC 783, June 1981, RFC 783 . 2.1.2, 2.2
22
Rejstˇrí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ˇríloha A
schéma JTAG kabelu
Obrázek A.1: schéma nebufferované verze JTAG kabelu
24