Oko w oko z webshell – różne podejścia do detekcji

29 Marca 2022

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.

  1. 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.
  2. 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:

  1. 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

Opublikowane przez: Katarzyna Chojecka

Inne artykuły_