Zpět na seznam článků     Číst komentáře (6)     Verze pro tisk

Clickjacking (6)

Autor: .cCuMiNn.   
9.10.2012

Po předchozích dílech, které byly věnovány konkrétním metodám útoku typu clickjacking, se nyní konečně podíváme na možnosti ochrany, které máme k dispozici, ať již jako tvůrci webových aplikací, nebo jako běžní uživatelé Internetu.


Pevně doufám, že předchozí díly seriálu nenechaly nikoho z vás chladným. Jejich cílem bylo totiž ukázat, jak nebezpečné může někdy být nevinné kliknutí na webové stránce, vyplnění pole formuláře, nebo prosté přetažení libovolného objektu. Člověk, který vidí tyto ohromné možnosti tak prostého útoku, kterým clickjacking bezpochyby je, často propadne naprosté paranoii. A není se čemu divit… nebo snad víte, na co ve skutečnosti klikáte?

Obrana před clickjackingem je v dnešní době naštěstí již snadno dostupná a poměrně různorodá. Byť by tuto zranitelnost měli z webových aplikací odstraňovat hlavně jejich vývojáři, často se tak bohužel neděje. Jisté kroky k vlastní ochraně ovšem můžeme podniknout dokonce i jako koncoví uživatelé. Pojďme si tedy představit některé techniky, které útokům tohoto typu dokáží zabránit.

Co mohu udělat jako web developer?

Již z principů, na nichž clickjacking pracuje, vyplývá, že zranitelné jsou všechny webové stránky, které je možné načíst do rámu, a v této podobě je umístit na web útočníka. Pokud jako tvůrci webové aplikace zakážeme načtení našich stránek v rámu, máme vyhráno. Vidíte tedy, že princip ochrany je velice prostý. Jak ale tohoto zákazu dosáhnout?

JavaScript Framekiller

V době, kdy clickjacking spatřil světlo světa poprvé, se stal jedinou možnou ochranou krátký kód JavaScriptu, který testoval, zda se načtená stránka nachází na samém vrcholu hierarchie DOM, tedy například, zda se hodnota top.location rovná hodnotě self.location.

Příklady otestování, zda je stránka načtena v rámu
if (top != self)
if (top.location != self.location)
if (top.location != location)
if (parent.frames.length > 0)
if (window != top)
if (window.top !== window.self)
if (window.self != window.top)
if (parent && parent != window)
if (parent && parent.frames && parent.frames.length>0)
if((self.parent&&!(self.parent===self))&&(self.parent.frames.length!=0))

V případě, že kód JavaScriptu zjistí pokus o načtení stránky v rámu, může JavaScript zablokovat zobrazení stránky, nebo provede přesměrování a tím se z rámu vyprostí. I když se jedná o poměrně účinnou metodu, stala se její nevýhodou nutnost povoleného JavaScriptu. Některé útoky šly dokonce tak daleko, že zneužívaly XSS filtry implementované ve webových prohlížečích k tomu, aby si myslely, že probíhá XSS útok a sami tak tuto ochranu v podobě JavaScriptu vyřadily z provozu.

X-Frame-Options

Jisté zlepšení přinesly až novější verze webových prohlížečů, které implementovaly podporu HTTP response hlavičky X-Frame-Options.

Prohlížeče s podporou X-Frame-Options
Internet Explorer 8
Firefox 3.6.9
Chrome 4.1
Opera 10.50
Safari 4.0

Tuto hlavičku odesílá browseru webová aplikace a informuje jej tak o podmínkách, kdy je možné webovou stránku v rámu zobrazit, a kdy nikoliv. Možné hodnoty této hlavičky jsou:

  • DENY – zakáže jakékoliv načtení stránky v rámu
  • SAMEORIGIN – povolí načíst obsah do rámu pouze v případě, že je tento rám umístěn na stránce, která splňuje podmínky Same Origin policy
  • ALLOW-FROM – Definuje webovou stránku, která má povoleno zobrazení předaného obsahu v rámu
Příklad odeslání hlavičky X-Frame-Options v PHP
header('X-Frame-Options: DENY');

Abychom se nemuseli starat o odesílání této hlavičky explicitně na každé stránce naší aplikace, můžeme využít také konfiguračního souboru Apache, do kterého přidáme následující řádky:

Configurace Apache
<IfModule headers_module>
  Header always append X-Frame-Options SAMEORIGIN
</IfModule>

V případě, že provozujete webové stránky, u nichž není vyloženě vyžadována možnost načítání jejich obsahu cizími aplikacemi do rámů, pak tímto zápisem snadno zabezpečíte celou svou aplikaci.

Content Security Policy

Další možnost ochrany přinesl Firefox 4.0 v rámci podpory Content Security Policy. Jedna z direktiv této politiky frame-ancestors je vyhrazena právě pro zakázání zobrazení obsahu v rámu, nebo k definici cílů, které mohou danou stránku v rámech zobrazit. Na rozdíl od HTTP hlavičky X-Frame-Options umožnuje CSP přesnější definování povolených cílů a nabízí reporty v případě porušení definovaných pravidel. Velikou nevýhodou CSP pro zatím zůstává její podpora pouze ze strany prohlížečů od Mozilly.

Mohu se bránit i jako běžný uživatel?

Abychom mohli být alespoň trochu klidnější a naše kroky po internetových stránkách jsme mohli v rámci možností považovat za bezpečné, pojďme si nyní představit některé možnosti, které máme k dispozici jako koncoví uživatelé. Stejně jako v případě webových vývojářů pro nás bude nejlepší ochranou zakázat načítání stránek do rámů. V našem případě to bude znamenat, že zakážeme browseru zobrazovat rámy. Bohužel se tak někdy můžeme připravit i o legitimní obsah stránky. Je proto na zvážení, zda se k tomuto kroku uchýlíte. V případě, že ano, lze k blokování rámů použít například známý doplněk pro Firefox NoScript.

Určitě jste si v předchozích dílech seriálu všimli, že pro zdárný útok bylo zapotřebí, aby byl napadený uživatel přihlášen ke svému účtu. Ne vždy je to nutně podmínkou, záleží pochopitelně na tom, o jaký útok se jedná. Každopádně mou druhou radou, kterou doporučuji se řídit, je nepoužívat ve webových aplikacích trvalé přihlášení. K podobným útokům pak budeme náchylní pouze ve chvílích, kdy jsme skutečně zalogováni ke svému účtu a riziko tak dokážeme poměrně výrazně snížit.

Jak zjistit náchylnost webové aplikace

Pro ty z vás, kteří by si rádi otestovali, zda jsou vaše vlastní webové stránky, nebo weby, které rádi a často navštěvujete, náchylné na clickjackingové útoky, jsme připravili jednoduchý Clickjacking Tester. V tomto našem novém projektu stačí pouze zadat adresu webové stránky, jejíž náchylnost vás zajímá, a hned zjistíte, zda se tuto stránku podaří do rámu načíst nebo ne.

Tímto to bohužel nekončí

V následujícím závěrečném dílu seriálu si vedle technik, kterými lze obejít některé typy ochrany, představíme ještě několik dalších speciálních variant útoku.


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1/7

1  2  3  4  5    
(známkování jako ve škole)