Zavirovaný web: jak se zbavit infekce krok za krokem?

Nedávno jsem řešil zavirovaný web, který byl prolezlý kousky cizího kódu.

Jak se zavirovaný web (postavený na WordPress) choval? Když přišel na web nový návštěvník, byl přesměrován na stránku typu "vyhráli jste iPhone" atd., ale při druhé návštěvě web již fungoval normálně.

Dále popisuji, jak se mi podařilo infikované soubory najít a odstranit.

Zavirovaný web: jak se zbavit infekce krok za krokem?

Datum poslední změny: 11. 12. 2023

Zběžný pohled do administrace

Mrkl jsem jak to vypadá v administraci WP: instalovaná dvě témata, aktivní (samozřejmě) jen jedno, to neaktivní nějaké neznámé. Kupa neaktualizovaných pluginů, některé roky. Zazálohoval jsem databázi a FTP a deaktivoval právě tyhle roky neudržované pluginy. Web dle zběžného proklikání "fachčil". Staré pluginy jsem tedy smazal a přesunul se na FTP.

WP-config

Své pátrání jsem začal klasicky ve wp-config.php a hned narazil na stopu: na konci souboru mě udeřila do očí přidaná cesta k souboru header.php:

include_once(ABSPATH . WPINC . '/header.php');

Proč header.php? Header by měl být přece v šabloně normálně. Šablony jsou ale běžně uložené ve /wp-content/themes. Ne ve složce /wp-includes (WPINC). Copá v tom souboru teda je?

První tři řádky jsou podezřelé samy o sobě: vypnutí výpisu chyb a definice globální proměnné zeeta:

<?php @ini_set('display_errors', '0');
error_reporting(0);
global $zeeta;

Co si o souboru myslel ChatGPT?

ChatGPT si taky myslí, že je soubor zavirovaný

Vida, “chytrá doplňovačka” si to taky myslí. Zkusmo jsem tedy soubor smazal. Web běžel dál. Smazal jsem tedy i řádek z wp-config, kde "spočívala" cesta na header.php.

Po stopách zeeta

Prohledal jsem instalaci WordPressu a vydal se po stopách tajemné zeeta.

Hledání infekce v instalaci WordPress

Tady ještě před smazáním header.php.

Do očí udeří, že zeeta je zavrtaná v šablonách. Nejprve jsem prokrastinoval a smazal složku “nějaké” zálohy. Zase beztrestně (web jel). Šablona Skeleteon nebyla použitá, takže jsem ji na férovku smazal. Kdoby také chtěl schraňovat kostlivce ve WordPressu, že? S aktivním tématem to takhle naneštěstí nejde. Fňuk.

Wordfence

Nainstaloval jsem Wordfence a spustil scan. Našel další prolezlé soubory:

  • wp-includes/class-wp-http-netfilter.php - obsahoval tučný seznam IP adres a po smazání se vždy objevil po chvíli znova (grrr).
  • wp-content/uploads/2021/05/wp-load.php - php soubor v uploads? Pravděpodobně tenhle soubor připutoval na server jako první. Uvnitř čekaly na svou příležitost řádky kódu, které nabádaly ke stahování (kdoví odkud) a nalézt se dal i již zmíněný include cesty k header.php.

Zpropadený netfilter.php

Po smazání souboru netfilter.php se ten všivák do minuty vždy natáhl zpět. Ale naděje umírá poslední! Stále není dořešena infekce v souboru function.php hlavního tématu.

Extrémní řešení (smazání souboru) se samozřejmě nevyplatilo. Z frontendu webu jsem tak udělal "kůlničku na dříví". Nezbylo než se ponořit do kódu.

Při otevření souboru nás s otevřenou náručí vítá nám již známá zeeta a samozřejmě vypnutí chybových hlášek. Ty stejně nikdo nevidí rád.

<?php
 @ini_set('display_errors', '0');
error_reporting(0);
global $zeeta;

Chvíli jsem koukal do kódu, jako husa do flašky, až jsem si všiml odlišného coding style mezi začátkem souboru a zbytkem. První část neměla vůbec žádné komentáře, proměnné neměly popisné názvy a navíc mi z kódu vůbec nebylo jasné, o co tam jde. A to by aspoň rámcově u šablony být asi mělo, ne?

Rozhodl jsem se tedy udělal “řez”. Voilà web šlapal. Co víc! Všivák netfilter.php se po smazání už neobjevil a Wordfence už také žádný podežřelý soubor nenalezl.

Přesměrování na frontendu je také pryč. Klient s kolegy jsou happy, that makes me taky happy.

Příště se podíváme na prevenci. Řešíš-li něco podobného a necítíš se na řešení, neváhej mě kontaktovat. Buď tě infekce "zbavím na klíč" nebo se na ni podíváme v rámci konzultace.

Časté otázky

Co je zavirovaný web a jak se infekce projevuje?

Zavirovaný web znamená, že se útočníkovi podařilo dostat do souborů nebo databáze webu škodlivý kód. Nejčastěji se dovnitř dostane přes neaktualizovaný WordPress, plugin nebo šablonu. Ten kód pak dělá, co útočník chce — přesměrovává návštěvníky, vkládá cizí reklamy, rozesílá spam nebo web zneužívá k útokům na další weby. Web přitom může vypadat navenek úplně normálně.

Proč můj web ukazuje falešné výhry a reklamy jen návštěvníkům?

Chytřejší malware se schválně schovává před přihlášeným administrátorem a škodlivý obsah — třeba hlášku „vyhráli jste iPhone“ — ukazuje jen běžným návštěvníkům. Ty jako majitel tak na webu nic divného nevidíš, zatímco tvoji návštěvníci ano. Proto se napadení často pozná pozdě, až když se ozvou klienti nebo tě upozorní Google.

Proč se malware pořád vrací, i když ho smažu?

Protože málokdy jde o jediný soubor. Malware si často nechává zadní vrátka — skript, který ho po smazání znovu vytvoří, nebo kód schovaný na místě, kam se běžně nedíváš. Když smažeš jen to viditelný a přehlédneš skrytou část, infekce se do pár hodin vrátí. Proto je potřeba web projít systematicky a najít všechny stopy, ne jen tu první.

Kde se v WordPressu nejčastěji schovává škodlivý kód?

Typická místa jsou wp-config.php (tady se spíš připravuje půdička pro další scripty), soubor functions.php v šabloně, složka uploads (kam nahráváš obrázky, ne kód), wp-includes a takzvané mu-plugins, které se v administraci ani nezobrazují. Útočníci volí místa, kam se běžný uživatel nedívá a kam WordPress nepustí přes klikací rozhraní. Právě proto se čištění dělá na na serveru v souborech WP (pres ftp) a v databázi, ne jen v adminu.

Kdy má smysl přenechat čištění profíkovi?

Když se infekce vrací, když si nejsi jistý, že jsi našel/našla všechno, nebo když ti web vydělává a nemůže dlouho stát. Nekompletní vyčištění je horší než žádné — uspí tě falešným pocitem, že je hotovo. Když čištění i následné zabezpečení přenecháš někomu, kdo ví, kam se dívat, ušetříš si čas, nervy a riziko, že se problém vrátí.

Máš podezření, že ti někdo napadl web?

Rád ti pomůžu web odčervit.

Tvůrce webů ukazující na notebook na bílém pozadí se žlutými grafickými prvky

WordPressito

Měsíční newsletter pro majitele webů, kteří chtějí, aby jejich WordPress spolehlivě fungoval.

Dozvíš se:

🔌 Tipy na užitečné pluginy a nástroje.
🆕 Novinky z WordPress světa.
💡 Praktické návody a rady.

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram