Usuwanie wirusa ze strony internetowej zaczyna się od odcięcia atakującemu dostępu i wykonania kopii powłamaniowej, a kończy na zgłoszeniu witryny do ponownego sprawdzenia w Google. Zainfekowane pliki znajduje się przez porównanie rdzenia z oryginalną paczką, sortowanie po dacie modyfikacji i wyszukanie funkcji eval oraz base64_decode. Bazę danych czyści się w tabelach wp_options, wp_posts i wp_users, gdzie siedzą wstrzyknięte skrypty i konta dopisane przez atakującego. Po czyszczeniu zostaje zamknięcie luki: aktualizacje, wymiana haseł i kluczy soli oraz blokada wykonywania PHP w katalogu uploads. Instrukcja obejmuje też typowe infekcje, czyli przekierowania, japanese keyword hack, pharma hack, wp-vcd i backdoory.
Od czego zacząć usuwanie wirusa ze strony?
Usuwanie wirusa zaczyna się od odcięcia atakującemu dostępu i wykonania kopii stanu powłamaniowego, jeszcze zanim skasujesz cokolwiek. Kopia plików i bazy potrzebna jest z dwóch powodów: pozwala wrócić do punktu wyjścia, gdy czyszczenie uszkodzi działającą funkcję serwisu, i zachowuje ślady, po których ustala się wektor ataku.
Zaraz po kopii zmień hasło FTP, hasło do panelu hostingu oraz hasła kont administratorów. Dopóki atakujący ma dostęp do serwera, każdy wyczyszczony plik wraca w ciągu kilkunastu minut, a praca zaczyna się od nowa. Przy okazji sprawdź listę użytkowników w panelu WordPressa i zablokuj konta, których nikt z zespołu nie zakładał.
Zanim zaczniesz czyścić: zapisz datę i godzinę pierwszego objawu. Ta data porządkuje całą pracę, ponieważ pliki zmodyfikowane później niż ostatnia legalna aktualizacja są pierwszymi kandydatami do sprawdzenia.
Gdy dostęp jest odcięty, a kopia leży poza serwerem, można przejść do szukania zainfekowanych plików.
Jak znaleźć zainfekowane pliki na serwerze?
Zainfekowane pliki znajduje się przez porównanie instalacji z oryginalnymi paczkami oraz przez wyszukanie w kodzie funkcji, których poprawny motyw nie używa. Poniżej metody uszeregowane od najszybszej do najbardziej pracochłonnej.
- Podmiana rdzenia na oryginałPobierz WordPressa w tej samej wersji i podmień katalogi wp-admin oraz wp-includes w całości. W czystej instalacji nie ma tam żadnych plików spoza paczki, więc każdy nadmiarowy plik jest podejrzany.
- Sortowanie po dacie modyfikacjiWyświetl pliki zmienione po dacie ostatniej legalnej aktualizacji. Część infekcji podszywa datę pliku pod sąsiednie, dlatego ta metoda zawęża listę, ale jej nie zamyka.
- Wyszukanie podejrzanych funkcjiPrzeszukaj katalogi pod kątem eval(, base64_decode(, gzinflate(, str_rot13(, assert( oraz create_function(. W legalnym motywie te funkcje pojawiają się rzadko, a w jednej linii razem prawie nigdy.
- Pliki PHP w katalogach na daneSprawdź wp-content/uploads oraz katalogi cache. Znajdujące się tam pliki PHP to niemal zawsze shell wgrany przez formularz uploadu.
- Pliki .htaccess w każdym kataloguPrzejrzyj .htaccess w katalogu głównym i w podkatalogach. Reguły RewriteCond odwołujące się do user agenta lub do referera z wyszukiwarki oznaczają przekierowanie warunkowe.
- wp-config.php i katalog mu-pluginsNa końcu wp-config.php sprawdź dopisane instrukcje include oraz auto_prepend_file. Katalog wp-content/mu-plugins ładuje się automatycznie i nie widać go na liście wtyczek, dlatego bywa używany jako kryjówka.
Część infekcji nie zostawia jednak śladu w plikach, ponieważ siedzi wyłącznie w bazie danych.
Jak wyczyścić bazę danych WordPressa ze złośliwego kodu?
Bazę danych czyści się w trzech tabelach, w których atakujący zapisuje kod i konta: wp_options, wp_posts oraz wp_users razem z wp_usermeta. Pracuj na kopii bazy i wykonuj poprawki pojedynczymi zapytaniami, bo masowe podmiany potrafią uszkodzić serializowane opcje wtyczek.
W tabeli wp_options sprawdź w pierwszej kolejności wartości siteurl i home, ponieważ ich podmiana odpowiada za przekierowanie całego serwisu. Dalej przejrzyj wpisy z autoload ustawionym na yes, a w nich znaczniki script i iframe oraz adresy domen, których nie znasz. W tabeli wp_posts szukaj tych samych znaczników w treści wpisów, zwłaszcza w postach o starych datach publikacji, do których nikt ostatnio nie zaglądał.
SELECT * FROM wp_posts WHERE post_content LIKE '%<iframe%';
SELECT ID, user_login, user_registered FROM wp_users ORDER BY user_registered DESC;
Trzecie miejsce to konta. Posortuj użytkowników po dacie rejestracji i porównaj listę z tym, co widać w panelu, bo część kont jest ukrywana filtrem i nie pojawia się na standardowej liście użytkowników. Po wyczyszczeniu plików i bazy zostaje zamknięcie luki oraz odbudowa zaufania po stronie wyszukiwarki.
Co zrobić po usunięciu wirusa ze strony?
Po usunięciu wirusa trzeba zamknąć drogę, którą wszedł atakujący, i zgłosić stronę do ponownego sprawdzenia w Google. Poniższa lista to minimum, bez którego infekcja wraca w ciągu kilku dni.
- Aktualizacja rdzenia, motywu i wszystkich wtyczek do najnowszych wersji
- Usunięcie nieużywanych motywów i wtyczek, także tych wyłączonych
- Wymiana haseł FTP, SSH, bazy danych i kont administratorów
- Wymiana kluczy soli w pliku wp-config.php, co kończy wszystkie sesje
- Uprawnienia 644 dla plików i 755 dla katalogów, 600 dla wp-config.php
- Blokada wykonywania PHP w katalogu wp-content/uploads
- Zgłoszenie prośby o ponowne sprawdzenie w Google Search Console
- Kopia zapasowa poza serwerem i kontrola serwisu przez kolejny tydzień
To, czy przejdziesz przez tę listę samodzielnie, zależy głównie od czasu i od tego, ile kosztuje przestój serwisu.
Samodzielne czyszczenie a zlecenie usunięcia włamu - kiedy który wariant się opłaca?
Samodzielne czyszczenie opłaca się przy prostych stronach wizytówkach i przy infekcjach wykrytych w pierwszej dobie, a zlecenie prac przy sklepach oraz przy infekcjach, które wracają po każdym czyszczeniu. Poniżej różnice, które decydują o wyborze.
Czyszczenie samodzielne
Nie kosztuje nic poza czasem, a przy jednej zainfekowanej wtyczce sprowadza się do podmiany kilku plików. Ryzyko polega na tym, że łatwo przeoczyć backdoor w katalogu, do którego się nie zagląda, i wtedy praca zaczyna się od nowa po kilku dniach.
Zlecenie usunięcia włamu
Kosztuje 600 zł netto i kończy się raportem z listą zainfekowanych plików oraz wskazaniem wektora ataku. Ma sens, gdy strona zarabia, gdy hosting zablokował konto albo gdy w wynikach wyszukiwania wisi już ostrzeżenie o zhakowaniu.
Wybór jest łatwiejszy, gdy wiadomo, z jakim typem infekcji masz do czynienia, bo każdy z nich czyści się inaczej.
Rodzaje wirusów na stronie WordPress i instrukcje dla konkretnych przypadków
Wirusy na stronach WordPress dzielą się na te rozpoznawane po zachowaniu serwisu i te widoczne dopiero w kodzie plików. Poniżej krótki opis każdego typu razem z odsyłaczem do osobnej instrukcji.
Przekierowania na obce adresy
Najczęstszy objaw to sytuacja, w której strona WordPress przekierowuje na inną stronę, zwykle na kasyno albo na sklep z podróbkami. Kod odpowiedzialny za przekierowanie siedzi w pliku .htaccess, w nagłówku motywu lub w tabeli wp_options. Bywa warunkowy i uruchamia się tylko na telefonie albo tylko przy wejściu z wyników wyszukiwania.
Japanese keyword hack
Infekcja, która zalewa indeks tysiącami obcych adresów, to japanese keyword hack. Rozpoznaje się ją po japońskich tytułach w wynikach wyszukiwania dla własnej domeny. Poza czyszczeniem plików wymaga usunięcia wygenerowanych adresów z indeksu i sprawdzenia listy właścicieli w Search Console.
Pharma hack
Gdy strona wygląda poprawnie w przeglądarce, a w wynikach wyszukiwania pokazuje treści o lekach, mamy do czynienia z infekcją opisaną na stronie pharma hack w WordPressie. Kod rozpoznaje robota wyszukiwarki i serwuje mu inną wersję strony. Z tego powodu infekcja bywa niewidoczna dla właściciela przez wiele tygodni.
wp-vcd
Infekcja przychodząca razem z motywem z nielegalnego źródła to wp-vcd. Dopisuje się do pliku functions.php i odtwarza po każdym wejściu na stronę, dopóki na serwerze zostaje choć jeden nośnik. Czyszczenie polega na usunięciu wszystkich kopii naraz i podmianie motywu na wersję z legalnego źródła.
Backdoory i konta administratorów
Furtką, przez którą atakujący wraca po każdym czyszczeniu, jest backdoor w WordPress ukryty w pliku o nazwie udającej systemową. Sam kod bywa krótki i nie wygląda na złośliwy, dopóki nie prześledzi się, co uruchamia. Razem z backdoorem zwykle znajdują się konta administratorów dopisane w bazie.
Ostrzeżenie w wynikach wyszukiwania
Jeśli przy Twojej domenie w Google pojawił się komunikat ta witryna może być zhakowana, infekcja została już wykryta po stronie wyszukiwarki. Zdjęcie komunikatu wymaga wyczyszczenia serwisu i wysłania prośby o ponowne sprawdzenie. Weryfikacja trwa najczęściej od 24 do 72 godzin.
Czy jedna wtyczka bezpieczeństwa wystarczy do usunięcia wirusa?
Nie, skaner pokaże część zmienionych plików, ale nie rozpozna kodu przygotowanego pod jedną instalację. Traktuj wynik skanu jako listę miejsc do sprawdzenia ręcznego, a nie jako potwierdzenie, że serwis jest czysty.
Czy warto zabezpieczać stronę po wyczyszczeniu infekcji?
Tak, ponieważ adres wyczyszczonej domeny zostaje na listach botów skanujących podatności i wraca do nich regularnie. Zestaw działań, które ograniczają ryzyko powtórki, opisuje instrukcja jak zabezpieczyć stronę WordPress. Podstawą są aktualizacje wtyczek, kopie zapasowe trzymane poza serwerem i ograniczenie liczby prób logowania. Wdrożenie całego zestawu zajmuje od dwóch do czterech godzin.
Czym usuwanie wirusa ze strony nie jest
Usuwanie wirusa nie jest optymalizacją strony ani jej przebudową, więc po czyszczeniu serwis wygląda i działa dokładnie tak jak przed atakiem. Nie jest też jednorazowym kliknięciem w skanerze, ponieważ kod ukryty w bazie danych i w katalogu mu-plugins nie pojawia się w wynikach automatycznego skanu. Nie jest wreszcie zabezpieczeniem na przyszłość: bez aktualizacji i kopii zapasowych ta sama luka wróci przy kolejnej podatności w używanym motywie.
Najczęstsze pytania o usuwanie wirusa ze strony
Czy da się usunąć wirusa ze strony bez znajomości PHP?
Nie, samodzielne czyszczenie wymaga czytania kodu i odróżnienia funkcji motywu od kodu doklejonego przez atakującego. Bez tej umiejętności bezpieczniejszym rozwiązaniem jest przywrócenie kopii zapasowej sprzed daty włamania lub zlecenie prac serwisowi.
Czy wtyczka bezpieczeństwa usunie wirusa ze strony?
Nie, wtyczka rozpoznaje znane sygnatury i pokaże część zmienionych plików, ale nie wykryje kodu napisanego pod jedną konkretną instalację. Skaner traktuj jako narzędzie diagnostyczne, a nie jako sposób usunięcia infekcji.
Czy trzeba przeinstalować całego WordPressa po infekcji?
Nie, rdzeń i wtyczki wystarczy podmienić na oryginalne paczki w tej samej wersji, a treści zostają w bazie danych. Pełna reinstalacja jest potrzebna dopiero wtedy, gdy nie da się ustalić, które pliki motywu były modyfikowane celowo.
Czy po usunięciu wirusa trzeba zmieniać hasła?
Tak, zmiana obejmuje hasła FTP, SSH, bazy danych, panelu hostingu i wszystkich kont administratorów. Razem z hasłami wymienia się klucze soli w pliku wp-config.php, co wylogowuje wszystkie aktywne sesje, w tym sesję atakującego.
Czy wirus może wrócić po wyczyszczeniu strony?
Tak, jeśli w serwisie zostanie choć jeden backdoor albo nie zostanie zaktualizowana podatna wtyczka. Dlatego po czyszczeniu porównuje się listę plików z kopią wykonaną przed pracami i obserwuje serwis przez kilka kolejnych dni.
Wolisz oddać to komuś, kto robi to codziennie?
Usuwamy włam z WordPressa za 600 zł netto: pliki, baza danych, backdoory, aktualizacje i zgłoszenie do Google. Jeśli nie masz czasu na przechodzenie tej instrukcji punkt po punkcie albo infekcja wraca po każdym czyszczeniu, wyślij adres strony, a odpiszemy z diagnozą.
Diagnoza jest bezpłatna. Płatność następuje po wyczyszczeniu strony, na podstawie faktury VAT.
- Realizacja do 24 godzin
- Pliki, baza danych i backdoory
- Zgłoszenie do Google Search Console
- Ponowne czyszczenie gratis przez 30 dni