Případová studie: obnova napadeného WordPressu
Majitel webu si všiml, že se mu opakovaně mění heslo správce WordPressu. Po první změně se problém následující den vrátil. Viditelný příznak přitom představoval jen malou část incidentu: útočník mohl na webu spouštět kód, zakládat další správce a ukládat škodlivé soubory.
V této anonymizované případové studii ukazujeme, proč po napadení nestačí změnit heslo nebo smazat první podezřelý soubor. Bez časové osy by se mohla obnovit už napadená záloha nebo na webu zůstat jiná cesta zpět.
Rychlá obnova je důležitá, ale bezpečný postup začíná zjištěním rozsahu a posledního použitelného stavu.
Nejdřív jsme přestali napadený web měnit
Hosting jsme pro analýzu připojili pouze pro čtení. Ze zákaznické instalace jsme nespouštěli WordPress, PHP ani podezřelé soubory. Cílem bylo nezměnit časy a obsah souborů, nespustit další škodlivý kód a uchovat podklady potřebné pro rozhodnutí o obnově.
Nešlo o formální znalecký posudek. Šlo o řízenou technickou analýzu incidentu zaměřenou na bezpečný návrat webu do provozu.
Časovou osu jsme složili z více zdrojů
Porovnali jsme přístupové a chybové protokoly serveru, aktuální soubory, historické zálohy souborů, denní zálohy databáze, změny uživatelských účtů a časy vzniku podezřelých souborů. Jednotlivý neobvyklý soubor jsme nepovažovali automaticky za důkaz. Rozhodující byla shoda obsahu, umístění, času a souvisejících požadavků v protokolech.
Příčinou byla kritická chyba v jádře WordPressu
Web běžel na WordPressu 6.9.4. V protokolech jsme našli požadavky odpovídající zneužití kritické chyby označované jako wp2shell a jejich časovou návaznost na vznik škodlivých souborů. Nešlo o pouhé upozornění skeneru ani o prokázanou chybu doplňku.
- Oficiální bezpečnostní upozornění WordPressu na GitHubu
- Vydání opravné verze WordPress 7.0.2
- Technický přehled wp2shell od Searchlight Cyber
Co jsme v instalaci našli
- 17 neoprávněných účtů s oprávněním správce,
- 23 škodlivých PHP souborů uložených mezi nahranými médii,
- opakované změny přihlašovacích údajů původního správce,
- pokračující pokusy o zneužití až do večera, kdy proběhla obnova.
Napadené byly soubory i databáze. Obnova samotných souborů by proto ponechala cizí účty a další změny v databázi. Změna hesla jednoho správce by zase neodstranila škodlivé soubory ani ostatní vytvořené účty.
Nejnovější záloha už nebyla použitelná
První potvrzené napadení jsme doložili den po poslední záloze bez nalezených znaků tohoto útoku. Novější záloha už obsahovala změny útočníka. Pro obnovu jsme proto zvolili nejnovější podloženou dvojici souborů a databáze ze stejného dne, nikoli prostě poslední dostupnou zálohu.
Tento případ dopadl dobře i proto, že zákazník problém zjistil relativně rychle a web byl hostovaný u Zserveru. Měli jsme k dispozici potřebné serverové protokoly a denní zálohy souborů i databáze. Standardní historie záloh Zserveru je 30 dní. Kdyby se incident zjistil později, bezpečný bod před napadením už nemusel být dostupný.
Obnovili jsme soubory i databázi a vše aktualizovali
Po schválení postupu jsme obnovili soubory a databázi z odpovídajícího dne. WordPress jsme následně aktualizovali z verze 6.9.4 na opravenou verzi 7.0.2 a nainstalovali všechny dostupné aktualizace doplňků a šablon.
Vybrané klíčové soubory jádra jsme porovnali s oficiálním balíčkem. U všech dvanácti nainstalovaných doplňků a obou šablon jsme ověřili aktuálnost a shodu hlavních souborů s oficiálními zdroji.
Obměna přístupů a omezení návratu útoku
- změnili jsme heslo databáze a legitimního správce,
- obměnili jsme bezpečnostní klíče WordPressu a zneplatnili starší relace,
- zakázali jsme přímé spouštění PHP v adresáři nahraných médií,
- prakticky jsme ověřili, že server pokus o spuštění odmítne,
- zkontrolovali jsme uživatele, provoz webu a známé ukazatele použitého útoku.
Výsledek zásahu
Po obnově a následných kontrolách jsme nenašli známé stopy použitého útoku a web běžel na opravených, aktuálních součástech. Zákaznický web se ještě tentýž večer vrátil do plně funkčního stavu.
Netvrdíme, že jednorázová kontrola může zaručit absolutní bezpečnost do budoucna. Bezpečnost závisí také na průběžných aktualizacích, přístupech, hostingu a nových chybách, které se mohou objevit později.
Co když bezpečná záloha neexistuje
Obnova není jediná možnost. Pokud jsou všechny dostupné zálohy příliš nové, web běží na jiném hostingu bez historie nebo se napadení zjistí až po více než 30 dnech, zbývají dvě další cesty:
- řízené vyčištění instalace, při kterém se prověří soubory, databáze, účty, naplánované úlohy a konfigurace a důvěryhodné součásti se znovu sestaví z oficiálních zdrojů,
- čistá rekonstrukce webu, při které se do nového WordPressu převede pouze ověřený obsah a bezpečně zpracovaná média.
Druhou cestu jsme použili u velmi starého WordPressu 3.3.1. Databáze obsahovala 18 992 publikovaných příspěvků, z nichž drtivou většinu tvořil hazardní spam, a na hostingu byly škodlivé soubory. Do čisté aktuální instalace jsme přenesli deset schválených stránek, šest legitimních příspěvků a 168 obrázků, které jsme bezpečně dekódovali, zbavili metadat a znovu zakódovali. Původní kód, databázi, účty, komentáře, relace, pluginy ani šablonu jsme nepřenesli.
Nový web jsme postavili v Kadence tak, aby na první pohled odpovídal původnímu vzhledu. Rozdíl byl hlavně v tom, že nová verze byla bezpečněji sestavená, přístupná a responzivní i na telefonu.
Co si z případu odnést
- Opakovaná změna hesla může být jen viditelným projevem úplného ovládnutí webu.
- Nejnovější záloha nemusí být bezpečná. Její stav je potřeba porovnat s časovou osou.
- Pokud útok zasáhl databázi i soubory, musí tomu odpovídat také obnova.
- Aktualizace patří až po výběru bezpečného základu, ne místo analýzy.
- Když bezpečný základ neexistuje, lze web vyčistit nebo zrekonstruovat jen z ověřeného obsahu.
- Čím dřív se incident začne řešit, tím větší je šance na použitelnou historii a rychlejší návrat do provozu.
Potřebujete prověřit napadený WordPress?
Pokud se ve WordPressu mění hesla, objevují neznámí správci, přesměrování nebo podezřelé soubory, podívejte se na službu analýza napadení, vyčištění a bezpečná obnova WordPressu. Pomůžeme určit rozsah problému a vybrat mezi obnovou, vyčištěním a čistou rekonstrukcí.
Pro dlouhodobé aktualizace, dohled a prevenci navazuje kompletní správa a zabezpečení WordPressu.
