Jak se bránit útokům na webu?

Veronika Svobodová / 8. 7. 2020

Přesměrování na podvodnou verzi webu, ukradení přihlašovacích nebo osobních údajů, vytvoření podvodné objednávky v e-shopu... To jsou jen některé útoky, se kterými se můžete setkat jak v pozici provozovatele, tak uživatele. Jak se jim bránit?

Jak se bránit útokům na webu?

Věděli jste že....?

Každý web obsahuje v průměru 22 zranitelných míst, jako jsou například formuláře nebo nezabezpečené přístupy ke stránce.
Z toho 4 místa bývají kriticky zranitelná.

Data za rok 2019

Představíme si sadu bezpečnostních opatření, které se postarají o bezpečnost vašeho webu i uživatelů.

HTTP Strict Transport Security (HSTS)

HSTS je protokol, který stanovuje, že veškeré stránky na dané doméně požadují připojení přes protokol HTTPS. Pokud se prohlížeč pokusí navštívit stránku pomocí protokolu HTTP, tak request skončí chybou. To samé se stane, pokud vyprší platnost certifikátu a způsobí to znepřístupnění celého webu.

Pokud by protokol HSTS nebyl implementovaný, tak by v případě vypršení certifikátu šlo v prohlížeči přidat bezpečnostní výjimku. Uživatel by si pak mohl web zpřístupnit sám. Pokud je HSTS implementovaný, tak to možné není.

Implementace HSTS

Při implementaci je nutné dávat pozor, jestli chceme tento protokol implementovat na danou doménu včetně všech subdomén. Ty se mohou vyskytovat i na jiném hostingu a nemusí mít protokol HTTPS implementovaný. Jde například o informační systémy a e-mailové schránky, které by pak nemusely fungovat. Konkrétně Seznam je na jedné doméně seznam.cz a email.seznam.cz na jiné (a může být i na jiném serveru kdekoli jinde).

Referrer Policy

Referrer policy je způsob, jak zabránit externím webům zjistit neveřejnou strukturu webu, ze kterého vedou odkazy web. Může se jednat například o stránky, které zatím nechcete zveřejňovat, protože je teprve připravujete nebo se týkají nového, zatím nenabízeného produktu.

Pokud klikneme na jakýkoliv odkaz nebo si načteme externí obrázek z jiného webu, tak je součástí hlavičky také URL adresa, na které jsme na daný obsah klikli. To se děje i u veškerých zdrojů načítaných na webu. Pokud tedy na webu zobrazujeme obrázek z externího webu, tak na externí web přijde požadavek na poskytnutí obrázku obsahující URL naší stránky.

Tento jev lze omezit přidáním meta tagu do hlavičky stránky, kde můžeme například definovat, že pokud není doména načítané věci stejná, tak se nemá poslat adresa stránky, která danou věc zobrazuje, nebo že se má poslat pouze doména, nikoliv konkrétní URL (pouze doména, a ne konkrétní stránka domena/nazevproduktu/ID).

Věděli jste, že...?

9 z 10 webů obsahuje závažná bezpečnostní rizika.

K téměř 40 % webů je možné získat neoprávněný přístup.

U 68 % webových aplikací došlo v roce 2019 ke zneužití nebo úniku dat.

Content Security Policy (CSP)

Bezpečnostní prvek CSP je velké téma, kterému jsme dopřáli více prostoru v samostatném článku.

Subresource integrity

Subresource Integrity je mechanismus, který brání, aby podvrhnuté scripty měly kontrolu i nad naší stránkou. Například hacknutá stránka, ze které se stahuje jQuery, což je javascriptová knihovna umožňující používání částí již existujících kódů.

Při jeho implementaci se vytvoří hash daného souboru, který bude součástí všech inicializací daného externího souboru. Pokud by náhodou došlo k tomu, že by hash načítaného souboru nesouhlasil s hashem uvedeným v kódu, tak vůbec nedojde k načtení daného scriptu. To sice může způsobit nefunkčnost webu, ale pořád je to lepší, než kdyby útočník získal kontrolu i nad naším webem (například by sem vkládal škodlivé kódy, nastavil podvodné přesměrování nebo zcizil přihlašovací údaje).

Na to, aby tento mechanismus šel použít, musí servery, kde se nachází externí script, používat standard CORS (Cross Origin Resource Sharing). Pokud tento mechanismus nepoužívají, nelze ani správným způsobem vygenerovat odpovídající hash (což je např. API poskytující Google Maps).

I přesto, že daný hash existuje, tak jsou situace, kdy toto není vhodné používat. Vývojáři totiž neverzují externě poskytnuté knihovny a provádějí v nich časté změny (viz vyjádření vývojářů Map od Seznamu). Verzují pouze major verze, nikoliv minor či subverze (pouze API obsahující v2, kde se knihovny neustále mění a ve skutečnosti by to bylo například v2.1.10.120).

Nejvíce ohrožené údaje před zneužitím

X-Content-Type-Options

Užitečná věc je i X-Content-Type. Umožňuje nám přikázat prohlížeči, aby nenačítal scripty, styly a soubory (obrázky v různých formátech, videa, zvukové stopy, fonty, PDF dokumenty), které nejsou správně definované v MIME typech na samotném serveru či v nastavení daného webu. MIME typy v podstatě určují, jaké přípony souborů může prohlížeč bezpečně otevírat a vykreslovat na stránce.

X-Frame-Options

X-Frame-Options je forma zabránění clickjacking útokům. Jedná se o útoky, které mohou následovat po klinutí na nějaké tlačítko nebo třeba obrázek. Konkrétně může jít o ukradení údajů, automatický nákup v eshopu, zapnutí webkamery, přesměrování na jinou stránku. Abychom tomu předešli, definujeme, z jakých zdrojů (z jiných stránek, například z Facebooku) se můžou načítat iframy použité na webu. X-Frame-Options ale umožňuje definovat pouze 1 zdroj (buď samotný web nebo jeden externí zdroj), ze kterého se mohou iframy načítat.

Tento problém vyřešíme tak, že současně implementujeme parametr frame-ancestors používaný u CSP. Ten umožňuje definovat neomezený počet zdrojů. V případě že je tento parametr u CSP definovaný a prohlížeč ho podporuje, tak se na nastavení X-Frame-Options nezohledňuje. Vzhledem k tomu, že podpora CSP zatím není 100% (např. Internet Explorer ho ještě nepodporuje), doporučujeme používat současně s CSP i X-Frame-Options. Budou tak chránění i ti uživatelé, kteří používají prohlížeče bez podpory CSP.

X-XXS Protection

XXS útoky mohou nastat tam, kde dochází k určitému vstupu/vložení dat. Například, když se do formuláře nebo komentáře zadá škodlivý kód, tak se může vykonávat při každém načtení dané stránky. Starý způsob pro zabránění XXS útokům v IE a Chromu využívá X-XXS Protection. Ten je stejně jako předchozí X-Frame-Options nahrazený v CSP lepší verzí. Ale jeho implementace má stále smysl pro uživatele používající Internet Explorer, který CSP nepodporuje. V případě, že prohlížeč detekuje probíhající XXS útok, X-XXS-Protection zabrání načtení stránky.