Często zaczyna się niewinnie. Klient pisze do Ciebie, że wchodząc na Twoją witrynę, nagle wylądował w kasynie online. Dostawca hostingu przysyła wiadomość, że zablokował Twoje konto, bo wysyłano z niego spam. Albo Google pod Twoim wynikiem wyszukiwania ostrzega, że ta witryna mogła zostać zhakowana. Wtedy nie ma już wątpliwości: ktoś dostał się do Twojego WordPressa. To przykre, ale to jeszcze nie koniec świata. Teraz najważniejsza jest właściwa kolejność działań. Kto w panice wszystko kasuje i wgrywa pierwszą lepszą starą kopię zapasową, często tydzień później ma ten sam problem z powrotem. Ta awaryjna lista kontrolna przeprowadzi Cię przez pierwsze godziny, przez czyszczenie witryny i przez to, co trzeba zrobić później.
Jak rozpoznać, że WordPress został zhakowany?
Nie każde włamanie od razu rzuca się w oczy. Wielu atakującym wręcz zależy na tym, żeby nic nie wzbudziło Twoich podejrzeń. Wolą po cichu wykorzystywać Twój serwer do rozsyłania spamu, do przekierowań albo do wypychania własnych stron wyżej w wynikach Google. Te sygnały warto traktować poważnie:
- Przekierowania na obce strony: Odwiedzający lądują na stronach z hazardem, randkami albo podrobionymi sklepami. Często dzieje się to tylko na smartfonie albo tylko wtedy, gdy ktoś wchodzi z wyników Google.
- Ostrzeżenia od Google lub przeglądarki: Chrome zamiast Twojej witryny pokazuje czerwoną stronę z ostrzeżeniem, w wynikach wyszukiwania pojawia się informacja, że witryna mogła zostać zhakowana, albo Search Console zgłasza problem z bezpieczeństwem.
- Obce strony w indeksie: Wyszukiwanie
site:twojadomena.plwyciąga na wierzch strony z japońskimi znakami, środkami na potencję albo tanimi markowymi produktami, o których nic nie wiesz. Fachowcy mówią wtedy o Japanese Keyword Hack albo o Pharma Hack. - Nieznani użytkownicy: Na liście użytkowników widnieje administrator, którego nikt nie zna. Czasem jest nawet ukryty na tej liście i widać go tylko w bazie danych.
- Wiadomość od dostawcy hostingu: Firma hostingowa informuje o wysyłce spamu lub nietypowo dużym obciążeniu serwera albo już zablokowała Twoje konto.
- Dziwne pliki i zmiany: Pliki o tajemniczych nazwach, obcy kod na początku pliku
index.php, wtyczki, których nikt świadomie nie instalował, albo logowanie, przy którym Twoje hasło nagle przestaje działać.
Jedno zbija z tropu wiele osób: z Twojej perspektywy często wszystko wygląda normalnie. Dobrze napisane złośliwe oprogramowanie rozpoznaje zalogowanych administratorów po pliku cookie i pokazuje im zupełnie zwyczajną witrynę. Dlatego do testów otwieraj swoją witrynę w oknie prywatnym, najlepiej na smartfonie w sieci komórkowej. Wejdź na nią raz bezpośrednio, a raz przez wyszukiwarkę Google.
Zhakowany WordPress: co robić w pierwszej godzinie?
W pierwszej godzinie nie musisz jeszcze szukać złośliwego kodu. Chodzi o to, żeby ograniczyć szkody i przy tym nie zatrzeć żadnych śladów. Przejdź po kolei przez te punkty:
- Weź głęboki oddech i jeszcze niczego nie usuwaj. Odruch, żeby od razu wszystko skasować albo na ślepo przywrócić kopię zapasową, jest zrozumiały. W ten sposób niszczysz jednak dokładnie te ślady, które później zdradzą Ci, jak atakujący dostali się do środka.
- Udokumentuj wszystko, co widzisz. Rób zrzuty ekranu przekierowań i ostrzeżeń, zapisuj godziny i zachowaj wiadomości od dostawcy hostingu i od Google. To pomoże Ci w szukaniu przyczyny, a później przy ewentualnym zgłoszeniu do organu ochrony danych.
- Zrób kopię zainfekowanej witryny. Pobierz wszystkie pliki oraz eksport bazy danych i przechowuj je osobno, wyraźnie opisane jako zainfekowane. Tej kopii nigdy więcej nie wgrywaj na serwer. Służy wyłącznie jako dowód i do porównań.
- Tymczasowo wyłącz witrynę. Jest to konieczne zwłaszcza wtedy, gdy odwiedzający są przekierowywani na strony oszustów albo Twój sklep przetwarza dane płatnicze. Wtyczka trybu konserwacji niewiele tu pomoże, bo działa wewnątrz zhakowanego WordPressa. Lepiej zablokuj witrynę na poziomie serwera i przepuszczaj tylko swój własny adres IP. Jeśli Twoja witryna działa na Apache, wystarczą do tego trzy linijki na samej górze pliku
.htaccess:
Zastąp ten adres swoim własnym IP. Kod statusu 503 informuje Google, że strona jest tylko chwilowo niedostępna. Krótka przerwa nie zaszkodzi Twoim pozycjom w wynikach wyszukiwania. Jeśli Twój serwer korzysta z nginx albo nie masz pewności, poproś o pomoc dostawcę hostingu.RewriteEngine On RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.10$ RewriteRule ^ - [R=503,L] - Zmień najważniejsze dane dostępowe. Ustaw nowe hasła do konta klienta u dostawcy hostingu, do SFTP lub SSH i do bazy danych. Zrób to z urządzenia, któremu ufasz. Jeśli dane logowania wykradziono z Twojego własnego komputera, na przykład przez trojana, który odczytuje hasła zapisane w programie FileZilla, nowe hasła nic nie dadzą, dopóki komputer jest zainfekowany. Zmień też swoje hasło w WordPressie. Na pozostałych użytkowników i klucze bezpieczeństwa przyjdzie kolej po oczyszczeniu witryny, bo dopóki jakiś backdoor jest otwarty, atakujący może po prostu podejrzeć nowe hasła.
- Poinformuj dostawcę hostingu. Wielu dostawców ma własny zespół bezpieczeństwa, skanery malware, a przede wszystkim logi dostępu do serwera. Zapytaj konkretnie o logi z ostatnich tygodni i o kopie zapasowe. Niektórzy przechowują je dłużej, niż myślisz.
- Daj znać tym, którzy muszą wiedzieć. Jeśli działasz jako agencja, poinformuj klienta. Powiadom też wszystkie inne osoby, które mają dostęp do witryny. A gdy tylko w grę mogą wchodzić dane osobowe, zaczyna biec termin przewidziany w przepisach. Więcej o tym niżej.
Jak hakerzy włamują się do WordPressa? Tak znajdziesz drogę włamania
Wiele osób pomija ten krok i właśnie dlatego tyle witryn zostaje zhakowanych dwa razy. Jeśli nie znajdziesz luki, posprzątasz, a kilka dni później atakujący wejdzie z powrotem tymi samymi drzwiami. Często nawet nie celowo, tylko dlatego, że bot automatycznie przeczesuje sieć w poszukiwaniu właśnie tej luki.
Najczęstsze drogi włamania to:
- Nieaktualne wtyczki i motywy: To bez porównania najczęstszy scenariusz. Według rocznych raportów Patchstack ogromna większość znanych luk bezpieczeństwa w ekosystemie WordPressa dotyczy wtyczek, niewielka część motywów, a sam WordPress prawie wcale. Szczególnie ryzykowne są wtyczki, których nikt już nie rozwija albo które usunięto z katalogu wtyczek WordPress.org.
- Wtyczki i motywy typu nulled: Pirackie kopie wtyczek premium z podejrzanych serwisów z plikami do pobrania. Nic nie kosztują, ale zaskakująco często mają wbudowany backdoor.
- Słabe lub wykradzione hasła: Boty przez całą dobę sprawdzają kombinacje nazw użytkowników i haseł. Kto używa tego samego hasła także w innych serwisach, po kolejnym wycieku danych ma problem.
- Sąsiedzi na tym samym koncie hostingowym: Jeśli na koncie leży też stara instalacja testowa, zapomniany sklep albo witryna z 2016 roku w podfolderze, atakujący może stamtąd dotrzeć do wszystkich innych witryn na tym koncie.
- Zainfekowane komputery: Złośliwe oprogramowanie na komputerze administratora może odczytać zapisane dane logowania i wysłać je atakującym.
Tak wpadniesz na trop przyczyny:
- Porównaj swoje wtyczki i motywy z bazą luk bezpieczeństwa, na przykład Wordfence Intelligence, Patchstack albo WPScan. Liczy się to, czy znana jest luka dokładnie dla zainstalowanej u Ciebie wersji.
- Przejrzyj logi dostępu do serwera. Podejrzane są żądania POST do plików, których w WordPressie w ogóle nie ma, albo do plików w folderze
wp-content/uploads. Godziny tych żądań często zdradzą Ci, kiedy wszystko się zaczęło. - Sprawdź, kiedy powstały podejrzane pliki. Data to wskazówka, ale nie dowód, bo atakujący chętnie fałszują znaczniki czasu.
Jak usunąć malware z WordPressa?
Teraz czas na sprzątanie. Masz do wyboru dwie drogi.
Przywrócenie czystej kopii zapasowej jest najszybsze. Działa jednak tylko wtedy, gdy masz pewność, że kopia jest starsza niż włamanie. To trudniejsze, niż się wydaje. Między samym włamaniem a pierwszymi widocznymi skutkami często mijają tygodnie, czasem miesiące, bo atakujący najpierw zostawiają backdoor i korzystają z niego dopiero później. Poza tym tracisz wszystkie treści, zamówienia i komentarze od chwili utworzenia kopii, a luka nadal pozostaje otwarta. Jeśli wybierasz tę drogę, zaraz po przywróceniu kopii zaktualizuj wszystkie wtyczki i motywy i mimo to przejdź przez poniższe punkty.
Ręczne czyszczenie witryny trwa dłużej, ale jest dokładniejsze. Najbezpieczniej pracować na kopii, a nie na działającej witrynie. Oto jak się do tego zabrać:
- Wymień WordPressa w całości. Usuń foldery
wp-adminiwp-includesi zastąp je świeżymi kopiami z WordPress.org w tej samej wersji. To samo dotyczy plików w katalogu głównym, z wyjątkiem plikuwp-config.php. Czy wszystko się zgadza, sprawdzisz potem w wierszu poleceń WordPressa:
Polecenie porównuje każdy plik z oficjalnymi sumami kontrolnymi z WordPress.org i zgłasza również pliki, których w ogóle nie powinno tam być.wp core verify-checksums - Zainstaluj wtyczki i motywy od nowa. Usuń każdą wtyczkę i każdy motyw i zainstaluj je ponownie z zaufanego źródła. To, czego nie używasz, nie wraca już na serwer. Wtyczki z oficjalnego katalogu możesz sprawdzić podobnie:
Wtyczek premium to polecenie nie sprawdzi, bo WordPress.org nie ma dla nich sum kontrolnych. Pobierz je ponownie bezpośrednio od producenta.wp plugin verify-checksums --all - Przeszukaj folder uploads. Jest przeznaczony na obrazy, pliki PDF i inne media, ale nie na PHP. Tym poleceniem znajdziesz pliki, których nie powinno tam być:
Wyjątkiem są puste pliki o nazwiefind wp-content/uploads -type f -name "*.php"index.php, które niektóre wtyczki tworzą, żeby nikt nie mógł wyświetlić listy zawartości folderu. Całą resztę dokładnie obejrzyj. - Sprawdź wszystko, czego nie da się zainstalować od nowa. Chodzi o pliki
wp-config.phpi.htaccess(tam często kryją się przekierowania, które działają tylko dla odwiedzających z Google albo ze smartfonów), Twój własny motyw z jego plikiemfunctions.phporaz folderwp-content/mu-plugins. To, co się w nim znajduje, WordPress ładuje automatycznie i nie da się tego dezaktywować w kokpicie. Typowe dla złośliwego kodu są funkcje takie jakeval,base64_decodeczygzinflatew połączeniu z długimi, nieczytelnymi ciągami znaków. Na pierwsze przeszukanie wystarczy to polecenie:
Trafienie to jeszcze nie dowód, bo także porządne wtyczki korzystają z niektórych z tych funkcji. Pokazuje Ci jednak, gdzie warto przyjrzeć się dokładniej.grep -rlE "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content/ - Posprzątaj bazę danych. Złośliwy kod siedzi nie tylko w plikach. Najpierw wyświetl wszystkich administratorów:
Dwie opcje na końcu sprawiają, że WordPress nie ładuje przy tym ani wtyczek, ani motywu, a więc nie uruchamia też złośliwego kodu, który może się w nich jeszcze ukrywać. Usuń każde konto, którego nie potrafisz nikomu przypisać. Sprawdź też w tabeliwp user list --role=administrator --skip-plugins --skip-themeswp_options, czysiteurlihomenadal wskazują na Twoją domenę. Wstrzyknięte skrypty we wpisach i na stronach znajdziesz tak:
Jeśli Twoja instalacja używa innego prefiksu niżSELECT ID, post_title, post_type FROM wp_posts WHERE post_content LIKE '%<script%';wp_, dopasuj nazwy tabel. Nawiasem mówiąc, widżety także są zapisane wwp_optionsi zasługują na uwagę. - Skontroluj zaplanowane zadania. Atakujący chętnie dodają zadania cron, które regularnie odtwarzają złośliwy kod. Zajrzyj zarówno do zadań cron WordPressa, jak i do zadań cron w panelu klienta u Twojego dostawcy hostingu.
Skanery takie jak Wordfence czy bezpłatny Sucuri SiteCheck wykrywają wiele znanych szkodników i są dobrym uzupełnieniem. Nie polegaj jednak wyłącznie na nich. Zewnętrzny skaner widzi tylko to, co dociera do przeglądarki, a wtyczka znajdzie tylko to, co już zna. Nowe albo dobrze ukryte backdoory przemkną niezauważone.
Jak zabezpieczyć WordPressa po włamaniu?
Witryna jest czysta? Teraz przychodzi etap, który decyduje o tym, czy taka pozostanie.
- Nowe hasła wszędzie: dla każdego użytkownika WordPressa, dla bazy danych (nową wartość wpisz potem w
wp-config.php), dla SFTP i dla konta klienta u dostawcy hostingu. Pamiętaj też o kluczach dostępowych do usług zewnętrznych zapisanych we wtyczkach, na przykład do wysyłki poczty albo do operatorów płatności. - Nowe klucze bezpieczeństwa: Zastąp salty w
wp-config.phpnowymi wartościami z oficjalnego generatora WordPress.org. Dzięki temu wszystkie dotychczasowe sesje logowania tracą ważność, także te, które atakujący może jeszcze mieć w postaci pliku cookie. - Zamknij lukę: Zaktualizuj WordPressa, wszystkie wtyczki i wszystkie motywy. Wymień wtyczki, które nie są już rozwijane. Jak trzymać to w ryzach na stałe, przeczytasz w naszym poradniku Jak utrzymywać wtyczki WordPress zaktualizowane i bezpieczne.
- Zabezpiecz logowanie: Włącz dla wszystkich administratorów drugi składnik logowania (czym jest 2FA i jak działa) i ogranicz liczbę administratorów do niezbędnego minimum.
- Wyłącz edytor plików: Z tą linijką w
wp-config.phpnikt nie zmieni już kodu wtyczek i motywów przez kokpit:
Więcej ustawień znajdziesz w naszych poradnikach Zabezpieczenie wp-config.php w WordPress i Poprawne ustawianie uprawnień plików w WordPress.define( 'DISALLOW_FILE_EDIT', true ); - Firewall na pierwszej linii: Web Application Firewall przechwytuje wiele ataków na znane luki, zanim w ogóle dotrą do WordPressa.
- Kopie zapasowe, które naprawdę działają: automatyczne, codzienne, przechowywane poza serwerem i sięgające co najmniej 30 dni wstecz. I raz przywrócone na próbę, zanim będą Ci potrzebne w prawdziwej awarii.
Przez kilka następnych tygodni uważnie obserwuj witrynę. Jeśli złośliwy kod po kilku dniach pojawi się znowu, to znaczy, że jakiś backdoor umknął Twojej uwadze albo luka wciąż jest otwarta. Przegląd wszystkich środków ochrony znajdziesz na naszej liście kontrolnej bezpieczeństwa WordPressa.
Google ostrzega, że witryna mogła zostać zhakowana: jak usunąć to ostrzeżenie?
Google nie usunie ostrzeżenia samo, gdy tylko posprzątasz. Tu musisz wziąć sprawy w swoje ręce:
- Zaloguj się do Google Search Console. Jeśli Twoja witryna nie jest tam jeszcze dodana, zrób to teraz.
- W sekcji „Bezpieczeństwo i ręczne działania” otwórz raport „Problemy dotyczące bezpieczeństwa”. Zobaczysz tam, jakie problemy wykryto, często z kilkoma przykładowymi adresami URL, których to dotyczy.
- Sprawdź w ustawieniach, kto jest wpisany jako użytkownik lub właściciel. Atakujący czasem dodają tam samych siebie, żeby szybciej wprowadzić swoje strony ze spamem do indeksu. Usuń obce wpisy i powiązany z nimi plik weryfikacyjny w katalogu głównym Twojej witryny.
- Poproś w raporcie o ponowne sprawdzenie i krótko opisz, co udało Ci się znaleźć i naprawić. Według Google weryfikacja trwa zwykle kilka dni w przypadku malware, około jednego dnia przy phishingu, a przy zhakowanych stronach ze spamem czasem kilka tygodni.
Same strony ze spamem po oczyszczeniu witryny powinny zwracać kod statusu 404 albo 410. Wtedy stopniowo znikną z indeksu. Jeśli sprawa jest pilna, pomoże narzędzie do usuwania adresów URL w Search Console. Potem prześlij ponownie swój właściwy plik sitemap. Jeśli Twój serwer rozsyłał spam, sprawdź też, czy Twój adres IP nie trafił na czarną listę antyspamową. W usunięciu go z takiej listy pomoże Ci dostawca hostingu.
Czy musisz zgłosić włamanie zgodnie z RODO?
To zależy od tego, czy w grę mogą wchodzić dane osobowe. Przy sklepie internetowym, strefie członkowskiej czy zapisanych zapytaniach z formularza kontaktowego bardzo łatwo o taką sytuację. Nawet tabela użytkowników WordPressa zawiera nazwiska i adresy mailowe.
Zgodnie z art. 33 RODO takie naruszenie ochrony danych osobowych musisz zgłosić właściwemu organowi nadzorczemu, w Polsce Prezesowi UODO, w ciągu 72 godzin. Termin liczy się od chwili, w której dowiesz się o naruszeniu. Zgłoszenie można pominąć tylko wtedy, gdy jest mało prawdopodobne, by naruszenie powodowało ryzyko dla osób, których dane dotyczą. Jeśli ryzyko jest wysokie, na przykład dlatego, że mogły wyciec dane płatnicze lub hasła, zgodnie z art. 34 RODO musisz też bezpośrednio zawiadomić same te osoby.
Nawet jeśli ostatecznie nie zgłosisz naruszenia, musisz udokumentować incydent i swoją decyzję. Tak stanowi art. 33 ust. 5. Większość organów nadzorczych udostępnia do zgłoszeń formularz online. Jeśli w Twojej firmie jest inspektor ochrony danych, od razu włącz go w sprawę. Ten fragment nie stanowi porady prawnej.
Usuwanie malware z WordPressa: kiedy warto zatrudnić specjalistę?
Wiele punktów z tej listy zrobisz samodzielnie, jeśli swobodnie poruszasz się po plikach, bazie danych i serwerze. W niektórych sytuacjach profesjonalna pomoc i tak jest lepszym wyborem:
- Twój sklep przetwarza dane płatnicze i istnieje podejrzenie, że wykradziono dane kart.
- Witryna po każdym czyszczeniu znowu zostaje zainfekowana.
- Nie ma żadnej sensownej kopii zapasowej, a wiersz poleceń to nie Twoja bajka.
- Chodzi o witrynę klienta i później musisz móc dokładnie udowodnić, co się stało.
Pierwszym adresem jest często Twój dostawca hostingu. Wielu dostawców oferuje czyszczenie jako płatną usługę. Istnieją też wyspecjalizowane usługi, na przykład od Wordfence albo Sucuri. Zapytaj wcześniej, czy szukanie drogi włamania jest wliczone w cenę. Samo usunięcie złośliwego kodu pomoże Ci tylko do następnego ataku.
Jak InspectWP pomaga Ci po włamaniu
Powiedzmy to od razu: InspectWP nie jest skanerem malware i nie zastąpi czyszczenia witryny. Raport pomaga Ci jednak w dwóch sprawach, o których w pośpiechu łatwo zapomnieć: przy szukaniu prawdopodobnej luki i przy późniejszej kontroli.
Nawet bezpłatny raport wymienia wtyczki i motywy, które wykrywa na Twojej witrynie, i oznacza te, które usunięto z katalogu wtyczek WordPress.org albo które od ponad roku nie dostały aktualizacji. Pokazuje, czy korzystasz z nieaktualnej wersji WordPressa i czy z zewnątrz da się otworzyć pliki, które nie mają tam czego szukać, na przykład publiczny debug.log, kopie zapasowe bazy danych albo plik o nazwie .env. Sprawdza też, czy Twoje logowanie jest chronione przed masowym zgadywaniem haseł i czy nazwy użytkowników da się odczytać z zewnątrz.
W planach Premium i Agency widzisz dodatkowo zainstalowane wersje swoich wtyczek i znane dla nich luki bezpieczeństwa. Dzięki temu najbardziej prawdopodobną przyczynę często znajdziesz w kilka minut. Z wtyczką InspectWP WordPress Connector dowiesz się ponadto, czy pliki samego WordPressa zostały zmienione (Connector porównuje je z sumami kontrolnymi z WordPress.org), ilu jest administratorów i czy do ważnych folderów można zapisywać pliki.
Po oczyszczeniu witryny warto włączyć raporty automatyczne. InspectWP regularnie sprawdza wtedy Twoją witrynę i na życzenie powiadamia Cię mailem. Porównanie dwóch raportów pokazuje Ci na pierwszy rzut oka, co się zmieniło, na przykład nową wtyczkę, której podobno nikt nie instalował. Pierwszy bezpłatny raport otrzymasz w kilka minut.