WWW hacking a obrana / 10. časť
Tentoraz sa pozrieme na posledné spôsoby, ktoré môže útočník použiť na injektovanie kódu do stránky. Nezabúdajte však, že sme tu nespomenuli všetky, nie je to možné, pretože sa spôsoby kombinujú a zároveň sa používajú hexadecimálne a iné vyjadrenia znakov, aby vektor (reťazec) prešiel filtrami XSS. Na konci článku však máte uvedené linky na web, kde nájdete oveľa viac vektorov, ktoré môže útočník použiť, prípadne už boli použité proti rôznym webovým aplikáciám. Ďalej sa pozrieme na jeden zaujímavý projekt o bezpečnosti webových aplikácií a nakoniec začneme preberať spôsob práce filtra vektorov XSS.
9. spôsob
Tento spôsob používa tag <BGSOUND> definujúci zvukový súbor, ktorý hrá na pozadí stránky.
<BGSOUND SRC="zvuk.wav">
Prehliadač Opera však akceptuje aj nasledujúci kód a zobrazí javascriptový alert().
<BGSOUND SRC="javascript:alert()">
prípadne
<BGSOUND SRC="javascript:alert(String.fromCharCode(88,83,83))">
Na odstránenie tohto vektora stačí odfiltrovať BGSOUND. Málo aplikácií je vytvorených tak, aby používateľ (klient) mohol/potreboval posielať tag <BGSOUND>.
10. spôsob
Dokonca aj pomocou tagu, ktorý má pripojiť vzdialený súbor s kaskádovými štýlmi (CSS), sa dajú injektovať skripty.
<LINK REL="stylesheet" HREF='javascript:alert("XSS");'>
Obyčajne parameter HREF obsahuje cestu k súboru s kaskádovými štýlmi s príponou .CSS.
11. spôsob
Je dôležité filtrovať aj hexadecimálny zápis znakov, pretože tu sú jasné príklady toho, že ak enginu webového prehliadača neprekážajú pri skripte znaky nového riadka (carriage return a line feed) alebo tabulátora, nemusia mu prekážať ani v prípade, že budú zapísané v hexadecimálnej podobe.
Carriage return -
Line feed -& #x0A;
Tab (horizontálny tabulátor) - 	
Potom môžu vektory vyzerať napríklad takto:
<IMG SRC="jav
asc
ript:alert();">
<IMG SRC="jav
asc
ript:alert();">
Dokonca aj nasledujúci vektor prejde cez filter, ktorý nekontroluje hexadecimálny zápis CR, LF a TAB-u.

<IMG SRC="jav

		asc
	ript:a
lert
();"
>
12. spôsob
V tomto prípade ide o kód, ktorý nastavuje pozadie tabuľky.
Obyčajne vyzerá tag TABLE s parametrom BACKGROUND takto:
<TABLE BACKGROUND="pozadie.jpg">
Ak však parameter BACKGROUND tagu TABLE obsahuje skript, webový prehliadač ho vykoná.
<TABLE BACKGROUND="javascript:alert();">
Fungovať budú aj tagy <TD>.
<TABLE><TD BACKGROUND="javascript:alert();"></TD></TABLE>
Problém je v tom, že prehliadač nekontroluje (ignoruje), či ide o súbor (obrázok).
13. spôsob
Tag <STYLE> definuje štýl CSS. Internet Explorer 6 však dovolí spustenie skriptu.
<STYLE>@im\port'\ja\vasc\ript:alert("XSS!")';</STYLE>
14. spôsob
Tento kód definuje štýl, v tomto prípade dôjde k zobrazeniu správy s obsahom XSS. Ak filter odstráni reťazec STYLE, spustenie kódu sa nepodarí.
<b STYLE="b:expression(alert('XSS'))">
Podobný krátky kód, ktorý útočník úspešne injektuje do webovej aplikácie, môže spôsobiť útok DoS, pretože stránka bude nedostupná pre používateľa. Nepôjde teda o útok DoS, ktorým bude ochromený server, ale, naopak, klientsky počítač (aplikácia – webový prehliadač).
Spôsob č.: |
9 |
10 |
11 |
12 |
13 |
14 |
Firefox |
NIE |
NIE |
NIE |
NIE |
NIE |
NIE |
Internet Explorer 6 |
NIE |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
Internet Explorer 7 |
NIE |
NIE |
NIE |
NIE |
NIE |
NIE |
Netscape Navigator |
NIE |
NIE |
NIE |
NIE |
NIE |
NIE |
Opera |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
NIE |
NIE |
Safari |
NIE |
NIE |
NIE |
NIE |
NIE |
NIE |
Testované prehliadače:
Mozilla Firefox v. 2.0.0.6 (Mozilla
Safari 3.0.3 (Apple Inc.)
Microsoft Internet Explorer 6 (Microsoft)
Windows Internet Explorer 7.0 (Microsoft)
Opera 9.23 (Opera Software ASA)
Netscape Navigator 9.0 (Netscape Communications Corporation)
WebGoat
WebGoat je projekt, na ktorom sú demonštrované rôzne typy aplikácií, ktoré sa vyskytujú na internete. Tieto ukážkové aplikácie sú naprogramované tak, že obsahujú rôzne bezpečnostné chyby zneužiteľné pomocou webového prehliadača. Každý si tak môže vyskúšať hacking bez toho, aby poškodil nejaký server, a lepšie pochopiť to, ako sa vyvarovať podobných chýb vo svojich skutočných webových aplikáciách.
Inštalácia:
Inštalácia je jednoduchá, pretože obsahuje všetko potrebné, aj vlastný server Tomcat. Navštívte stránku www.owasp.org, domovskú stránku projektu WebGoat. Môžete však využiť aj priamy link na stiahnutie súboru (pozri linky na konci článku). Súbor ZIP má vyše 40 MB. Rozbaľte ho hocikde na disk.
Poznámka:
Počas používania WebGoat nebuďte pripojení k žiadnej sieti, pretože váš počítač je náchylný na útok.
V adresári WebGoat spustite súbor webgoat.bat alebo webgoat_8080.bat, a to v prípade, že už máte port 80 na svojom počítači obsadený (napríklad serverom Apache).
Potom do webového prehliadača zadajte adresu http://localhost/WebGoat/attack. A prihláste sa údajmi meno: guest a heslo: guest, Start WebGoat a môžete si vyskúšať rôzne techniky útokov na rôzne prvky webovej aplikácie.
XSS a SQL Injection sú samozrejmosti. Zaujímavé sú takisto Web Services a AJAX security. Ak si nebudete vedieť dať rady, program vám napovie, ak stlačíte tlačidlo Hints. Zdrojový kód aplikácie, s ktorou práve pracujete a pokúšate sa ju nabúrať, je napísaný v Jave (tlačidlo Show Java).
XSS filter
Naprogramovať filter, ktorý bude filtrovať potenciálne nebezpečné znaky alebo subreťazce v reťazcoch, ktoré prichádzajú od klienta (útočníka), nie je ťažké, no nie je zaručené, že nejaký prehliadač bude akceptovať aj vyslovene nesprávny kód skriptu, ktorý sa v klientskom webovom prehliadači vykoná.
Základom filtračného algoritmu je odfiltrovať to, čo definuje (spôsobuje) vykonávanie kódu. A v jazyku HTML sú to práve znaky < a >. Ako iste viete, rozlišujeme dva hlavné typy tagov (značiek), a to párové a nepárové. S tým treba pri návrhu kvalitného filtračného algoritmu počítať.
Je tu však jeden problém. Nemožno odfiltrovať znaky < a >, pretože ich potrebujeme pri povolených tagoch, napríklad pri <H1> </H1> alebo <a href = odkaz.html> </a>.
A práve preto ostáva už len druhý spôsob – odfiltrovanie všetkých ostatných znakov, reťazcov a tagov, ktoré nechceme povoliť, čo je podstatne ťažšie.
Niektorí programátori sa mylne domnievajú, že ak v nejakom prehliadači funguje injektovaný reťazec a v inom nie, tak to znamená, že ich nejako prehliadač previedol na HTML entity. To však nie je pravda, pretože webový prehliadač ich vlastne iba ignoruje.
Filter teda bude odstraňovať nebezpečné znaky, ktoré by mohli spôsobiť XSS. Kontrolovať a filtrovať kód musí algoritmus filtra dovtedy, kým predchádzajúci cyklus niečo odstránil, pretože odstránením nejakého subreťazca z reťazca (dát), ktoré idú do filtrovania, by mohol vzniknúť nový kód, ktorý by spôsobil úspešné vykonanie XSS.
Záver
Odporúčame navštíviť stránku http://ha.ckers.org/xss.html, kde nájdete množstvo rôznych XSS vektorov, na ktorých môžete otestovať kvalitu svojho filtra, ako aj stránku http://sla.ckers.org/forum/, na ktorej je kvalitné diskusné fórum. Nájdete v ňom odpoveď takmer na všetky otázky z oblasti zabezpečenia webových aplikácií. V ďalšej časti seriálu, ktorá bude celá venovaná návrhu filtra proti XSS, dokončíme tému XSS a naprogramujeme XSS filter v PHP.
Linky:
http://ha.ckers.org/xss.html
http://www.owasp.org
http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=61824