Napadené WordPress weby

Napadení webu

Nedávno jsem se dostal ke dvěma různým webům na WordPressu, které napadli neznámí útočníci. Každý z hacků byl naprosto odlišný, a obsa se mi povedlo – zdá se – zdárně vyřešit.

První napadený web – E-shop s nábytkem

První web byl e-shop s nábytkem (na WooCommerce). Jeho napadení spočívalo v tom, že do úvodní stránky byly vypsány desítky spamových odkazů na cizí weby, ale tyto odkazy byly zprůhledněny na 0.01 % viditelnosti, a ač prostým okem neviditelné, tak překrývaly záhlaví webu včetně navigace. A když chtěl člověk kliknout na některý odkaz v navigaci, klikl na průhledný odkaz „nad“ ním. Proto se na mě majitel webu nejdříve obrátil s tím, že má web napadený nějakým virem, který přesměrovává odkazy v navigaci … záhy jsem odhalil, že je to trochu jinak.

Mezi zdrojovými soubory WordPressu jsem našel modifikovaný soubor theme.php, na jehož konec byla vložena záškodnická funkce vypisující odkazy. Fajn, opravil jsem jej, ale to je jen řešení následků. Letmo jsem se podíval na ostatní soubory v hlavní složce WP, a všiml si jiného podivného, který mi z ostatních instalací WP nebyl povědomý. Jeho kód vypadal navýsost podezřele, a když jsem jej zkusil spustit v prohlížeči (což mohl kdokoli, kdo znal jeho adresu mezi ostatními soubory), otevřelo se mi dechberoucí „hackerské rozhraní“ nabízející i největšímu amatérovi nástroj pro naprosté ovládnutí WP webu, mezi jehož soubory je umístěno. Takže jsem jej smazal. A změnil heslo k FTP serveru. Buď znal útočník heslo k FTP, a soubor si tam sám nahrál (nepravděpodobné), nebo využil díry v nějakém neaktuálním pluginu – takže jsem všechny aktualizoval na poslední verze.

Myslel jsem si, že tím je vše vyřešeno, ale za pár dní se majitel ozval znovu, s identickým problémem. Opět modifikovaný soubor theme.php, opět spamové odkazy.  No tedy? Nedávalo mi to smysl, protože datum modifikace souboru odpovídalo datu, kdy jsem jej „opravil“. Od té doby s ním tedy nebylo manipulováno, a přesto je v něm opět onen škodlivý kód. A nebo stále? Nemohlo se mi stát, že zatímco jsem soubor opravil u sebe na PC, tak jsem jej zapomněl opravený nahrát zpět na web, a tam zůstal ten napadaný, a my s majitelem si toho pouze nevšimli? To mi přišlo jako jediné vysvětlení. Provedl jsem tedy důkladnou opravu napadeného souboru.

Ale neuběhlo pár dní a web byl napaden znovu. Opět theme.php, a opět datum poslední modifikace odpovídalo času, kdy jsem soubor opravoval. Nedávalo mi to smysl. Ale situace byla celkem zřejmá – někde mezi soubory WordPressu je další škodlivý soubor tvořící zadní vrátka pro útočníka.

Možnosti?

  • Otevřít a zkontrolovat každý jeden ze stovek a tisíců souborů WordPressu a všech nainstalovaných pluginů. Nereálné.
  • Smazat všechny soubory WordPressu a jeho pluginů, a potom je nahrát nově z čistých instalací. Trochu reálnější, ale té neskutečné práce, co by s tím bylo … a vysoká pravděpodobnost, že by se obsah webu a jeho nastavení nedalo úplně 100% vrátit zpět. Takže další komplikace navíc.
  • Aktivovat na webhostingu „access logy“, a čekat, až bude web opět napaden.

Vydal jsem se třetí cestou. Logika byla jasná – pokud je někde mezi soubory nějaký záškodnický soubor, pak tam jen tak tiše sedí, dokud jej útočník „nezavolá“, aby provedl nějakou akci. A toto volání bude zaznamenáno v přístupových lozích… stejně jako statisíce dalších záznamů každý den. S největší pravděpodobností je onen škodlivý soubor ve formátu PHP, takže až bude web opět napaden, tak si z access logů vytáhnu ty přístupy, co směřovaly na PHP soubory. A nebude to ani tak složité, protože WP, ač napsaný v PHP, používá „pěkné URL“, a ty koncovku .php neobsahují. Takže volání PHP souborů tam bude minimum.

Týden dva se nic nedělo, a web opět napaden. Opět theme.php, opět datum modifikace beze změny. Netrvalo dlouho, a našel jsem v access logu cca den staré přístupy na divný PHP soubor ve složce /wp-include/. Prozkoumal jsem jej, a uvnitř jasný škodlivý kód, sloužící ke spouštění jakýkoliv pokynů, co mu útočník předá. Odstranil jsem jej, a od té doby je na webu klid.

Novinkou pro mě bylo to, že za sebou onen útočník zametal stopy – infikovanému souboru vždy nastavil původní datum modifikace, na první pohled tedy vypadal neporušený. A také se nedalo zjistit, kdy přesně došlo k jeho změně.

Druhý napadený web – Instruktorka jógy

Druhý útok byl odlišný – když přišel návštěvník poprvé na web instruktorky jógy, tak byl přesměrován na nějaký úplně jiný a nesouvisející zahraniční web. Aniž by na něco kliknul. Rychle jsem zjistil, že na konci každého příspěvku a každé stránky je vložen HTML kód pro načtení externího JavaScriptového souboru, který toto spůsobuje. A mezi uživateli administrace byl podivný uživatelský účet, o kterém nikdo netušil, co tam dělá. Aha. Takže útok spočíval v tom, že měl útočník pravděpodobně přes nějaká zadní vrátka přístup k webu, a ten využíval tak, že si zaregistroval svého uživatele, a přes něj se tradičně přihlásil do administrace, a v ní prováděl libovolnou neplechu. Po smazání se tam druhý den objevil znovu. Automatizovaně mohl tedy editovat všechny příspěvky a „obohatit“ je o skrytý kód, který v editoru nebyl nijak vidět, ale na front-endu způsoboval přesměrování jinam.

Tyto kódy jsem všechny odmazal, a objevil se úplně jiný problém – web o den později přestal úplně fungovat. Pouze bílá stránka. Ale administrace fungovala. A opět v ní byl registrován podezřelý účet. Z access logů – a datu modifikace souborů šablony – jsem tentokrát zjistil, že jej útočník využívá, aby přes administrační editor souborů šablony vkládal škodlivý kód přímo do šablony. Tedy úplně jiný způsob napadení, než jsem řešil o pár dní dříve. Vše jsem opravil, účet smazal, a změnil hesla všem ostatním uživatelům, a hesla k FTP i k MySQL databázi. Od té doby je klid.

Ani v jednom případě za těmi útoky na 99 %  nestál reálný člověk (který by se ručně přihlašoval do adminisstrace). Vše je podle mě prací automatizovaných robotů, ať už z Kazachstánu nebo Francie, nebo jiné země, na to celkem nesejde. Ti „oťukávají“ všechny domény, jestli na nich náhodou neběží web na WordPressu, a pokud ano, jestli náhodou nepoužívá nějaký z nejrozšířenějších pluginů, který v některé dávné verzi obsahoval bezpečnostní díru… pokud na ni přijdou, procpou skrze ni svoje „zadní vrátka“ a web si poznamenají. A úplně jiný robot pak může tento seznam procházet, kontaktovat ona zadní vrátka a zasahovat do webu dle potřeby.

Napsal Marek Klusák, programátor a webdesigner. Kontakt