Zhakowana strona WordPress - jak odzyskać kontrolę?
Przy włamaniu liczy się kolejność działań, nie ich liczba. Najpierw odcinasz atakującemu dostęp, potem szukasz źródła infekcji, a dopiero na końcu czyścisz to, co widać. Odwrotna kolejność kończy się tym samym włamaniem tydzień później, bo backdoor został na serwerze. Poniżej opisujemy, po czym poznać infekcję, co zrobić w pierwszych godzinach i jak wygląda pełne czyszczenie, które faktycznie zamyka sprawę.
Po czym poznać, że WordPress został zhakowany?
Większość infekcji nie wygląda dramatycznie. Strona działa, panel się otwiera, a jedyny ślad to coś, co nie pasuje: nowy użytkownik, dziwny wpis w wynikach Google, wiadomość od hostingu.
| Objaw | Co zwykle oznacza | Gdzie sprawdzić |
|---|---|---|
| Przekierowania na obce witryny | wstrzyknięty kod w plikach motywu lub w bazie | otwórz stronę w trybie prywatnym i z telefonu |
| Nieznane konto administratora | atakujący zostawił sobie drugie wejście | Użytkownicy w panelu WordPress |
| Ostrzeżenie o niebezpiecznej witrynie | Google wykryło złośliwy kod | Search Console, raport Problemy dotyczące bezpieczeństwa |
| Obce podstrony w wynikach wyszukiwania | spam wstrzyknięty do treści lub osobne pliki | zapytanie site:twojadomena.pl |
| Wiadomość od hostingu o wysyłce spamu | serwer rozsyła pocztę przez skrypt atakującego | logi poczty w panelu hostingu |
| Nagły spadek prędkości | procesy kopiące lub masowa wysyłka w tle | obciążenie serwera w panelu hostingu |
Jeden objaw wystarczy, żeby traktować sprawę poważnie. Brak objawów nie dowodzi niczego, bo część infekcji celowo siedzi cicho i czeka.
Co zrobić w pierwszych godzinach?
Kolejność ma znaczenie, bo każdy krok odbiera atakującemu jedną możliwość działania.
1. Zrób kopię całości, nawet zainfekowanej. To materiał dowodowy i ostatnia deska ratunku, jeśli czyszczenie pójdzie za daleko.
2. Zmień hasła do panelu WordPress, FTP, bazy danych i konta hostingowego. Samo hasło do WordPressa nie wystarczy.
3. Wyloguj wszystkie sesje i usuń konta administratorów, których nie rozpoznajesz.
4. Włącz tryb konserwacji albo tymczasowo zablokuj dostęp, jeśli strona rozsyła spam lub przekierowuje użytkowników.
5. Sprawdź w Search Console, czy Google zdążył oznaczyć witrynę jako niebezpieczną.
Czego nie robić: nie usuwaj pierwszego pliku wskazanego przez skaner i nie przywracaj kopii sprzed tygodnia bez sprawdzenia, kiedy zaczęła się infekcja. Jedno usuwa objaw i zostawia źródło, drugie przywraca stan, który już był zainfekowany.
Jak sprawdzić, gdzie siedzi infekcja?
Złośliwy kod trafia w trzy miejsca i każde sprawdza się inaczej. Pliki rdzenia, wtyczki i motywy porównuje się z oryginałem. Baza danych wymaga przejrzenia wpisów i opcji. Zadania cykliczne bywają pomijane, a to w nich siedzi mechanizm, który odtwarza infekcję po sprzątaniu.
Pliki rdzenia najszybciej zweryfikujesz sumami kontrolnymi. Przy dostępie do WP-CLI polecenie `wp core verify-checksums` pokaże każdy plik różniący się od oficjalnej wersji, a `wp plugin verify-checksums --all` zrobi to samo dla wtyczek z repozytorium WordPressa.
W bazie szukaj wpisów z zakodowanym kodem, obcych adresów w opcjach oraz użytkowników utworzonych w dniu, w którym pojawiły się objawy. Sprawdź też listę zadań cron - wpis uruchamiający nieznany skrypt co kilka godzin to typowy mechanizm odtwarzania infekcji.
Automatyczny skaner znajduje to, co zna. Backdoor napisany pod konkretną witrynę zwykle przechodzi przez skanery bez alarmu i wraca po tygodniu.
Krzysztof Czapnik, KC Mobile
Dlaczego akurat ta strona? Cztery drogi wejścia
Włamania na WordPressa rzadko są wymierzone w konkretną firmę. To skanowanie masowe, które szuka witryn z konkretną, znaną luką.
Nieaktualne wtyczki i motywy. Publikacja poprawki bezpieczeństwa jest jednocześnie instrukcją dla atakujących, gdzie szukać. Witryny, które nie aktualizują się tygodniami, są celem pierwszym.
Słabe i powtarzane hasła. Automat testuje tysiące kombinacji, a to samo hasło do panelu, FTP i poczty oznacza, że jedno wycieknięcie otwiera wszystko.
Współdzielony hosting bez izolacji kont. Według tego, co widzimy w zgłoszeniach, najwięcej infekcji dotyczy witryn na hostingu za 20 zł miesięcznie, gdzie jedna zainfekowana strona potrafi pociągnąć sąsiednie na tym samym serwerze.
Motywy i wtyczki z nieoficjalnych źródeł. Wersja premium pobrana za darmo bywa premium razem z backdoorem, a jego usunięcie wymaga wymiany całego pakietu.
Jak wygląda pełne czyszczenie?
Kolejność jest zawsze ta sama, bo pomijanie etapów kończy się nawrotem.
Analiza i izolacja
Pełny skan plików i bazy, ustalenie momentu i drogi wejścia, zabezpieczenie witryny przed dalszymi zmianami. Bez ustalenia źródła reszta pracy jest sprzątaniem po objawach.
Usunięcie kodu i przywrócenie oryginałów
Ręczne czyszczenie plików PHP i JavaScript, wpisów w bazie oraz zadań cron. Pliki rdzenia, wtyczek i motywów wymieniamy na oryginalne wersje zamiast łatać zainfekowane.
Zamknięcie drogi wejścia
Wymiana wszystkich haseł i kluczy, usunięcie nieużywanych wtyczek, aktualizacja WordPressa, konfiguracja firewalla i kopii zapasowych. Ten etap decyduje, czy za miesiąc wrócimy do tego samego problemu.
Sprzątanie po stronie Google
Usunięcie spamu z indeksu i wniosek o ponowne rozpatrzenie, jeśli witryna dostała ostrzeżenie.
Ile kosztuje naprawa i jak długo trwa?
Cena zależy od skali infekcji i wielkości witryny, nie od liczby usuniętych plików.
| Przypadek | Orientacyjny koszt | Czas |
|---|---|---|
| Strona firmowa, pojedyncze przekierowanie | 500-1000 zł | do 24 godzin |
| Strona z wieloma zainfekowanymi wtyczkami | 1000-1500 zł | 24-48 godzin |
| Sklep WooCommerce z tysiącami produktów | 1500-3000 zł | 48 godzin i więcej |
Według naszego cennika proste czyszczenie mieści się w przedziale 500-1000 zł. Dane z naszych zleceń pokazują, że zainfekowany sklep WooCommerce to zwykle 1500-3000 zł, bo dochodzi weryfikacja zamówień i integracji płatności.
Wycenę podajemy przed rozpoczęciem prac, a pierwsza konsultacja odbywa się w ciągu dwóch godzin od zgłoszenia, także w weekend. Po naprawie przez 30 dni obserwujemy witrynę, żeby wychwycić nawrót.
Jak odzyskać pozycje w Google po infekcji?
Ostrzeżenie o niebezpiecznej witrynie działa natychmiast i kosztuje więcej niż sama infekcja. Użytkownik Chrome widzi czerwony ekran, zanim zobaczy stronę.
Po wyczyszczeniu witryny wchodzisz w Search Console do raportu Problemy dotyczące bezpieczeństwa i składasz wniosek o ponowne rozpatrzenie. We wniosku trzeba opisać, co było przyczyną i co zostało zrobione. Ogólnikowy opis wydłuża procedurę.
Zdjęcie ostrzeżenia trwa zwykle od jednego do trzech dni od zaakceptowania wniosku. Pozycje wracają wolniej, bo w międzyczasie część podstron mogła wypaść z indeksu. Jeśli infekcja wstrzyknęła setki spamerskich adresów, trzeba je dodatkowo usunąć z indeksu.
Przez kilka tygodni po naprawie warto obserwować w Search Console raport Indeksowanie stron. Jeśli w wynikach nadal pojawiają się obce adresy, znaczy to, że gdzieś został mechanizm, który je generuje, i trzeba wrócić do plików oraz zadań cron.
Jak nie dać się zhakować drugi raz?
Zabezpieczenie po naprawie kosztuje ułamek tego, co druga naprawa.
- Aktualizacje wtyczek i rdzenia w rytmie tygodniowym, nie wtedy, gdy coś przestanie działać
- Kopie zapasowe na zewnętrzny serwer, z odtworzeniem sprawdzonym choć raz
- Dwuskładnikowe logowanie do panelu i unikalne hasła do każdej usługi
- Usunięcie wtyczek nieużywanych oraz tych bez aktualizacji od ponad roku
- Hosting z izolacją kont, żeby sąsiednia witryna nie była Twoim problemem
Prowadzimy to jako stałą opiekę nad stroną WordPress - aktualizacje, kopie zapasowe i monitoring w jednym pakiecie. Jeśli podejrzewasz włamanie już teraz, napisz przez formularz na stronie kontakt i opisz objawy, a odezwiemy się w ciągu dwóch godzin.
Korzyści
- Reakcja w 24 godziny - każda godzina z zhakowaną stroną to utraceni klienci
- Pełne czyszczenie - szukamy ukrytych backdoorów, nie tylko widocznych objawów
- Przywrócenie pozycji w Google - pomagamy zdjąć ostrzeżenie i posprzątać indeks
- Monitoring przez 30 dni po naprawie, żeby wychwycić nawrót infekcji