Clickjacking: jak funguje a jak se bránit

Autor: Zveřejněno

Stručně: Clickjacking, označovaný také jako UI redress attack, spočívá v přimění uživatele, aby klikl na jiný prvek než ten, který vidí. Útočník může například umístit neviditelnou stránku s tlačítkem přes zdánlivě neškodné tlačítko ve hře. Provozovatel webu takové útoky omezuje především tím, že určuje, kdo smí jeho stránky vkládat do svých stránek. Uživatel se může chránit obezřetností vůči podezřelým interakcím.

Jak funguje zachytávání kliknutí

Prohlížeč může zobrazit jednu stránku uvnitř druhé pomocí prvku iframe, tedy vloženého rámce. Jde o běžnou funkci používanou například k zobrazování videí nebo map. Při clickjackingu ji útočník využívá ke skrytí skutečného cíle kliknutí pod připraveným rozhraním nebo nad ním.

Typický scénář vypadá takto: uživatel otevře stránku ovládanou útočníkem a ta v rámci načte jiný web. Rámec je průhledný nebo vhodně oříznutý a umístěný tak, aby jeho tlačítko leželo přesně tam, kam se uživatel chystá kliknout. Uživatel vidí jeden pokyn, ale prohlížeč zaznamená interakci s jiným prvkem.

Útočník přitom nemusí číst obsah cizí stránky. Omezení přístupu mezi různými weby, která prohlížeč uplatňuje, sama o sobě nebrání vkládání stránek ani směrování kliknutí. Ochrana dat před čtením a ochrana rozhraní před vložením do cizí stránky jsou proto dva samostatné úkoly.

Příklad: odměna, která spustí jinou akci

Představte si stránku s jednoduchou hrou a tlačítkem „Vyzvednout odměnu“. Přes toto tlačítko je umístěn neviditelný rámec s panelem jiné služby. Pokud služba umožňuje vkládání do rámců a přihlášení uživatele v tomto rámci zůstává aktivní, může kliknutí zasáhnout tlačítko, které provede operaci na jeho účtu.

To neznamená, že každá návštěva škodlivé stránky okamžitě vede k převzetí účtu. Úspěch závisí mimo jiné na zabezpečení cílového webu, dostupnosti přihlášené relace v rámci a na tom, zda operace vyžaduje další potvrzení. Nastavení souborů cookie a omezení prohlížeče mohou takový scénář ztížit, nenahrazují však ochranu před vkládáním stránek do rámců.

Mezi možné následky patří nechtěná změna nastavení, provedení akce ve službě nebo schválení operace. Dodatečné potvrzení, které vyžaduje vědomé jednání uživatele, riziko omezuje. Samotné další tlačítko ale ochranu nezaručuje — útočník se může pokusit provést oběť několika kliknutími.

Čím se clickjacking liší od phishingu a CSRF

Při phishingu se podvodník obvykle vydává za důvěryhodný subjekt, aby vylákal údaje nebo přiměl uživatele k určitému jednání. Při clickjackingu však uživatel může kliknout na prvek skutečné služby, který je jen skrytý v klamavém prostředí. Obě techniky se mohou kombinovat, ale mechanismus podvodu se liší.

CSRF, tedy vynucení nechtěného požadavku na službu, zneužívá oprávnění přihlášeného uživatele bez jeho vědomého souhlasu. Clickjacking se zaměřuje na zneužití interakce s rozhraním. Token chránící před CSRF k ochraně před clickjackingem nestačí, protože kliknutí může odeslat platný formulář i s jeho platným tokenem.

Ani HTTPS tento problém neřeší. Šifruje spojení s daným webem, ale nepotvrzuje poctivost jeho rozhraní ani úmysly provozovatele.

Jak zabezpečit vlastní web

Základní ochranou je hlavička odpovědi HTTP Content-Security-Policy s direktivou frame-ancestors. Hlavička HTTP je informace, kterou server odesílá prohlížeči spolu se stránkou. Direktiva určuje, které zdroje smějí tuto stránku vkládat do rámců.

Pokud se web nemá vkládat do rámců vůbec, lze použít:

Content-Security-Policy: frame-ancestors 'none'

Pokud má být vkládání povoleno pouze v rámci stejného zdroje — tedy stejné kombinace protokolu, hostitele a portu — použije se tato hodnota:

Content-Security-Policy: frame-ancestors 'self'

Starším mechanismem je X-Frame-Options s hodnotou DENY nebo SAMEORIGIN. Lze jej použít jako kompatibilní doplněk pro starší klienty. Direktiva frame-ancestors umožňuje pružnější řízení, například povolení konkrétního zdroje partnera. Musí být odeslána v hlavičce odpovědi — její uvedení ve značce meta tuto ochranu nezajistí.

Praktické nasazení zahrnuje tři kroky:

  1. Určete, které stránky skutečně musejí fungovat v rámcích, například v rámci integrace s partnerem.
  2. Nastavte odpovídající zásady na serveru, v aplikaci nebo ve zprostředkující službě a zkontrolujte hlavičky ve vývojářských nástrojích prohlížeče.
  3. Otestujte jak blokování nežádoucího vkládání do rámců, tak funkčnost legitimních integrací.

Nespoléhejte pouze na skripty v jazyce JavaScript, které se snaží stránku vymanit z rámce. Taková řešení mají svá omezení a lze je obejít. U citlivých operací používejte také opětovné ověření totožnosti nebo potvrzení, které jasně popisuje prováděnou činnost.

Co může udělat uživatel

Vyhýbejte se stránkám, které vyžadují sérii nesrozumitelných kliknutí, zejména pod záminkou vyzvednutí odměny, odemknutí videa nebo údajného ověření. Aktualizujte prohlížeč, ale pamatujte, že aktuální verze nenahradí zabezpečení na straně navštívené služby.

Pokud máte podezření, že kliknutí spustilo nechtěnou akci, otevřete příslušnou službu přímo, nikoli přes odkaz na podezřelé stránce. Zkontrolujte historii aktivity a změněná nastavení a neoprávněnou operaci nahlaste podpoře. Provozovatel webu by měl začít kontrolou hlavičky frame-ancestors na stránkách účtu a administračního panelu.

Viz také: Co je Mass Assignment?

Přečtěte si také

Zjistěte, jak PHP-FPM zpracovává požadavky PHP, čím se liší od webového serveru a jak nastavit procesy podle provozu a zdrojů hostingu.
Poznejte BIND, otevřený software pro server DNS: jak spravuje domény, jaké role plní a kdy se vyplatí provozovat vlastní server.
Zjistěte, k čemu slouží polský registr a číslo REGON, jak se liší od NIP a KRS a jak v oficiálním registru ověřit údaje o firmě.