SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement

WWW hacking a obrana / 10. časť

Tlačové správy
0

Ten­to­raz sa po­zrie­me na po­sled­né spô­so­by, kto­ré mô­že útoč­ník po­užiť na in­jek­to­va­nie kó­du do strán­ky. Ne­za­bú­daj­te však, že sme tu nes­po­me­nu­li všet­ky, nie je to mož­né, pre­to­že sa spô­so­by kom­bi­nu­jú a zá­ro­veň sa po­uží­va­jú hexade­ci­mál­ne a iné vy­jad­re­nia zna­kov, aby vek­tor (re­ťa­zec) pre­šiel filtra­mi XSS. Na kon­ci člán­ku však má­te uve­de­né lin­ky na web, kde náj­de­te ove­ľa viac vek­to­rov, kto­ré mô­že útoč­ník po­užiť, prí­pad­ne už bo­li po­uži­té pro­ti rôz­nym webo­vým ap­li­ká­ciám. Ďalej sa po­zrie­me na je­den za­ují­ma­vý pro­jekt o bez­peč­nos­ti webo­vých ap­li­ká­cií a na­ko­niec za­čne­me pre­be­rať spô­sob prá­ce filtra vek­to­rov XSS.

9. spô­sob
Ten­to spô­sob po­uží­va tag <BGSOUND> de­fi­nu­jú­ci zvu­ko­vý sú­bor, kto­rý hrá na po­za­dí strán­ky.
<BGSOUND SRC="zvuk.wav">

Preh­lia­dač Ope­ra však ak­cep­tu­je aj nas­le­du­jú­ci kód a zob­ra­zí ja­vas­crip­to­vý alert().
<BGSOUND SRC="ja­vas­cript:alert()">

prí­pad­ne

<BGSOUND SRC="ja­vas­cript:alert(String.from­Char­Co­de(88,83,83))">

Na od­strá­ne­nie toh­to vek­to­ra sta­čí od­filtro­vať BGSOUND. Má­lo ap­li­ká­cií je vy­tvo­re­ných tak, aby po­uží­va­teľ (klient) mo­hol/po­tre­bo­val po­sie­lať tag <BGSOUND>.

10. spô­sob
Do­kon­ca aj po­mo­cou ta­gu, kto­rý má pri­po­jiť vzdia­le­ný sú­bor s kas­ká­do­vý­mi štýl­mi (CSS), sa da­jú in­jek­to­vať skrip­ty.

<LINK REL="sty­les­heet" HREF='ja­vas­cript:alert("XSS");'>

Oby­čaj­ne pa­ra­me­ter HREF ob­sa­hu­je ces­tu k sú­bo­ru s kas­ká­do­vý­mi štýl­mi s prí­po­nou .CSS.

11. spô­sob
Je dô­le­ži­té filtro­vať aj hexade­ci­mál­ny zá­pis zna­kov, pre­to­že tu sú jas­né prík­la­dy to­ho, že ak en­gi­nu webo­vé­ho preh­lia­da­ča nep­re­ká­ža­jú pri skrip­te zna­ky no­vé­ho riad­ka (carria­ge re­turn a li­ne feed) ale­bo ta­bu­lá­to­ra, ne­mu­sia mu pre­ká­žať ani v prí­pa­de, že bu­dú za­pí­sa­né v hexade­ci­mál­nej po­do­be.

Carria­ge re­turn -
Li­ne feed -& #x0A;
Tab (ho­ri­zon­tál­ny ta­bu­lá­tor) - &#x09;

Po­tom mô­žu vek­to­ry vy­ze­rať nap­rík­lad tak­to:
<IMG SRC="jav&#x0A;asc&#x0A;ript:alert();">

<IMG SRC="jav&#x0D;asc&#x0A;ript:alert();">

Do­kon­ca aj nas­le­du­jú­ci vek­tor prej­de cez fil­ter, kto­rý ne­kon­tro­lu­je hexade­ci­mál­ny zá­pis CR, LF a TAB-u.
&#x0D;<IMG SRC="jav&#x0D;&#x0D;&#x09;&#x09;asc&#x0A;&#x09;ript:a&#x0D;lert
();"&#x0D;>

12. spô­sob
V tom­to prí­pa­de ide o kód, kto­rý nas­ta­vu­je po­za­die ta­buľ­ky.
Oby­čaj­ne vy­ze­rá tag TAB­LE s pa­ra­met­rom BACKGROUND tak­to:
<TAB­LE BACKGROUND="po­za­die.jpg">

Ak však pa­ra­me­ter BACKGROUND ta­gu TAB­LE ob­sa­hu­je skript, webo­vý preh­lia­dač ho vy­ko­ná.
<TAB­LE BACKGROUND="ja­vas­cript:alert();">

Fun­go­vať bu­dú aj ta­gy <TD>.
<TAB­LE><TD BACKGROUND="ja­vas­cript:alert();"></TD></TAB­LE>

Prob­lém je v tom, že preh­lia­dač ne­kon­tro­lu­je (ig­no­ru­je), či ide o sú­bor (ob­rá­zok).

13. spô­sob
Tag <STY­LE> de­fi­nu­je št­ýl CSS. Inter­net Explo­rer 6 však do­vo­lí spus­te­nie skrip­tu.
<STY­LE>@im\po­rt'\ja\vasc\ript:alert("XSS!")';</STY­LE>

14. spô­sob
Ten­to kód de­fi­nu­je št­ýl, v tom­to prí­pa­de dôj­de k zob­ra­ze­niu sprá­vy s ob­sa­hom XSS. Ak fil­ter od­strá­ni re­ťa­zec STY­LE, spus­te­nie kó­du sa ne­po­da­rí.
<b STY­LE="b:expres­sion(alert('XSS'))">

Po­dob­ný krát­ky kód, kto­rý útoč­ník ús­peš­ne in­jek­tu­je do webo­vej ap­li­ká­cie, mô­že spô­so­biť útok DoS, pre­to­že strán­ka bu­de ne­dos­tup­ná pre po­uží­va­te­ľa. Ne­pôj­de te­da o útok DoS, kto­rým bu­de oc­hro­me­ný server, ale, nao­pak, klien­tsky po­čí­tač (ap­li­ká­cia – webo­vý preh­lia­dač).

Spô­sob č.:

9

10

11

12

13

14

Fi­re­fox

NIE

NIE

NIE

NIE

NIE

NIE

Inter­net Explo­rer 6

NIE

ÁNO

ÁNO

ÁNO

ÁNO

ÁNO

Inter­net Explo­rer 7

NIE

NIE

NIE

NIE

NIE

NIE

Net­sca­pe Na­vi­ga­tor

NIE

NIE

NIE

NIE

NIE

NIE

Ope­ra

ÁNO

ÁNO

ÁNO

ÁNO

NIE

NIE

Sa­fa­ri

NIE

NIE

NIE

NIE

NIE

NIE

Tes­to­va­né preh­lia­da­če:
Mo­zil­la Fi­re­fox v. 2.0.0.6 (Mo­zil­la
Sa­fa­ri 3.0.3 (App­le Inc.)
Mic­ro­soft Inter­net Explo­rer 6 (Mic­ro­soft)
Win­dows Inter­net Explo­rer 7.0 (Mic­ro­soft)
Ope­ra 9.23 (Ope­ra Software ASA)
Net­sca­pe Na­vi­ga­tor 9.0 (Net­sca­pe Com­mu­ni­ca­tions Cor­po­ra­tion)

Web­Goat
Web­Goat je pro­jekt, na kto­rom sú de­monštro­va­né rôz­ne ty­py ap­li­ká­cií, kto­ré sa vy­sky­tu­jú na inter­ne­te. Tie­to ukáž­ko­vé ap­li­ká­cie sú nap­rog­ra­mo­va­né tak, že ob­sa­hu­jú rôz­ne bez­peč­nos­tné chy­by zneu­ži­teľ­né po­mo­cou webo­vé­ho preh­lia­da­ča. Kaž­dý si tak mô­že vy­skú­šať hac­king bez to­ho, aby po­ško­dil ne­ja­ký server, a lep­šie po­cho­piť to, ako sa vy­va­ro­vať po­dob­ných chýb vo svo­jich sku­toč­ných webo­vých ap­li­ká­ciách.

In­šta­lá­cia:
In­šta­lá­cia je jed­no­duc­há, pre­to­že ob­sa­hu­je všet­ko po­treb­né, aj vlast­ný server Tom­cat. Nav­štív­te strán­ku www.owasp.org, do­mov­skú strán­ku pro­jek­tu Web­Goat. Mô­že­te však vy­užiť aj pria­my link na stiah­nu­tie sú­bo­ru (po­zri lin­ky na kon­ci člán­ku). Sú­bor ZIP má vy­še 40 MB. Roz­baľ­te ho ho­cik­de na disk.

Po­znám­ka:
Po­čas po­uží­va­nia Web­Goat ne­buď­te pri­po­je­ní k žiad­nej sie­ti, pre­to­že váš po­čí­tač je nác­hyl­ný na útok.

V ad­re­sá­ri Web­Goat spus­ti­te sú­bor web­goat.bat ale­bo web­goat_8080.bat, a to v prí­pa­de, že už má­te po­rt 80 na svo­jom po­čí­ta­či ob­sa­de­ný (nap­rík­lad server­om Apac­he).

Po­tom do webo­vé­ho preh­lia­da­ča za­daj­te ad­re­su http://lo­cal­host/Web­Goat/at­tack. A prih­lás­te sa údaj­mi me­no: guest a hes­lo: guest, Start Web­Goat a mô­že­te si vy­skú­šať rôz­ne tec­hni­ky úto­kov na rôz­ne pr­vky webo­vej ap­li­ká­cie.
XSS a SQL In­jec­tion sú sa­moz­rej­mos­ti. Za­ují­ma­vé sú ta­kis­to Web Servic­es a AJAX se­cu­ri­ty. Ak si ne­bu­de­te ve­dieť dať ra­dy, prog­ram vám na­po­vie, ak stla­čí­te tla­čid­lo Hints. Zdro­jo­vý kód ap­li­ká­cie, s kto­rou prá­ve pra­cu­je­te a po­kú­ša­te sa ju na­bú­rať, je na­pí­sa­ný v Ja­ve (tla­čid­lo Show Ja­va).

XSS fil­ter
Nap­rog­ra­mo­vať fil­ter, kto­rý bu­de filtro­vať po­ten­ciál­ne ne­bez­peč­né zna­ky ale­bo sub­re­ťaz­ce v re­ťaz­coch, kto­ré pric­hád­za­jú od klien­ta (útoč­ní­ka), nie je ťaž­ké, no nie je za­ru­če­né, že ne­ja­ký preh­lia­dač bu­de ak­cep­to­vať aj vy­slo­ve­ne nes­práv­ny kód skrip­tu, kto­rý sa v klien­tskom webo­vom preh­lia­da­či vy­ko­ná.
Zá­kla­dom filtrač­né­ho al­go­rit­mu je od­filtro­vať to, čo de­fi­nu­je (spô­so­bu­je) vy­ko­ná­va­nie kó­du. A v ja­zy­ku HTML sú to prá­ve zna­ky < a >. Ako is­te vie­te, roz­li­šu­je­me dva hlav­né ty­py ta­gov (zna­čiek), a to pá­ro­vé a ne­pá­ro­vé. S tým tre­ba pri návr­hu kva­lit­né­ho filtrač­né­ho al­go­rit­mu po­čí­tať.

Je tu však je­den prob­lém. Ne­mož­no od­filtro­vať zna­ky < a >, pre­to­že ich po­tre­bu­je­me pri po­vo­le­ných ta­goch, nap­rík­lad pri <H1> </H1> ale­bo <a href = od­kaz.html> </a>.
A prá­ve pre­to os­tá­va už len dru­hý spô­sob – od­filtro­va­nie všet­kých os­tat­ných zna­kov, re­ťaz­cov a ta­gov, kto­ré nec­hce­me po­vo­liť, čo je po­dstat­ne ťaž­šie.
Niek­to­rí prog­ra­má­to­ri sa myl­ne dom­nie­va­jú, že ak v ne­ja­kom preh­lia­da­či fun­gu­je in­jek­to­va­ný re­ťa­zec a v inom nie, tak to zna­me­ná, že ich ne­ja­ko preh­lia­dač pre­vie­dol na HTML en­ti­ty. To však nie je prav­da, pre­to­že webo­vý preh­lia­dač ich vlas­tne iba ig­no­ru­je.

Fil­ter te­da bu­de od­stra­ňo­vať ne­bez­peč­né zna­ky, kto­ré by moh­li spô­so­biť XSS. Kon­tro­lo­vať a filtro­vať kód mu­sí al­go­rit­mus filtra dov­te­dy, kým pred­chád­za­jú­ci cyk­lus nie­čo od­strá­nil, pre­to­že od­strá­ne­ním ne­ja­ké­ho sub­re­ťaz­ca z re­ťaz­ca (dát), kto­ré idú do filtro­va­nia, by mo­hol vznik­núť no­vý kód, kto­rý by spô­so­bil ús­peš­né vy­ko­na­nie XSS.

Zá­ver
Od­po­rú­ča­me nav­ští­viť strán­ku http://ha.ckers.org/xss.html, kde náj­de­te množ­stvo rôz­nych XSS vek­to­rov, na kto­rých mô­že­te otes­to­vať kva­li­tu svoj­ho filtra, ako aj strán­ku http://sla.ckers.org/fo­rum/, na kto­rej je kva­lit­né dis­kus­né fó­rum. Náj­de­te v ňom od­po­veď tak­mer na všet­ky otáz­ky z ob­las­ti za­bez­pe­če­nia webo­vých ap­li­ká­cií. V ďal­šej čas­ti se­riá­lu, kto­rá bu­de ce­lá ve­no­va­ná návr­hu filtra pro­ti XSS, do­kon­čí­me té­mu XSS a nap­rog­ra­mu­je­me XSS fil­ter v PHP.

Lin­ky:
http://ha.ckers.org/xss.html
http://www.owasp.org
http://sour­ce­for­ge.net/pro­ject/showfi­les.php?group_id=64424&pac­ka­ge_id=61824

Ján Chovanec

Všetky autorove články
hacking obrana seriál 10.cast

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať