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

Embed Size (px)

Citation preview

ROVN OCHRANY

Michal paek www.michalspacek.cz @spazef0rze

Pro dobyt hradu kdysi nestailo pekonat jen ten bazn, ale taky vysok zdi a na nich budovan laserov stlny. Webov aplikace byste mli navrhovat podobn, s nkolika rovnmi ochrany. Kdy sele prvn rove (vvoj), pod tam jsou dal, kter mohou nvtvnky ochrnit. Tyto poznmky v pvodn prezentaci nejsou.

XSS
Cross Site Scripting

Princip vce rovn ochrany se d hezky ukzat na toku Cross-Site Scripting. Ten tonkm slou ke sputn zkenho JavaScriptu staenho z jinho serveru v kontextu zraniteln aplikace. Tm mohou zatoit na uivatele a jejich prohlee.

Cross-Site Scripting (XSS) nen dn novinka. Podle Open Sourced Vulnerability Database byla prvn XSS zranitelnost publikovna v roce 1999.

$1.2 million

Jen v letech 2014-2016 vyplatil Google 1,2 milionu USD na odmnch za nalezen XSS chyb ve svch aplikacch v rmci Vulnerability Reward Program. To docela jde.

Jen pro zajmavost, na obrzku vidte mue, vlevo, a milion dolar ve stodolarovch bankovkch, alespo podle PageTutoru. To by se skoro velo do krabice od vna, co? Tak zhruba tolika penzi Google za 2 roky odmnil spn nlezce XSS chyb.

Cross-Site Scripting spov ve vloen JavaScriptu tonkem do strnky. Lze tak vloit napklad znaku img s onerror handlerem, nemus to bt jen tag .

Kdy se XSS ukazuje nebo reportuje, tak nejastji jako alert(1). Dkaz monosti spustit njak JavaScript to sice je, ale o nebezpenosti Cross-Site Scriptingu to nic nevypovd. Tohle dialogov okno moc lid o nutnosti eit XSS nepesvd.

< >" "' '& &

Prvn rove ochrany proti XSS je pi vpisu sprvn oetit tyto nebezpen znaky, hlavn ty prvn tyi dky. Ale na to vvoji asto zapomnaj a pak se dj zl vci.

The Browser Exploitation Framework Project

BeEF

Jene XSS je mnohem vc ne jen alert(1). XSS framework BeEF m zhruba 300 vestavnch modul, kter v browseru um zobrazit nap. falen notifikace, falen pihlaovac formule, um udlat screenshot strnky nebo pehrt MP3.

2nd line of
DEFENSE

Vvoji asto zapomnaj oetit speciln znaky a asi budou zapomnat i nadle. Protoe maj hoc termny, patn kafe nebo moc piv. Take potebujeme tohle.

Potebujeme dal rovn zabezpeen. Ty nemus fungovat vdy apro vechny uivatele, ale kdy prvn rove sele, tak vm me zachrnit ivot. Nebo cookies.

Kdy u mluvme o krdei cookies tak pesn takhle to funguje.

Aby JavaScript nemohl st a krst session cookies, oznate je ve va aplikaci jako HTTP-Only, frameworky na to asto maj konfiguran direktivy. HTTP-Only cookies se normln poslaj na server, ale JavaScript je nevid, take je tonk neme zskat pomoc XSS. Pod to ale pjde nap. odposlechem neifrovanho HTTP.

XSSAuditor

Dal druh rove ochrany je zabudovan pmo ve vaem prohlei, zvl pokud pouvte Chrome, Internet Explorer nebo Edge. Ve Firefoxu nen, ale to nevad, nen to primrn rove ochrany. XSS auditor (XSS filtr) chrn proti Reflected XSS.

WEB
APP

1

2

3

Takto Reflected XSS funguje. tonk pole uivateli odkaz s njakm zkenm JavaScriptem v URL (1), uivatel na odkaz klikne a prohle pole poadavek na webovou aplikaci (2). JavaScript z poadavku se vlo do strnky a ve se pole zpt uivateli (3), v jeho prohlei se ten JavaScript spust. Browser vid, co se mu vrtilo z aplikace a pokud to vypad jako JavaScript, kter v poadavku odeslal, tak spust XSS filtr, pokud ho prohle m a je povolen.

X-XSS-Protection: 1; mode=block

XSS filtr mete ovldat ze serveru poslanou hlavikou X-XSS-Protection. Reim mode=block byste mli pouvat, prohle po aktivaci filtru strnku vbec neuke.

mode=block je defaultn zapnut v Chrome od verze 57. Star verze se pokou strnku vyistit. Na mm testovacm webu si mete XSS auditor vyzkouet.

Content Security Policy (CSP) je nejnovj prstek v ad druhch rovn ochrany proti XSS. Tato hlavika poslan ze serveru uruje povolen URL, ze kterch prohle do strnky me stahovat obrzky, JavaScript, CSS a dal. Take i kdy tonk doke do HTML vloit znaku , tak browser z uveden adresy nesthne kd, pokud ta adresa nen povolen.

Content-Security-Policy: default-src 'self'

Toto je asi nejjednodu varianta hlaviky Content-Security-Policy. Povol browseru do strnky poslan s touto hlavikou natat JavaScript, obrzky, CSS a dal pouze ze 'self', tedy z aktulnho protokolu, domny a portu (origin).

Content-Security-Policy:
default-src 'self';
img-src 'self' https://www.google-analytics.com

Meme navc povolit natn obrzk z https://www.google-analytics.com, aby fungoval skript Google Analytics. Ten by vak musel bt naten z aktulnho originu, protoe default-src 'self', ale tak to bohuel 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 musme navc povolit i origin pro skript Google Analytics. Pomoc direktivy 'unsafe-inline' povolme rovnou i tzv. inline JavaScript. Jo, JavaScript zapsan rovnou do HTML pomoc znaek nebo atribut jako nap. onclick me bt unsafe. Jene nkter knihovny a nstroje inline JS pouvaj.

csp-evaluator.withgoogle.com

Nasazen CSP nen jednoduch a to nejen kvli nstrojm jako napklad Google Tag Manager. Politika asto mus bt vcelku oteven, je nutn povolit spoustu origin i inline JavaScript. Tm se tak zvyuj ance pro tonka, e najde skulinku, kterou bude moci vloit svj kd. Nastaven CSP si mete otestovat v nstroji CSP Evaluator, prozrad vm, jak by lo konkrtn politiku obejt.

CSP3Content Security Policy
Level 3

Situaci vylepuje CSP3 a 'strict-dynamic'. Dky tto direktiv bude prohle ignorovat seznam povolench domn a bude stahovat jen skripty oznaen pomoc nonce, ty navc mohou vkldat dal skripty bez poteby rozovat politiku.

Content-Security-Policy:
script-src 'strict-dynamic'

Direktivu 'strict-dynamic' podporuje Chrome i Firefox, oba shodn od verze 52. Vyzkouet si ji mete na m testovac strnce. Pojme si takovou bezpenou CSP hlaviku sestavit, zaneme tm, e povolme skripty oznaen pomoc nonce.


Atribut nonce slou pro oznaen skript. Jeho hodnota by se mla pi kadm naten strnky zmnit a mla by bt minimln 16 nhodnch bajt zakdovanch do Base64. Stejn nonce me bt pouit k oznaen vce skript na jedn strnce.

Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123'

Takto do hlaviky Content-Security-Policy pidme hodnotu atributu nonce.

Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;

Star prohlee bez podpory 'strict-dynamic' natou skripty oznaen pomoc atributu nonce a ty pak mohou dle natat skripty z http: a https:, tedy prakticky jakkoliv dal. Nakonec je poteba povolit i inline JavaScript pro prohlee, kter nepodporuj ani nonce z CSP2. Content Security Policy nen primrn metodou obrany proti XSS, tou je stle pevod nebezpench znk na entity, take nevad, e podn bude fungovat jen pro uivatele modernch prohle s podporou CSP3.

Content-Security-Policy:
script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none';
base-uri 'none';

Nakonec zakeme natan plugin, jako nap. Flashe, a pouit znaky base pro uren base URL strnky. Pomoc obojho lze Cross-Site Scripting spchat 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 prohle pokusil nast njak zdroj, kter mu Content Security Policy zakazuje, tak vm o tom me poslat report na adresu v report-uri a vy tak mete ppadnou chybu opravit. Jene prohlee poslaj spoustu report ani byste v aplikaci njakou chybu mli, protoe lid pouvaj divn rozen, viry nebo rzn free Wi-Fi, kter do strnek vkldaj reklamu. Ne st kad jednotliv report, tak je lep koukat na grafy a trendy. Oboj vm hezky zobraz napklad report-uri.io.

Michal paek www.michalspacek.cz @spazef0rze

Chybovat je lidsk, evidentn, tak na to myslete, a budete budovat obranu svch aplikac. Protoe i skoro 20 let star toky jsou pod in a nebezpen.