To jak bardzo ważne jest aktualizowanie systemu WordPress oraz dodatków do tego systemu CMS sądzę, że nikomu nie trzeba mówić, a już na pewno nie osobom, które doświadczyły na własnym przykładzie włamania na stronę lub zainstalowania złośliwego oprogramowania.
Jednym z wielu wirusów, które zostały napisane, aby atakować strony oparte na systemie WordPress, jest wirus “.X1-unix”. Znakiem rozpoznawczym tego wirusa jest generowanie katalogów o nazwie .X1-unix rozmieszczonych w różnych miejscach struktury katalogów systemu WordPress.
Wewnątrz tych katalogów systematycznie generowane są małe pliki, które swoją ilością mogą bardzo mocno obciążyć serwer generując dłuższy czas wczytywania strony jak również dodatkowe obciążenie w przypadku wykonywania backup’u. Jednak głównym celem działalności wirusa jest generowanie i umieszczanie w strukturze strony internetowej jak również mapy strony, linków do podstron (generowanych dynamicznie), ze spamerskimi treściami. W konsekwencji, działalność wirusa prowadzi do obniżenia pozycji strony w wynikach wyszukiwania, a nawet w skrajnych przypadkach do całkowitego usunięcia strony z indeksów wyszukiwarek.
Jak rozpoznać, że strona została zainfekowana?
Jedną z pierwszych oznak, które da się zauważyć, to wejście na swoją stronę i stwierdzenie, że jakiś jej element wyświetla się nieprawidłowo. Warto wtedy zaglądnąć w wygenerowany kod strony, aby sprawdzić, czy nie ma jakiegoś dziwnego, nienaturalnego kodu np. linków do nieistniejących podstron, lub linków ze słowami obcojęzycznymi (niemiecki, hiszpańskimi lub angielskimi). Jeśli sam/a prowadzisz stronę, z pewnością pamiętasz jakie wpisy były tworzone.
Kolejnym symptomem, świadczącym o tym, że coś złego się dzieje jest nagły rozrost pliku z mapą witryny (sitemap.xml lub sitemapindex.xml w zależności od konfiguracji). Wiadomo, że nie codziennie zagląda się na stronę i sprawdza rozmiar tych plików, ale nieprawidłowości bardzo łatwo wyłapać przeglądając konfigurację w Search Console. W sposób przejrzysty podawana jest statystyka o ilości zgłoszonych linków oraz zindeksowanych. Jeśli posiadasz stronę ze stosunkowo niewielką ilością podstron, informacja, że Twój plik mapy strony zawiera kilka tysięcy linków musi wzbudzić zainteresowanie.
Jak usunąć wirusa .X1-unix ?
Aby rozprawić się z wirusem, konieczne będzie posiadanie dostępu do shell’a, lub poproszenie administratora o wykonanie na Twoim koncie kilku poleceń.
Cechą wspólną wszystkich ataków jest tworzenie przez wirusa folderów o nazwie .X1-unix. Usunięcie wszystkich takich folderów to podstawa, chociaż tak naprawdę nie powstrzyma to wirusa przed kontynuacją tworzenia nowych katalogów. Jednak od czegoś trzeba zacząć.
find * -type d -name '.X1-unix' |xargs rm -rfv
Powyższe polecenie przegląda wszystkie podrzędne katalogi w poszukiwaniu katalogu o nazwie .X1-unix, gdy taki katalog zostanie znaleziony, zostaje usunięty wraz z całą zawartością, a na ekranie pojawi się informacja o położeniu usuniętego katalogu.
Ok, ale tak jak wyżej wspomniałem, to tylko kosmetyka, która nie powstrzyma wirusa, jednak umożliwi wykonanie szybszej kopii bezpieczeństwa wszystkich plików.
Ale gdzie właściwie ukrył się wirus? Trudno jednoznacznie wskazać położenie zainfekowanych plików, ponieważ są one rozrzucone w wielu przypadkowych miejscach. Jak to z wirusami bywa, ich kod źródłowy jest zaszyfrowany i dokładnie nie wiadomo jakie instrukcje wykonują. Warte zaznaczenia jest, że wirus .X1-unix tworzy łudząco podobne do już istniejących nazwy plików. Przykładowo, jeśli na serwerze masz plik o nazwie: nazwa.php, wirus tworzy swoją instancję jako nazwa.php.php, dzięki czemu jest dość łatwy do odnalezienia i usunięcia.
Nie mniej jednak doszukałem się wspólnej i raczej dość oryginalnej zawartości wszystkich zainfekowanych plików. Mianowicie jest to zawartość zmiennej:
$u1af09729ee = 'pr'.'eg'.'_r'.'epl'.'ace';
Posiadając tę cechę wspólną, już prosta droga do napisania zapytania, w celu wyszukania i usunięcia wszystkich plików, które zawierają podejrzaną treść.
grep -RIlm 1 "'pr'.'eg'.'_r'.'epl'.'ace';" * |xargs rm -fv
Powyższe polecenie przeszuka wszystkie pliki w obecnym katalogu oraz katalogach podrzędnych w poszukiwaniu plików z zawartością pasującą do podanego wyrażenia regularnego. W przypadku odnalezienia pasującej frazy, plik jest usuwany, a informacja o tym, wyświetlana na ekranie.
Nie jest to jednak koniec poszukiwań zarażonych plików. Wirus tworzy dodatkowy plik, udający przeważnie umowę licencyjną GNU GPL, z wplecionym w treść znacznikiem php oraz zamaskowanymi instrukcjami php. Nie miej jednak podobnie jak powyżej, wszystkie te pliki posiadają identycznie wyglądające instrukcje. Aby usunąć wszystkie pliki, należy wykonać następujące polecenie:
grep -RIlm 1 "not \*\/\@\$F\&\&\@\$F(\$A,\$B);\/\*." * |xargs rm -fv
Powyższe polecenia, należy wykonywać naprzemiennie, do czasu, kiedy nie zostaną już odnalezione żadne zainfekowane pliki. Zastosowane wyrażenia regularne w poleceniach zostały dopasowane do sytuacji z jaką się spotkałem. Może się więc zdarzyć, że w przypadku nowych wersji wirusa, powyższe polecenia nie zadziałają.
Z mojego doświadczenia wynika, że wirus nie dokonuje żadnych modyfikacji w bazie danych, nie mniej jednak należy wykonać zmianę wszystkich haseł (bazy danych oraz konta administratora) jak również zaktualizować wszystkie komponenty WordPress’a.
Mam nadzieję, że pomogłem. Zostaw proszę komentarz, czy powyższa procedura była skuteczne w Twoim wypadku?
Super, świetny wpis. Miałem to cholerstwo i zaproponowane rozwiązanie pomogło! Dziękuję.