Awarie i bezpieczeństwo

Jak odwirusować stronę internetową WordPress?

Jak odwirusować stronę internetową WordPress?

Poziom zagrożenia stron internetowych jest dziś większy niż kiedykolwiek. Wynika to z szybko rozwijającej się technologii, a wraz z nią – złośliwego oprogramowania. W tym artykule przeprowadzę Cię przez pełny proces odwirusowania strony na WordPressie i pokażę, na co zwracać uwagę, żeby infekcja nie wróciła.

Czym jest wirus na stronie

Wirus to program lub skrypt, który potrafi replikować się w kodzie i manipulować przepływem informacji w obrębie serwisu. Bardzo możliwe, że szukając kiedyś produktu lub usługi, trafiłeś na stronę przekierowującą na obce portale albo wyświetlającą komunikat o wygranym telefonie. To właśnie serwis zainfekowany wirusem.

Prawdę mówiąc, to jedne z najłagodniejszych form infekcji. Najgroźniejsze wirusy nie ujawniają się wprost – manipulują danymi przetwarzanymi przez serwis, są źródłem wycieków danych osobowych i potrafią działać niezauważone przez miesiące. Zgodnie z RODO każdy właściciel serwisu odpowiada za zabezpieczenie danych swoich klientów, więc stawka jest wyższa niż samo działanie strony.

Rodzaje złośliwego oprogramowania na stronach WordPress

  • Przekierowania – odwiedzający trafia na zewnętrzną stronę bez swojej wiedzy. Najczęstszy widoczny objaw infekcji.
  • Spam SEO – ukryte odnośniki do stron z hazardem i farmaceutykami. Niszczą pozycję w wyszukiwarce i reputację domeny.
  • Tylne furtki – ukryty punkt wejścia dla atakującego. Przetrwa niedbałe czyszczenie i pozwala wrócić w dowolnej chwili.
  • Kopanie kryptowalut – obciąża komputery odwiedzających, przez co strona drastycznie spowalnia przeglądarkę.
  • Przechwytywanie formularzy – kradnie hasła i dane kart płatniczych. Jeden z najpoważniejszych przypadków, bo wprost narusza RODO.
  • Phishing – podszywanie się pod banki i sklepy w celu wyłudzenia danych logowania.

Skąd bierze się infekcja

  • Przestarzałe wtyczki i motywy – zdecydowanie najczęstsza przyczyna. Stare wersje zawierają publicznie znane luki, aktywnie wykorzystywane przez boty skanujące internet.
  • Słabe hasła i brak uwierzytelniania dwuskładnikowego – ataki na panel logowania są nieustanne. Hasło pokroju „admin123″ łamie się w kilka sekund.
  • Pirackie wersje płatnych wtyczek – bardzo często zawierają celowo wstrzyknięty kod dający dostęp do serwera.
  • Zainfekowany komputer – jeśli Twoja stacja robocza jest zawirusowana, złośliwe oprogramowanie może wykraść zapisane dane FTP i wgrać kod na serwer.
  • Współdzielony hosting – jedna zainfekowana strona potrafi zarazić sąsiednie konta, jeśli dostawca nie izoluje ich od siebie.

Jak sprawdzić, czy serwis jest zainfekowany

Sposobów jest kilka – od błyskawicznych i darmowych po zaawansowane metody ręczne. Warto przejść je po kolei.

1. Skaner hostingowy

Wiele firm hostingowych oferuje darmowy skan plików w poszukiwaniu szkodliwego kodu. To najwygodniejszy pierwszy krok i najszybsza odpowiedź na pytanie, czy w ogóle mamy problem.

2. Komenda site: w Google

Jeżeli hosting nie oferuje skanu, zacznij od wpisania w wyszukiwarkę:

site:nazwadomeny.pl

Komenda pokaże wszystkie zaindeksowane podstrony. Jeśli zobaczysz tytuły po japońsku, chińsku albo oferty farmaceutyków, masz pewność, że serwis padł ofiarą spamu SEO.

3. Test przekierowania

Wejdź na stronę i obserwuj przez kilkanaście sekund, najlepiej na telefonie i z wyników wyszukiwania. Część infekcji uruchamia się tylko w takich warunkach, żeby właściciel niczego nie zauważył.

4. Wtyczka Wordfence Security

Zainstaluj Wordfence Security i uruchom pełne skanowanie. Wtyczka porównuje pliki z oryginałami z repozytorium i wskazuje dokładnie, co zostało zmienione.

5. Ręczna kontrola dat modyfikacji

Połącz się z serwerem przez FTP i posortuj pliki po dacie modyfikacji. Pliki zmienione bez Twojej wiedzy są podejrzane. Przez SSH sprawdzisz to jednym poleceniem:

find /public_html -name "*.php" -mtime -30 -type f

Uwaga na ukryte infekcje. Groźniejsze są te, których właściciel nie dostrzega przez miesiące: nagły spadek pozycji w Google, domena na czarnych listach pocztowych, ruch w logach serwera w środku nocy albo ostrzeżenia antywirusów u klientów.

Jak odwirusować stronę

Zanim zaczniesz: udokumentuj stan strony, pobierz logi serwera i tymczasowo zmień hasła FTP oraz bazy danych. Sam proces przebiega w sześciu etapach – diagnoza, sprawdzenie kopii, podmiana rdzenia, czyszczenie plików, oczyszczenie bazy i zabezpieczenie.

Krok 1. Przywrócenie z kopii zapasowej

Najszybszym sposobem jest przywrócenie strony z kopii. Bardzo często firma hostingowa przechowuje kopie sprzed miesiąca lub dwóch – warto się do niej zgłosić po pliki i bazę danych.

Sprawdź, czy kopia jest czysta. Upewnij się, że pochodzi sprzed daty infekcji. Jeśli wirus działał od miesięcy, starsze kopie też mogą być zainfekowane. Daty modyfikacji podejrzanych plików pomogą oszacować, kiedy zaczął się atak.

Po przywróceniu kopii koniecznie zmień hasła do panelu WordPress, bazy danych i FTP oraz wygeneruj nowe klucze bezpieczeństwa.

Krok 2. Ręczna podmiana rdzenia WordPress

Gdy kopie hostingu również są zawirusowane, połącz się z serwerem przez FTP – na przykład programem FileZilla. Dane dostępowe wygenerujesz w panelu hostingowym.

Pobierz czystą wersję WordPressa z repozytorium, dokładnie tę samą, która działa na Twoim serwerze. Numer wersji sprawdzisz w katalogu wp-includes, w pliku version.php.

Czego nie podmieniać. Wymień wszystkie pliki i katalogi rdzenia z wyjątkiem trzech: wp-config.php zawiera dane dostępowe do bazy, katalog wp-content mieści Twój motyw, wtyczki i media, a w .htaccess mogą siedzieć Twoje własne reguły.

Krok 3. Czyszczenie katalogu wp-content

Przy stronach WordPress najskuteczniej skupić się właśnie na tym katalogu. Dobrą praktyką jest podmiana całego folderu plugins, bo większość wtyczek pobierzesz z repozytorium w czystej postaci.

Główny wysiłek kieruj na katalog themes, gdzie leży motyw. Szukaj charakterystycznych wzorców:

eval(base64_decode(...))
eval(gzinflate(base64_decode(...)))
$_POST['cmd']
system($_GET['cmd'])
Przykład złośliwego kodu w pliku motywu – charakterystyczne wywołanie eval z zakodowaną zawartością

Sprawdź też plik .htaccess – wirusy często dopisują tam reguły przekierowań. Czysty plik WordPressa wygląda tak:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Odwirusowanie bazy danych

Po oczyszczeniu plików czas na bazę. Dostęp uzyskasz przez phpMyAdmin w panelu hostingowym, a dane logowania znajdziesz w pliku wp-config.php.

Które tabele sprawdzić

  • wp_options – najczęściej atakowana. Sprawdź rekordy siteurl, home, active_plugins oraz widżety.
  • wp_posts – pole post_content pod kątem wstrzykniętych skryptów i zakodowanej zawartości.
  • wp_users – nieznane konta administratora z losowymi loginami i podejrzanymi adresami e-mail.
  • wp_usermeta – uprawnienia użytkowników. Wirus potrafi nadać rolę administratora ukrytemu kontu.
  • wp_comments – odnośniki i skrypty ukryte w treści komentarzy oraz w polach autora.
  • wp_postmeta – metadane wpisów mogą zawierać zakodowany kod w polach meta_value.

Początkującym polecam przejrzenie rekordów ręcznie. Bardziej zaawansowani skorzystają z zapytań SQL:

SELECT * FROM wp_posts WHERE post_content LIKE '%eval(%';
SELECT * FROM wp_posts WHERE post_content LIKE '%base64_decode(%';
SELECT * FROM wp_options WHERE option_value LIKE '%<script%';
SELECT ID, user_login, user_email FROM wp_users;

Uzbrój się w cierpliwość. Przegląd całej bazy potrafi zająć godziny. Przy tysiącach rekordów rozważ narzędzie do masowego wyszukiwania i podmiany – oszczędzisz sporo czasu.

Zmiana danych dostępowych

Usunięcie szkodliwego kodu to nie wszystko. Raz złamane hasła mogły trafić w ręce atakującego, więc bez ich wymiany infekcja wróci tymi samymi drzwiami.

  1. Panel WordPress – zmień hasła wszystkich kont administracyjnych. Minimum szesnaście znaków, z wielkimi i małymi literami, cyframi oraz znakami specjalnymi.
  2. Baza danych – zmień hasło w panelu hostingu i zaktualizuj plik wp-config.php na serwerze.
  3. FTP – wygeneruj nowe dane dostępowe w panelu hostingowym.
  4. Klucze bezpieczeństwa – wygeneruj nowe na api.wordpress.org i wklej do wp-config.php. Wyloguje to wszystkie zalogowane sesje, także atakującego.
  5. Panel hostingowy i poczta – zmień również te hasła, zwłaszcza jeśli używałeś tego samego w kilku miejscach.

Jak zapobiegać infekcjom

Podstawą są regularne aktualizacje motywu i wtyczek. Warto też wyposażyć serwis we wtyczkę monitorującą ruch i zmiany oraz chroniącą panel administracyjny – na przykład Shield Security.

Cztery warstwy ochrony

  • Aktualizacje – regularnie aktualizuj WordPress, wtyczki i motyw, usuwaj nieużywane komponenty i omijaj pirackie wersje płatnych rozszerzeń.
  • Hasła i logowanie – hasła powyżej szesnastu znaków, uwierzytelnianie dwuskładnikowe, rezygnacja z loginu „admin” i menedżer haseł zamiast kartki na biurku.
  • Zapora i monitoring – zapora aplikacyjna, kontrola integralności plików, powiadomienia e-mail i zmieniony adres strony logowania.
  • Kopie zapasowe – automatyczne, przechowywane poza serwerem, z okresowym testem przywracania. Kopia, której nigdy nie odtworzyłeś, jest tylko obietnicą.

Rekomendowane wtyczki

  • Wordfence Security – zapora, skaner złośliwego kodu i ochrona przed atakami na logowanie. Darmowa wersja wystarcza większości stron.
  • Shield Security – rozbudowana zapora z mniejszym obciążeniem serwera, kontrola integralności plików i zmiana adresu logowania.
  • UpdraftPlus – kopie zapasowe z wysyłką na Dysk Google, Dropbox lub Amazon S3.
  • WPS Hide Login – przenosi panel logowania pod własny adres, znacząco ograniczając liczbę prób włamania.

Utwardzenie konfiguracji

  • Wyłącz edycję plików z panelu, dodając do wp-config.php wpis define('DISALLOW_FILE_EDIT', true);
  • Zablokuj wykonywanie kodu PHP w katalogu uploads
  • Wyłącz XML-RPC, jeśli z niego nie korzystasz – to popularny cel ataków
  • Ustaw poprawne uprawnienia: pliki 644, katalogi 755, a wp-config.php 600
  • Wymuś połączenie szyfrowane na całej stronie

Lista kontrolna po odwirusowaniu

  • Rdzeń WordPress podmieniony na czyste pliki
  • Motyw wyczyszczony albo podmieniony
  • Wtyczki pobrane na nowo z repozytorium
  • Plik .htaccess sprawdzony i oczyszczony
  • Baza danych przeskanowana zapytaniami SQL
  • Usunięte nieznane konta administratorów
  • Zmienione wszystkie hasła: panel, baza, FTP, hosting
  • Wygenerowane nowe klucze bezpieczeństwa
  • Końcowe skanowanie zewnętrznym narzędziem
  • Złożony wniosek o ponowną weryfikację w Search Console
  • Zainstalowana wtyczka bezpieczeństwa i skonfigurowane kopie zapasowe

Pamiętaj o RODO. Jeśli Twoja strona zbiera dane osobowe i doszło do ich wycieku, masz obowiązek zgłosić naruszenie do UODO w ciągu 72 godzin od wykrycia. Dokumentuj każdy krok odwirusowania: datę wykrycia, zakres infekcji i podjęte działania.

Potrzebujesz pomocy przy odwirusowaniu strony?

Powyższy przewodnik pozwala przejść przez proces samodzielnie, ale przy poważniejszych infekcjach – zwłaszcza takich z ostrzeżeniem Google albo zablokowanym kontem hostingowym – liczy się czas. Usuwam złośliwy kod z plików i bazy, zamykam lukę, przez którą się dostał, i doprowadzam do zdjęcia ostrzeżenia w wyszukiwarce. Zwykle w ciągu jednego dnia roboczego.

 

Nie chcesz robić tego samodzielnie?

Zajmę się tym za Ciebie. Napisz krótko, co się dzieje - odpowiem tego samego dnia roboczego.

Napisz do mnie
Bartosz
Bartosz Web Developer & Freelancer · Cyberiusz.pl
17 lipca 2021
Sklepy internetowe to moja codzienność - tworzę je, opiekuję się nimi i pomagam właścicielom przyciągać klientów. Działam w sieci od ponad 10 lat.
Sklepy internetowe Marketing online Web development