Spambot ve WordPressu

Náhodou jsem zjistil, že místo blogu mám 403 Forbidden. Na podpoře hostingu jsem se dozvěděl, že z domény odcházelo velké množství spamu, tak ji zablokovali. Hm hm, říkám si, žádný infoprodukt nedělám, viagru neprodávám, zkrátka nic o čem bych věděl, tak to bude asi vir.

Protože mé zkušenosti s WordPressem zatím končily u instalace a hodinového hledání theme, šel jsem na to po svém. Prohledal jsem soubory na výskyt mail( a zjistil, že WordPress k rozesíláním mailů používá phpMailer. Tak jsem hledal výskyt send( a náhodou přišel na to, že ve wp-content/uploads jsou cizí soubory. Dva, které obsahují phpinfo() a jeden větší sys09725822.php se zakódovaným obsahem. Podezřelého jsem tedy měl, ale Google mi s ním neporadil, protože název souboru je generovaný automaticky. Ze zvědavosti jsem k rozkódování použil HexDecoder. Podle všeho šlo o spambota řízeného na dálku. Prohledal jsem celou instalaci jestli se někde tyhle cizí soubory nevkládají. Nikde nic, což podpořilo můj předpoklad, že se spouští externě. Prohledal jsem ještě soubory podle času poslední modifikace, abych měl jistotu, že jsem nic dalšího cizího nepřehlédnul.

Hlavou mi vrtalo, jak se tam ty soubory mohly dostat. Napadá mě, že buď došlo k prolomení hesla na FTP, do WP administrace nebo prostřednictvím nějakého WP pluginu. Například na tomto videu je vidět, jak to jde přes děravý plugin jako po másle. I když skoro žádné pluginy nepoužívám, pod vlivem videa jsem prohledal všechny pluginy. Žádný z nich ale nepracuje s uploadem souborů, alespoň ne klasickou cestou. Prolomení hesla na FTP se mi nezdá, protože infekce postihla jen upload adresář WordPressu, žádné další. Takže průnik šel nejspíš přes admin heslo do WP. Jiné způsoby mě nenapadly. wp_users neobsahoval žádné nové uživatele a WP v základu bohužel neloguje přihlašování.

Na řadu přišlo finále – odstranění viru a zabezpečení se proti dalším podobným překvapením:

  • změnil jsem hesla k FTP, databázi a WP administraci
  • smazal jsem infikované soubory z wp-content/uploads
  • do wp-content/uploads jsem přidal .htaccess a do něj php_flag engine off, což by mělo zabránit spouštění skriptů v celém adresáři a podadresářích
  • aktualizoval jsem WP na nejnovější verzi
  • nainstaloval jsem plugin Simply Login Log, který loguje přihlašování do administrace