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

- Odkaz: https://tomas-shejbal.cz/wordpressito/zavirovany-web/
- Zveřejněno: 2023-11-21T11:28:29+01:00
- Autor: tom

# 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?](https://tomas-shejbal.cz/
wp-content/uploads/2023/11/front.webp)

_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:_

    ```wp-block-code
    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_:

    ```wp-block-code
    <?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ý](https://tomas-shejbal.cz/wp-content/
uploads/2023/11/chatGpt.webp)

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](https://tomas-shejbal.cz/wp-content/uploads/
2023/11/zeeta.webp)

_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.

    ```wp-block-code
    <?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](https://tomas-shejbal.cz/wordpressito/nastaveni-wordfence/).**
Ř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](https://tomas-shejbal.cz/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.

[**Chci pomoct**](https://tomas-shejbal.cz/optimalizace-wordpress-webu#section-279-139241)

![Tvůrce webů ukazující na notebook na bílém pozadí se žlutými grafickými prvky](
https://tomas-shejbal.cz/wp-content/uploads/2026/01/optimalizace_bottom.webp)
