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