Rok 2021 obfitował w różnego rodzaju podatności które umożliwiają umieszczenie webshell-i w usługach dostępnych za pomocą WWW – patrz np. Exchange (np. CVE-2021-26855, CVE-2021-2857, CVE-2021-26858, CVE-2021-27065), vmware vCenter (CVE-2021-22005), Nagios (CVE-2021-37343).
W niniejszym cyklu artykułów skupimy się na tym jak poradzić sobie z Webshell, które w MITRE ATT&CK definiujemy jako technikę T1505.003[1].
W pierwszej części zajmiemy się podstawami jak wykrywać webshell w systemach Windows.
Oczywiście idealnie by było gdybyśmy mieli na serwerze rozwiązanie XDR/EDR. Jednak niejednokrotnie nie mamy takiego komfortu i musimy radzić sobie w inny sposób. Dlatego do wykrywania webshell-i w systemach Windows wykorzystamy Sysmon.
Co wykorzystamy?
Aplikacja WWW
Jako aplikację, na której zaprezentujemy działanie webshell-i jest DVWA[2] czyli Damn Vulnerable Web Application. Jest to aplikacja WWW oparta na PHP i MySQL umożliwiająca zapoznanie się z bezpieczeństwem aplikacji webowych poprzez umieszczone w niej celowo podatności i typowych pomyłek w kodzie.
Webshell
W niniejszych artykułach wykorzystamy 2 webshell-e. Różnią się od siebie sposobem obsługi oraz poziomem skomplikowania kodu.
- C99Shell[3] – fork webshell-a PHP, który był wykorzystywany w przeszłości m.in. w atakach na WordPress zarządzany poprzez panel WWW.
- easy-simple-php-webshell[4] – kod prostego webshell, który poddamy lekkiej modyfikacji dodając prostą obfuskację przekazywanych komend w requestach – wykorzystamy base64, jak w kodzie poniżej.
Webshell – upload na atakowany serwer
W celu wgrania na serwer wykorzystamy 2 podatności:
- brak poprawnej weryfikacji i sanityzacji wgrywanego pliku, np. poprzez wgranie samego pliku zawierającego webshell, wykorzystamy tu C99Shell:
następnie wystarczy wejść pod wskazany link, a naszym oczom ukaże się panel np.:
2. bardziej zaawansowany sposób (jeżeli strona posiada walidację typu wgrywanego pliku), ze względu na mały rozmiar użyjemy tym razem easy-simple-php-webshell:
- najpierw dołączymy kod webshell do jakiegoś poprawnego pliku obrazka:
- poprzez formularz uploadu wgramy powyższy plik na serwer:
- następnie wykorzystamy podatność LFI w aplikacji (zakładka File Inclusion) na już wgranym pliku:
gdzie „V2hvYW1pICYmIGRpcg==” jest to komenda „whoami && dir” w base64.
Jako odpowiedź otrzymujemy:
Widzimy że na stronie (poprzez brak odpowiedniego escapowania zawartości) został zaczytany i zinterpretowany wgrany przez nas kod webshell wraz z komenda, którą wprowadziliśmy jako zmienną.
Windows, sysmon i webshell
Wiemy na czym zależy atakującemu – na umieszczeniu pliku ze swoim kodem, a także na wykonywaniu poleceń. Wobec tego przejdźmy do wykrywania takich zdarzeń na naszym serwerze WWW.
Poszczególne konfiguracje wczytywać będziemy przy wykorzystaniu komendy
Podczas tworzenia dedykowanej konfiguracji Sysmon-a warto uwzględnić w niej pozostałe typy zdarzeń i wyłączyć ich monitorowanie, tak by nie zaciemniać analizowanych przypadków.
Np. poniżej przykład wyłączenia monitorowania zdarzeń dla zakończenia procesu:
W przykładowych konfiguracjach nie będziemy dołączali tych wyjątków by podkreślać jedynie najważniejsze elementy konfiguracji, jednak na naszym środowisku warto je zastosować.
W niniejszym artykule poruszymy tylko kilka typów zdarzeń dotyczących Sysmon, jednak warto poznać co potrafi to narzędzie. W linkach[5] znajdziemy przydatne informacje i konfiguracje, które warto poznać.
Wykrywanie nowych plików i usunięcie istniejących
Dzięki Sysmon możemy monitorować powstawanie nowych plików w lokalizacji, gdzie znajdują się pliki strony. Zdarzenia to umożliwiające:
- EventID 11 – FileCreate
- EventID 26 – FileDeleteDetected.
Zobaczmy zatem co dzieje się w plikach naszej testowej aplikacji DVWA.
W związku z tym zastosujemy konfigurację wykrywającą nowe pliki w „root” strony:
Przykładowe zdarzenia dla ww. reguły:
W zrzutach z logu widzimy zarówno zapisu i usunięcia do folderu tymczasowego plików uploadowanych (pierwsze 2 screeny). Dla tej lokalizacji należałoby jeszcze doprecyzować działanie filtrów Sysmon.
W trzecim przypadku widnieje z kolei zapis plików, którego źródłem było działanie w webshell, plik ev.dll.
Niestety nie wszystkie zdarzenia muszą być zalogowane przez Sysmon. Zdarzają się przypadki w których nie będzie śladu po logu utworzenia pliku np. gdy AV wykryje złośliwy plik[6].
Wykonywanie poleceń
Sysmon-em możemy także wykrywać podejrzane procesy których rodzicem jest proces odpowiedzialny za usługę WWW. Skupimy się zatem na EventID 1 – czyli Process creation.
W pierwszym etapie warto sprawdzić jakie procesy są efektem normalnego działania naszego systemu. Dla IIS możemy zacząć od następującej konfiguracji:
W wyniku działania web aplikacji powinniśmy otrzymać logi w dzienniku zdarzeń Sysmon (Microsoft-Windows-Sysmon/Operational) jak poniżej:
Który odpowiada drzewu procesów:
Po analizie normalnego działania naszej aplikacji możemy zatem dodać ten proces do wyjątków, a także monitorować jego procesy potomne. Konfiguracja dla takiego przypadku powinna wygadać np. jak poniżej:
Dla ww. konfiguracji wykonamy działania na wgranych już webshell-ach. Podejrzane zdarzenia mogą wyglądać następująco:
W parametrze „CommandLine” w logu widzimy komendy, które wykonane zostały z poziomu webshell:
Przykładowe drzewo procesów dla wywołania poleceń z webshell-a:
Wnioski
Jak widać wykorzystując już podstawowe konfiguracje Sysmon jesteśmy w stanie wykrywać zachowania mogące świadczyć o eksploitacji naszej strony i wykorzystaniu webshell.
Rozbudowa kolejnej warstwy detekcji może to stanowić nieocenione źródło np. dla naszego zespołu IR działającego w ramach SOC. Jak zawsze w przypadku logów, warto zadbać o to by trafiały one też poza monitorowany serwer np. do systemu SIEM.
[1] https://attack.mitre.org/techniques/T1505/003/
[2] https://github.com/digininja/DVWA
[3] https://github.com/cermmik/C99-WebShell
[4] https://gist.github.com/joswr1ght/22f40787de19d80d110b37fb79ac3985
[5] https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
https://github.com/SwiftOnSecurity/sysmon-config
https://github.com/olafhartong/sysmon-modular
[6] https://github.com/trustedsec/SysmonCommunityGuide/blob/master/chapters/file-create.md