Linux E X P R E S

Facebook

HTTP security headers (LinuxDays 2017)

Zabezpečení

Bezpečnost webů lze zvýšit přidáním speciálních HTTP hlaviček, s nimiž umějí pracovat moderní webové prohlížeče. Na letošní konferenci LinuxDays o nich hovořil Tomáš Hála. 


HTTPS je základ, ale nestačí

Zabezpečení webů pomocí šifrování a ověřování identity serveru – tedy nasazení HTTPS (HTTP nad TLS) – je dnes základem, bez kterého se už v podstatě nelze obejít. Nezabezpečenou komunikaci s webem lze odposlouchávat a její obsah měnit (man-in-the-middle útok). Nelze spoléhat ani na to, že šifrování zajistí síťová vrstva, jak ukazuje dnes zveřejněná zranitelnost protokolu WPA2 používaného u bezdrátových sítí.

Tomáš Hála na své přednášce na konferenci LinuxDays začal pozitivní zprávou, že nasazení HTTPS na webech setrvale a poměrně rychle roste (podle statistiky Mozilly už objem provozu na těchto webech překročil 60 %). Ukázal také, jak v aktuálních verzích webových prohlížečů vypadají formuláře na webech s obyčejným HTTP. Prohlížeče dost důrazně varují před vkládáním údajů, protože budou odesílány v otevřeném tvaru (navíc s možností je cestou pozměnit).

S novějšími verzemi prohlížečů se varování před nezabezpečenou komunikací zostřují. Velká změna přijde například s blížící se verzí 62 prohlížeče Google Chrome/Chromium, kde se varování zobrazí při vyplňování jakéhokoli formuláře na nezabezpečené stránce; v anonymním režimu dokonce už při pouhém načtení stránky.

Tomáš Hála při přednášce o bezpečnostních hlavičkách Tomáš Hála při přednášce o bezpečnostních hlavičkách

V poslední době poněkud „pohnula českým Internetem“ causa Policie ČR, která na svém webu HTTPS stále nepoužívá. Argumentuje komplikovaností z hlediska administrativního (nutnost každou změnu projektově řídit), hardwarovou náročností, nutností a komplikovaností pořízení certifikátů a v neposlední řadě nepotřebností používat HTTPS.

Přitom součástí policejního webu je i formulář pro nahlášení závadného obsahu na Internetu. Tam ohlašovatel uvádí nejen nalezený obsah a další podrobnosti k němu, ale i své osobní údaje, které by rozhodně neměl vidět někdo na přenosové trase (nebo tam dokonce něco měnit).

Možná se budou divit ve chvíli, kdy vyjde nový Chrome. Protože nahoře je vyhledávací pole a dole je ten velký formulář (pro hlášení závadného obsahu; pozn. aut.), bude Chrome celý web označovat jako nebezpečný,“ komentuje situaci Tomáš Hála.

Ovšem HTTPS zdaleka nestačí, protože kromě přímého odposlechu a změny dat na trase existuje řada dalších způsobů, jak na weby útočit, pokud je někde ponechána menší či větší díra. A v dnešní době se už označuje přímo za chybu (projekt OWASP ji uvádí aktuálně na sedmém místě Top 10 zranitelností webů), pokud se web aktivně nechrání proti takovým útokům.

Mezi nejčastější zranitelnosti přibyla nedostatečná ochrana API.

Bezpečnostní hlavičky – security headers

Bezpečnostní hlavičky (security headers) jsou relativně nová metoda aktivní ochrany webů. Podrobně a uceleně se jim věnuje Scott Helme na svém blogu (kde si můžete nejen přečíst vše potřebné o jednotlivých hlavičkách); provozuje také web securityheaders.io pro automatizované testování webů.

Tyto hlavičky jsou v podstatě normální HTTP hlavičky (jako třeba dlouho známé hlavičky Content-Type, Server či Expires), které ale předávají webovým prohlížečům důležité informace ohledně zabezpečení webu. Starší prohlížeče je ignorují (nebo by alespoň měly), takže by neměly hrozit problémy se zpětnou kompatibilitou. Ne proti každému typu zranitelnosti lze ovšem bezpečnostní hlavičky použít. Například proti SQL injection žádná použitelná hlavička neexistuje.

První takovou hlavičkou je Strict-Transport-Security. Ta říká, že se pro danou doménu (případně i subdomény) smí po určenou dobu použít jen HTTPS komunikace (řešení HSTS). Tím se lze bránit proti útoku „SSL stripping“, tedy překlopení z HTTPS zpět na HTTP.

Ochrana není stoprocentní, protože zafunguje až poté, co se vyřídí požadavek přes HTTPS. Lze si ovšem vyžádat přednačtení HSTS do prohlížeče (uvedením preload), byť to není zaručeno a navíc je potřeba uvádět v hlavičce dostatečně dlouhou lhůtu; nově je to minimálně 1 rok.

Tomáš Hála ve své přednášce zmínil nedostatky, s nimiž se v tomto ohledu potýkal (a částečně stále potýká) web datových schránek spravovaný ministerstvem vnitra.

Co tu není v pořádku? Co tu není v pořádku? (zdroj: videozáznam z přednášky)

Cross-site scripting a spol.

Cross-site scripting je velmi nebezpečný typ útoku, kterým lze dělat nejen nevinné žertíky třeba na webech politických stran, ale také například sbírat přihlašovací údaje k webům, přesměrovávat na phishingové stránky apod. Proti němu lze použít hlavičku Content-Security-Policy.

Tato hlavička umožňuje nadefinovat bezpečnostní politiku pro obsah webu – a to jak politiku výchozí, tak pro různé druhy obsahu, například skripty, obrázky nebo styly. Tomáš Hála zkoumal, jak jsou na tom s implementací této hlavičky české banky (celkem osm největších) u internetového bankovnictví. „Kolik z nich, si myslíte, má implementováno content security policy?“ zeptal se na přednášce. Nejvyšší odpověď z publika byla „tři“.

Realita je ale mnohem horší, CSP má implementováno pouze ČSOB ve své nejnovější, nedávno uvedené verzi internetového bankovnictví. Banka ovšem nevyužila příležitosti to „udělat pořádně“ a povoluje v hlavičce i skripty vložené přímo v kódu stránky. „U starších webových aplikací to dává smysl, protože je těžké to celé přepsat, abyste to tam nemuseli mít. Ale když nasazujete novou webovou aplikaci, tak je obrovská ztráta příležitosti se toho zbavit a zabezpečit to pořádně.“

Ještě hůře než české banky na tom je slovenská Tatra banka. Nejenže nepoužívá žádné bezpečnostní hlavičky, ale pro přístup do svého internetového bankovnictví navíc vyžaduje nainstalovaný Flash Player, který má dlouhodobě problémy s bezpečností a firma Adobe už přímo vyzývá k přechodu na otevřené technologie.

Pokud obsah nevyhovuje pravidlům definovaným v hlavičce, není načten a prohlížeč do své konzole vypíše chybovou zprávu. Nasazování hlavičky Content-Security-Policy není triviální, je potřeba si přesně zjistit, odkud se načítá obsah (resp. odkud se opravdu musí načítat a odkud je bezpečné ho načítat) a podle toho pravidla nastavit. Případné problémy je žádoucí odstranit bezpečnou cestou (například skripty uložit na svůj server než je tahat z cizích zdrojů, obdobně dát skripty do samostatných souborů místo vložení přímo do HTML), než pravidla CSP rozvolňovat.

Stopy konference LinuxDays Stopy konference LinuxDays

Podobně existují i další bezpečnostní hlavičky – například X-Frame-Options (pravidla pro rámce uvnitř stránek), X-Xss-Protection (zesílení ochrany proti XSS přímo samotným prohlížečem) nebo X-Content-Type-Options (umožňuje zakázat pokusy o uhodnutí MIME typu obsahu webovým prohlížečem).

Shrnutí

Pro kvalitní zabezpečení webů je zcela nezbytné používat HTTPS, to ale samo o sobě nestačí. K další úrovni bezpečnosti pomohou speciální hlavičky, které vynutí na moderních webových prohlížečích chování v souladu s určenými pravidly. Zároveň ale nelze zanedbat ani řádné zabezpečení přímo v rámci aplikace, například bezpečné zpracování vstupních dat (ochranu proti různým „injections“) nebo správné řízení přístupu k API.



Diskuze (0) Nahoru