Zranitelnosti webových aplikací Testování webových aplikací Seznam.cz Roman Kümmel Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Cross-Site Request Forgery (CSRF) - Zneužití důvěry serveru v uživatele - Nic netušící uživatel odešle serveru GET/POST požadavek - Skript na serveru rozpozná uživatele podle cookie a požadavek pod identitou uživatele vykoná - Může jít také o XMLHttpRequesty (AJAX požadavky) Zranitelnosti webových aplikací Cross-Site Request Forgery (CSRF) - Útočník odešle uživateli odkaz pro odeslání nebezpečného požadavku cílové aplikaci - Možnost zneužití HTML prvků načítajících externí obsah http://www.webmailcz/remail?email=utocnik@seznam.cz Zranitelnosti webových aplikací Cross-Site Request Forgery (CSRF) - Útočník vytvoří webovou stránku, která sama odešle nebezpečné požadavky cílové aplikaci ve chvíli, kdy ji (přihlášený) uživatel navštíví - Pro utajení akce se formulář vloží do skrytého rámu
Zranitelnosti webových aplikací Cross-Site Request Forgery (CSRF) - Kontrola HTTP hlavičky REFERER - Nedoporučuji, možnost odeslání požadavků bez této hlavičky - Kontrola hlavičky ORIGIN u XMLHttpRequestů - Podobná situace jako u hlavičky Referer - Přidání autorizačního tokenu ke všem požadavkům - Útočník nemůže připravit útočný požadavek bez jeho znalosti - Ideální je platnost tokenu časově omezit OBRANA http://aplikace.cz/remail?email=utocnik@seznam.cz&ticket=ba5e5aa2f472 Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Clickjacking - Je-li nasazena ochrana před útoky CSRF - Nic netušící uživatel sám klikne na prvek nebo vyplní a odešle formulář, bez toho, aby věděl, co vlastně dělá. - Útok založen na možnosti načíst web. stránku do rámu - Průhlednost rámu - Překrytí nechtěných prvků - Vkládání údajů do aplikace, nebo krádež dat z aplikace. Zranitelnosti webových aplikací Clickjacking - JavaScript FrameKiller - if (top.location != self.location) - Nedoporučuji - možnost načtení zdrojáku view-source: - Lze vyřadit zneužitím XSS filtru - HTTP Response Hlavička X-Frame Options - DENY - SAMEORIGIN - ALLOW-FROM - Content Security Policy OBRANA Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Cross-Site Scripting (XSS) - Spuštění JavaScriptu v uživatelově prohlížeči - Same Origin Policy brání přístupu k jiným doménám - Injekce skriptu do webové aplikace umožňuje přístup ke všem jejím objektům (čtení/zápis) - Únos sezení - Změna nebo čtení uložených dat (podvržení přihlašovacích formulářů, atd.) - XSS proxy - Typy zranitelnosti XSS - Perzistentní - Non-Perzistentní - DOM based (např. u AJAX aplikací) Zranitelnosti webových aplikací Cross-Site Scripting (XSS)
Uživatelský příspěvek:
------------------------------------------------------------------------------------------
“>
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ odkaz Zranitelnosti webových aplikací Cross-Site Scripting (XSS) var json = eval("(" + xhr.responseText + ")"); {"a":10, "b":20, "c":alert(1)} {"a":10, "b":20, "c":"alert(1)"} “ + alert(“XSS“) + “ {“a“: ““ + alert(“XSS“) + ““} {“a“: “\“ + alert(\“XSS\“) + \““} AJAX Zranitelnosti webových aplikací Cross-Site Scripting (XSS) - Náhrada metaznaků “ ‘ & < > za HTML entity < - Escapování metaznaků v řetězcích JavaScriptu \‘ OBRANA Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací CRLF injection Injekce HTTP hlaviček vložením bílých znaků CR+LF Request: seznam.cz?foo=test%0D%0Aheader:value Response: location: www.seznam.cz?foo=test header: value Zranitelnosti webových aplikací CRLF injection - Ošetřit bílé znaky před vložením hodnoty do hlavičky - například URL encoding OBRANA Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací SQL injection $name = $_GET[‘name‘] $query = “SELECT * FROM database WHERE name=‘$name‘“ www.webmail.cz?name=‘ OR ‘a‘=‘a SELECT * FROM database WHERE name=‘‘ OR ‘a‘=‘a‘ SELECT * FROM database WHERE name=‘‘; DROP database--‘ Zranitelnosti webových aplikací SQL injection Escapovat metaznaky (apostrofy) SELECT * FROM database WHERE name=‘\‘ OR \‘A\‘=\‘A‘ Direktiva magic_quotes_gpc OBRANA Zranitelnosti webových aplikací SQL injection $id = $_GET[‘id‘] $query = “SELECT * FROM database WHERE id=$id“ www.webmail.cz?id=1 or 1=1 SELECT * FROM database WHERE id=1 OR 1=1 Zranitelnosti webových aplikací SQL injection Přetypováním: $id = (int)$_GET[‘id‘] Uzavírání číselných hodnot do apostrofů + jejich ošetření www.webmail.cz?id=1 or 1=1 $query = “SELECT * FROM database WHERE id=‘$id‘“ SELECT * FROM database WHERE id=‘1 OR 1=1‘ www.webmail.cz?id=1‘ or ‘1‘=‘1 SELECT * FROM database WHERE id=‘1\‘ or \‘1\‘=\‘1‘ OBRANA Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Nedostatečná autorizace - Kontrola zda je uživatel přihlášen, ne zda má dostatečná práva - Není kontrolováno, zda uživatel skutečně nakládá se svými daty - Nejčastější útoky změnou id v požadavku OBRANA - Při každé akci provést všechny možné kontroly - Je uživatel přihlášen? - Nakládá s daty, ke kterým má povolen přístup? - Má uživatel povoleny akce jež se snaží vykonat? Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Forced browsing - Procházení stránek změnou id v požadavku - Možnost získání celých databází OBRANA - Nepoužívat id v požadavcích - Používat jedinečný identifikátor Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Nezabezpečený upload - Kontrolovat typ a strukturu uploadovaných dat - Konvertovat obrázky - Ošetřit bílé znaky a znaky pro procházení adresářů v názvu uploadovaného souboru (použít nový název) - Zakázat spouštění skriptů v adresářích pro upload OBRANA - Upload serverového skriptu a jeho spuštění může vést k ovládnutí serveru - Zneužití důvěryhodné domény k uploadu souborů, které slouží k infikování počítačů konečných uživatelů Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi Zranitelnosti webových aplikací Local File Inclusion (disclosure) - Možnost zobrazení nebo spuštění serverového skriptu - Script lze na server dostat: - Uploadem souboru - Uploadem nakaženého obrázku - Přes cookies a session proměnné - Enviroment (proc/self/environ) - Zneužitím logů (var/www/logs/access_log, apd.) Zranitelnosti webových aplikací Local File Inclusion (disclosure) GET: webmail.cz?action=view.php $page = $_GET[“action“]; Include($page); webmail.cz?action=../../../../etc/passwd webmail.cz?action=../images/foto.jpg Zranitelnosti webových aplikací Local File Inclusion (disclosure) - Vhodně nastavený webový server - Neincludovat soubory na základě proměnné obdržené od uživatele - Ošetřit výskyt sekvence ../ OBRANA Zranitelnosti webových aplikací Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Clickjacking CSRF CRLF injection XSS Útoky proti aplikaci SQL injection Nedostatečná autorizace Forced browsing Nezabezpečený upload Path traversal DoS, DDoS Sociotechnika Wi-Fi http://webmail.hackingvpraxi.cz Webmail použitý v ukázkách je dostupný na adrese Zranitelnosti webových aplikací Penetrační testování Automatické vs. manuální testování Zranitelnosti webových aplikací Automatické testování - Klady - Rychlost - Odstraňují opakující se úkony (../ ../../ ../../../ ../../../../) - Hledání konfiguračních souborů - Fuzzing - apd. - Zápory - Nelze se na ně plně spolehnout - Nedokáží odhalit reakce projevující se na jiných místech - Při důkladných testech se nelze manuálním testům vyhnout Zranitelnosti webových aplikací Manuální testování - Klady - Důkladná analýza výstupu umožní lépe přizpůsobit následné testy - Je možné odhalit i reakce projevující se na jiných místech aplikace - Na důkladně provedené testy se lze spolehnout - Zápory - Pentester je jen člověk a může něco přehlédnout - Opakující se činnosti je časově náročné a vyčerpávající Zranitelnosti webových aplikací Jak zajišťujeme bezpečnost aplikací v Seznam.cz Zranitelnosti webových aplikací - Vzděláváním vývojářů - Penetračním testováním betaverzí - Průběžnou kontrolou ostrých verzí - Komunikací s white hat hackery (spolupráce se SOOM.cz) Jak zajišťujeme bezpečnost aplikací v Seznam.cz Zabezpečení webových aplikací Dotazy Zranitelnosti webových aplikací Děkuji za pozornost