Stručně: Malwarový skener pro weby nachází hlavně známé vzorce v souborech nebo v doručené stránce. Nový a zakódovaný kód, zadní vrátka v databázi, cizí účty, cron úlohy a klíče SSH často zůstávají neviditelné. „Nic nenalezeno“ proto neznamená „čisto“. Spolehlivou kontrolu dává teprve kombinace skeneru, porovnání s originálem, kontroly databáze a systému a sledování chování.
Klamný klid po zelené fajfce
Po PHP2Shell udělalo mnoho provozovatelů to, co je nasnadě: spustilo skener. Online služba zkontroluje úvodní stránku, bezpečnostní plugin prohledá webový adresář, výsledek je zelený. Zdá se, že je tím zodpovězena otázka, zda se před záplatou něco stalo.
Problém je v principu. Většina skenerů porovnává obsah se vzorci známého škodlivého softwaru. Pro zranitelnosti CVE-2026-109618 a CVE-2026-109619 ale neexistují zveřejněné, potvrzené indikátory kompromitace (Indicators of Compromise); rozpoznání se opírá o analýzu chování. Skener nemůže hledat stopy, které nikdo nezná. Nejvýše najde obecný škodlivý software, který byl po průniku stažen, pokud se řídí známými vzorci.
Skenery tím neztrácejí hodnotu. Znamená to jen, že je třeba výsledek správně zařadit. Které známky mají váhu i mimo skenery, popisuje článek Jsem už kompromitován?.
Malwarové skenery pro weby: tři konstrukce
| Konstrukce | Co vidí | Co nevidí |
|---|---|---|
| Externí skener (online služba) | doručené stránky, vložené skripty, přesměrování, seznamy blokovaných | soubory, databázi, účty, vše, co se doručuje jen za určitých podmínek |
| Skener v CMS (plugin nebo rozšíření) | soubory ve webovém adresáři, zčásti obsah databáze, porovnání s jádrovými soubory | úroveň systému, cron úlohy, SSH; běží v možná napadeném systému |
| Skener na serveru (založený na signaturách) | všechny čitelné soubory, i mimo webový adresář | neznámé a zakódované vzorce, databázi, účty, chování |
Externí skenery se hodí k rozpoznání viditelných následků, například přesměrování nebo záznamů v seznamech blokovaných. Mnoho hacků ale doručuje spamový obsah nebo přesměrování jen určitým návštěvníkům, například vyhledávačům nebo mobilním zařízením. Skener pak vidí čistou stránku.
Skenery v CMS mají větší vhled, ale zásadní problém: běží ve stejném systému, který mají kontrolovat. Kód s dostatečnými právy může ovlivnit jejich výsledky, skrýt soubory nebo skener deaktivovat. Skenery na serveru pracují mimo aplikaci, ale zůstávají odkázány na vzorce.
Co skenery v zásadě přehlédnou
Bez ohledu na konstrukci existují oblasti, které skener souborů nebo stránek sotva pokryje:
- Nový nebo individuálně zakódovaný kód: Každá varianta, která vypadá jinak než známé vzorce, projde.
- Databáze: Skripty v obsahu, změněná nastavení, triggery a cizí účty. Více v článku Kontrola databáze na vložený kód.
- Přístupy: další administrátorské účty, klíče SSH, databázoví uživatelé, účty v hostingovém panelu.
- Systémové služby a cron úlohy: mechanismy, které pravidelně stahují škodlivý kód.
- Nenápadné změny legitimních souborů: jediný přidaný řádek v jádrovém souboru, který vypadá neškodně.
- Uniklá data: Zda byly zkopírovány přístupové údaje nebo data zákazníků, neukáže žádný skener.
Co dává jistotu
Více bezpečí přináší kombinace druhů kontroly, které pracují odlišně:
- Porovnání s originálem: Najde každou změnu známých souborů nezávisle na vzorcích. Postup popisuje článek Porovnání jádrových souborů CMS s originálem.
- Cílené hledání nápadností: soubory PHP ve složkách s nahranými soubory, nedávno změněné soubory, zakódovaný kód, spustitelné soubory v dočasných složkách.
- Kontrola účtů a systémových služeb: uživatele, klíče, cron úlohy a služby porovnat se známým správným stavem.
- Vyhodnocení logů: požadavky na neznámé soubory, nárůst chyb, neobvyklá přihlášení.
- Sledování chování: procesy webového serveru, které spouštějí shell, neočekávaná odchozí spojení, nové soubory v citlivých složkách.
Poslední kategorie je nejdůležitější, pokud neexistují žádné známé stopy. Neptá se, jak škodlivý kód vypadá, ale co dělá. Proces webového serveru, který náhle spustí shell, je nápadný bez ohledu na to, jak je spouštějící kód zakódován.
Skener na serveru nechte běžet z čistého systému nad kopií chráněnou proti zápisu, ne na samotném podezřelém serveru. Vložený kód tak nemůže výsledek ovlivnit.
Jak skenery rozumně používat
Skenery mají své místo, jako jeden nástroj z několika. Externí skener se hodí jako pravidelná kontrola viditelných následků, například týdně. Skener v CMS hlásí v každodenním provozu známý škodlivý software a změněné jádrové soubory. Skener na serveru doplňuje hledání známých vzorců v celém souborovém systému.
Rozhodující je zacházení s výsledkem. Nález je jasný úkol ke kontrole a ospravedlňuje úplné vyšetření, protože zřídka bývá dotčen jen jeden soubor. Prázdný výsledek je naproti tomu jen výpovědí o zkontrolovaných vzorcích. V dokumentaci zaznamenejte, který skener kdy s jakým stavem běžel, a nepište „systém čistý“, ale „nenalezeny žádné známé vzorce“.
Pro vedení firmy z toho plyne: zelená fajfka nenahrazuje kontrolu někým, kdo posuzuje soubory, databázi, účty a chování dohromady. Po incidentu s možným spuštěním kódu, jak je u PHP2Shell myslitelné, by taková kontrola měla proběhnout.
Pokud skener naopak nález ohlásí, je namístě rychlé, ale uspořádané jednání. Nahlášený soubor nemažte hned funkcí skeneru. Nejprve zajistěte soubor a logy, aby šlo objasnit, jak se na server dostal. Jak probíhá úplné vyčištění, popisuje služba Odstranění malwaru a webshellů.
Jak konkrétně pomáhá PHP SOS?
- Skenery kombinujeme s porovnáním proti originálu, cíleným hledáním a vyhodnocením účtů, služeb a logů.
- Podezřelé systémy kontrolujeme přes zajištěné kopie, aby výsledky neovlivnil napadený systém.
- Každý výsledek upřímně označíme jako doložený, pravděpodobný, nebo neznámý.
- Pomocí bezpečnostního monitoringu webových serverů trvale sledujeme chování vašich serverů, nejen známé vzorce.
Časté dotazy
Je můj web čistý, když malwarový skener nic nenajde?
Nutně ne. Skenery nacházejí hlavně známé vzorce. Nový nebo dobře zakódovaný kód, zadní vrátka v databázi, cizí účty, cron úlohy a klíče SSH často zůstanou neodhaleny. Prázdný výsledek je stavební kámen, ne zproštění viny.
Jaký je rozdíl mezi externím skenerem a skenerem v pluginu?
Externí skener volá web zvenčí a vidí jen to, co se doručuje. Skener v pluginu běží uvnitř CMS a může číst soubory, ale běží ve stejném systému, který může být napaden. Oba mají vlastní slepá místa.
Existují signatury skenerů pro PHP2Shell?
Pro PHP2Shell neexistují zveřejněné, potvrzené indikátory kompromitace (Indicators of Compromise). Skenery proto nemohou cíleně hledat jisté stopy PHP2Shell. Rozpoznání se opírá o analýzu chování a hledání obecných známek kompromitace.
Který skener je nejlepší?
Otázka vede na scestí. Důležitější než konkrétní produkt je kombinace různých druhů kontroly: porovnání s originálem, hledání v souborech a databázi, kontrola účtů a systémových služeb a sledování chování.