
Tueur de journaux d'événements Windows

Svchost est essentiel dans la mise en œuvre des processus de services partagés, où plusieurs services peuvent partager un processus afin de réduire la consommation de ressources. Regrouper plusieurs services dans un seul processus économise les ressources informatiques, et cette considération était particulièrement importante pour les concepteurs de NT car la création de processus Windows prend plus de temps et consomme plus de mémoire que dans d'autres systèmes d'exploitation, par exemple dans la famille Unix.1
Cela signifie brièvement que ; Sous les systèmes d'exploitation Windows, svchost.exe gère les services et les services s'exécutent en réalité sous forme de threads dans svchost.exe. Phant0m cible le service de journal des événements et, trouvant le processus responsable de ce service, il détecte et tue les threads responsables du service de journal des événements. Ainsi, le service de journal des événements semble toujours en cours d'exécution dans le système (car Phant0m n'a pas tué le processus), mais il ne fonctionne pas réellement (car Phant0m a tué les threads) et le système ne collecte pas les journaux.

Phant0m utilise deux options différentes pour détecter le PID du service de journal des événements. La première consiste à détecter via le SCM (Service Control Manager) et la seconde via WMI (Windows Management Instrumentation). Pour choisir la méthode avec laquelle vous voulez que Phant0m détecte le PID du service de journal des événements, modifiez les lignes suivantes dans le fichier main.cpp.
Par exemple, si vous voulez que le PID soit détecté via SCM, vous devez le modifier comme suit. (Ne définissez pas toutes les valeurs en même temps, définissez uniquement la technique que vous souhaitez.)
// PID detection techniques configuration section.
#define PID_FROM_SCM 1 // If you set it to 1, the PID of the Event Log service is obtained from the Service Manager.
#define PID_FROM_WMI 0 // If you set it to 1, the PID of the Event Log service is obtained from the WMI.
Par exemple, si vous voulez que les threads soient tués en utilisant la Technique-1, vous devez le modifier comme suit. (Ne définissez pas toutes les valeurs en même temps, définissez uniquement la technique que vous souhaitez.)
// TID detection and kill techniques configuration section.
#define KILL_WITH_T1 1 // If you set it to 1, Technique-1 will be use. For more information; https://github.com/hlldz/Phant0m
#define KILL_WITH_T2 0 // If you set it to 1, Technique-2 will be use. For more information; https://github.com/hlldz/Phant0m
Phant0m utilise deux options différentes pour détecter et tuer les threads du service de journal des événements.
Lorsque chaque service est enregistré sur une machine exécutant Windows Vista ou ultérieur, le Service Control Manager (SCM) attribue une balise numérique unique au service (dans l'ordre croissant). Ensuite, au moment de la création du service, la balise est affectée au TEB du thread principal du service. Cette balise sera ensuite propagée à chaque thread créé par le thread principal du service. Par exemple, si le thread du service Foo crée un thread de travail RPC (note : les threads de travail RPC n'utilisent pas le mécanisme de pool de threads, nous y reviendrons plus tard), ce thread aura la balise de service du service Foo.2
Ainsi, dans cette technique, Phant0m détecte les threads du service de journal des événements en utilisant l'API NtQueryInformationThread pour obtenir l'adresse TEB du thread et lire le SubProcessTag depuis le TEB. Ensuite, il tue les threads liés au service de journal des événements. Les codes pour cette technique se trouvent dans le fichier the technique_1.h.
Dans cette technique, Phant0m détecte les noms des DLL associées aux threads. Le service de journal des événements Windows utilise wevtsvc.dll. Le chemin complet est %WinDir%\System32\wevtsvc.dll. Si le thread utilise cette DLL, c'est un thread du service de journal des événements Windows et Phant0m le tue. Les codes pour cette technique se trouvent dans le fichier the technique_2.h.
Vous pouvez utiliser Phant0m à la fois en tant qu'EXE autonome et en tant que DLL réflective. Ouvrez le projet dans Microsoft Visual Studio, effectuez les réglages (sélectionnez les techniques de détection et d'arrêt) et compilez. Vous pouvez également utiliser la version DLL réflective avec Cobalt Strike, pour cela il y a un fichier de script Aggressor (phant0m.cna) dans le dépôt.

La méthode fork and inject a été utilisée avec bdllspawn dans le type d'exécution du script Aggressor (phant0m.cna) pour Cobalt Strike. Si vous voulez injecter Phant0m dans votre processus existant et l'exécuter, vous pouvez consulter ce projet (https://github.com/rxwx/cs-rdll-ipc-example) et le faire facilement. Vous pouvez également convertir le code en DLL puis en Shellcode avec Donut.
NOTE : Le projet ne supporte que l'architecture x64.