webshell
| Po angielsku | web shell |
|---|---|
| Którą formą pisać | po angielsku Polski odpowiednik istnieje, ale w praktyce nikt tak nie pisze. Zostaw angielski, polski trzymaj jako synonim. |
| Inne formy | skrypt umożliwiający zdalne wykonywanie kodu na serwerze strony · backdoor dostępny przez przeglądarkę · panel napastnika w plikach strony |
| Kategoria | Strony WWW, WordPress i hosting |
Webshell to skrypt umieszczony na publicznie dostępnym serwerze WWW, który daje atakującemu dostęp do tego serwera i służy mu jako brama dalej, do sieci [1]. MITRE ATT&CK opisuje go jako sposób na utrwalenie dostępu, czyli tylną furtkę (backdoor) w serwerze WWW [1]. CERT Polska wskazuje, że nawet prosty webshell umożliwia zdalne wykonywanie komend na serwerze [2]. Na stronach WordPress jest to najczęściej plik PHP dopisany do katalogu wtyczki, motywu albo przesłanych plików.
Jak działa
Webshell to zwykły plik, który serwer WWW uruchamia jak każdy inny skrypt strony. Atakujący wysyła do niego żądanie HTTP z poleceniem w parametrze, a skrypt przekazuje je do systemu i odsyła wynik. Sekurak zwraca uwagę, że webshelle zwykle korzystają z funkcji danej technologii do wykonywania poleceń systemowych [3]. Oprócz skryptu po stronie serwera webshell może mieć program kliencki do komunikacji z nim; MITRE podaje przykład klienta China Chopper [1].
Sam webshell nie jest włamaniem, tylko jego skutkiem. Najpierw musi zadziałać inny błąd: wgranie dowolnego pliku (arbitrary file upload), zdalne wykonanie kodu (RCE) albo przejęcie hasła do panelu lub serwera. Słabość CWE-434, czyli nieograniczone wgrywanie plików niebezpiecznego typu, zajęła 10. miejsce w zestawieniu CWE Top 25 za 2024 rok [7]. Typowy przebieg pokazuje schemat poniżej.
Najprostszy webshell ma jedną linię kodu: przekazuje wartość parametru żądania do funkcji, która wykonuje polecenie systemowe. Przykład takiego kodu CERT Polska zamieszcza w swojej ścieżce postępowania [2]. Ten artykuł go nie powtarza, bo programy antywirusowe słusznie traktują taki plik jako złośliwy.
Odmiany
Webshelle różnią się rozmiarem i sposobem ukrycia. Sekurak opisuje gotowe narzędzia o różnym stopniu zaawansowania oraz techniki, które omijają wykrywanie po nazwach funkcji [3].
| Odmiana | Cecha | Trudność wykrycia |
|---|---|---|
| jednolinijkowy | jedno wywołanie funkcji systemowej [2] | niska, gdy plik jest nowy |
| gotowe narzędzie | rozbudowany skrypt pobrany z sieci [3] | średnia |
| zaciemniony | kod zakodowany, np. przez base64_decode [3] | wysoka |
| z ładunkiem z zewnątrz | pobiera właściwy kod z innego serwera [3] | wysoka |
Zaciemnianie kodu ma utrudnić przegląd pliku. Sekurak podaje też przykład operatora wykonania PHP (odwrotnych apostrofów), który uruchamia polecenie bez użycia funkcji system czy exec [3].
W WordPressie
WordPress jest napisany w PHP, więc każdy plik .php, do którego serwer WWW ma dostęp, może zostać wykonany. Źródłem webshella jest najczęściej podatność we wtyczce albo w motywie, która pozwala zapisać plik na dysku. Drugą drogą jest edytor plików motywów i wtyczek w panelu: kto przejmie konto administratora, może dopisać kod do istniejącego pliku motywu. Dokumentacja WordPressa podaje, że stała DISALLOW_FILE_EDIT w wp-config.php działa jak odebranie wszystkim użytkownikom uprawnień edit_themes, edit_plugins i edit_files [5].
CERT Polska zwraca uwagę na niestandardowe żądania POST do plików w katalogach, w których nie powinno być plików wykonywalnych, na przykład /images/ albo /uploads/; mogą one świadczyć o obecności webshella [2]. Z tego powodu stosuje się blokadę wykonywania PHP w katalogu uploads. CERT Polska pisze wprost, że ograniczenie katalogów z uprawnieniem wykonywania skryptów PHP ogranicza możliwość wykorzystania webshella [2].
Na hostingu współdzielonym znaczenie mają też uprawnienia plików. Dokumentacja WordPressa zaleca, by pliki należały do konta użytkownika, a zapis przez serwer WWW był możliwy tylko tam, gdzie WordPress go potrzebuje [5].
Zagrożenia i skutki
Webshell daje atakującemu trwały dostęp, który przetrwa zmianę hasła do panelu. Z jego pomocą można czytać wp-config.php z hasłem do bazy, zakładać konta, dopisywać SEO spam i przekierowania albo wgrywać kolejne narzędzia. MITRE opisuje webshell jako bramę do sieci, co otwiera drogę do lateral movement, czyli przemieszczania się na inne systemy [1].
- Kradzież danych z bazy i plików konfiguracyjnych.
- Dalsze infekcje: dopisany kod w innych plikach strony, nowe tylne furtki.
- Wykorzystanie serwera do ataków na innych, np. wysyłki spamu.
Jak się bronić
Podstawą jest usunięcie przyczyny: aktualizacja wtyczek, motywów i rdzenia. CERT Polska zaleca utrzymywanie aktualnych wersji CMS, jego wtyczek, motywów i oprogramowania serwera [2]. Dokumentacja WordPressa radzi usuwać nieużywane wtyczki [5].
MITRE wymienia jako środki zaradcze zasadę najmniejszych uprawnień dla kont mogących modyfikować katalogi WWW oraz wyłączanie niebezpiecznych funkcji skryptowych [1]. W PHP służy do tego dyrektywa disable_functions, ale podręcznik PHP ostrzega, że można ją obejść i nie jest wystarczającym zabezpieczeniem na hostingu współdzielonym [6]. Dyrektywa open_basedir ogranicza pliki dostępne dla PHP do wskazanego drzewa katalogów [6].
Wykrywanie opiera się na kilku warstwach:
- Monitorowanie integralności plików i porównanie z czystą wersją aplikacji, np. narzędziem
diff; Sekurak wymienia AIDE, Tripwire i auditd [3]. - Skaner złośliwego oprogramowania (malware scanner). W teście Sekuraka ClamAV wykrył 113 z 237 webshelli [3], więc skaner sam nie wystarczy.
- Analiza logów: MITRE zaleca obserwować nowe pliki w katalogach WWW i procesy powłoki uruchamiane przez serwer WWW [1].
Znaleziony webshell to wskaźnik kompromitacji (IoC), a nie koniec sprawy. Czyszczenie przejętej strony wymaga ustalenia wektora ataku. CERT Polska zaleca po incydencie zmianę wszystkich haseł i kluczy, do których atakujący mógł mieć dostęp [2], a przywrócenie z kopii zapasowej rozważać wtedy, gdy wektor i czas infekcji są jednoznacznie ustalone [2].
Historia i przykłady
Webshelle instalowano na serwerach Microsoft Exchange podatnych na lukę ProxyLogon (CVE CVE-2021-26855) [4]. W artykule z 14 kwietnia 2021 roku Sekurak opisał operację FBI, która za zgodą sądu usunęła te webshelle, wydając przez nie polecenie skasowania samego pliku webshella [4]. Operacja nie łatała podatności; aktualizacja serwerów nadal była konieczna [4].
Przypisy
7- [1] Server Software Component: Web Shell (T1505.003) · MITRE ATT&CK
- [2] Przejęta strona internetowa — ścieżka postępowania · CERT Polska
- [3] Jak wykrywać backdoory / webshelle w aplikacjach webowych? · Sekurak
- [4] FBI za zgodą sądu wykorzystał webshelle żeby… usunąć webshelle · Sekurak
- [5] Hardening WordPress — Advanced Administration Handbook · WordPress.org
- [6] Description of core php.ini directives (open_basedir, disable_functions) · The PHP Group
- [7] 2024 CWE Top 25 Most Dangerous Software Weaknesses · MITRE
Hasła w tym artykule
18- tylna furtka
- wgranie dowolnego pliku (arbitrary file upload)
- zdalne wykonanie kodu (RCE)
- zaciemnianie kodu
- podatność we wtyczce
- edytor plików motywów i wtyczek
- blokada wykonywania PHP w katalogu uploads
- hosting współdzielony
- uprawnienia plików
- SEO spam
- lateral movement
- zasada najmniejszych uprawnień
- monitorowanie integralności plików
- skaner złośliwego oprogramowania (malware scanner)
- wskaźnik kompromitacji (IoC)
- czyszczenie przejętej strony
- kopia zapasowa
- CVE
Linkują tutaj
72- złośliwe oprogramowanie
- exploit
- tylna furtka
- ładunek
- botnet
- fałszywy alarm
- C2 (command and control)
- podatność we wtyczce
- hosting współdzielony
- SEO spam
- porzucona wtyczka
- rootkit
- podmiana treści strony (defacement)
- uprawnienia plików
- wgranie dowolnego pliku (arbitrary file upload)
- wstrzyknięcie poleceń (command injection)
- SFTP
- RAT (remote access trojan)
- atak na łańcuch dostaw
- blokada wykonywania PHP w katalogu uploads
- deserializacja niezaufanych danych (insecure deserialization)
- edytor plików motywów i wtyczek
- infostealer
- monitorowanie integralności plików
- podatność wykorzystywana bez uwierzytelnienia
- skaner złośliwego oprogramowania (malware scanner)
- RFI (Remote File Inclusion)
- race condition
- zabezpieczenia w .htaccess
- zdalne wykonanie kodu (RCE)
- LFI (Local File Inclusion)
- eskalacja uprawnień
- piracka wtyczka (nulled plugin)
- EDR (Endpoint Detection and Response)
- dropper
- eksfiltracja danych
- segmentacja sieci
- kwarantanna
- zaciemnianie kodu
- living off the land (LotL)
- cryptojacking
- packer
- XDR (Extended Detection and Response)
- mu-plugins
- pharma hack
- process injection
- shellcode
- wskaźnik kompromitacji (IoC)
- usunięcie zagrożenia
- IDS
- informatyka śledcza
- purple team
- taktyki, techniki i procedury (TTP)
- threat hunting (polowanie na zagrożenia)
- serwer proxy
- MITRE ATT&CK
- logowanie kluczem SSH
- opanowanie incydentu
- sinkhole
- Cyber Kill Chain
- broker początkowego dostępu
- czas przebywania atakującego w sieci
- kopia niezmienna (immutable backup)
- MDM (zarządzanie urządzeniami mobilnymi)
- badacz bezpieczeństwa
- black hat
- chain of custody
- post-incident review
- script kiddie
- ucieczka z kontenera
- MTTD
- sideloading