„Słuchaj, ostatnio coś mi się dzieje z WP.” – taką wiadomość dostałem od znajomego. Był przekonany, że to awaria serwera. Prawda okazała się znacznie gorsza.
To klasyczny scenariusz, który widzę w branży zbyt często. Znajomy dbał o swoją główną stronę wizytówkową. Miał SSL, trudne hasła i płatne wtyczki bezpieczeństwa. Jednak hakerzy nie wchodzą głównymi drzwiami, gdy mają otwarty lufcik w piwnicy.
Podczas audytu plików nie skupiłem się na katalogu public_html głównej domeny. Zamiast tego zacząłem grzebać głębiej w strukturze serwera DirectAdmin. I tam, w zapomnianym folderze, znalazłem przyczynę katastrofy.
Zobacz też: Atak na polską sieć w wigilię!.
/domains/test.domena.pl/public_html/Była to stara wersja deweloperska strony, postawiona dwa lata temu dla grafika, żeby „przetestował nowe logo”. Projekt się skończył, strona została. Bez aktualizacji, bez opieki. To właśnie tam automat hakerski znalazł lukę i wgrał wtyczkę wp-files – narzędzie, które posłużyło jako cyfrowy łom do wgrania backdoora ws42.php.
Wilk w owczej skórze. Dlaczego antywirus spał?
To nie był zwykły wirus doklejający reklamy. Przeanalizowaliśmy kod ws42.php linijka po linijce. To zaawansowany Loader C2 (Command & Control). Zobacz, jak sprytnie oszukuje on zarówno administratora, jak i systemy antywirusowe.
Haker wie, że admin może zajrzeć do plików. Dlatego kod zaczyna się niewinnie. Wygląda jak profesjonalna wtyczka bezpieczeństwa – to klasyczna inżynieria społeczna.
Wniosek: Nazwa „SecurePlugin” to kłamstwo. Jeśli widzisz coś takiego w katalogu wp-files na subdomenie – masz problem.
Mechanizm „Gate Token”. Wirus, który się broni
To najciekawsza część, którą odkryliśmy podczas analizy głębszych warstw kodu. Wirus nie działa od razu. On się „uzbraja” w locie. Kod zawiera mechanizm sprawdzający tzw. Gate Token.
Złośliwy skrypt składa w pamięci klucz z kilku kawałków (metody gtPSKraj78, gtmSxkCg28). Następnie sprawdza sumę kontrolną MD5 tego klucza. Jeśli się nie zgadza (bo np. antywirus próbował zmienić kod lub uruchomić go w bezpiecznej piaskownicy) – wirus się nie uruchomi. To mechanizm autodestrukcji i ukrywania przed badaczami.
Niewidzialny dla zapory ogniowej (WAF Bypass)
Większość serwerów (WAF) blokuje funkcję eval(). Hakerzy obeszli to w sposób genialny w swojej prostocie. Zamiast uruchamiać kod w pamięci RAM, skrypt wykonuje manewr „na legalnego plika”:
- Tworzy tymczasowy plik na dysku serwera (funkcja
tmpfile). - Wpisuje do niego zaszyfrowany kod przesłany przez hakera.
- Używa legalnej funkcji
include, aby włączyć ten plik do WordPressa.
PODSUMOWANIE: Co musisz zrobić DZIŚ?
Historia mojego znajomego skończyła się (w miarę) dobrze. Wyczyściliśmy serwer, usunęliśmy subdomenę test.domena.pl i zabezpieczyliśmy domenę główną. Ale stresu i straconego czasu nikt mu nie odda.
Wyciągnij wnioski z cudzych błędów. Oto Twoja lista zadań:
- ✓
Sprawdź katalog /domains/
Zaloguj się na FTP lub DirectAdmin. Czy widzisz tam foldery typutest,dev,old? Jeśli ich nie używasz – USUŃ JE NATYCHMIAST. - ✓
Szukaj wtyczki „wp-files”
Przeskanuj katalogwp-content/plugins. Jeśli znajdziesz tam folderwp-files, którego sam nie instalowałeś, oznacza to, że ktoś już tam był. - ✓
Izolacja to podstawa
Upewnij się, że Twój hosting używa separacji katalogów (np.open_basedir). Dzięki temu infekcja na subdomenie nie przejdzie na domenę główną.
Nie daj się złapać. Sprawdź swoje serwery jeszcze dzisiaj.
