O sposobach ominięcia zabezpieczeń systemów Microsoft Windows, pisaliśmy wielokrotnie. W tym o możliwością wyłączenia zapisywania aktywności w Dzienniku Zdarzeń. Na przykład modyfikując jeden wpis w rejestrze możemy wyłączyć dostęp do logów generowanych przez system w Dzienniku Zdarzeń (ang. Microsoft Event Log). Tym razem opiszemy narzędzie o nazwie Phant0m umożliwiające blokadę tworzenia takich logów w systemie.


Phant0m

Phant0m to narzędzie/biblioteka dll stworzona przez Halil Dalabasmaz’a. Celuje w usługę Dziennika zdarzeń (ang. Event Log). Po uruchomieniu znajduje proces odpowiedzialny za działanie usługi, wykrywa i „zabija” w systemie wszystkie jego wątki. W konsekwencji Dziennik zdarzeń wydaje się działać (ponieważ Phant0m nie ubija jego procesu), ale w rzeczywistości nie działa (ponieważ Phant0m ubił jedynie wątki), a system nie gromadzi dzienników zdarzeń. Stanowi to zagrożenie dla bezpieczeństwa, ponieważ z logów generowanych przez system Windows korzysta do analizy i monitorowania wiele rozwiązań do bezpieczeństwa informatycznego w tym rozwiązania klasy SIEM.


Jak to działa?

Przed opisaniem narzędzia Phant0m warto wspomnieć kilka słów o procesie Svchost.
Svchost w systemie Windows jest niezbędny przy wdrażaniu tak zwanych procesów usług wspólnych, w których wiele serwisów może współdzielić proces w celu zmniejszenia zużycia zasobów. Grupowanie wielu usług w jeden proces oszczędza zasoby obliczeniowe, a ta uwaga była szczególnie ważna dla projektantów NT, ponieważ tworzenie procesów Windows zajmuje więcej czasu i zużywa więcej pamięci niż w innych systemach operacyjnych, m.in. w rodzinie Unix’ów.
Oznacza to w skrócie, że w systemach operacyjnych Windows, svchost.exe zarządza usługami, a usługi faktycznie działają pod svchost.exe jako wątki.

Phant0m używa dwóch różnych opcji do wykrywania identyfikatora procesu usługi dziennika zdarzeń. Pierwszym jest wykrywanie za pomocą SCM (Service Control Manager), a drugim jest wykrywanie za pośrednictwem WMI (Windows Management Instrumentation).

Zasadza działania narzędzia lub biblioteki Phant0m

To, za pomocą, której metody Phant0m ma wykrywać identyfikator procesu usługi Dziennik zdarzeń, zależy od ustawień, które skonfigurujemy przed kompilacją narzędzia w następujących wierszach pliku main.cpp.

// Sekcja konfiguracji technik detekcji PID.

#define PID_FROM_SCM 1
// Jeśli ustawisz go na 1, PID usługi Dziennika zdarzeń jest uzyskiwany z Menedżera usług.

#define PID_FROM_WMI 0
// Jeśli ustawisz go na 1, PID usługi Dziennika zdarzeń jest uzyskiwany z WMI.

Na przykład, jeśli chcemy, aby identyfikator procesu był wykrywany przez SCM, powinniśmy go edytować w następujący sposób. (Nie ustawiaj wszystkich wartości jednocześnie, ustaw tylko jedną technikę, którą chcesz.)

// Sekcja wykrywania TID i konfiguracji technik zabijania.

#define KILL_WITH_T1 1
//Jeśli ustawisz ją na 1, zostanie użyta Technika-1.

#define KILL_WITH_T2 0
// Jeśli ustawisz ją na 1, zostanie użyta Technika-2.


Opis pierwszej techniki detekcji PID

Gdy każda usługa jest zarejestrowana na komputerze z systemem Windows Vista lub nowszym, Menedżer sterowania usługami (SCM) przypisuje do usługi unikalny znacznik numeryczny (w kolejności rosnącej). Następnie, w czasie tworzenia usługi, tag jest przypisywany do TEB głównego wątku usługi. Ten znacznik będzie następnie propagowany do każdego wątku utworzonego przez główny wątek usługi. Na przykład, jeśli wątek usługi Foo tworzy wątek roboczy RPC (uwaga: wątki robocze RPC nie używają mechanizmu puli wątków więcej w innych artykułach), ten wątek będzie miał znacznik serwisowy usługi Foo.

Tak więc w tej technice Phant0m wykryje wątki usługi Event Log za pomocą interfejsu API NtQueryInformationThread, aby uzyskać adres TEB wątku i odczytać SubProcessTag z TEB. Następnie zabija wątki związane z usługą Dziennika zdarzeń.


Opis drugiej techniki detekcji PID

W tej technice Phant0m wykrywa nazwy bibliotek DLL powiązanych z wątkami. Usługa dziennika zdarzeń systemu Windows używa pliku wevtsvc.dll. Pełna ścieżka to %WinDir%\System32\wevtsvc.dll. Jeśli wątek używa tej biblioteki DLL, jest to wątek usługi dziennika zdarzeń systemu Windows, a następnie Phant0m zabija wątek.


Uruchomienie Phant0m

Phant0m występuje jako samodzielny program EXE oraz jako bibloteka (Reflective DLL). Źródła dostępne są Visual C++. UWAGA: Projekt obsługuje tylko architekturę x64.

W celu kompilacji narzędzia należy użyć Microsoft Visual Studio i zmienić w ustawieniach pliku „main.cpp” technikę wykrywania i zabijania procesów. Następnie kompilujemy narzędzie do EXE lub DLL

Podziel się z innymi tym artykułem!