Zlouporaba ranjivosti računalnih sustava
Exploit
Vrste exploita
Buffer overflow
Heap overflow
Integer overflow
Format string attack
SQL injection
Cross-site scripting

8. Cross site scripting

8.1. XSS ranjivosti
   8.1.1. Ispisivanje skupa naredbi putem zlonamjernog link-a
   8.1.2. Slanje nedozvoljenog zahtjeva
   8.1.3. Krađa korisničkih kolačića (engl. cookies)
8.2. Kako se zaštititi?
   8.2.1. Filtriranje
   8.2.2. Kodiranje
8.3. Stvarni primjeri

Danas su Web stranice kompleksnije nego ikad jer sadrže mnogo dinamičkih sadržaja. Ti dinamički sadržaji se ostvaruju pomoću Web aplikacija koje u ovisnosti o njihovim postavkama i potrebama isporučuju korisniku različite izlaze. Za razliku od statičkih, dinamičke web stranice pate od opasnosti koja se naziva cross site scripting. Nekoć se za ranjivosti ove vrste koristila kratica CSS, ali zbog česte zabune sa Cascading Style Sheets i Content-scrambling system danas se koristi kratica XSS.

Cross site scripting se dogodi kada dinamički generirana web stranica pokazuje ulaz bez provjere da li je isti valjan. Ovo omogućuje napadaču da u generiranu stranicu uklopi zlonamjerni JavaScript kôd i da izvrši skriptu na računalu korisnika koje pregledava tu stranicu. Ova ranjivost je uobičajena kod pretraživača koji ispisuju unesenu ključnu riječ, poruka o pogrešci koje ispisuju znakovni niz koji sadrži grešku ili obrascima čije se vrijednosti kasnije pokazuju korisniku itd.

8.1. XSS ranjivosti

[<< natrag na vrh]

Napadač koji uspješno iskoristi XSS ranjivost može kompromitirati povjerljive informacije, manipulirati ili ukrasti cookies, poslati lažni zahtjev predstavljajući se kao neki drugi korisnik, izvršavati zlonamjerni kôd na krajnjim korisničkim računalima itd. Opisat ćemo neke od poznatijih načina napada ove vrste.

8.1.1. Ispisivanje skupa naredbi putem zlonamjernog link-a

[<< natrag na vrh]

U slučaju ispisivanja naredebi putem zlonamjernog link-a, napadač će poslati žrtvi napada posebno stvorenu email poruku koja sadrži zlonamjernu skriptu unutar linka. Na primjer:

<A HREF =
http://neka_stranica.com/registracija.cgi?profil_klijenta=
      <SCRIPT>zlonamjerni kod</SCRIPT>>
      Click here
</A>

Ako korisnik, ne sumljajući ništa, klikne na ovaj link, poslat će poslužitelju zahtjev za stranicom neka_stranica.com zajedno sa zlonamjernom skriptom. Kada poslužitelj pošalje stranicu natrag korisniku poslat će mu i vrijednost parametra profil_klijenta, te će se u korisnikovom pregledniku izvesi zlonamjerna skripta. (Slika 8.1.)


Slika 8.1. Napad putem zlonamjernog link-a

8.1.2. Slanje nedozvoljenog zahtjeva

[<< natrag na vrh]

U ovom slučaju korisnik također neznajući izvodi zlonamjernu skriptu na svom računalu, nakon što je slijedio posebno stvoren link. Zbog toga što se skripta izvodi tako da se čini da je potekla od legitimnog poslužitelja, napadač ima potpuni pristup dokumentu koji je vraćen i može poslati podatke koji su sadržani u stranici na neku svoju stranicu. Ako ugrađena skripta ima dodatne interakcijske sposobnosti sa legitimnim poslužiteljem bez da upozorava žrtvu napada, napadač može eksploatirati primljene podatke o žrtvi na nekoj drugoj stranici legitimnog poslužitelja (Slika 8.2.).


Slika 8.2. Slanje nedozvoljenog zahtjeva

8.1.3. Krađa korisničkih kolačića (engl. cookies)

[<< natrag na vrh]

Ako bilokoji dio web stranice koristi cookies, tada postoji mogućnost da ih se može ukrasti od korisnika. U ovom slučaju, pri pregledavanju stranice izvrši se zlonamjerna skripta  koju je stvorio napadač i ''pokupi'' korisničke cookies i pošalje zahtjev za napadačevom web stranicom sa skupljenim cookies. Koristeći ovu tehniku napadač može dobiti osjetljive podatke poput lozinki, broja kreditnih kartica, ili proizvoljnu informacije koje unosi korisnik (Slika8.3.).


Slika 8.3. Krađa korisničkih kolačića (engl. cookies)

8.2. Kako se zaštititi?

[<< natrag na vrh]

            Cross site scripting se postiže kada napadač preko legitimnog Web poslužitelja pošalje web pregledniku žrtve napada stranicu koja sadrži zlonamjernu skriptu. Ta skripta će se izvesti koristeći sve dozvole kao legitimna skripta sa legitimnog poslužitelja. Razvojni programeri mogu zaštititi svoje web stranice tako da osiguraju da dinamički generirana stranica ne sadrži neželjene oznake (engl. tag).

Da bi smanjio rizik XSS napada korisnik može onemogućiti izvođenje skriptnih jezika u svom web pregledniku što pruža najbolju zaštitu, ali ima za posljedicu smanjenje funkcionalnosti. Također, korisnik može slijediti linkove isključivo preko naslovnice Web stranice koja ga zanima što će znatno smanjiti njegovo izlaganje ovoj prijetnji uz zadržavanje funkcionalnosti preglednika.

Međutim, korisnička rješenja nisu nikad potpuna rješenja. Ostaje na razvojnim programerima da modificiraju svoje stranice kako bi eliminirali probleme ove vrste. To se može postići ispravnim filtriranjem i potvrđivanjem ispravnosti dobivenog ulaza i pravilnim kodiranjem ili filtriranjem izlaza koji se vraća korisniku.

Stvaranje web stranice koja nije ranjiva na XSS napade uključuje napore razvojnih programera, administratora poslužitelja i proizvođača preglednika. Iako su gore navedena rješenja djelotvorna u smanjenju rizika od XSS napada, ona nisu potpuna rješenja. Najbolje je imati na umu da se sigurnost web aplikacije mora konstantno provjeravati i unaprjeđivati.

8.2.1. Filtriranje

[<< natrag na vrh]

Osnova ovog pristupa je da ne treba nikad vjerovati korisničkom ulazu i da je potrebno uvjek filtrirati posebne znakove (engl. metacharacters) koji su definirani u HTML specifikaciji. Svako ulazno polje, uključujući parametre linka, mora biti provjereno da ne sadrže oznake skripti (engl. script tags). Ako se pronađu nedozvoljeni znakovi, ulaz se odbacuje i na taj način se spriječava prezentiranje zlonamjernog HTML-a u korisnikovom web pregledniku.

Složenosti pridonosti i činjenica da mnogi Web poslužitelji pokušavaju ispraviti uobičajene pogreške u HTML-u. Kao rezultat toga, oni ponekad tretiraju određene znakove kao da su posebni, iako po specifikaciji, oni to nisu. Stoga je važno uočiti da pojedine situacije mogu tražiti uključivanje dodatnih znakova u listu specijalnih znakova.

Filtriranje ulaza nije toliko učinkovito zato što se dinamički sadržaj može ubaciti u bazu podataka Web stranice raznim metodama, a ne samo koristeći HTTP. U tom slučaju, Web poslužitelj neće vidjeti podatke kao dio ulaza pa će oni ostati iskvareni. Preporučuje se obaviti filtriranje izlaza prije nego se preda dinamičkoj stranici.

8.2.2. Kodiranje

[<< natrag na vrh]

Cross site scripting napadi mogu se izbjeći ako Web poslužitelj adekvatno osigurava da se generirane stranice propisno kodiraju nebili se izbjeglo nenamjeravano izvođenje skripti.

Svaki znak u ISO-8859-1 spscifikaciji se može kodirati koristeći njegovu numeričku vrijednost. Tko npr. < i > se mogu napisati kao &lt i &gt, razmak se može napisati kao %20, znakovi ( i ) kao &#40 i &#41 itd.

Općenito govoreći, kodiranje se preporuča zato što nije potrebno odlučiti koji znakovi će se zabraniti, a koji dozvoliti. Nažalost, kodiranje svih nepouzdanih podataka može zauzeti veliku količinu resursa i usporiti prefomanse nekih web poslužitelja.

8.3. Stvarni primjeri

[<< natrag na vrh]

Postoji doslovno na tisuće primjera cross site scripting ranjivosti koje su javno dostupne. Ovdje je radi ilustracije navedeno samo nekoliko primjera.

Primjer ranjivosti slanja nedozvoljenog zahjeva pronađen je u prosincu 2005. unutar Google.com web stranice. Ranjivost je omogućavala napadaču da se lažno predstavi kao član Google  usluga ili da postavi phishing napad.

04. Listopada 2005. godine XSS virus Samy je eksploatirao sigurnosnu pogrešku unutar MySpace-a. Koristio je višestruke XML Http zahtjeve da bi se širio. Unutar samo 20 sati virus se proširio između gotovo milion korisnika. MySpace je podigao tužbu protiv tvorca virusa Sammya Kamkar. On je 31.01. 2007.  priznao krivnju.

08.11.2006. godine Rajesh Sethumadhavan je otkrio XSS ranjivost na društvenoj stranici Orkut. Orkut je društvena stranica koja se pokreće na Google-u, a nazvana je po svom tvorcu Orkut Büyükköktenu. Otkrivena ranjivost je omogućavala korisnicima da injektiraju HTML i java skripte u svoje profile. Rodrigo Lacerda je iskoristio ovu ranjivost da bi stvorio skriptu za krađu kolačića (engl. Cookies) koja je poznata kao Orkut Cookie Exploit i koja se injektirala u Orkut profile napadača. Pregledavanjem tih profila podaci žrtava su se slali na lažni račun napadača. 12. 12. 2006. Orkut je popravio ovu ranjivost.

1.8.2007. uočeni su višestruki sigurnosni nedostatci u radu iPhone programskog paketa, koji se koristi za reprodukciju multimedijalnih sadržaja, vizualizaciju glasovne pošte i sl. te pruža i niz Internet usluga, kao što su e-mail i pregledavanje weba. Spomenuti nedostatci uzrokovani su sličnim znakovima u URL adresi i posebno oblikovanim web stranicama, posjećenim od strane korisnika, a udaljenom napadaču omogućuju izvođenje XSS napada, pokretanje izvođenja proizvoljnog programskog koda ili neočekivano rušenje ranjive aplikacije

28.8.2007. otkriveno je više sigurnosnih propusta unutar Bugzilla programskog paketa. Bugzilla paket namijenjen je praćenju sigurnosnih propusta i njihovih posljedica putem web sučelja. U svom radu on se oslanja na MySQL ili PostgreSQL bazu podataka. Propusti su posljedica neodgovarajućeg rada "email_in.pl" modula i WebService korisničkog sučelja. Udaljeni ih napadač može iskoristiti za izvođenje XSS napada ili za razotkrivanje potencijalno povjerljivih podataka.

LITERATURA

[<< natrag na vrh]

autor: Marijana Zelanto, 0036400264