
# Windows Event Log Killer

Svchost ist essenziell für die Implementierung sogenannter Shared-Service-Prozesse, bei denen mehrere Dienste einen Prozess gemeinsam nutzen können, um den Ressourcenverbrauch zu senken. Die Gruppierung mehrerer Dienste in einem einzigen Prozess spart Rechenressourcen – eine Überlegung, die für die NT-Entwickler von besonderer Bedeutung war, da das Erstellen von Windows-Prozessen mehr Zeit in Anspruch nimmt und mehr Speicher verbraucht als in anderen Betriebssystemen, z. B. in der Unix-Familie.1
Das bedeutet kurz gesagt: Unter Windows-Betriebssystemen verwaltet svchost.exe die Dienste, und die Dienste laufen tatsächlich als Threads innerhalb der svchost.exe-Prozesse. Phant0m zielt auf den Eventlog-Dienst ab, findet den für den Eventlog-Dienst verantwortlichen Prozess, erkennt und beendet die Threads, die für den Eventlog-Dienst zuständig sind. Dadurch scheint der Eventlog-Dienst im System noch zu laufen (da Phant0m den Prozess nicht beendet hat), läuft aber tatsächlich nicht mehr (da Phant0m die Threads beendet hat), und das System sammelt keine Logs mehr.

Phant0m verwendet zwei verschiedene Optionen, um die Prozess-ID des Eventlog-Dienstes zu ermitteln. Die erste ist die Erkennung über den SCM (Service Control Manager) und die zweite die Erkennung über WMI (Windows Management Instrumentation). Mit welcher Methode Phant0m die Prozess-ID des Eventlog-Dienstes erkennen soll, legen Sie durch Ändern der folgenden Zeilen in der Datei main.cpp fest.
Wenn Sie beispielsweise möchten, dass die Prozess-ID über den SCM erkannt wird, sollten Sie die Einstellungen wie folgt vornehmen. (Setzen Sie nicht alle Werte gleichzeitig, sondern nur die gewünschte Technik.)
// Konfigurationsabschnitt für PID-Erkennungstechniken.
#define PID_FROM_SCM 1 // Wenn auf 1 gesetzt, wird die PID des Eventlog-Dienstes vom Dienstmanager bezogen.
#define PID_FROM_WMI 0 // Wenn auf 1 gesetzt, wird die PID des Eventlog-Dienstes von WMI bezogen.
Wenn Sie beispielsweise möchten, dass Threads mit Technik 1 beendet werden, sollten Sie die Einstellungen wie folgt vornehmen. (Setzen Sie nicht alle Werte gleichzeitig, sondern nur die gewünschte Technik.)
// Konfigurationsabschnitt für TID-Erkennungs- und -Beendigungstechniken.
#define KILL_WITH_T1 1 // Wenn auf 1 gesetzt, wird Technik 1 verwendet. Weitere Informationen: https://github.com/hlldz/Phant0m
#define KILL_WITH_T2 0 // Wenn auf 1 gesetzt, wird Technik 2 verwendet. Weitere Informationen: https://github.com/hlldz/Phant0m
Phant0m verwendet zwei verschiedene Optionen, um die Threads des Eventlog-Dienstes zu erkennen und zu beenden.
Wenn ein Dienst auf einem Rechner mit Windows Vista oder höher registriert wird, weist der Dienstkontroll-Manager (SCM) dem Dienst einen eindeutigen numerischen Tag zu (in aufsteigender Reihenfolge). Dieser Tag wird dann zum Zeitpunkt der Diensterstellung dem TEB des Hauptdienst-Threads zugewiesen. Anschließend wird dieser Tag an jeden Thread vererbt, der vom Hauptdienst-Thread erstellt wird. Wenn beispielsweise der Foo-Dienst-Thread einen RPC-Arbeiter-Thread erstellt (Hinweis: RPC-Arbeiter-Threads verwenden nicht den Thread-Pool-Mechanismus, dazu später mehr), erhält dieser Thread den Service-Tag des Foo-Dienstes.2
Bei dieser Technik erkennt Phant0m also die Threads des Eventlog-Dienstes, indem es mit der API NtQueryInformationThread die TEB-Adresse des Threads abruft und das SubProcessTag aus dem TEB ausliest. Anschließend werden die Threads des Eventlog-Dienstes beendet. Der Code für diese Technik befindet sich in der Datei technique_1.h.
Bei dieser Technik erkennt Phant0m die Namen von DLLs, die mit den Threads verknüpft sind. Der Windows-Eventlog-Dienst verwendet wevtsvc.dll. Der vollständige Pfad ist %WinDir%\System32\wevtsvc.dll. Wenn ein Thread diese DLL verwendet, handelt es sich um einen Thread des Windows-Eventlog-Dienstes, und Phant0m beendet ihn. Der Code für diese Technik befindet sich in der Datei technique_2.h.
Sie können Phant0m sowohl als eigenständige EXE als auch als Reflektive DLL verwenden. Öffnen Sie das Projekt in Microsoft Visual Studio, nehmen Sie die Einstellungen vor (Auswahl der Erkennungs- und Beendigungstechniken) und kompilieren Sie es. Die Reflektive DLL-Version kann auch mit Cobalt Strike verwendet werden; dazu befindet sich eine Aggressor-Script-Datei (phant0m.cna) im Repository.

Bei der Ausführungsart des Aggressor-Scripts (phant0m.cna) für Cobalt Strike wurde die Fork-and-Inject-Methode mit bdllspawn verwendet. Wenn Sie Phant0m in Ihren vorhandenen Prozess injizieren und ausführen möchten, können Sie dieses Projekt (https://github.com/rxwx/cs-rdll-ipc-example) überprüfen und dies einfach umsetzen. Sie können den Code auch in eine DLL und dann mit Donut in Shellcode umwandeln.
HINWEIS: Das Projekt unterstützt nur die x64-Architektur.