zavrŠni rad br. 4813 prenošenje operacijskog sustava ...sustave ne postoje ključni dijelovi...
TRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Zagreb, lipanj 2017.
ZAVRŠNI RAD br. 4813
Prenošenje operacijskog sustava OpenWrt
na mreţne ureĊaje
Juraj Vijtiuk
i
SADRŽAJ
1. Uvod ............................................................................................................................ 1
2. OpenWrt i prenošenje općenito .......................................................................... 2
2.1. OpenWrt ............................................................................................................. 2
2.2. Prenošenje sustava .......................................................................................... 2
3. Opis postupka prenošenja openwrta ................................................................. 4
3.1. Prikupljanje informacija o uređaju .................................................................. 4
3.1.1. Prikupljanje informacija preko mreže................................................................ 5
3.1.2. Prikupljanje informacija na druge načine ....................................................... 11
3.2. Izgradnja OpenWrta ....................................................................................... 12
3.3. Upisivanje vlastitog operacijskog sustava .................................................. 13
3.3.1. Upisivanje na D-Link DIR-615 ......................................................................... 13
3.3.2. Upisivanje na DSL-584T ................................................................................... 17
3.3.3. Pokretanje u QEMU emulatoru........................................................................ 18
4. Zakljuĉak ................................................................................................................. 19
Literatura ........................................................................................................................... 20
Saţetak .............................................................................................................................. 21
Summary ........................................................................................................................... 21
1
1. UVOD
U ovom radu opisan je postupak instalacije operacijskog sustava OpenWrt na
mrežne uređaje, te postupak prenošenja (engl. porting) na nepodržane uređaje.
Postupak je opisan općenito, na primjeru instalacije u Quick Emulatoru (QEMU),
dijelom na primjeru usmjeritelja D-Link DIR-615, revizija Q2, te na primjerima
usmjeritelja D-Link DSL-584T i Siemens ADSL C-010-I. S obzirom na to da je
glavna tema rada prenošenje sustava, instalacija nije zasebna cjelina već je
opisana kao dio postupka prenošenja sustava.
Rad je podijeljen u pet poglavlja. U drugom poglavlju opisani su OpenWrt
operacijski sustav uz neke od mogućih primjena sustava te općeniti postupak
prenošenja sustava. U trećem poglavlju opisani su postupci prenošenja i
instalacije OpenWrta uz moguće probleme. Zaključak je iznesen u četvrtom
poglavlju.
2
2. OPENWRT I PRENOŠENJE OPĆENITO
2.1. OpenWrt
OpenWrt je besplatni operacijski sustav otvorenog koda za mrežne uređaje,
zasnovan na operacijskom sustavu GNU/Linux, te uClibc ili musl C bibliotekama.
Sustav je moguće prilagoditi potrebama korisnika na više načina, instalacijom
dodatnih programskih paketa te izgradnjom (engl. build) vlastite verzije sustava
izravno iz izvornog koda uz mijenjanje postavki prevoditelja i sustava za izgradnju.
Sustav se može instalirati izravno iz izvornog koda ili korištenjem gotovog
unaprijed spremnog paketa sustava napravljenog za specifičnu verziju uređaja.
Nakon instalacije sustavom je moguće upravljati preko grafičkog web sučelja ili
naredbenim sučeljem preko telnet ili Secure Shell (SSH) protokola. Uz pomoć
opkg sustava za upravljanje paketima moguće je na uređaj instalirati u trenutku
pisanja rada preko 3500 paketa koji sadrže uglavnom različite poslužitelje i
mrežne alate. OpenWrt se može koristiti kao OS za usmjeritelje, vatrozid ili sustav
za otkrivanje napada (engl. Intrusion Detection System). Projekt je nastao kada je
tvrtka Linksys objavila izvorni kod za WRT54G usmjeritelj, zbog uvjeta GNU
General Public Licensea (GPL), te od onda zajednica programera prenosi sustav
na nove uređaje i nadograđuje sustav.
Cijeli OpenWrt projekt je dokumentiran na službenoj wiki stranici na kojoj je
dostupno mnoštvo uputa za instalaciju i prilagođavanje, podatci o trenutnom stanju
podržanosti raznih uređaja i upute za prenošenje sustava na nove uređaje [1].
2.2. Prenošenje sustava
Prenošenje sustava je proces prilagodbe postojeće programske podrške kako bi
se mogla izvršavati na novim računalnim sustavima. Prenošenje može biti jako
jednostavan a i jako težak proces. Na primjeru Openwrta, ako već postoje
upravljački programi i ostali programi potrebni za sustav, treba ih samo pronaći,
najčešće ručno izgraditi, instalirati na uređaj te objediniti sve u jedan paket.
Uključivanje promjena u OpenWrt projekt zahtjeva dodatne korake i nije ovdje
opisano. Ponekad je moguće uz male promjene iskoristiti postojeće programe za
slične sustave, kao na primjer upravljačke programe za slično sklopovlje ili verziju
operacijskog sustava za istu arhitekturu ali različiti model procesora.
3
Najduži i najteži postupak prenošenja je na sustave gdje za sustav i njemu slične
sustave ne postoje ključni dijelovi programske podrške. Ako ne postoji neki od
upravljačkih programa, potrebno je napisati upravljački program. Ako arhitektura
uređaja nije podržana od strane Linux jezgre, potrebno je napisati kod specifičan
za tu arhitekturu i dodati ga u jezgru.
4
3. OPIS POSTUPKA PRENOŠENJA OPENWRTA
Prije instalacije ili prenošenja sustava potrebno je provjeriti je li za uređaj na koji
prenosimo ili instaliramo OpenWrt već postoji gotov operacijski sustav za
instalaciju. Wiki stranice OpenWrta sadrže popis podržanih uređaja [2]. Potrebno
je obratiti pozornost na razlike u sklopovlju između različitih verzija istog modela
uređaja. Na primjer, iako je D-Link DIR-615 naveden kao podržan, verzija Q2 nije
podržana [3]. Ako za uređaj postoji zasebna stranica na OpenWrt wikiju,
poveznica je navedena u odgovarajućem retku popisa podržanih uređaja. Za
podržane uređaje postupak prenošenja može se preskočiti te odmah prijeći na
instalaciju OpenWrta. Tako za D-Link DSL-584T već postoji gotov operacijski
sustav koji samo treba instalirati na uređaj. Postupak prikupljanja podataka o DSL-
584T svejedno je opisan u nastavku.
3.1. Prikupljanje informacija o ureĊaju
Prvi korak prilikom prenošenja sustava je sakupljanje informacija o sklopovlju i
programima koji se nalaze u uređaju. Najbolje je odmah provjeriti kolika je veličina
radnog spremnika uređaja, s obzirom na to da je potrebno najmanje 16MB
spremnika kako bi se mogla pokrenuti najnovija verzija OpenWrta.
Za neke uređaje podatke je moguće pronaći na OpenWrt wiki stranici. Prikupljanje
podataka najbolje je započeti ostvarivanjem neke vrste pristupa uređaju. Na
primjer prijavom preko mreže SSH-om ili telnetom, prijavom u bootloader sučelje
prilikom pokretanja, preko Etherneta ili serijskih vrata. Ako programski pristup nije
moguć, sklopovlju se može pristupiti preko Joint Test Action Group (JTAG) ili
serijskih vrata koja većina uređaja sadrži [4]. U slučaju DIR-615 usmjeritelja, na
čipu je moguće pronaći JTAG vrata, no nedostaju pinovi tako da bi ih trebalo
zalemiti. U nastavku su opisani neki od mogućih načina pristupa preko mreže.
5
3.1.1. Prikupljanje informacija preko mreţe
Prvi korak prilikom prikupljanja informacija preko mreže je spajanje uređaja i
računala koje se koristi. Većina mrežnih uređaja radi kao DHCP poslužitelj, pa je
tako za spajanje na Linux sustavima potrebno pokrenuti naredbu dhclient, za
odgovarajuće mrežno sučelje. Ako DHCP ne radi, potrebno je ručno postaviti
mrežnu adresu i tablice usmjeravanja. Postupak ručnog postavljanja adrese ovisi
o korištenom sustavu, a za Linux sustave mogu se koristiti naredbe ifconfig i
route. Koje točno postavke treba koristiti prilikom ručnog postavljanja adrese,
najčešće je moguće pronaći u uputama za korištenje uređaja.
Prije spajanja preko mreže dobro je utvrditi koja mrežna vrata su otvorena te kojim
aplikacijama vrata pripadaju. Jedan od alata kojima je moguće utvrditi koja mrežna
vrata su otvorena je nmap. Osim skeniranja vrata, nmap nudi razne druge
funkcionalnosti od kojih će neke korisne za prikupljanje informacija o uređaju biti
opisane kasnije. Pokretanjem nmapa naredbom $ nmap 192.168.0.1 gdje je
$ oznaka ljuske, a 192.168.0.1 IP adresa DIR-615 usmjeritelja, dobije se sljedeći
ispis:
Nmap scan report for dlinkrouter (192.168.0.1)
Host is up (0.0018s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
49152 open unknown
Jedna od najkorisnijih nmap opcija za prikupljanje informacija o sustavu je -sV.
Nakon što je opcija zadana nmap će pokušati odrediti koje verzije aplikacija
slušaju na otvorenim portovima.
6
Za DIR-615 dobije se sljedeći ispis:
$ nmap -sV 192.168.0.1
Nmap scan report for dlinkrouter (192.168.0.1)
Host is up (0.0012s latency).
Not shown 995 closed ports
PORT STATE SERVICE VERSION
53/tcp open domain dnsmasq 2.45
80/tcp open http WebServer
49152/tcp open unknown
Pokrenu li se iste naredbe za DSL-584T, vidi se da su otvorena FTP, SSH, Telnet i
HTTP vrata. Siemens usmjeritelj ima otvorena samo HTTP i FTP vrata. Vrijedi
probati skenirati i vrata koja ne spadaju u poznata vrata, s obzirom na to da nmap
bez dodatnih opcija skenira samo poznata vrata. U slučaju Siemens usmjeritelja
otvorena su vrata 17185, na kojima je servis wdbrpc.
Kako nisu otvoreni niti SSH niti Telnet vrata DIR-615 usmjeritelja, valja provjeriti je
li neku od aplikacija moguće upaliti koristeći web sučelje. Osim toga, web sučelje
korisno je i za prikupljanje podataka o programskoj podršci i sklopovlju uređaja jer
su često dostupni podatci o trenutnoj verziji ugrađenog operacijskog sustava te
različite mrežne i druge postavke.
Web sučelje DIR-615 je zaštićeno sučeljem za prijavu preko kojega je moguće
prijaviti se koristeći podatke iz priručnika, korisničko ime Admin i praznu lozinku.
DIR-615 nema mogućnost osposobljavanja SSH ili telnet protokola, no moguće je
vidjeti verziju ugrađenog operacijskog sustava koja se nalazi na uređaju.
Najjednostavniji način ostvarivanja pristupa na DIR-615 usmjeritelju je držanjem
tipke za resetiranje postavki oko 3 sekunde. Nakon ponovnog pokretanja svjetla
koja signaliziraju je li uređaj upaljen trebala bi titrati. Ponovnim skeniranjem
nmapom vidi se da su nakon ponovnog pokretanja otvorena Telnet vrata.
Spajanjem na Telnet vrata naredbom $ telnet 192.168.0.1 usmjeritelj traži
korisničko ime za prijavu. Podatci za prijavu ne nalaze se u priručniku pa ih treba
potražiti na drugim mjestima. Ni za usmjeritelj DSL-584T priručnik ne sadrži
podatke za prijavu, no isprobavanjem čestih lozinki dolazi se do korisničkog imena
admin i lozinke 0000.
7
Kako značajan dio mrežnih uređaja koristi operacijske sustave zasnovane na
GNU/Linuxu, proizvođač je zbog GPL licence dužan objaviti svoje izmjene
sustava. Programska podrška je najčešće dostupna na stranicama proizvođača,
no u nekim slučajevima nije, već ju je moguće dobiti na zahtjev. Ako je OS baziran
na Berkeley Software Distribution (BSD) sustavu, proizvođač zbog BSD licence
nije dužan objaviti izmjene. Pakete s izmjenama isplati se pogledati jer je često
moguće pronaći lozinke koje se koriste u sustavu, te različite izvorne programe iz
kojih je moguće detaljnije vidjeti kako ugrađeni operacijski sustav i uređaj rade.
Kako nmap nudi funkcionalnost otkrivanja operacijskog sustava, više informacija o
OS-u sustava možemo saznati ponovno koristeći nmap uz zastavicu -O.
Naredbom $ nmap -O 192.168.0.1 dobije se sljedeći ispis:
No exact OS matches for host
TCP/IP fingerprint:
OS:SCAN(V=6.49BETA4%E=4...
Postupak koristi mnoštvo heuristika pa rezultat ne mora biti točan. Moguće je da
nmap, kao u prethodnom primjeru za DIR-615 ne pronađe ni jedan OS koji
odgovara OS-u uređaja.
Programe potrebne za izgradnju operacijskog sustava za DIR-615 može se
pronaći na službenim stranicama D-Linka [5]. Otpakiravanjem paketa nastaje
direktorij DIR615Q2_GPL1702b01. Paket sadrži i rsdk, realtekov software
development kit, koji se može koristiti za prevođenje vlastitih programa u strojni
kod procesora DIR-615. Prilikom upoznavanja s programima za izgradnju
operacijskog sustava, dobro je početi s čitanjem readme datoteke i Makefile
datoteka kako bi se upoznalo sa strukturom paketa. Dalje se zanimljive detalje
može tražiti uz pomoć alata grep. Paket bi trebao sadržavati i upravljačke
programe koji su potrebni za rad operacijskog sustava. Zanimljiva datoteka koja se
nalazi u paketu za DIR-615 je skripta koja pokreće Telnet, a nalazi se na putanji:
DIR615Q2_GPL1702b01/templates/aries/dlob.hans/dir615/rc/init0.S80telnetd.
sh
Bitni dijelovi sadržaja datoteke prikazani su u Isječku 3.1
8
#!/bin/sh
orig_devconfsize=`devconf dump | scut -p "Data size :" -f 1`
mfc_mode=`devdata get -e mfcmode`
echo [$0]: $1 … > /dev/console
if [ "$1" = "start"]; then
if [ "$orig_devconfsize" = "0" ] || [ "$orig_devconfsize" = ""] ||
[ "mfc_mode" = "1"]; then
if [ -f "/usr/sbin/login" ]; then
image_sign=`cat /etc/config/image_sign`
telnetd -l /usr/sbin/login -u
Alphanetworks:$image_sign -i br0 &
else
telnetd &
fi
fi
else
killall telnetd
fi
Isjeĉak koda 3.1. DIR-615 telnetd skripta
Zbog retka telnetd -l /usr/sbin/login -u Alphanetworks:$image_sign -i br0
& može se pretpostaviti da je korisničko ime Alphanetworks. Upisivanjem
Alphanetworks u Telnet klijent vidi se da je ime valjano te Telnet traži lozinku.
Ponovno promatrajući isti redak skripte vidi se da je lozinka spremljena u varijabli
image_sign, što je vjerojatno string ili sažetak (engl. hash) kojim je potpisan
ugrađeni operacijski sustav. Pokretanjem naredbe $ grep -r "image_sign" u
direktoriju DIR615Q2_GPL1702b01 ispisuje se između ostaloga i sljedeći redak:
Makefile: $(Q)echo
$(ELBOX_CONFIG_SIGNATURE)>$(TARGET)/etc/config/image_sign
Dalje, naredbom $ grep -r "ELBOX_CONFIG_SIGNATURE" dobije se sljedeći
bitan dio ispisa:
Vars.mk: ELBOX_CONFIG_SIGNATURE := $(ELBOX_SIGNATURE)
9
Otvaranjem datoteke Vars.mk vidi se da varijabla ELBOX_SIGNATURE ima više
definicija uključujući i sljedeću:
ELBOX_SIGNATURE := $(shell echo $(ELBOX_BOARD_NAME)_$(ELBOX_BRAND_NAME)_
(ELBOX_MODEL_NAME)
Daljnjim pretraživanjem pronalaze se vrijednosti navedenih varijabli:
ELBOX_BOARD_NAME="wrgn85"
ELBOX_BRAND_NAME="dlob.hans"
ELBOX_MODEL_NAME="dir615"
ELBOX_MODEL_NAME očito označava model D-Link usmjeritelja.
Napokon, lozinka za Telnet je wrgn85_dlob.hans_dir615. Do istoga rezultata
moglo se doći i pokretanjem naredbe strings (ili neke od drugih naredbi koje
omogućavaju pregled sadržaja binarnih datoteka) nad ugrađenim operacijskim
sustavom usmjeritelja s obzirom na to da je prvi redak ispisa
signature=wrgn85_dlob.hans_dir615. Osim programa potrebnih za izgradnju
operacijskog sustava, na stranici D-Linka nalazi se i verzija operacijskog sustava
koja odgovara onoj na usmjeritelju, 17.02, pod nazivom
DIR615Q2_FW1702b01.bin.
Nakon prijave Telnetom mogu se saznati neke informacije o sklopovlju i
programskoj podršci usmjeritelja.
Naredba $ uname -a ispisuje verziju operacijskog sustava.
Linux dlinkrouter 2.6.30.9 #1 Fri Sep 12 09:40:43 CST 2014 rlx GNU/Linux
Usmjeritelj očito koristi Linux, s inačicom jezgre 2.6.30.9. Zanimljiva je i
arhitektura, rlx. Pokušaj pokretanja lscpu naredbe ne uspijeva jer sustav koristi
BusyBox, no podatci o procesoru mogu se saznati korištenjem naredbe $ cat
/proc/cpuinfo čiji je ispis prikazan u nastavku.
10
system type : RTL819xD
processor : 0
cpu model : 52481
BogoMIPS : 52481
hardware watchpoint : no
tlb_entries : 32
mips16 implemented : yes
Procesor je RTL819xD, a s obzirom na redak u kojem piše MIPS16 implemented,
procesor je MIPS arhitekture. Zatim, naredbom $ free dobije se sljedeći ispis:
total used free shared buffers
Mem: 26196 22312 3884 0 2160
Swap: 0 0 0
Vidi se da radni spremnik usmjeritelja ima približno 26 MB. Veličina spremnika je
bitna jer novije verzije OpenWrta ne rade na uređajima koji imaju manje od 16MB
radnog spremnika. Više podataka moguće je dobiti naredbom $ cat
/proc/meminfo.
Naredbom $ cat /proc/interrupts
CPU0
2: 0 RLX cascade(0x0)
8: 20720 RLX LOPI serial(0x20)
11: 73075 RLX LOPI wlan0 (0x20)
12: 2075 RLX LOPI eth0(0x20)
13: 154152 RLX LOPI rlx timer (0x620)
vidimo da usmjeritelj osim mrežnih sučelja ima i serijska vrata.
Na kraju, pokretanjem naredbe $ ls /bin/ potvrđuje se da usmjeritelj koristi
BusyBox.
11
Zbog otvorenih wdbrpc vrata na Siemens usmjeritelju, očito je da usmjeritelj koristi
VxWorks operacijski sustav za rad u stvarnom vremenu. Također, na internetu je
moguće pronaći javno poznate ranjivosti u servisu wdbrpc, od kojih jedna
omogućava ispis cijelog sadržaja radnog spremnika sustava. Ispis spremnika
može se pretraživati ručno ili jednostavnije, strings naredbom na UNIX sustavima.
Pretraživanjem je moguće pronaći base64 kodirano korisničko ime i lozinku za
prijavu na web sučelje, admin:epicrouter, a iste je moguće pronaći i pretraživanjem
preko interneta [6].
3.1.2. Prikupljanje informacija na druge naĉine
Osim preko mreže, podatci se mogu prikupiti direktnim povezivanjem sklopovlja na
računalo, najčešće koristeći JTAG ili serijska vrata. Jednostavan ali koristan način
otkrivanja podataka o sklopovlju u uređaju je rasklapanje uređaja te čitanje natpisa
na čipovima. DIR-615 sadrži čipove Winbond w9825G6KH-6, RTL8196E i
RTL8192ER. Za Siemensov usmjeritelj moguće je uočiti CPU Conexant CX82310
i RAM Hynix HY57V641620HG. Kako Hynixov spremnik ima manje od 16MB [7],
novije verzije OpenWrta neće raditi pa je u nastavku opisan samo postupak
prikupljanja dodatnih informacija o sustavu.
Za čipove i usmjeritelja vrijedi potražiti službeni Software Development Kit (SDK),
pa je tako za DIR-615 moguće SDK pronaći na stranicama SourceForgea [8]. SDK
sadrži OpenWrt sa zakrpama za različite čipove serije RTL819x, a između
ostaloga i za RTL8196E koji se nalazi u DIR-615. Ako SDK nije moguće pronaći,
valja potražiti postoje li barem upravljački programi za čipove koje uređaj sadrži.
Ako driveri ne postoje može se potražiti upravljačke programe za slične čipove ili
samostalno napisati potrebne upravljačke programe. Na internetu je moguće
pronaći besplatnu literaturu koja opisuje postupak pisanja upravljačkih programa
za Linux, koja može poslužiti prilikom modifikacije postojećih upravljačkih
programa ili pisanja vlastitih [9].
12
3.2. Izgradnja OpenWrta
Preporučuje se OpenWrt izgraditi na Linuxu ili barem nekoj drugoj varijanti UNIX
sustava, s obzirom na neke nekompatibilnosti na Windows sustavima. Daljnji
primjeri odnosit će se na 64 bitnu verziju Linux sustava zasnovanih na Debian
Linuxu. Treba pročitati i službene upute za instalaciju na stranicama OpenWrt
wikija [10]. Prije same izgradnje OpenWrta treba instalirati sve programske
preduvjete. Osim ručne izgradnje iz izvornih datoteka, za neke uređaje moguće je
ako postoje, koristiti otprije izgrađene verzije OpenWrta. Prije izgradnje sustava
dobro je imati predznanje o izgradnji Linux jezgre i make alatu. Kako su izvorni
kodovi Linuxa i GNU makea javno dostupni, mnoštvo literature dostupno je
besplatno na internetu.
S obzirom na to da OpenWrt podržava DSL-584T, potrebno je samo preuzeti
paket za izgradnju OpenWrta te ručno, naredbom Make izgraditi operacijski
sustav.
Za slučaj DIR-615 usmjeritelja koristi se OpenWrt iz RTL819x SDK-a. Ako se
koristi 64 bitni sustav za izgradnju OpenWrta, nužno je instalirati 32 bitne verzije
biblioteka i ostatka programske podrške potrebne za pokretanje 32 bitnih izvršnih
datoteka na 64 bitnim sustavima. Ako potrebni programi nisu dostupni, proces
izgradnje neće uspjeti, no nigdje se eksplicitno neće navesti da nedostaje 32 bitna
podrška. Najčešće se javlja greška No such file or directory za 32 bitnu datoteku
koja se pokušava pokrenuti.
Realtekov SDK sadrži datoteku pod nazivom UserGuide u kojoj je opisan
postupak izgradnje OpenWrta za neki od čipova koje SDK podržava. Osim
UserGuidea u direktoriju je nakon otpakiravanja moguće pronaći izvorni kod
potreban za pokretanje sustava, dokumentaciju, otprije izgrađene verzije
OpenWrta za neke verzije čipova (no ne za 8196e koji se nalazi u DIR-615) te
izvorni kod i konfiguracijske datoteke potrebne za ručnu izgradnju OpenWrta.
Kao i kod uobičajenog postupka izgradnje prvo je potrebno osvježiti popis
dodataka (engl. feed) te zatim instalirati željene dodatke. U slučaju Realtekovog
SDK-a updateanjem i instaliranjem instaliraju se dodatne zakrpe te upravljački
programi potrebni za rad čipa, tako da je najbolje izvršiti naredbe dane u
UserGuideu, nakon pozicioniranja u direktorij SDK-a:
13
$ ./scripts/feed update -a i $ ./scripts/feed install -a.
Nakon toga treba kopirati OpenWrt konfiguraciju prilagođenu čipu za koji se gradi
OpenWrt. Za DIR-615 potrebno je izvršiti naredbu
$ cp rtk_defconfig/defconfig_rtl8196e .config.
Dalje treba make naredbom izgraditi OpenWrt te po želji promijeniti konfiguraciju
OpenWrta i Linux jezgre. UserGuide spominje pdf dokumentaciju naziva
OpenWrt_realtek_SDK_ApplicationNote u kojoj su navedene posebne opcije u
konfiguracijama koje je potrebno uključiti za valjanu izgradnju sustava, no u
slučaju 8196e čipa izgradnja je uspješna i bez mijenjanja konfiguracije.
Nakon uspješne izgradnje operacijski sustav je moguće pronaći na
lokaciji ./bin/realtek. Osim za izgradnju OpenWrta koji je dio SDK-a, SDK se može
iskoristiti za izgradnju novije verzije OpenWrta, tako da se iskoriste upravljački
programi koji inače nisu dio OpenWrta ili Linuxa, a nalaze se u SDK-u.
U slučaju izgradnje za QEMU, potrebno je preuzeti Openwrt izvorni kod, osvježiti
popis dodataka i instalirati željene dodatke. Nakon toga naredbom make
menuconfig odabere se željena platforma, u slučaju QEMU emulatora MIPS Malta
CoreLV board (qemu). Za neke platforme treba odabrati i endianness. Uz pomoć
izbornika koji se otvori moguće je odabrati dodatne pakete koji će biti uključeni u
operacijski sustav. Nakon završetka konfiguracije potrebno je izvršiti naredbu make
kojom se izgradi slika operacijskog sustava.
3.3. Upisivanje vlastitog operacijskog sustava
Sljedeći korak je upisivanje (engl. flashing) operacijskog sustava na uređaj.
Operacijski sustav je moguće upisati na više načina a najjednostavnije je koristiti
web sučelje koje nudi većina mrežnih uređaja. Osim preko weba, operacijski
sustav se može upisati preko FTP-a, serijskih vrata ili JTAG-a.
3.3.1. Upisivanje na D-Link DIR-615
Nakon uploadanja izgrađenog OpenWrt operacijskog sustava web sučelje javlja
grešku, Invalid image file. Please select the correct image file and upload it again.
14
Držanjem tipke reset 30 sekundi dok je usmjeritelj upaljen, zatim daljnjim držanjem
još 30 sekundi i istovremenim gašenjem i ponovnim paljenjem usmjeritelja,
usmjeritelj ulazi u emergency mode. IP adresu računala potrebno je postaviti na
192.168.0.2 te se zatim može pristupiti emergency sučelju na adresi 192.168.0.1.
Svrha emergency načina rada je upload operacijskog sustava na usmjeritelj kada
je trenutni operacijski sustav oštećen te nije moguće pokrenuti usmjeritelja.
Međutim uploadanjem operacijskog sustava preko emergency sučelja ponovno se
javlja ista greška.
Otvaranjem službenog operacijsokg sustava u hex editoru (npr. xxd na Linuxu)
dobije se ispis operacijskog sustava u heksadecimalnoj bazi, prikazan u isječku
3.2 .
0000000: 5ea3 a417 0000 0024 0000 0000 7369 676e ^......$....sign
0000010: 6174 7572 653d 7772 676e 3835 5f63 6c6f ature=wrgn85_dlo
0000020: 622e 6861 6e73 5f64 6972 3631 3500 0000 b.hans_dir615...
0000030: 5ea3 a417 0000 0024 0036 d020 96a4 d816 ^......$.6. ….
0000040: df7d b843 0ded 79e9 797f e27b 6465 763d .}.C..y.y..{dev=
0000050: 2f64 6576 2f6d 7464 626c 6f63 6b2f 3100 /dev/mtdblock/1.
0000060: 7479 7065 3d66 6972 6d77 6172 6500 0000 type=firmware...
0000070: 6373 3662 8050 0000 0004 0000 0010 5c02 cs6b.P........\.
…
Isjeĉak koda 3.2. heksadecimalni ispis operacijskog sustava
Heksadecimalnim ispisom datoteke operacijsokg sustava Openwrt dobije se:
0000000: 6373 3663 8050 0000 0001 0000 003b 2ff0 cs6c.P.......;/.
…
Jedna od razlika je u stringovima cs6c i cs6b koji se nalaze na počecima datoteke
operacijskog sustava. Izmjenom bajtova OpenWrt datoteke u cs6b i pokušajem
ponovnog uploada opet se javlja greška invalid image. Isto se dogodi i za
pokušaj uploada operacijskog sustava kojem je dodan cijeli početak datoteke
originalnog operacijskog sustava, uključujući i signature tekst.
15
U objavljenom izvornom kodu za izgradnju službenog operacijskog sustava nalazi
se datoteka tools_firmware.php koja se poslužuje otvaranjem stranice za upload
novog operacijskog sustava na usmjeritelj. Datoteka se nalazi na putanji
DIR615Q2_GPL1702b01/DIR615Q2_GPL1702/templates/aries/dlob.hans/htdocs/
web/tools.php
Datoteka sadrži sljedeći redak:
include "/htdocs/webinc/templates.php";
Pretraživanjem templates.php nalazi se samo jedan redak u kojem se spominje
string firmware pa se upload operacijskog sustava očito odvija negdje drugdje.
Prilikom prijave greške na web sučelju moguće je uočiti sljedeći url:
http://192.168.0.1/tools_fw_rlt.php?RESULT=FAIL&REASON=ERR_INVALID_SE
AMA&PELOTA_ACTION=fwupdate
Pretraživanjem direktorija htdocs naredbom $ grep -r fwupdate pronalazi se
datoteka tools_fw_rlt.php no jedini koristan dio koda prikazan je u isječku 3.3.
if ($_GET["PELOTA_ACTION"]=="fwupdate")
{
if ($_GET["RESULT"]=="SUCCESS")
{
…
}
}
else
{
…
$message = "'".i18n("Invalid image file.")." ".i18n("Please select
the correct image file and upload it again.")."', ".$btn;
}
…
Isjeĉak 3.3 ispis dijela datoteke tools_fw_rlt.php
16
Pretraživanjem izvornog direktorija za izgradnju operacijskog sustava za stringom
fwupdate vidi se da se na više mjesta spominje program /usr/sbin/fwupdater, neki
put zajedno s datotekom /var/firmware.seama.
Ponovnim spajanjem na usmjeritelj Telnetom i ispisom sadržaja direktorija
/usr/sbin moguće je pronaći fwupdater u tom direktoriju. Datoteku fwupdater
moguće je naći u paketu za izgradnju službenog operacijskog sustava u
prebuild/usr/sbin direktoriju, no datoteka je zapravo meki link na datoteku
/htdocs/cgibin, koja sadrži više spojenih izvršnih datoteka usmjeritelja.
Prije analize strojnog koda treba provjeriti dozvoljavaju li uvjeti korištenja analizu
koda. U slučaju DIR-615, uvjeti korištenja nisu došli s usmjeriteljem, no moguće ih
je pronaći u dokumentu s garancijom koji se nalazi na stranici za preuzimanje
operacijskog sustava [11]. Kako uvjeti korištenja ne dozvoljavaju analizu strojnog i
rekonstrukciju izvornog koda, dalje će biti opisan općeniti postupak.
Analiza i rekonstrukcija izvornog koda mogu biti dug posao, pa vrijedi prvo probati
modificirati datoteku operacijskog sustava tako da je provjera valjanosti
operacijskog sustava uvijek uspješna. Ako postoji paket za izgradnju službenog
operacijskog sustava, može se izgraditi operacijski sustav s izmijenjenom
provjerom valjanosti. Ako paket ne postoji, moguće je koristiti sliku za nadogradnju
sustava. Uz pomoć alata binwalk može se analizirati struktura slike operacijskog
sustava [12]. Binwalk može otkriti i raspakirati kompresirane datotečne sustave
koji su često dio slika operacijskog sustava.
Osim binwalka odličan alat za analizu i izmjenu slika operacijskog sustava je
firmware mod kit [13]. Firmware mod kit omogućava razdvajanje slike na dijelove,
otpakiravanje kompresiranih sustava te ponovnu izgradnju slike operacijskog
sustava. Firmware mod kit sadrži niz postojećih alata otvorenog koda kao binwalk,
te skriptu extract-firmware.sh koja analizira sliku i razdvaja različite dijelove. Nakon
otpakiravanja može se pretražiti datotečni sustav operacijskog sustava.
17
Datoteku koja sadrži funkciju za provjeru valjanosti slike operacijskog sustava
najlakše je izmijeniti koristeći alat objdump za odgovarajuću arhitekturu, te bilo koji
hex uređivač. Najlakše je kod funkcije zamijeniti kodom koji odmah izlazi iz
funkcije i vraća rezultat koji označava da je operacijski sustav valjan. Za mips
arhitekturu početak funkcije treba zamijeniti s instrukcijom addu v0, zero, zero čiji
je opcode 0x00001021 i instrukcijom jr $ra čiji je opcode 0x03e0008. Izmjenom
datoteke funkcija će u registar v0 (u koji se obično sprema povratna vrijednost)
spremiti broj 0 (koji označava da je funkcija završila bez greške), te se odmah
vratiti u funkciju iz koje je pozvana.
Nakon izmjene datoteke treba ponovno izgraditi sliku. Najlakše je koristiti skriptu
build-firmware.sh koja dolazi s Firmware mod kitom. Moguće je i ručno sastaviti
sliku kompresiranjem otpakiranog datotečnog sustava s istim algoritmom kojim je
originalno bio kompresiran.
Ako se izmijenjeni operacijski sustav ne može upisati, treba analizirati postupak
provjere valjanosti i rekonstruirati izvorni kod. Ovisno o arhitekturi procesora
usmjeritelja, mogu se koristiti različiti alati. Radare2 je alat otvorenog koda koji je
namijenjen analizi strojnog koda i podržava različite procesorske arhitekture,
između ostalog ARM i MIPS [14]. S obzirom na složenost radare2, jednostavnije je
koristiti objdump za statičku analizu a gdb debugger za dinamičku analizu u
QEMU emulatoru. Osim analize strojnog koda, vrijedi pokušati upisati stariju
verziju službenog operacijskog sustava te nakon toga upisati OpenWrt, s obzirom
na to da je moguće da starije verzije operacijskog sustava nemaju provjeru
valjanosti prilikom upisivanja novog operacijskog sustava.
3.3.2. Upisivanje na DSL-584T
Prilikom pokretanja usmjeritelja, usmjeritelj prvih par sekundi čeka dolazeće FTP
veze [15]. Adresa na kojoj usmjeritelj sluša može biti različita od one na kojoj se
usmjeritelj nalazi nakon što je pokretanje gotovo. Početnu adresu može se saznati
spajanjem preko Telneta nakon što je usmjeritelj završio s pokretanjem,
korisničkim imenom i lozinkom admin te ispisom sadržaja datoteke /proc/ticfg/env.
Kako bi se upisao novi operacijski sustav potrebno je postaviti statičku IP adresu i
podatke o usmjeravanju na računalu s kojeg se šalje operacijski sustav, te
ponovno pokrenuti usmjeritelj i spojiti se na FTP poslužitelj korisničkim imenom i
lozinkom adam2.
18
Cijeli postupak opisan je na OpenWrt wikiju. Na Linux sustavima može se dogoditi
da prilikom slanja operacijskog sustava naredbom put slanje stane pa se umjesto
Linuxa može koristiti Windows XP FTP klijent. Ako slanje stane na Linuxu, treba
probati pokrenuti FTP klijent s root privilegijama. Ako slanje i dalje ne uspijeva
vrijedi probati isključiti TCP F-RTO za retransmisije. Prilikom upisivanja treba paziti
na raspored particija uređaja, jer zbog krivih postavki može doći do blokiranja
(engl. bricking) usmjeritelja.
3.3.3. Pokretanje u QEMU emulatoru
Emulacija OpenWrta detaljno je opisana na OpenWrt wikiju [16].Naredbom qemu-
system-mipsel -kernel openwrt-malta-le-vmlinux-initramfs.elf -nographic -m 256
pokrenut će se emulator te učitati izgrađena slika operacijskog sustava. Ako se
želi koristiti tvrdi disk potrebno je dodati zastavicu -hda disk gdje je disk lokacija
datoteke diska. Treba provjeriti koja verzija QEMU-a je instalirana jer kod
korištenja nekih Linux sustava dolazi do kernel panica u emulatoru kod nekih
starijih verzija QEMU-a. U tom slučaju potrebno je skinuti noviju verziju paketa ili
ručno izgraditi noviji QEMU emulator.
Prilikom pokretanja sustava za prijavu potrebno je stisnuti tipku enter. Dok se ne
postavi lozinka za root account sustav će biti u posebnom stanju u kojem su
upaljeni DNS, DHCP, telnet i SSH serveri no nije upaljen bežični internet.
Postavljanjem lozinke naredbom passwd ugasit će se telnet daemon. Nakon
postavljanja lozinke potrebno je konfigurirati sustav. Osim konfiguracije preko
naredbenog retka moguće je instalirati web sučelje koristeći opkg upravitelj
paketa. Naredbom opkg update osvježava se popis dostupnih datoteka a opkg
install pkgname instalira se program naziva pkgname. Za instaliranje web sučelja
potrebno je izvršiti naredbu opkg install luci. Osim sučelja luci moguće je koristiti i
druga sučelja. Nakon instalacije, na web sučelje se prijavi s korisničkim imenom
root i praznom lozinkom. Preporučuje se kao za račun na routeru postaviti lozinku
za račun web sučelja. Konfiguracija se dalje može provesti koristeći web sučelje ili
naredbeni redak. Dodatne pakete moguće je instalirati koristeći opkg.
19
4. ZAKLJUĈAK
U ovom radu opisan je postupak prenošenja i upisivanja OpenWrt sustava te neki od problema koji se javljaju prilikom prenošenja. Postupak je prikazan na primjeru D-Link DIR-615, D-Link DSL-584T i Siemens C-010-i usmjeritelja. Na temelju opisanog postupka može se zaključiti da složenost postupka ovisi o mnogo čimbenika.
Ako se OpenWrt želi početi koristiti brzo i jednostavno, najisplativije je unaprijed pogledati s kojim uređajima sustav već radi te koristiti jedan od podržanih uređaja. Prilikom odabira uređaja koji će se koristiti, bitno je obratiti pažnju na različite modele te razlike u sklopovlju, s obzirom na to da je moguće da svi modeli nisu podržani.
Ako uređaj nije podržan postupak može biti jednostavan ako je proizvođač objavio neslužbenu prilagođenu verziju OpenWrta za sustav ili OpenWrt podržava slične sustave. Najveći problem su najčešće stariji uređaji na kojima ne radi ni Linux, kao recimo Siemens C-010-i. Za takve uređaje trebalo bi prvo prenijeti Linux na uređaj te zatim i OpenWrt. U takvom slučaju ako se želi koristiti OpenWrt, vjerojatno se više isplati nabaviti drugi uređaj, s obzirom na vrijeme koje je potrebno uložiti u prenošenje.
Još jedan od problema koji se može pojaviti je neuspjeh prilikom upisivanja OpenWrta na podržane uređaje koji imaju noviji operacijski sustav, ako taj operacijski sustav provjerava valjanost operacijski sustav slike koja se upisuje. U tom slučaju, ovisno o uvjetima korištenja, moguće je analizirati strojni kod koji izvršava provjeru ili probati upisati stariju verziju službenog operacijskog sustava pa zatim OpenWrt.
20
LITERATURA
1. OpenWrt Wiki, http://wiki.openwrt.org/, 2017/6/3 17:48
2. Table of Hardware, http://wiki.openwrt.org/toh/start, 2017/6/3 19:32 3. D-Link DIR-615, http://wiki.openwrt.org/toh/d-link/dir-615, 2017/6/3 19:40
4. Hardware Hacking First Steps, 2017/6/3 20:32, http://wiki.openwrt.org/doc/devel/hw.hacking.first.steps
5. D-Link Technical Support, http://tsd.dlink.com.tw/downloads2008list.asp?SourceType=download&OS=GPL, 2017/6/3 20:40
6. Shiny Old VxWorks Vulnerabilities
https://community.rapid7.com/community/metasploit/blog/2010/08/02/shiny-
old-vxworks-vulnerabilities 2017/6/3 22:05
7. HY57V641620HGT, http://www.hynix.com/datasheet/eng/consumer/details/consumer_01_HY57V641620HGT.jsp, 2017/6/3 21:18
8. RTL819X, https://sourceforge.net/projects/rtl819x/, 2017/6/3 21:20
9. Linux Device Drivers, https://lwn.net/Kernel/LDD3/, Greg Kroah-Hartman
2017/6/3 18:02
10. OpenWrt Build System, http://wiki.openwrt.org/doc/howto/buildroot.exigence,
2017/6// 21:10
11. Warranty Document
http://www.dlink.com/pt/pt/-/media/warranties/eu_warranty_guide.pdf 2017/6/3
23:15
12. Binwalk | Firmware Analysis Tool http://binwalk.org/ 2017/6/3 18:24
13. Firmware mod kit https://code.google.com/archive/p/firmware-mod-kit/
2017/6/3 22:05
14. radare https://radare.org/r/ 2017/6/3 16:25
15. D-Link DSL-5xxT and DSL-G6xxT – ADAM2 Installation Guide
https://wiki.openwrt.org/toh/d-link/dsl-5xxt-6xxt-adam2, 2017/6/3 19:29
16. OpenWrt in QEMU https://wiki.openwrt.org/doc/howto/qemu 2017/6/3 21:03
21
SAŢETAK
Prenošenje operacijskog sustava OpenWrt na mreţne ureĊaje
Ovaj rad opisuje postupak prenošenja OpenWrt sustava na nove mrežne uređaje instalaciju na podržane uređaje, te neke od mogućih problema koji se mogu pojaviti pri prijenosu. Postupak je opisan na primjerima D-Link DIR-615, D-Link DSL-584T i Siemens C-010-i usmjeritelje.
Kljuĉne rijeĉi: završni rad, OpenWrt, prenošenje, mrežni uređaji
SUMMARY
Title: Porting OpenWrt Operating System on Network Devices
This bachelor thesis describes the process of porting OpenWrt onto new devices, the process of flashing OpenWrt, and some of the problems that might arise during porting. The D-Link DIR-615, D-Link DSL-584T and Siemens C-010-i routers are used as examples.
Keywords: bachelor thesis, OpenWrt, porting, network devices