Při práci s naší aplikací MDM musíme občas řešit žádosti o pomoc týkající se nalezeného vadného kódu na webových stránkách. Je to celkem pochopitelné, stránky jsou často v provozu roky, nikdo na ně za tu dobu nesáhl a nebo si je držitel nechával od někoho dělat a dnes už třeba na tvůrce webu nemá ani kontakt. Zkrátka důvodů, proč se na nás oběti útoků obrací, existuje celá řada. Proto jsem se rozhodl napsat tento článek, abych mohl názorně demonstrovat, s jakými problémy se nejčastěji setkáváme, jak lze zamaskovaný javascript v kódu stránky nalézt a jak dále postupovat po jeho odhalení.
Jako první krok je vhodné zkusit tento on-line nástroj, který vám může ušetřit hodně času. Obsahuje databázi skriptů a technik používaných útočníky a pokud je na vašich stránkách rozpozná, ukáže vám také zdrojový kód, který je původcem problému. Další podobný nástroj, který Vám může hodně pomoci, je urlquery.net. Ten totiž provede analýzu stránky automaticky a ukáže Vám například, odkud se které části stránky stahovaly. Pokud pak ve výpise uvidíte neznámou doménu, tak máte jasno, odkud se malware vzal. Pokud ani toto nepomůže, je potřeba hledat jiným způsobem, tedy podívat se do zdrojového kódu webových stránek.
Nejčastěji se při útocích setkáváme s použitím tagu iframe. Ten se používá pro vnoření webové stránky do jiné. Konkrétní vložení kódu se pak provádí tagem <iframe>. Snahou útočníků je samozřejmě dosáhnout toho, aby vložený prvek nebyl na napadeném webu snadno viditelný, proto použijí atributy, kterými se vložený frame zmenší na nejmenší možnou velikost a zároveň mu nastaví jeho neviditelnost. Samotné nastavení neviditelnosti by nestačilo, protože vložený prvek by na cílové stránce okupoval určitý prostor, což by bylo nápadné. Proto útočník obvykle použije nějakou takovouto konstrukci:
Pokud tedy na podobný kód směřující na vám neznámou doménu při zkoumaní html kódu narazíte, bude to pravděpodobně to co hledáte. Takovýto zřejmý odkaz by však dokázal i trochu zkušenější uživatel v kódu html najít, obzvlášť, pokud přihlédneme k tomu, že je tento odkaz obvykle směřován na pro nás přece jen trochu exotičtější domény typu .cn. Proto útočníci přistupují i k dalším metodám zmatení kódu. Bohužel takto zamaskovanou změnu již není možné snadno odhalit. Proto se také obvykle setkáváme s částmi kódu, které vypadají asi takto:
Zde již není možné na první pohled jednoznačně určit, zda byl kód vložen dodatečně útočníkem, či zda tam tento kus kódu vložil původní tvůrce stránek. Ve spodní části je v závorce velká řada čísel a písmen. Podle použitých čísel a písmen můžeme usuzovat na použití hex kódu k zamaskování skutečné URL. Jedná se o obvyklou taktiku používanou útočníky. Nyní tedy použijeme on-line dekódovací nástroj, upozorňuji, že je potřeba vzít pouze tuto část skriptu:
Po dekódování získáme takovýto výsledek:
Opět i bez hlubší znalosti JavaScriptového kódu vidíme, že script vkládá do webové stránky iframe odkazující na gstats.cn. Upozorňuji, že se jedná o skutečný kód použitý na jednom z napadených webů. Proto nedoporučuji zkoumat obsah webu http://gstats.cn. Toto platí i pro všechny další ukázky.
Další metodou, jak odhalit pravou funkci podezřelého skriptu, je jeho spuštění. Toto však doporučuji pouze zkušeným uživatelům a pouze v k tomu účelu vytvořeném virtuálním PC nebo v některém sandboxu. K samotnému provedení této akce lze použít například nainstalovaný Firefox a v něm plugin firebug. Řekněme, že máme takovýto skript:
Pro jeho zpřehlednění můžeme použít on-line nástroj jsbeautifier(). Zkopírujeme vše mezi tagy script a na stránce jsbeatifier.org si jej necháme upravit tak, aby pro nás byl více přehledný. Získáme takovýto výstup:
Nyní změníme ve skriptu příkaz document.write(str); na alert(str);. Tím zajistíme, že se výsledek scriptu nepřidá jako součást stránky, ale vypíše se v jednoduchém dialogovém okně jako text. Nyní spustíme firebug, zvolíme konzole a vložíme předupravený skript. Zvolíme spustit a vyskočí na nás okno, kde vidíme kód, který se jinak vkládá do webové stránky. Jak můžete vidět na obrázku, je to náš starý dobrý známý, tag iframe.
A nyní malá soutěž. Na následující kód jsme narazili nedávno. Je na něm zajímavé například to, že obsahuje záměrně zbytečné části, které mají ztížit orientaci v jeho kódu. Kdo první napíše v diskuzi doménu, na kterou se skriptem vkládaný iframe odkazuje, ten od nás obdrží poštou tričko. Malá rada na závěr, zkuste to pomocí funkce console.log a pozor, opět se jedná o ukázku skutečného kódu, je tedy potřeba se skriptem zacházet opatrně. Prohlédnout si jej můžete zde (původní txt soubor byl nahrazen png obrázkem). Kromě správné odpovědi nezapomeňte připojit také Vaši e-mailovou adresu, ať Vás můžeme ohledně výhry kontaktovat.
Na závěr bych rád uvedl ještě pár rad, kterými je dobré se řídit, pokud již takovouto havěť na svém webu najdete. Jak jste mohli vidět, útočníci jsou opravdu velmi vynalézaví a je proto poměrně obtížné se s těmito způsoby útoku vypořádat. Pokud však odhalíte takovýto kód ve vaší webové aplikaci, doporučujeme následující postup:
1. Odpojte webové stránky, případně změňte úvodní stránku, aby zobrazovala pouze informace o údržbě. Předejdete tak dalšímu napadení uživatelů vašeho webu.
2.Než začnete odstraňovat kód, o němž si myslíte, že do vašich stránek nepatří, udělejte si zálohu, pokud ji nemáte.
3. Pokud máte čistou zálohu stránek, použijte ji. Pokud ne, musíte najít a odstranit škodlivý kód ručně.
4. Zkontrolujte, že na žádném z počítačů, ze kterých web upravujete pomocí FTP, nemáte viry, či jiný malware. Dle našich zkušeností je toto častá cesta, kterou se útočníci k heslům dostanou. Pak pro ně samozřejmě není těžké do stránek přidat svůj vlastní kód.
5.Změňte všechna hesla, která mají nějaký vztah k napadenému webu. Hesla k FTP, SSH, heslo admina aplikace (WordPress, Joomla) atd.
6. Například pomocí již zmiňovaného on-line nástroje zkuste otestovat, zda je Váš web již skutečně v pořádku. Posledním krokem je pak nalezení způsobu, kterým byl kód do stránky vložen. Nejčastějšími příčinami jsou již zmiňovaná krádež hesel pomocí viru na počítači správce webu, dále se může jednat o zastaralou verzi CMS, například WordPress, Joomla a další. Může se jednat také o zranitelnost samotného serveru, na kterém webové stránky běží.
Rozhodně radíme tento problém nepodceňovat, protože na vložené stránce se mohou vyskytovat skripty, které mohou uživateli stáhnout do počítače nebezpečné soubory, či například hledat zranitelnosti používaného prohlížeče.
Pavel Bašta
Vede na http://shockingrates.com/mind/in.cgi?6
Vážený pane Stanislave, gratulujeme Vám k nejrychlejšímu vyřešení naší malé soutěže. Pošlete nám prosím Vaše kontaktní údaje na naši e-mailovou adresu info@csirt.cz. Nezapomeňte také uvést požadovanou velikost trička.
Ještě jednu radu bych dodal a to aktualizovat WP.. Třeba heslo nebylo zcizeno, ale útočník využil chybu ve WordPressu apod.
Sakryš, předběhl mě a má to správně :-)
Ja by som este odporucil dobrovolny krok 7. -> Poslat infikovane subory do AV spolocnosti ak nie su detegovane, cim admini pomozu pouzivatelom iternetu a rychlejsie sa identifikuju aj dalsie hack-nute weby.
Info:
http://kb.eset.com/esetkb/index?page=content&id=SOLN141&viewlocale=en_US
http://forums.avg.com/us-en/avg-forums?sec=thread&act=show&id=397
http://www.wilderssecurity.com/showthread.php?t=277780
Zajímavý článek, dík.
Rád bych se zeptal – v článku varujete před návštěvou nebezpečných web stránek, např. zmíněný http://gstats.cn .
Co se mi může stát, vždyť prohlížeč na disk nic neuloží (bez mého vědomí).
A tudíž se mi počítač nemůže virem nakazit. Nebo ne???
Děkuji za Vaši reakci, jsem rád, že se Vám článek líbil.
K Vašemu dotazu. Pokud máte vypnuté skriptování a aktualizovaný systém i prohlížeč, tak je pravděpodobnost úspěšného útoku malá. Nikdy však nebude nulová, protože útočníci mohou například využívat nějaký nový dosud neznámý exploit v prohlížeči. Z tohoto důvodu je pro uživatele vždy lepší se podobným stránkám vyhnout.