Autor: .cCuMiNn. | 12.12.2012 |
Bug, který si popíšeme, využívá jednoduchého kódu JavaScriptu, který umožňuje zjišťovat nejen pozici myši nad samotnou webovou stránkou, ve které je umístěn, ale také pohyb kurzoru nad jinými rámy, nad jinými okny, a dokonce i nad jakoukoliv jinou spuštěnou aplikací, nebo plochou operačního systému. Vůbec přitom nezáleží na tom, zda má webová stránka se spuštěným kódem právě fokus, zda je někde v pozadí, nebo zda je minimalizovaná na liště.
Informace o tomto typu útoku se poprvé objevila v Bugtraq mailing listu 11.prosince 2012, kam ji zaslal softwarový inženýr Nick Johnson, jež dříve pracoval pro Google a nyní v analytické firmě Spider.io. Zranitelné jsou podle něj všechny verze Internet Exploreru od 6 až po aktuální 10.
Dalo by se očekávat, že zachytávání událostí jinde, než nad obsahem webové stránky, ve které je kód JavaScriptu vložen, nebude možné z důvodu restrikcí bezpečnostní politiky Same Origin Policy. Možná vás teď ale trochu zmatu, když napíši, že dokonce i takový prohlížeč, jakým je Internet Explorer, řádně pravidla SOP dodržuje a aplikace skutečně nemůže zachytávat události, které sama nevyvolala, a které se nestaly v jejím kontextu. Jak je tedy možné, že níže uvedený příklad dokáže kontrolovat pozici kurzoru i nad jiným obsahem?
Jde o velice jednoduchý trik, který zneužívá funkci JavaScriptu fireEvent(). Tato metoda je vlastní pouze Internet Exploreru a umožňuje vyvolávat události samotnou aplikací, bez jejich skutečného vyvolání uživatelem. Například tento kód vyvolá automaticky událost kliknutí na vložené tlačítko, jakmile přejedete kurzorem přes zobrazený text.
Aplikace schopná zjišťovat aktuální pozici myši tedy sama vyvolává v pravidelných intervalech události onMouseMove a obratem zjišťuje hodnoty vlastností s aktuálními souřadnicemi kurzoru. Vše tedy bez problémů splňuje požadavky Same Origin Policy a to i přes to, že se kurzor myši nachází jinde, než nad vlastní aplikací. Kromě samotných souřadnic dokáže taková aplikace zjišťovat dokonce i to, zda jsou právě drženy některé speciální klávesy jako CTRL, ALT nebo SHIFT. Kompletní seznam vlastností objektu Event, které je možné číst, je následující:
No a nyní již výpis samotného kódu, který je v Internet Exploreru schopen zjišťovat aktuální pozici kurzoru myši, ať už se pohybujete na monitoru kdekoliv.
Nick Johnson věnoval této zranitelnosti webovou stránku, na které najdete mimo jiné také funkční demo, na němž si uvedené informace můžete v praxi ověřit. Stačí když webovou stránku načtěte Internet Explorerem a stáhněte velikost okna například na polovinu. Následně pohybujte myší po celé ploše obrazovky a věnujte přitom své myšlenky faktu, že ukazatel myši, který na demo stránce přesně kopíruje váš pohyb po obrazovce, může být v této podobě vysílán a sledován kýmkoliv na druhé straně zeměkoule.
Je tedy zřejmé, že například zachycení autentikačního kódu, který zadáváte v internetovém bankovnictví skrz virtuální klávesnici, nebude pro útočníka žádný problém. Jak by takové zadávání kódu mohlo vypadat z pohledu útočníka zachycuje následující video.
Z toho, co jsme si dosud uvedli, jednoznačně vyplývá, že jakékoliv implementace virtuálních klávesnic, které se používají k tomu, aby zvýšily bezpečnost uživatelů, jsou v tuto chvíli spíše nejslabším článkem v celém autentizačním procesu. Zvláště pak, když se Microsoft k celému problému postavil tak, že chybu sice uznává, ale nehodlá ji v aktuálních verzích prohlížečů nijak řešit.
Autor na svých stránkách upozorňuje také na skutečnost, že se podobný špionážní kód může v rámci reklamy objevit téměř na jakékoliv webové stránce, a že aktuálně této metody již využívají dvě reklamní společnosti. Jediným vhodným řešením se tak zřejmě jeví výměna Internet Exploreru za jinou, bezpečnější alternativu.