
Windows Event Log Killer

Svchost è essenziale nell'implementazione dei cosiddetti processi di servizio condivisi, in cui un numero di servizi può condividere un processo al fine di ridurre il consumo di risorse. Raggruppare più servizi in un unico processo conserva risorse di calcolo, e questa considerazione era di particolare interesse per i progettisti di NT perché la creazione di processi Windows richiede più tempo e consuma più memoria rispetto ad altri sistemi operativi, ad esempio nella famiglia Unix.1
Ciò significa brevemente che; Sui sistemi operativi Windows, svchost.exe gestisce i servizi e i servizi sono effettivamente eseguiti come thread all'interno di svchost.exe. Phant0m si rivolge al servizio Event Log e, trovando il processo responsabile del servizio Event Log, rileva e uccide i thread responsabili del servizio Event Log. Pertanto, mentre il servizio Event Log sembra essere in esecuzione nel sistema (perché Phant0m non ha ucciso il processo), in realtà non viene eseguito (perché Phant0m ha ucciso i thread) e il sistema non raccoglie i log.

Phant0m utilizza due diverse opzioni per rilevare l'ID del processo del servizio Event Log. La prima è rilevare tramite SCM (Service Control Manager) e la seconda tramite WMI (Windows Management Instrumentation). Con quale metodo si desidera che Phant0m rilevi l'ID del processo del servizio Event Log, modificare le seguenti righe nel file main.cpp.
Ad esempio, se si desidera che l'ID del processo venga rilevato tramite SCM, modificare come segue. (Non impostare tutti i valori contemporaneamente, impostare solo la tecnica desiderata.)
// Sezione di configurazione delle tecniche di rilevamento PID.
#define PID_FROM_SCM 1 // Se impostato a 1, il PID del servizio Event Log viene ottenuto dal Service Manager.
#define PID_FROM_WMI 0 // Se impostato a 1, il PID del servizio Event Log viene ottenuto da WMI.
Ad esempio, se si desidera che i thread vengano uccisi utilizzando la Tecnica-1, modificare come segue. (Non impostare tutti i valori contemporaneamente, impostare solo la tecnica desiderata.)
// Sezione di configurazione delle tecniche di rilevamento e uccisione TID.
#define KILL_WITH_T1 1 // Se impostato a 1, verrà utilizzata la Tecnica-1. Per maggiori informazioni; https://github.com/hlldz/Phant0m
#define KILL_WITH_T2 0 // Se impostato a 1, verrà utilizzata la Tecnica-2. Per maggiori informazioni; https://github.com/hlldz/Phant0m
Phant0m utilizza due diverse opzioni per rilevare e uccidere i thread del servizio Event Log.
Quando ogni servizio viene registrato su una macchina con Windows Vista o successivo, Service Control Manager (SCM) assegna un tag numerico univoco al servizio (in ordine crescente). Quindi, al momento della creazione del servizio, il tag viene assegnato al TEB del thread principale del servizio. Questo tag verrà poi propagato a ogni thread creato dal thread principale del servizio. Ad esempio, se il thread del servizio Foo crea un thread di lavoro RPC (nota: i thread di lavoro RPC non utilizzano il meccanismo del pool di thread, ne parleremo più avanti), quel thread avrà il Service Tag del servizio Foo.2
Quindi, in questa tecnica Phant0m rileva i thread del servizio Event Log utilizzando l'API NtQueryInformationThread per ottenere l'indirizzo TEB del thread e leggere SubProcessTag dal TEB. Quindi uccide i thread relativi al servizio Event Log. I codici per questa tecnica si trovano nel file technique_1.h.
In questa tecnica, Phant0m rileva i nomi delle DLL associate ai thread. Il servizio Windows Event Log utilizza wevtsvc.dll. Il percorso completo è %WinDir%\System32\wevtsvc.dll. Se il thread sta utilizzando quella DLL, allora è il thread del servizio Windows Event Log e Phant0m uccide il thread. I codici per questa tecnica si trovano nel file technique_2.h.
Puoi utilizzare Phant0m sia come EXE standalone che come DLL Riflessiva. Apri il progetto in Microsoft Visual Studio, effettua le impostazioni (seleziona le tecniche di rilevamento e uccisione) e compila. Puoi anche utilizzare la versione DLL Riflessiva con Cobalt Strike; per questo c'è un file Aggressor Script (phant0m.cna) nel repository.

Il metodo Fork and inject è stato utilizzato con bdllspawn nel tipo di esecuzione di Aggressor Script (phant0m.cna) per Cobalt Strike. Se desideri iniettare Phant0m nel tuo processo esistente ed eseguirlo, puoi consultare questo progetto (https://github.com/rxwx/cs-rdll-ipc-example) e puoi farlo facilmente. Puoi anche convertire il codice in DLL e poi in Shellcode con Donut.
NOTA: Il progetto supporta solo l'architettura x64.