Moja strona została zainfekowana! Co robić?!

WordPressStosowaliśmy się do wszystkich zaleceń dotyczących bezpieczeństwa, a mimo to nasza strona działająca na WordPressie została zainfekowana złośliwym kodem. To niestety możliwe, a przyczyn może być bardzo wiele – i najczęściej winni będziemy my sami. Na szczęście w większości przypadków przywrócenie strony do działania nie powinno stanowić większego problemu i nawet osoby mało obeznane z technicznymi aspektami WordPressa z pewnością dadzą sobie z tym radę.

Jak rozpoznać że nasza strona została zainfekowana?

Skrypty wykorzystujące luki w bezpieczeństwie serwisów internetowych (dotyczy to nie tylko WordPressa) najczęściej doklejają do stron swój kod. Może on służyć do przekierowywania użytkowników na jakiś adres URL, ładowania stron do ukrytych ramek, umieszczania tekstów reklamowych (często ukrytych), a nawet prób zainfekowania komputera złośliwym oprogramowaniem. Atakowane strony rzadko są niszczone – celem atakujących jest raczej wykorzystanie ich do własnych celów.

Często bardzo trudno jest zauważyć, że nasz serwis został zainfekowany. Pierwszym sygnałem może być spowolnienie ładowania strony i pobierania jakichś elementów z nieznanych nam zewnętrznych serwerów. Należy również zwracać uwagę na wszelkie zmiany w treści strony, również takie, które wyglądają na błąd w kodzie HTML. Jeśli mamy chociażby cień podejrzeń, że coś może być nie tak, przeskanujmy profilaktycznie naszą stronę.

Jeśli nie zauważymy na czas problemów z naszą stroną, może ona trafić na „czarną listę”, z której korzystają między innymi przeglądarki. Gdy tak się stanie, użytkownicy próbujący wejść na naszą stronę otrzymają komunikat, że prawdopodobnie jest ona zainfekowana i jej otwieranie nie jest zalecane. Nie dosyć, że stracimy praktycznie cały ruch, to jeszcze nadszarpniemy zaufanie stałych użytkowników.

Sprawdzanie strony pod kątem występowania złośliwego kodu

Do sprawdzenia strony pod kątem zainfekowania złośliwym kodem można wykorzystać darmowy skaner Sucuri. Wystarczy wpisać adres naszej strony i kliknąć przycisk Scan Website. To samo skanowanie możemy wykonać w panelu administracyjnym – wystarczy zainstalować bezpłatną wtyczkę Sucuri Scanner. Warto wykonywać takie sprawdzanie regularnie (nawet co kilka dni), aby mieć pewność, że wszystko jest w porządku.

Jak naprawić zainfekowaną stronę?

Jeśli nasza strona padła ofiarą ataku, to przede wszystkim nie panikujmy. Jak napisałem wcześniej, ataki bardzo rzadko kończą się zniszczeniem serwisu lub jego treści – zwykle atakujący próbuje wykorzystać go do własnych celów, przy czym niektóre słabo napisane złośliwe skrypty potrafią „niechcący” zepsuć naszą stronę. Nie bójmy się spróbować samodzielnie wyczyścić naszą witrynę – gorzej już przecież nie będzie.

Na wstępie poinformujmy o problemie firmę hostingową utrzymującą nasz serwer. Jej pracownicy mogą być skłonni nam pomóc, a ponadto może się okazać, że zaatakowane zostały również serwisy innych klientów. Nie jest także wykluczone, że część winy leży po stronie serwera (na przykład w jego konfiguracji czy niewystarczających zabezpieczeniach).

Następnie zmieńmy hasła. Wszystkie. Do FTP, do panelu serwera, do panelu WordPressa, do bazy danych. Po prostu wszystkie, jakie wpadną nam do głowy. Przeskanujmy także nasz własny komputer pod kątem wirusów i innego złośliwego oprogramowania. Warto również wykonać kopię plików i bazy danych naszego zainfekowanego serwisu – mogą się one przydać do późniejszej analizy tego, co się stało, jak również pomóc w przypadku gdy próbując naprawić naszą stronę usuniemy trochę więcej niż powinniśmy.

Przede wszystkim mamy kopię bezpieczeństwa. A przynajmniej powinniśmy ją mieć. Sprawdźmy więc czy zawiera ona „czyste”, niezmodyfikowane przez żaden złośliwy skrypt pliki. Jeśli tak, to problem rozwiązany – wystarczy przesłać wszystkie pliki z powrotem na serwer. Jeśli nie, to pracy będziemy mieli nieco więcej.

Przyjrzyjmy się plikom WordPressa na naszym serwerze – sprawdźmy kiedy były ostatnio modyfikowane i wybierzmy jeden, który był zmieniany niedawno. Otwórzmy go w jakimś edytorze i sprawdźmy czym różni się od pliku oryginalnego – w większości przypadków znajdziemy jakiś dziwny kod, często „zaszyfrowany” (tak naprawdę „zaciemniony” w celu utrudnienia jego odczytania) albo umieszczony w dziwnym miejscu (na przykład w drugiej linii pliku, poprzedzony 200 spacjami). Warto zapisać sobie ten kod gdzieś na boku, bo będziemy musieli go usunąć ze wszystkich plików. Należy sprawdzić również zawartość pliku .htaccess pod kątem nietypowych przekierowań na jakieś zewnętrzne adresy – w razie wątpliwości zawsze możemy ten plik po prostu usunąć (zostanie on odtworzony przy pierwszej zmianie ustawień odnośników bezpośrednich w panelu WordPressa).

Teraz usuńmy wszystkie pliki WordPressa z naszego serwera. Nie, nie żartuję – usuwamy wszystko. Chodzi o to, co znajduje się w katalogu głównym naszej strony (możemy zostawić pliki .htaccesswp-config.php – o ile mamy pewność, że są „czyste”). Usuwamy wszystkie pliki, ponieważ chcemy mieć pewność, że na serwerze nie zostanie żaden plik dodany tam przez atakującego. Następnie należy pobrać z oficjalnej strony paczkę instalacyjną WordPressa, rozpakować ją i przesłać jej zawartość na nasz serwer. Nie ma obaw – niczego w ten sposób nie zepsujemy. To samo należy zrobić z wszystkimi wtyczkami. Jeśli któraś z wtyczek została napisana albo zmodyfikowana specjalnie dla nas, zostawiamy ją na razie w spokoju.

Teraz najbardziej męcząca i czasochłonna część naszej pracy: usunięcie złośliwego kodu z plików szablonu i plików wtyczek, których nie mogliśmy zastąpić „czystymi” wersjami z repozytorium. Musimy ręcznie wykonać edycję każdego z plików, wyszukać w nim złośliwy kod i go usunąć. Przykro mi, ale innej pewnej metody po prostu nie ma. Po zakończeniu tej operacji koniecznie należy wykonać skanowanie naszej strony, aby upewnić się, że niczego nie przegapiliśmy.

Może się okazać, że złośliwy kod został zamieszczony również w treści naszych wpisów i stron. W takim przypadku należy wyszukać zainfekowane teksty i usunąć z nich śmieci (trzeba pamiętać o przełączeniu edytora w tryb tekstowy – niektóre elementy mogą być ukryte w edytorze wizualnym).

Na koniec czeka nas najtrudniejsze zadanie: znalezienie luki w bezpieczeństwie, która została wykorzystana do zainfekowania naszej strony. Warto sprawdzić nasz serwis jednym z dostępnych skanerów, upewnić się, że katalogi i pliki mają poprawne uprawnienia i że żadna z używanych wtyczek nie zawiera jakiegoś błędu związanego z bezpieczeństwem. Jeśli nie jesteśmy w stanie poradzić sobie z tym sami, rozważmy poproszenie o pomoc kogoś bardziej doświadczonego, w tym pracowników firmy hostingowej, z której usług korzystamy.

Jak uniknąć podobnych problemów w przyszłości?

Przede wszystkim należy stosować się do zaleceń dotyczących bezpieczeństwa. To niestety konieczność – nie tylko w przypadku WordPressa, ale każdego innego popularnego skryptu.

Bezpośredni link

  • monikaimaciej

    Bardzo klarowny artykuł, niestety, mimo zrealizowania wszystkich opcji, szkodliwy element kodu importuje się od nowa. Po wgraniu wszystkich nowych plików, zmianie haseł ten kawałek się pojawia jak zaczarowany…Walimy głowa o ścianę z rozpaczy.

    • WordPress, wtyczki i motyw zaktualizowane do najnowszych wersji? Jeśli masz jakaś dawno nieaktualizowaną wtyczkę, to może się okazać, że jest dziurawa. Jeśli wszystko zawiedzie, to winny może być również hosting.

      • monikaimaciej

        Tu nie mamy żadnych wtyczek-goła instalacja. Hosting jest na nazwie, a oni swiadczą usługi ratunkowe odpłatnie. Ale to chyba nie hosting jednak, bo inne katalogi i strony na tym samym serwerze jednak nieuszkodzone.

        • Nie ma cudów – gdzieś musi być dziura. Trudno jednak powiedzieć coś więcej bez dostępu do serwera.

          • monikaimaciej

            Dzięki, napiszemy do hostingodawcy.