SlideShare uma empresa Scribd logo
1 de 30
ÚROVNĚ OCHRANYÚROVNĚ OCHRANYMichal ŠpačekMichal Špaček www.michalspacek.czwww.michalspacek.cz @spazef0rze@spazef0rze
Pro dobytí hradu kdysi nestačilo překonat jen ten bazén, ale taky vysoké zdi a na
nich budované laserové střílny. Webové aplikace byste měli navrhovat podobně, s
několika úrovněmi ochrany. Když selže první úroveň (vývojář), pořád tam jsou další,
které mohou návštěvníky ochránit. Tyto poznámky v původní prezentaci nejsou.
XSS
Cross Site Scripting
Princip více úrovní ochrany se dá hezky ukázat na útoku Cross-Site Scripting. Ten
útočníkům slouží ke spuštění zákeřného JavaScriptu staženého z jiného serveru v
kontextu zranitelné aplikace. Tím mohou zaútočit na uživatele a jejich prohlížeče.
Cross-Site Scripting (XSS) není žádná novinka. Podle Open Sourced Vulnerability
Database byla první XSS zranitelnost publikována v roce 1999.
$1.2 million
Jen v letech 2014-2016 vyplatil Google 1,2 milionu USD na odměnách za nalezení
XSS chyb ve svých aplikacích v rámci Vulnerability Reward Program. To docela jde.
Jen pro zajímavost, na obrázku vidíte muže, vlevo, a milion dolarů ve stodolarových
bankovkách, alespoň podle PageTutoru. To by se skoro vešlo do krabice od vína,
co? Tak zhruba tolika penězi Google za 2 roky odměnil úspěšné nálezce XSS chyb.
<img src=x onerror=alert(1)>
Cross-Site Scripting spočívá ve vložení JavaScriptu útočníkem do stránky. Lze také
vložit například značku img s onerror handlerem, nemusí to být jen tag <script>.
Když se XSS ukazuje nebo reportuje, tak nejčastěji jako alert(1). Důkaz možnosti
spustit nějaký JavaScript to sice je, ale o nebezpečnosti Cross-Site Scriptingu to nic
nevypovídá. Tohle dialogové okno moc lidí o nutnosti řešit XSS nepřesvědčí.
< → &lt;
> → &gt;
" → &quot;
' → &apos;
& → &amp;
První úroveň ochrany proti XSS je při výpisu správně ošetřit tyto nebezpečné znaky,
hlavně ty první čtyři řádky. Ale na to vývojáři často zapomínají a pak se dějí zlé věci.
The Browser Exploitation Framework Project
BeEF
Jenže XSS je mnohem víc než jen alert(1). XSS framework BeEF má zhruba
300 vestavěných modulů, které v browseru umí zobrazit např. falešné notifikace,
falešné přihlašovací formuláře, umí udělat screenshot stránky nebo přehrát MP3.
2nd
line of
DEFENSEVývojáři často zapomínají ošetřit speciální znaky a asi budou zapomínat i nadále.
Protože mají hořící termíny, špatný kafe nebo moc piv. Takže potřebujeme tohle.
Potřebujeme další úrovně zabezpečení. Ty nemusí fungovat vždy a pro všechny
uživatele, ale když první úroveň selže, tak vám může zachránit život. Nebo cookies.
Když už mluvíme o krádeži cookies… tak přesně takhle to funguje.
Aby JavaScript nemohl číst a krást session cookies, označte je ve vaší aplikaci jako
HTTP-Only, frameworky na to často mají konfigurační direktivy. HTTP-Only cookies
se normálně posílají na server, ale JavaScript je nevidí, takže je útočník nemůže
získat pomocí XSS. Pořád to ale půjde např. odposlechem nešifrovaného HTTP.
XSS
Auditor
Další druhá úroveň ochrany je zabudované přímo ve vašem prohlížeči, zvlášť pokud
používáte Chrome, Internet Explorer nebo Edge. Ve Firefoxu není, ale to nevadí,
není to primární úroveň ochrany. XSS auditor (XSS filtr) chrání proti Reflected XSS.
WEB
APP1 2
3
Takto Reflected XSS funguje. Útočník pošle uživateli odkaz s nějakým zákeřným
JavaScriptem v URL (1), uživatel na odkaz klikne a prohlížeč pošle požadavek na
webovou aplikaci (2). JavaScript z požadavku se vloží do stránky a vše se pošle
zpět uživateli (3), v jehož prohlížeči se ten JavaScript spustí. Browser vidí, co se mu
vrátilo z aplikace a pokud to vypadá jako JavaScript, který v požadavku odeslal, tak
spustí XSS filtr, pokud ho prohlížeč má a je povolen.
X-XSS-Protection: 1; mode=block
XSS filtr můžete ovládat ze serveru poslanou hlavičkou X-XSS-Protection. Režim
mode=block byste měli používat, prohlížeč po aktivaci filtru stránku vůbec neukáže.
mode=block je defaultně zapnutý v Chrome od verze 57. Starší verze se pokouší
stránku vyčistit. Na mém testovacím webu si můžete XSS auditor vyzkoušet.
Content Security Policy (CSP) je nejnovější přírůstek v řadě druhých úrovní ochrany
proti XSS. Tato hlavička posílaná ze serveru určuje povolené URL, ze kterých
prohlížeč do stránky může stahovat obrázky, JavaScript, CSS a další. Takže i když
útočník dokáže do HTML vložit značku <script>, tak browser z uvedené adresy
nestáhne kód, pokud ta adresa není povolená.
Content-Security-Policy: default-src 'self'
Toto je asi nejjednodušší varianta hlavičky Content-Security-Policy. Povolí
browseru do stránky poslané s touto hlavičkou načítat JavaScript, obrázky, CSS
a další pouze ze 'self', tedy z aktuálního protokolu, domény a portu (origin).
Content-Security-Policy:
default-src 'self';
img-src 'self' https://www.google-analytics.com
Můžeme navíc povolit načítání obrázků z https://www.google-analytics.com,
aby fungoval skript Google Analytics. Ten by však musel být načten z aktuálního
originu, protože default-src 'self', ale tak to bohužel nefunguje.
Content-Security-Policy:
default-src 'self';
img-src 'self' https://www.google-analytics.com;
script-src 'self'
https://www.google-analytics.com 'unsafe-inline'
V script-src musíme navíc povolit i origin pro skript Google Analytics. Pomocí
direktivy 'unsafe-inline' povolíme rovnou i tzv. inline JavaScript. Jo, JavaScript
zapsaný rovnou do HTML pomocí značek <script> nebo atributů jako např.
onclick může být unsafe. Jenže některé knihovny a nástroje inline JS používají.
csp-evaluator.withgoogle.com
Nasazení CSP není jednoduché a to nejen kvůli nástrojům jako například Google
Tag Manager. Politika často musí být vcelku otevřená, je nutné povolit spoustu
originů i inline JavaScript. Tím se také zvyšují šance pro útočníka, že najde
skulinku, kterou bude moci vložit svůj kód. Nastavení CSP si můžete otestovat v
nástroji CSP Evaluator, prozradí vám, jak by šlo konkrétní politiku obejít.
CSP3
Content Security Policy
Level 3
Situaci vylepšuje CSP3 a 'strict-dynamic'. Díky této direktivě bude prohlížeč
ignorovat seznam povolených domén a bude stahovat jen skripty označené pomocí
nonce, ty navíc mohou vkládat další skripty bez potřeby rozšířovat politiku.
Content-Security-Policy:
script-src 'strict-dynamic'
Direktivu 'strict-dynamic' podporuje Chrome i Firefox, oba shodně od verze 52.
Vyzkoušet si ji můžete na mé testovací stránce. Pojďme si takovou bezpečnou CSP
hlavičku sestavit, začneme tím, že povolíme skripty označené pomocí nonce.
<script
src=…
nonce="rAnd0m123"
>
</script>
Atribut nonce slouží pro označení skriptů. Jeho hodnota by se měla při každém
načtení stránky změnit a měla by být minimálně 16 náhodných bajtů zakódovaných
do Base64. Stejný nonce může být použit k označení více skriptů na jedné stránce.
Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123'
Takto do hlavičky Content-Security-Policy přidáme hodnotu atributu nonce.
Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123'
'unsafe-inline' http: https:;
Starší prohlížeče bez podpory 'strict-dynamic' načtou skripty označené pomocí
atributu nonce a ty pak mohou dále načítat skripty z http: a https:, tedy prakticky
jakékoliv další. Nakonec je potřeba povolit i inline JavaScript pro prohlížeče, které
nepodporují ani nonce z CSP2. Content Security Policy není primární metodou
obrany proti XSS, tou je stále převod nebezpečných znků na entity, takže nevadí, že
pořádně bude fungovat jen pro uživatele moderních prohlížečů s podporou CSP3.
Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123'
'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
Nakonec zakážeme načítaní pluginů, jako např. Flashe, a použití značky base pro
určení base URL stránky. Pomocí obojího lze Cross-Site Scripting spáchat také.
Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123'
'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
report-uri https://report-uri.io/…
Pokud by se prohlížeč pokusil načíst nějaký zdroj, který mu Content Security Policy
zakazuje, tak vám o tom může poslat report na adresu v report-uri a vy tak
můžete případnou chybu opravit. Jenže prohlížeče posílají spoustu reportů aniž
byste v aplikaci nějakou chybu měli, protože lidé používají divná rozšíření, viry nebo
různé free Wi-Fi, které do stránek vkládají reklamu. Než číst každý jednotlivý report,
tak je lepší koukat na grafy a trendy. Obojí vám hezky zobrazí například report-uri.io.
Michal ŠpačekMichal Špaček www.michalspacek.czwww.michalspacek.cz @spazef0rze@spazef0rze
Chybovat je lidské, evidentně, tak na to myslete, až budete budovat obranu svých
aplikací. Protože i skoro 20 let staré útoky jsou pořád in a nebezpečné.

Mais conteúdo relacionado

Mais procurados

HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS)HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS)Michal Špaček
 
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Michal Špaček
 
WebTop100 Technické chyby, výkon a bezpečnost
WebTop100 Technické chyby, výkon a bezpečnostWebTop100 Technické chyby, výkon a bezpečnost
WebTop100 Technické chyby, výkon a bezpečnostMichal Špaček
 
Základy webové bezpečnosti pro PR a marketing
Základy webové bezpečnosti pro PR a marketingZáklady webové bezpečnosti pro PR a marketing
Základy webové bezpečnosti pro PR a marketingMichal Špaček
 
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)Michal Špaček
 
Bezpečnost e-shopů (HTTPS, XSS, CSP)
Bezpečnost e-shopů (HTTPS, XSS, CSP)Bezpečnost e-shopů (HTTPS, XSS, CSP)
Bezpečnost e-shopů (HTTPS, XSS, CSP)Michal Špaček
 
Password manažeři detailněji – 1Password, LastPass, 2FA, sdílení
Password manažeři detailněji – 1Password, LastPass, 2FA, sdíleníPassword manažeři detailněji – 1Password, LastPass, 2FA, sdílení
Password manažeři detailněji – 1Password, LastPass, 2FA, sdíleníMichal Špaček
 
HTTPS (a šifrování) všude
HTTPS (a šifrování) všudeHTTPS (a šifrování) všude
HTTPS (a šifrování) všudeMichal Špaček
 
Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)wcsk
 
Bezpečnost na mobilních zařízeních
Bezpečnost na mobilních zařízeníchBezpečnost na mobilních zařízeních
Bezpečnost na mobilních zařízeníchMichal Špaček
 
WordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czWordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czpeter_sucuri
 
Bezpečnost na webu
Bezpečnost na webuBezpečnost na webu
Bezpečnost na webuMiloš Janda
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůVladimír Smitka
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)Martin Michálek
 

Mais procurados (20)

HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS)HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS)
 
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
 
Přechod na HTTPS
Přechod na HTTPSPřechod na HTTPS
Přechod na HTTPS
 
Hashování hesel
Hashování heselHashování hesel
Hashování hesel
 
Zabezpečení Slevomatu
Zabezpečení SlevomatuZabezpečení Slevomatu
Zabezpečení Slevomatu
 
WebTop100 Technické chyby, výkon a bezpečnost
WebTop100 Technické chyby, výkon a bezpečnostWebTop100 Technické chyby, výkon a bezpečnost
WebTop100 Technické chyby, výkon a bezpečnost
 
Základy webové bezpečnosti pro PR a marketing
Základy webové bezpečnosti pro PR a marketingZáklady webové bezpečnosti pro PR a marketing
Základy webové bezpečnosti pro PR a marketing
 
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)
Víte, že nevíte, že já vím, že nevíte? (WebTop100 2014)
 
Bezpečnost e-shopů (HTTPS, XSS, CSP)
Bezpečnost e-shopů (HTTPS, XSS, CSP)Bezpečnost e-shopů (HTTPS, XSS, CSP)
Bezpečnost e-shopů (HTTPS, XSS, CSP)
 
Password manažeři detailněji – 1Password, LastPass, 2FA, sdílení
Password manažeři detailněji – 1Password, LastPass, 2FA, sdíleníPassword manažeři detailněji – 1Password, LastPass, 2FA, sdílení
Password manažeři detailněji – 1Password, LastPass, 2FA, sdílení
 
Hlava není na hesla
Hlava není na heslaHlava není na hesla
Hlava není na hesla
 
HTTPS (a šifrování) všude
HTTPS (a šifrování) všudeHTTPS (a šifrování) všude
HTTPS (a šifrování) všude
 
Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)
 
Bezpečnost na mobilních zařízeních
Bezpečnost na mobilních zařízeníchBezpečnost na mobilních zařízeních
Bezpečnost na mobilních zařízeních
 
Zapomeňte vaše hesla
Zapomeňte vaše heslaZapomeňte vaše hesla
Zapomeňte vaše hesla
 
WordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czWordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security cz
 
Bezpečnost na webu
Bezpečnost na webuBezpečnost na webu
Bezpečnost na webu
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webů
 
Total Cost of Pwnership
Total Cost of PwnershipTotal Cost of Pwnership
Total Cost of Pwnership
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
 

Semelhante a Víceúrovňová obrana vysvětlená na Cross-Site Scriptingu

#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceVladimír Smitka
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyVladimír Smitka
 
WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3Vladimír Smitka
 
Prezentace - základy bezpečnosti
Prezentace - základy bezpečnostiPrezentace - základy bezpečnosti
Prezentace - základy bezpečnostiBrilo Team
 
Ochrana proti Zero Day útokům typu WannaCry a Petya
Ochrana proti Zero Day útokům typu WannaCry a PetyaOchrana proti Zero Day útokům typu WannaCry a Petya
Ochrana proti Zero Day útokům typu WannaCry a PetyaMarketingArrowECS_CZ
 
Nejčastější webové zranitelnosti
Nejčastější webové zranitelnostiNejčastější webové zranitelnosti
Nejčastější webové zranitelnosticCuMiNn
 
WordCamp Praha 2016 - Bezpečnost WordPress
WordCamp Praha 2016 - Bezpečnost WordPressWordCamp Praha 2016 - Bezpečnost WordPress
WordCamp Praha 2016 - Bezpečnost WordPressVladimír Smitka
 
Hobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webHobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webTomáš Muchka
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018Brilo Team
 
Symantec Advanced Threat Protection
Symantec Advanced Threat ProtectionSymantec Advanced Threat Protection
Symantec Advanced Threat ProtectionMarketingArrowECS_CZ
 

Semelhante a Víceúrovňová obrana vysvětlená na Cross-Site Scriptingu (20)

#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konference
 
QualysGuard InfoDay 2014 - WAS
QualysGuard InfoDay 2014 - WASQualysGuard InfoDay 2014 - WAS
QualysGuard InfoDay 2014 - WAS
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránky
 
WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3
 
Prezentace - základy bezpečnosti
Prezentace - základy bezpečnostiPrezentace - základy bezpečnosti
Prezentace - základy bezpečnosti
 
TNPW2-2012-03
TNPW2-2012-03TNPW2-2012-03
TNPW2-2012-03
 
Ochrana proti Zero Day útokům typu WannaCry a Petya
Ochrana proti Zero Day útokům typu WannaCry a PetyaOchrana proti Zero Day útokům typu WannaCry a Petya
Ochrana proti Zero Day útokům typu WannaCry a Petya
 
Nejčastější webové zranitelnosti
Nejčastější webové zranitelnostiNejčastější webové zranitelnosti
Nejčastější webové zranitelnosti
 
TNPW2-2013-03
TNPW2-2013-03TNPW2-2013-03
TNPW2-2013-03
 
WordCamp Praha 2016 - Bezpečnost WordPress
WordCamp Praha 2016 - Bezpečnost WordPressWordCamp Praha 2016 - Bezpečnost WordPress
WordCamp Praha 2016 - Bezpečnost WordPress
 
Hobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webHobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro web
 
TNPW2-2011-03
TNPW2-2011-03TNPW2-2011-03
TNPW2-2011-03
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018
 
Symantec Advanced Threat Protection
Symantec Advanced Threat ProtectionSymantec Advanced Threat Protection
Symantec Advanced Threat Protection
 
Wordfence 2016
Wordfence 2016Wordfence 2016
Wordfence 2016
 

Mais de Michal Špaček

Lámání a ukládání hesel
Lámání a ukládání heselLámání a ukládání hesel
Lámání a ukládání heselMichal Špaček
 
Fantom Opery, "VPN" a Secure Proxy v Opeře
Fantom Opery, "VPN" a Secure Proxy v OpeřeFantom Opery, "VPN" a Secure Proxy v Opeře
Fantom Opery, "VPN" a Secure Proxy v OpeřeMichal Špaček
 
Quality of Life, Multiple Lines of Defense
Quality of Life, Multiple Lines of DefenseQuality of Life, Multiple Lines of Defense
Quality of Life, Multiple Lines of DefenseMichal Špaček
 
Disclosing password hashing policies
Disclosing password hashing policiesDisclosing password hashing policies
Disclosing password hashing policiesMichal Špaček
 
Operations security (OPSEC) in IT
Operations security (OPSEC) in ITOperations security (OPSEC) in IT
Operations security (OPSEC) in ITMichal Špaček
 
HTTP Strict Transport Security (HSTS), English version
HTTP Strict Transport Security (HSTS), English versionHTTP Strict Transport Security (HSTS), English version
HTTP Strict Transport Security (HSTS), English versionMichal Špaček
 
I forgot my password – what a secure password reset needs to have and why
I forgot my password – what a secure password reset needs to have and whyI forgot my password – what a secure password reset needs to have and why
I forgot my password – what a secure password reset needs to have and whyMichal Špaček
 
The problem with the real world
The problem with the real worldThe problem with the real world
The problem with the real worldMichal Špaček
 
Defense in Depth Web Inkognito 12/2013
Defense in Depth Web Inkognito 12/2013Defense in Depth Web Inkognito 12/2013
Defense in Depth Web Inkognito 12/2013Michal Špaček
 
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013Bezpečnost webových aplikací Web Inkognito VŠE 05/2013
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013Michal Špaček
 

Mais de Michal Špaček (11)

Lámání a ukládání hesel
Lámání a ukládání heselLámání a ukládání hesel
Lámání a ukládání hesel
 
Fantom Opery, "VPN" a Secure Proxy v Opeře
Fantom Opery, "VPN" a Secure Proxy v OpeřeFantom Opery, "VPN" a Secure Proxy v Opeře
Fantom Opery, "VPN" a Secure Proxy v Opeře
 
Quality of Life, Multiple Lines of Defense
Quality of Life, Multiple Lines of DefenseQuality of Life, Multiple Lines of Defense
Quality of Life, Multiple Lines of Defense
 
Disclosing password hashing policies
Disclosing password hashing policiesDisclosing password hashing policies
Disclosing password hashing policies
 
Operations security (OPSEC) in IT
Operations security (OPSEC) in ITOperations security (OPSEC) in IT
Operations security (OPSEC) in IT
 
HTTP Strict Transport Security (HSTS), English version
HTTP Strict Transport Security (HSTS), English versionHTTP Strict Transport Security (HSTS), English version
HTTP Strict Transport Security (HSTS), English version
 
I forgot my password – what a secure password reset needs to have and why
I forgot my password – what a secure password reset needs to have and whyI forgot my password – what a secure password reset needs to have and why
I forgot my password – what a secure password reset needs to have and why
 
HTTP/2
HTTP/2HTTP/2
HTTP/2
 
The problem with the real world
The problem with the real worldThe problem with the real world
The problem with the real world
 
Defense in Depth Web Inkognito 12/2013
Defense in Depth Web Inkognito 12/2013Defense in Depth Web Inkognito 12/2013
Defense in Depth Web Inkognito 12/2013
 
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013Bezpečnost webových aplikací Web Inkognito VŠE 05/2013
Bezpečnost webových aplikací Web Inkognito VŠE 05/2013
 

Víceúrovňová obrana vysvětlená na Cross-Site Scriptingu

  • 1. ÚROVNĚ OCHRANYÚROVNĚ OCHRANYMichal ŠpačekMichal Špaček www.michalspacek.czwww.michalspacek.cz @spazef0rze@spazef0rze Pro dobytí hradu kdysi nestačilo překonat jen ten bazén, ale taky vysoké zdi a na nich budované laserové střílny. Webové aplikace byste měli navrhovat podobně, s několika úrovněmi ochrany. Když selže první úroveň (vývojář), pořád tam jsou další, které mohou návštěvníky ochránit. Tyto poznámky v původní prezentaci nejsou.
  • 2. XSS Cross Site Scripting Princip více úrovní ochrany se dá hezky ukázat na útoku Cross-Site Scripting. Ten útočníkům slouží ke spuštění zákeřného JavaScriptu staženého z jiného serveru v kontextu zranitelné aplikace. Tím mohou zaútočit na uživatele a jejich prohlížeče.
  • 3. Cross-Site Scripting (XSS) není žádná novinka. Podle Open Sourced Vulnerability Database byla první XSS zranitelnost publikována v roce 1999.
  • 4. $1.2 million Jen v letech 2014-2016 vyplatil Google 1,2 milionu USD na odměnách za nalezení XSS chyb ve svých aplikacích v rámci Vulnerability Reward Program. To docela jde.
  • 5. Jen pro zajímavost, na obrázku vidíte muže, vlevo, a milion dolarů ve stodolarových bankovkách, alespoň podle PageTutoru. To by se skoro vešlo do krabice od vína, co? Tak zhruba tolika penězi Google za 2 roky odměnil úspěšné nálezce XSS chyb.
  • 6. <img src=x onerror=alert(1)> Cross-Site Scripting spočívá ve vložení JavaScriptu útočníkem do stránky. Lze také vložit například značku img s onerror handlerem, nemusí to být jen tag <script>.
  • 7. Když se XSS ukazuje nebo reportuje, tak nejčastěji jako alert(1). Důkaz možnosti spustit nějaký JavaScript to sice je, ale o nebezpečnosti Cross-Site Scriptingu to nic nevypovídá. Tohle dialogové okno moc lidí o nutnosti řešit XSS nepřesvědčí.
  • 8. < → &lt; > → &gt; " → &quot; ' → &apos; & → &amp; První úroveň ochrany proti XSS je při výpisu správně ošetřit tyto nebezpečné znaky, hlavně ty první čtyři řádky. Ale na to vývojáři často zapomínají a pak se dějí zlé věci.
  • 9. The Browser Exploitation Framework Project BeEF Jenže XSS je mnohem víc než jen alert(1). XSS framework BeEF má zhruba 300 vestavěných modulů, které v browseru umí zobrazit např. falešné notifikace, falešné přihlašovací formuláře, umí udělat screenshot stránky nebo přehrát MP3.
  • 10. 2nd line of DEFENSEVývojáři často zapomínají ošetřit speciální znaky a asi budou zapomínat i nadále. Protože mají hořící termíny, špatný kafe nebo moc piv. Takže potřebujeme tohle.
  • 11. Potřebujeme další úrovně zabezpečení. Ty nemusí fungovat vždy a pro všechny uživatele, ale když první úroveň selže, tak vám může zachránit život. Nebo cookies.
  • 12. Když už mluvíme o krádeži cookies… tak přesně takhle to funguje.
  • 13. Aby JavaScript nemohl číst a krást session cookies, označte je ve vaší aplikaci jako HTTP-Only, frameworky na to často mají konfigurační direktivy. HTTP-Only cookies se normálně posílají na server, ale JavaScript je nevidí, takže je útočník nemůže získat pomocí XSS. Pořád to ale půjde např. odposlechem nešifrovaného HTTP.
  • 14. XSS Auditor Další druhá úroveň ochrany je zabudované přímo ve vašem prohlížeči, zvlášť pokud používáte Chrome, Internet Explorer nebo Edge. Ve Firefoxu není, ale to nevadí, není to primární úroveň ochrany. XSS auditor (XSS filtr) chrání proti Reflected XSS.
  • 15. WEB APP1 2 3 Takto Reflected XSS funguje. Útočník pošle uživateli odkaz s nějakým zákeřným JavaScriptem v URL (1), uživatel na odkaz klikne a prohlížeč pošle požadavek na webovou aplikaci (2). JavaScript z požadavku se vloží do stránky a vše se pošle zpět uživateli (3), v jehož prohlížeči se ten JavaScript spustí. Browser vidí, co se mu vrátilo z aplikace a pokud to vypadá jako JavaScript, který v požadavku odeslal, tak spustí XSS filtr, pokud ho prohlížeč má a je povolen.
  • 16. X-XSS-Protection: 1; mode=block XSS filtr můžete ovládat ze serveru poslanou hlavičkou X-XSS-Protection. Režim mode=block byste měli používat, prohlížeč po aktivaci filtru stránku vůbec neukáže.
  • 17. mode=block je defaultně zapnutý v Chrome od verze 57. Starší verze se pokouší stránku vyčistit. Na mém testovacím webu si můžete XSS auditor vyzkoušet.
  • 18. Content Security Policy (CSP) je nejnovější přírůstek v řadě druhých úrovní ochrany proti XSS. Tato hlavička posílaná ze serveru určuje povolené URL, ze kterých prohlížeč do stránky může stahovat obrázky, JavaScript, CSS a další. Takže i když útočník dokáže do HTML vložit značku <script>, tak browser z uvedené adresy nestáhne kód, pokud ta adresa není povolená.
  • 19. Content-Security-Policy: default-src 'self' Toto je asi nejjednodušší varianta hlavičky Content-Security-Policy. Povolí browseru do stránky poslané s touto hlavičkou načítat JavaScript, obrázky, CSS a další pouze ze 'self', tedy z aktuálního protokolu, domény a portu (origin).
  • 20. Content-Security-Policy: default-src 'self'; img-src 'self' https://www.google-analytics.com Můžeme navíc povolit načítání obrázků z https://www.google-analytics.com, aby fungoval skript Google Analytics. Ten by však musel být načten z aktuálního originu, protože default-src 'self', ale tak to bohužel nefunguje.
  • 21. Content-Security-Policy: default-src 'self'; img-src 'self' https://www.google-analytics.com; script-src 'self' https://www.google-analytics.com 'unsafe-inline' V script-src musíme navíc povolit i origin pro skript Google Analytics. Pomocí direktivy 'unsafe-inline' povolíme rovnou i tzv. inline JavaScript. Jo, JavaScript zapsaný rovnou do HTML pomocí značek <script> nebo atributů jako např. onclick může být unsafe. Jenže některé knihovny a nástroje inline JS používají.
  • 22. csp-evaluator.withgoogle.com Nasazení CSP není jednoduché a to nejen kvůli nástrojům jako například Google Tag Manager. Politika často musí být vcelku otevřená, je nutné povolit spoustu originů i inline JavaScript. Tím se také zvyšují šance pro útočníka, že najde skulinku, kterou bude moci vložit svůj kód. Nastavení CSP si můžete otestovat v nástroji CSP Evaluator, prozradí vám, jak by šlo konkrétní politiku obejít.
  • 23. CSP3 Content Security Policy Level 3 Situaci vylepšuje CSP3 a 'strict-dynamic'. Díky této direktivě bude prohlížeč ignorovat seznam povolených domén a bude stahovat jen skripty označené pomocí nonce, ty navíc mohou vkládat další skripty bez potřeby rozšířovat politiku.
  • 24. Content-Security-Policy: script-src 'strict-dynamic' Direktivu 'strict-dynamic' podporuje Chrome i Firefox, oba shodně od verze 52. Vyzkoušet si ji můžete na mé testovací stránce. Pojďme si takovou bezpečnou CSP hlavičku sestavit, začneme tím, že povolíme skripty označené pomocí nonce.
  • 25. <script src=… nonce="rAnd0m123" > </script> Atribut nonce slouží pro označení skriptů. Jeho hodnota by se měla při každém načtení stránky změnit a měla by být minimálně 16 náhodných bajtů zakódovaných do Base64. Stejný nonce může být použit k označení více skriptů na jedné stránce.
  • 26. Content-Security-Policy: script-src 'strict-dynamic' 'nonce-rAnd0m123' Takto do hlavičky Content-Security-Policy přidáme hodnotu atributu nonce.
  • 27. Content-Security-Policy: script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; Starší prohlížeče bez podpory 'strict-dynamic' načtou skripty označené pomocí atributu nonce a ty pak mohou dále načítat skripty z http: a https:, tedy prakticky jakékoliv další. Nakonec je potřeba povolit i inline JavaScript pro prohlížeče, které nepodporují ani nonce z CSP2. Content Security Policy není primární metodou obrany proti XSS, tou je stále převod nebezpečných znků na entity, takže nevadí, že pořádně bude fungovat jen pro uživatele moderních prohlížečů s podporou CSP3.
  • 28. Content-Security-Policy: script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; Nakonec zakážeme načítaní pluginů, jako např. Flashe, a použití značky base pro určení base URL stránky. Pomocí obojího lze Cross-Site Scripting spáchat také.
  • 29. Content-Security-Policy: script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; report-uri https://report-uri.io/… Pokud by se prohlížeč pokusil načíst nějaký zdroj, který mu Content Security Policy zakazuje, tak vám o tom může poslat report na adresu v report-uri a vy tak můžete případnou chybu opravit. Jenže prohlížeče posílají spoustu reportů aniž byste v aplikaci nějakou chybu měli, protože lidé používají divná rozšíření, viry nebo různé free Wi-Fi, které do stránek vkládají reklamu. Než číst každý jednotlivý report, tak je lepší koukat na grafy a trendy. Obojí vám hezky zobrazí například report-uri.io.
  • 30. Michal ŠpačekMichal Špaček www.michalspacek.czwww.michalspacek.cz @spazef0rze@spazef0rze Chybovat je lidské, evidentně, tak na to myslete, až budete budovat obranu svých aplikací. Protože i skoro 20 let staré útoky jsou pořád in a nebezpečné.