wdrt

Wirus na stronie WordPress - Jak odkodować edoced_46esab

Pod koniec lutego (20-21) miały miejsce kolejne spore ataki hakerskie na strony postawione na CMS WordPress. Po uzyskaniu dostępu, atakujący umieszczali na stronach pliki PHP i doklejali kod w htaccess, dzięki czemu strony mogły nie tylko emitować linki na podstronach, ale również działać jako typowy doorway page - przekierowywać ruch z wyszukiwarki Google, a wejścia bezpośrednie zostawiać nietknięte.

Standardowo, aby dokładnie usunąć wirusa, trzeba poznać zainfekowany skrypt PHP, zobaczyć jakie elementy zawiera, do jakich plików się odwołuje.

Funkcje wykorzystane do zaciemnienia kodu w zainfekowanych plikach PHP to najczęściej base64_decode, choć z ataków z lutego mieliśmy potrójne kodowanie, proste ale wkurzające chr(num), zwraca konkretny znak z tablicy ASCII, num to przypisana do konkretnego znaku wartość liczbowa, więcej tutaj oraz ciąg znaków zakodowany w edoced_46esab - odwrócony ciągu znaków base64_decode, przy pomocy funkcji strrev.

Infekcje z 20-21 obejmowały plik htaccess (przekierowanie wszystkich requestów) oraz w katalogu głównym plik PHP o losowej nazwie - najpradopodobniej generowanej na etapie wstrzykiwania pliku na stronę, który zawierał główny kod pasożyta. W tym krótkim artykule nie będę omawiał, jak konkretnie usunąć ten typ infekcji (wymagałoby to podania wszystkich kodów źródłowych z wydrębnionych zainfekowanych plików, których z oczywistych względów nie mogę podać), jednak zaprezentuję prosty sposób na zdekodowanie pliku z zaciemnianiem kodu obejmującym edoced_46esab oraz strrev, albowiem w wiadomościach prywatnych padały pytania o sposoby dekodowania.

Poniżej prosta apka do odwracania ciągu znaków, dodałem do niej dekodowanie ciągów base64, bo jedno bez drugiego żyć nie może. Wiem że mało funkcji :) Na tę chwilę tylko tyle i aż tyle. Jak będzie zainteresowanie programem dodam inne opcje, użyteczne podczas pracy przy diagnozowaniu infekcji ze stron internetowych, w szczególności w CMS WordPress.

WordPress Diagnostic and Recovery Toolset

Obsługa apki bardzo prosta, w górnym polu tekstowym wklejamy fragment zaciemnionego kodu, wybieramy tryb pracy Kodowanie/Dekodowanie (Encode/Decode) oraz wskazujemy rodzaj kodowania - w tej chwili dostępne 2 typy - Base64 oraz StrRev. W drugim polu tekstowym otrzymujemy zdekodowany ciąg znaków. W przypadku base64_decode apka automatycznie rozpoznaje i wyodrębnia odpowiednie ciągi do zdekodowania, ale może również pracować na czystym tekście w base64. Interfejs aplikacji w języku angielskim, sorry.

Do uruchomienia programu potrzebny jest .NET Framework 4.5.2 lub nowszy.

Wracając do tematu infekcji, jeśli masz zainfekowany plik i widzisz w kodzie wystąpienia StrRev oraz edoced_46esab, wpierw użyj zwykłego odwracania znaków, w drugiej kolejności użyj dekodera Base64. Na wyjściu dostaniesz pełny kod wirusa.

Zdarza się, że w kodzie i strrev jest odwrócone (verrts) lub kilkukrotnie użyte Base64, albo część wirusa jest kodowana przy użyciu innych metod. W wielu przypadkach także info o rodzaju kodowania siedzi w zmiennej, a część kodu zasysana jest z zupełnie innego pliku (inkludowanie), więc trzeba analizować zawsze całokształt wraz z powiązaniami.

PS. Wiem, że są narzędzia on-line do dekodowania ale potrzebowałem czegoś na desktop z możliwością szybkiego rozbudowania. Wersję 1.0.0 udostępniam za FREE, może komuś się przyda.

Pobierz

Mariusz Kołacz base64_decode, base64_encode, edoced_46esab, StrRev

Skomentuj wpis - Komentarzy (10)

  1. Wirusolog pisze:

    Kilka dni temu po wejsciu na moją stronę antywirus wyświetlił komunikat o wirusie. Czy mój wordpress został zainfekowany? Przez ostatnie tygodnie nic nie istalowałem tylko dodawałem nowe treści.

  2. Mariusz Kołacz pisze:

    Antywirusy mogą wskazywać fałszywe zagrożenia, z rok do tyłu do jednego z pluginów do wyświetlania cookies używano javascriptu, który był klasyfikowany jako virus malware, a specjalnie nic groźnego nie robił tylko zawierał "napiętnowane" funkcje, dlatego w takich sytuacjach wypada na żywca rzucić okiem na to co jest raportowane przez program antywirusowy i zerknąć na bazę danych na stronie producenta i samą witrynę, warto również zerknąć do Google Search Console i strony diagnostyczne safebrowsing, a także sprawdzić pliki na serwerze. Nie należy lekceważyć takiego komunikatu, może być to typowy False Positive, ale również i może się finalnie okazać, że została wykryta groźna infekcja.

    Podeślij mi stronę na priv, w sobotę będę miał więcej czasu to rzucę na nią okiem.

  3. mojeprogramy.com pisze:

    Zastanawiam sie po co bawić sie w odkodowywanie? skoro i tak chcemy usunąć ten kod?
    Ja to tylko znajduje zainfekowany kod i go usuwam i sprawa rozwiązana

  4. Mariusz Kołacz pisze:

    a) Jeśli nie wiesz jak coś działa, jest szansa, że nie usuniesz całego świństwa.
    b) W celach edukacyjnych ;) Jeżeli wiesz jak coś działa, wiesz również którędy mogą wjazd zrobić i które elementy bezpieczeństwa należy poprawić.

    Brak dekodowania oznacza tak w rzeczywistości postępowanie po omacku, ale oczywiście takie "zabiegi" wymagają czasu, więc jeśli ktoś tego czasu ma mało lub nie chce się wyedukować, by zabezpieczyć się na przyszłość, to faktycznie metoda "na luzaka" jest dla niego odpowiednia.

  5. kriszo pisze:

    Witaj
    Ostatnimi czasy oberwały u mnie na serwerze wszystkie strony, postawione na różnych skryptach. Wirus po wejściu na stronę wysyła mailing, strona wczytuje się bardzo długo. Administrator zablokował mi funkcję mail(), bo jak otrzymałem w mailu moje domeny rozsyłają spam. Wirus dopisuje informację do każdego pliku index

    Dodatkowo tworzy jakieś nowe pliki, podobne w nazwie do tych które instaluje wp.
    przykładowo kilka plików o nazwie wp-linki.php

  6. Mariusz Kołacz pisze:

    Sorry ale kodu źródłowego tego pliku nie mogę zamieścić w komentarzu :/

    Co do tematu, z ciekawości mogę zapytać o który hosting chodzi?

  7. kriszo pisze:

    Chodzi o nazwę. Pytanie jak pozbyć się tak dużej liczby zainfekowanych plików

  8. Mariusz Kołacz pisze:

    Dla każdej domeny można zrobić i odpalić skrypt, który odwiedzi wszystkie katalogi szukając konkretnego patternu lub nazwy pliku, gdy znajdzie - usunie go.

    Z kolei jeśli jest dostęp do shella - skrypt w bashu który wykona dokładnie to co wyżej, tyle że dla wszystkich domen za jednym zamachem.

    Jak znasz php to i skrypt w bashu napiszesz.

  9. Mariusz Kołacz pisze:

    Jest też rozwiązanie "na piechotę" ale nie wymagające znajomości programowania.
    Robisz backup całego konta, w backupie choćby przez Direct Admina możesz zrobić kopię wszystkich domen na koncie.
    Pobierasz backup na dysk rozpakowujesz, a następnie wyszukujesz automatem plików o konkretnej nazwie lub zawierajacych określony pattern.
    Do wyszukwiania można użyć bezpłatnej wersji świetnego programu FileLocator Lite.
    Po usunięciu wszystkich zainfekowanych plików robisz ZIPa lub TAR GZ, albo samego TARa - w zależności od ustawień przywracania kopii w panelu.
    Następnie wgrywasz backup. Nie pamiętam czy backupy przez DA są w trybie zastępowania, ale jeżeli nie to trzeba usunąć wszystko z konta i później "oczyszczony backup" wgrać "na czysto".

  10. Luxx400 pisze:

    Moja wcześniejsza strona miała podobne problemy ;)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Poinformuj mnie o nowych komentarzach do tego wpisu.