Bezpečnostní rizika nových webových technologií

19. 11. 2010
Doba čtení: 6 minut

Sdílet

Riziko
Riziko
Nové webové technologie, to nejsou jen úžasné možnosti, video a další funkce. Jsou to i bezpečnostní rizika, která jsou o to nebezpečnější, že jsou málo známá.

Dlouhé klidné období hegemonIE

Nevěřte webdesignérům jejich stížnosti na IE6, neberte slova o „nejhorším prohlížeči vůbec“ nijak vážně. Ve skutečnosti zažili webaři s IE6 bezprecedentní období hegemonie jednoho prohlížeče, které trvalo asi osm let, během nichž se majoritní prohlížeč nijak nezměnil. V překotném vývoji celého odvětví to byl ostrůvek stability. U žádného jiného tak rozšířeného programu neměli vývojáři v poslední době tolik let na odhalení jeho chyb a přizpůsobení se jim.

Ano, IE6 je plný chyb, nelogičností a problémů, ale jeho chyby, nelogičnosti a problémy jsou důkladně zdokumentovány, mnohokrát popsány, a co víc: vývojáři se naučili, jak je ošetřit. Takže dnes pro zručného kodéra nepředstavuje graceful degradation pro IE6 velký problém, protože zná podivnosti tohoto prohlížeče a na každou z nich má připravený „hack“.

Ostatní webové prohlížeče, které přidávají co čtvrt roku novou verzi, sice implementují novinky a opravují chyby rychleji, ale nesou s sebou jiné nebezpečí v podobě nových technologií. Nové technologie totiž mají i nové bezpečnostní díry. Zdaleka nejde jen o chyby v implementaci, ty bývají často rychle opraveny. Jde spíš o vlastnosti, které vyplývají z podstaty věci a které mohou být zneužitelné, pokud je vývojář neošetří. Bohužel – vývojáři se rychleji seznamují s novými technologiemi než s jejich možnými riziky. Kombinace nadšení pro nové věci a bohorovné ignorance možných problémů představuje smrtící koktejl, který si uživatel takového webu často nevědomky vypije až do dna.

Za trest napíšeš stokrát „HTML5“!

Ne, HTML5 opravdu není mantra, kterou musí zlobiví novináři tisíckrát napsat, aby jim šéfredaktor odpustil. Rodina technologií HTML5 představuje rozšíření starého dobrého HTML4 o velké množství nových technologií a postupů, které umožňují zlepšit uživatelský prožitek a přiblížit styl práce s webovými aplikacemi tomu, na který jsou lidé zvyklí z desktopů. O HTML4 platí totéž, co zaznělo v předchozí části: Je tu s námi přes deset let (specifikace verze 4.01 je z roku 1999) a za tu dobu už vývojáři většinou znají možné problémy a věci, které je nutno ošetřit.

Samotné HTML jako značkovací jazyk nepředstavuje pro uživatele většinou závažnější bezpečnostní riziko. Asi největším možným problémem je podvržený iframe s falešnou stránkou nebo podvržená adresa, kam se odesílají data z formuláře. Největší nebezpečí (a také nejvíc podceňované) s sebou nese JavaScript, tedy technologie, umožňující provádění nějakých akcí přímo v uživatelově prohlížeči.

I když je JavaScript prováděn v „sandboxu“, tedy pouze v prostoru prohlížeče, může představovat velké bezpečnostní riziko. Díky sandboxu nemůže skript na webové stránce přímo přistupovat k souborům ve vašem systému, ale přesto může napáchat poměrně výrazné škody – od poškození dat na webu přes krádež přihlašovacích údajů kamkoli až po odcizení účtů, identit nebo provedení bankovních operací. Přitom škodlivý kód může být vložen na neškodné a důvěryhodné stránce; už zdaleka neplatí, že je třeba lovit v kalných vodách warez a porna, aby člověk vystavil svůj prohlížeč riziku. (Hezká ukázka je například TabNabbing – jako stvořený pro všechny ty uživatele, co si „otevřou ráno zajímavé odkazy do panelů a ty pak procházejí“.

Nejčastější typ útoku se nazývá Cross-Site Scripting a označuje se XSS. Tato zkratka označuje způsoby, jakými lze do důvěryhodné stránky vložit škodlivý skript. Tedy něco podobného, jako vložené skripty nejrůznějších služeb, od počítadel přes analytické nástroje po „like button“, jenomže o nich návštěvník (a často ani správce) neví. Pokud neošetří tvůrce webu možné díry, kudy může útočník provést XSS útok, jsou návštěvníci jeho webu v ohrožení.

Problém mezi židlí a editorem

Opět se vracíme k tomu, co bylo už vyřčeno: Vývojáři se naučili obstojně ošetřovat nejčastější bezpečnostní rizika dosavadních technologií a prohlížečů. Lze říct, že průměrný vývojář ví, co je XSS, uvědomuje si možné riziko, zná nejčastější způsoby útoku a proti nim se brání. Ti lepší si uvědomují, že neznají všechny způsoby, a proto jsou raději opatrnější. Ti horší pak sebevědomě uvěří tomu, že ošetřili všechny způsoby co znají a jiné způsoby nejsou. Bohužel. Rozhodně není výjimkou potkat vývojáře, přesvědčeného o tom, že mu bezpečnostní technika z roku 2004 pomůže proti všem rizikům dnešním i budoucím, a sebejistě věřícího, že žádná jemu neznámá rizika neexistují.

Zeptejte se vývojáře webových aplikací, kolik zná způsobů, jak lze do webové stránky vložit JavaScript. Pokud jich vyjmenuje deset, poohlédněte se po aplikaci od nějakého jiného tvůrce.

Nové webové technologie z rodiny HTML5 přinášejí několik desítek nových způsobů, jak do stránky vložit skript. Nově mohou být skripty v místech, kde dříve nebývaly. Objevily se celé nové technologie, které na první pohled vypadají důvěryhodně a neškodně, ale ve skutečnosti mohou být velmi nebezpečné, pokud je s nimi zacházeno lehkomyslně (např. pokud autor webu považuje SVG za „neškodný vektorový obrázek“ a povolí jeho načítání z cizího webu). Staré existující značky dostaly někdy nové funkce (které mohou být využity pro útok). Přibyly nové značky – například oblíbený tag VIDEO – a pokud povolí autor jejich vkládání bez opravdu důkladné kontroly toho, co v nich je, riskuje bezpečnostní problém…

Jak se bránit?

Nové technologie jsou už zde. Stejně tak i nové prohlížeče, které je podporují, získávají majoritu na trhu. Nejhorší možný postoj, jaký k této změně mohou vývojáři webových aplikací zaujmout (a bohužel také často zaujímají) je ten, že změnu ignorují a věří, že pokud nové technologie oni sami nepoužívají, tak jsou proti jejich rizikům chráněni a v bezpečí. Že když se naučili vyhazovat tag SCRIPT a znaky < a >, tak si s tím vystačí. Podobný pocit je ale smrtelně nebezpečný, protože je to falešný pocit bezpečí. Útočník může zadat například vyhledávací řetězec, který by byl v IE6 či HTML4 bezpečný a který projde „bezpečnostním filtrem“ – ovšem v novém prohlížeči s podporou nových technologií už dotyčný řetězec bezpečný nebude. Výsledkem je kompromitovaná stránka a admin, který je přesvědčený, že k žádné kompromitaci jeho stránek dojít nemůže. Takových je, bohužel, stále víc než dost.

Největším bezpečnostním rizikem je a stále bude sebejistý vývojář. Druhým největším pak sebejistý uživatel.

Pravděpodobně jediným relativně spolehlivým způsobem, jak se může uživatel bránit, je blokování JavaScriptu podle whitelistu – taková obdoba firewallu. 

NoScript pro FireFox

NoScript plugin pro FireFox

Takovou funkci nabízí např. plugin NoScript pro Firefox. Po vstupu na stránku musíte říct, zda chcete té stránce povolit spouštět skripty nebo ne, a pokud ano, tak jestli vždy nebo pouze jednorázově. Po nějakém čase používání získáte seznam „důvěryhodných webů“, takže při běžné práci ani nepoznáte, že takový doplněk v prohlížeči máte. Poznáte jej při vstupu na neznámou stránku – a leckdy se až podivíte,co všechno jste si dřív do prohlížeče pustili. Až přijdete na nenápadnou stránku, třeba nějakého hudebního festivalu, a NoScript vám zahlásí, že zablokoval skript z domény 1174quz.ru a zakázal podezřelé přesměrování, nebo že jste klikli na tlačítko, které ve skutečnosti nebylo tlačítko a pod ním byl skrytý odkaz na paypal.com/payment, tak vám ta trocha nepohodlí s povolováním nebude připadat tak nesnesitelná.

Není potřeba hystericky zahazovat nové prohlížeče a proklínat nové technologie; důležité je nepodlehnout falešnému pocitu bezpečí, plynoucímu z víry, že „žádná neznámá rizika nejsou“.

Autor článku

Sleduje, popularizuje a učí moderní webové technologie (HTML5 a podobné). Popularizuje nové nástroje a elektroniku, provozuje weby, sleduje dění na internetu, píše o něm a komentuje ho.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).