Clickjacking (5)

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: .cCuMiNn.
Datum: 1.10.2012
Hodnocení/Hlasovalo: 1.4/10

V minulém díle jsme si ukázali způsob, kterým lze přinutit uživatele k vyplnění polí formulářů, aniž by měli tušení, čeho se tím ve skutečnosti dopouští. Tentokrát pro dosažení stejného výsledku použijeme metody Drag&Drop z nabídky HTML5.

Útok z minulého dílu vyžadoval od uživatelů, aby zapsali námi podstrčený text do vstupního pole formuláře. Jedná se sice o velice účinnou metodu, ale můžeme ji využít pouze pokud požadujeme vložení krátkých textů. Tyto texty navíc nesmí u uživatele vzbudit žádné podezření. Ideální by tedy bylo, pokud bychom nějakým způsobem dokázali přimět uživatele k vložení jakýchkoliv dat tak, aby vůbec neviděl jejich obsah. To se může na první pohled zdát jako nereálné, ale HTML5 a jeho Drag and Drop možnosti, nám přesně tohoto cíle pomohou dosáhnout.

Pro lepší pochopení začnu jednoduchým příkladem, který budu postupně rozvíjet.




  
  
  
  



  

Výše uvedený kód nedělá nic jiného, než že na stránce zobrazí dva prvky: obrázek klíčku a textareu pro vkládání textu. To důležité, čeho byste si měli v kódu všimnout je:

Stránku z uvedeného příkladu najdete zde. Zkuste na této stránce přetáhnout obrázek klíčku nad textové pole, kde klíček položte. Vidíte už to nebezpečí a možnosti využití s clickjackingem? Nebohý uživatel pouhým přetažením objektu může nevědomky vložit nebezpečný payload a naplnit jím například pole formuláře.

Frčíme dál

Pojďme se ale posunout o kousek dál, a náš úvodní příklad trochu vyšperkovat.



  
  
  
  



  

Co jsme tedy provedli za změny, a co stojí v kódu za zmínku.

Stránku, kterou tvoří výše uvedený kód, si opět můžete vyzkoušet zde.

Finální útok

Konečný útok, při kterém opět přinutíme oběť k tomu, aby si zapsala naši e-mailovou adresu do pole pro přeposílání příchozích zpráv v našem testovacím webmailu, se od výše uvedeného příkladu již příliš lišit nebude. Jediné změny, které provedeme, spočívají v tom, že si vytvoříme soustavu vložených rámů, které z webové stránky webmailu vyříznou pouze přesně definovanou oblast se vstupním polem pro zadání adresy a s tlačítkem pro uložení. Tímto rámem pak nahradíme naší textareu. Dále přidáme nadpis a nahradíme alert po upuštění klíčku zobrazením tlačítka vstup na místě původního tlačítka pro uložení.

Výsledný kód pak bude vypadat takto:



  
  
  
  


  

Vstup na stránku si musíte nejprve odemknout

Jediné, co k výslednému kódu ještě dodám, je, že nemůžeme ošetřovat události onDragOver nebo onDragEnter přímo nad vlastním obsahem rámu. V tom nám opět brání Same Origin Policy. Jejich výskyt tak můžeme ošetřovat pouze ve chvíli, kdy objekt táhneme přes okraj rámu. Protože ale někdy při rychlejším přejetí okraje není tato událost zaznamenána, nastavil jsem vlastností border větší šířku tohoto okraje.

Příklad by se dal dále rozšířit o testování, zda uživatel kliknul nad tlačítkem vstup, ale s principy, jak toho dosáhnout jsme se seznámili již v jednom z předchozích dílů. Tuto část si tedy můžete zkusit dodělat sami.

Nakonec přidávám ještě video zachycující průběh útoku.


Na co se můžete těšit příště

Příště si již konečně povíme něco o tom, jak před clickjackingem ochránit naše vlastní webové aplikace, abychom si v následujícím závěrečném dílu mohli ukázat techniky, kterými lze tyto ochrany obejít :)