Jak rozpoznać wirusa na stronie
Złośliwy kod na stronie ma zwykle jeden z kilku celów: przekierować ruch, podpiąć spam pod Twoją domenę, ukraść dane z formularzy i płatności albo wykorzystać serwer do wysyłki poczty i ataków na inne strony. Stąd biorą się typowe objawy.
- Przekierowania na obce strony, często tylko dla części odwiedzających: wchodzących z Google, z telefonu albo po raz pierwszy. Właściciel, zalogowany i wchodzący z zakładki, niczego nie widzi.
- W wynikach wyszukiwania po wpisaniu site:twojadomena.pl pojawiają się podstrony, których nie tworzyłeś, na przykład z tytułami po japońsku, z reklamą leków albo podróbek.
- Przeglądarka pokazuje czerwone ostrzeżenie o niebezpiecznej lub zwodniczej stronie, a w Google Search Console pojawia się wpis w raporcie „Problemy dotyczące bezpieczeństwa”.
- Hosting zawiesza konto albo informuje o wysyłce spamu z serwera, a maile firmowe zaczynają trafiać do spamu u odbiorców.
- W panelu WordPressa są nieznani administratorzy, a wtyczki pojawiają się albo znikają bez Twojego udziału.
- W katalogu wp-content/uploads leżą pliki .php, których tam być nie powinno, a pliki index.php, .htaccess albo wp-config.php mają niedawną datę zmiany.
- W kodzie widać zaciemnione fragmenty, na przykład ciągi eval, base64_decode, gzinflate albo bardzo długie linie bez spacji.
- Strona nagle zwalnia, a serwer zużywa dużo procesora bez wzrostu ruchu.
Skąd bierze się infekcja
Najczęstsze drogi wejścia to nieaktualna wtyczka lub motyw ze znaną podatnością, przejęte hasło do panelu, SFTP albo hostingu, piracka wersja płatnego motywu lub wtyczki (tzw. nulled) z wbudowanym tylnym wejściem oraz zainfekowana sąsiednia strona na tym samym koncie hostingowym. Dopóki nie znajdziesz drogi wejścia, samo sprzątanie daje efekt tylko na kilka dni.
Najczęstsze rodzaje złośliwego kodu na stronach WordPress
Znajomość rodzaju infekcji pomaga szybciej ustalić, gdzie szukać i co mogło się stać z danymi.
- Przekierowania warunkowe. Kod w pliku .htaccess, w index.php albo w bazie danych sprawdza, skąd przychodzi odwiedzający, i tylko wybranych kieruje na obcą stronę. Działa tak, żeby właściciel jak najdłużej niczego nie zauważył.
- Spam SEO. Infekcja tworzy tysiące podstron z obcą treścią albo dokleja ukryte linki do istniejących wpisów. Często pokazuje spam tylko robotom wyszukiwarki, a zwykłym odwiedzającym normalną stronę.
- Skimmer płatności. Skrypt doklejony do strony zamówienia w sklepie przechwytuje dane wpisywane w formularzu i wysyła je na zewnętrzny serwer. To najgroźniejszy rodzaj infekcji, bo dotyczy danych klientów.
- Tylne wejście (backdoor). Mały plik albo fragment kodu, który pozwala atakującemu wrócić nawet po zmianie haseł. Bywa ukryty w katalogu uploads, w pliku wtyczki albo w bazie danych.
- Wysyłka spamu i ataki na inne serwery. Strona działa normalnie, ale serwer wysyła pocztę lub skanuje inne strony, przez co trafia na czarne listy, a hosting blokuje konto.
- Fałszywe konta administratorów. Atakujący zakłada sobie konto, często o nazwie przypominającej systemową, żeby mieć stały dostęp do panelu.
Czego nie robić
Nie instaluj naraz kilku wtyczek bezpieczeństwa w nadziei, że któraś wszystko wyczyści: potrafią się blokować nawzajem i zatrzeć ślady. Nie usuwaj pojedynczych podejrzanych plików bez sprawdzenia reszty, bo tylne wejście zostanie. Nie przywracaj kopii bez zamknięcia drogi wejścia, bo za kilka dni sytuacja się powtórzy.
Co zrobić w pierwszej godzinie
Pierwsza godzina decyduje o tym, jak duże będą straty. Chodzi o to, żeby zatrzymać szkody, zachować ślady i odciąć atakującemu dostęp, a nie o to, żeby od razu wszystko posprzątać.
- Nie kasuj strony i nie wgrywaj w pośpiechu kopii. Najpierw zabezpiecz obecny, zainfekowany stan: kopię plików, bazy danych i logów serwera zapisz poza serwerem. Bez niej trudno ustalić, jak doszło do włamania i jakie dane mogły wyciec.
- Ogranicz szkody. Jeśli strona przekierowuje klientów albo wyłudza dane z płatności, włącz stronę konserwacji albo zablokuj ruch na poziomie serwera do czasu oczyszczenia.
- Zmień hasła z czystego komputera: do hostingu, SFTP i FTP, bazy danych, poczty i wszystkich kont administratorów WordPressa. Usuń konta, których nie znasz.
- Wymuś wylogowanie wszystkich sesji, zmieniając klucze i sole w wp-config.php. Nowy zestaw generuje oficjalna usługa WordPress.org pod adresem api.wordpress.org/secret-key/1.1/salt/.
- Powiadom hosting. Często ma logi i narzędzia, których nie widzisz w swoim panelu, a przy okazji unikniesz zawieszenia konta.
- Oceń, czy wyciekły dane osobowe, na przykład z formularzy, kont klientów albo zamówień. Jeśli naruszenie może powodować ryzyko dla osób, których dotyczy, RODO wymaga zgłoszenia go do Prezesa UODO w ciągu 72 godzin od jego stwierdzenia.
Jak usunąć wirusa z WordPressa
Skuteczne czyszczenie opiera się na prostej zasadzie: wszystko, co da się odtworzyć z zaufanego źródła, odtwarzasz, a nie próbujesz ręcznie łatać. Ręcznie przeglądasz tylko to, co jest unikalne dla Twojej strony: bazę danych, katalog uploads, motyw potomny i własny kod.
- Sprawdź rdzeń. Polecenie wp core verify-checksums w WP-CLI porównuje pliki WordPressa z oryginałem i wypisuje każdy zmieniony lub obcy plik. Najbezpieczniej wgrać świeży rdzeń w tej samej wersji, zastępując katalogi wp-admin i wp-includes.
- Sprawdź wtyczki. wp plugin verify-checksums --all robi to samo dla wtyczek z katalogu WordPress.org. Wtyczki zainstaluj od nowa z oficjalnego źródła, a płatne pobierz z konta u producenta. Piracką wersję usuń bez wahania.
- Przejrzyj motyw. Motyw zewnętrzny wgraj od nowa z oryginalnego pakietu, a motyw potomny i własne szablony przejrzyj plik po pliku.
- Przeszukaj katalog wp-content/uploads. Nie powinno tam być żadnych plików wykonywalnych PHP. Po oczyszczeniu dobrze zablokować ich wykonywanie w konfiguracji serwera.
- Przejrzyj wp-config.php, .htaccess i pliki w katalogu głównym, w tym te o nazwach udających pliki systemowe.
- Przejrzyj bazę danych: tabelę wp_users (nieznani administratorzy), wp_options (zmienione adresy siteurl i home, podejrzane wpisy ładowane automatycznie) oraz wp_posts (wstrzyknięte znaczniki script i ukryte linki).
- Sprawdź zadania cykliczne. Polecenie wp cron event list pokaże zadania WordPressa, a crontab serwera zadania systemowe, którymi infekcja potrafi się odtwarzać.
- Rozważ odtworzenie z kopii. Jeśli wiesz, kiedy doszło do infekcji, i masz czystą kopię sprzed tego dnia, odtworzenie bywa szybsze niż sprzątanie. Pamiętaj, że kopia nie usuwa podatności, więc po odtworzeniu od razu zaktualizuj wszystko i zmień hasła jeszcze raz.
Po czyszczeniu przeskanuj stronę ponownie i obserwuj ją przez kolejne dni. Powrót infekcji po kilku godzinach oznacza, że zostało tylne wejście albo nie została zamknięta droga, którą atakujący wszedł.
Jak zdjąć ostrzeżenie w Google
Jeśli Google oznaczył stronę jako niebezpieczną, ostrzeżenie nie zniknie samo po oczyszczeniu. W Search Console otwórz raport „Problemy dotyczące bezpieczeństwa”, sprawdź wymienione adresy i przykłady, a gdy strona jest czysta, wyślij prośbę o sprawdzenie. W opisie napisz konkretnie, co zostało usunięte i jak zamknięto drogę wejścia. Rozpatrzenie trwa od kilku dni do kilku tygodni, zależnie od rodzaju problemu.
Podstrony ze spamem, które infekcja utworzyła, powinny po oczyszczeniu zwracać kod 404 albo 410. Możesz przyspieszyć ich zniknięcie z wyników narzędziem do usuwania adresów w Search Console. Sprawdź też, czy infekcja nie dodała do Search Console nowych właścicieli ani nie podmieniła mapy witryny.
Jak nie dopuścić do kolejnej infekcji
- Regularne aktualizacje rdzenia, motywu i wtyczek, najlepiej co tydzień, z testem na kopii testowej.
- Usunięcie nieużywanych wtyczek i motywów. Wyłączona wtyczka wciąż leży na serwerze i wciąż może być podatna.
- Dwuetapowe logowanie dla administratorów, limit prób logowania i osobne konta dla każdej osoby, z najmniejszymi potrzebnymi uprawnieniami.
- Zapora aplikacyjna (WAF), która blokuje znane wzorce ataków, zanim dotrą do WordPressa.
- Wyłączenie edycji plików z panelu (stała DISALLOW_FILE_EDIT w wp-config.php) i poprawne uprawnienia plików: zwykle 644 dla plików, 755 dla katalogów i ostrzejsze dla wp-config.php.
- Codzienny skan plików i porównanie z oryginałem, żeby zmianę zauważyć w dniu, w którym się pojawiła.
- Kopie zapasowe poza serwerem, przechowywane na tyle długo, żeby dało się sięgnąć do stanu sprzed infekcji.
Więcej ustawień opisujemy w poradniku o zabezpieczeniu WordPressa przed włamaniem i na stronie zabezpieczenie WordPress.
Usuwanie infekcji w opiece AdministracjaStron
W opiece nie czekamy, aż klient zauważy przekierowanie. Pliki porównujemy z oryginałem, stronę skanujemy według planu, a kopie trzymamy poza Twoim serwerem, więc zawsze jest do czego wrócić. Gdy dojdzie do infekcji, usuwanie wirusów ze stron internetowych robimy według procedury z tego poradnika: zabezpieczenie śladów, odcięcie dostępu, czyszczenie, zamknięcie drogi wejścia, prośba o sprawdzenie w Google i wpis w raporcie miesięcznym.
- Start (299 zł netto miesięcznie): skan bezpieczeństwa co tydzień i ochrona logowania. Usuwanie infekcji wymaga przejścia na plan Firma.
- Firma (599 zł netto miesięcznie): skan codziennie, zapora aplikacyjna (WAF) i usuwanie infekcji w cenie, bez zużywania godzin zmian.
- Biznes (1 499 zł netto miesięcznie): wszystko z planu Firma oraz utwardzenie serwera, przegląd uprawnień kont i reakcja w 1 godzinę od 7:00 do 22:00.
- Enterprise (2 990 zł netto miesięcznie): audyt bezpieczeństwa co kwartał, rejestr incydentów i reakcja w 30 minut 24/7.
Zakres i ceny wszystkich planów są w cenniku. Jeśli nie wiesz, czy Twoja strona jest bezpieczna, uruchom jednorazowy audyt WordPress: pokaże publicznie widoczne wersje, wtyczki, certyfikat i nagłówki bezpieczeństwa.