Svchost es esencial en la implementación de los llamados procesos de servicios compartidos, donde varios servicios pueden compartir un proceso para reducir el consumo de recursos. Agrupar múltiples servicios en un solo proceso conserva recursos informáticos, y esta consideración fue de particular preocupación para los diseñadores de NT porque la creación de procesos de Windows lleva más tiempo y consume más memoria que en otros sistemas operativos, por ejemplo, en la familia Unix. 1
Esto significa brevemente que; En los sistemas operativos Windows, svchost.exe administra los servicios y los servicios en realidad se ejecutan bajo svchost.exe como subprocesos. Phant0m apunta al servicio de registro de eventos y, al encontrar el proceso responsable del servicio de registro de eventos, detecta y elimina los subprocesos responsables del servicio de registro de eventos. Por lo tanto, aunque el servicio de registro de eventos parece estar ejecutándose en el sistema (porque Phant0m no finalizó el proceso), en realidad no se ejecuta (porque Phant0m finalizó los subprocesos) y el sistema no recopila registros.
Phant0m utiliza dos opciones diferentes para detectar el ID de proceso del servicio de registro de eventos. El primero es detectar a través de SCM (Administrador de control de servicios) y el segundo es detectar a través de WMI (Instrumental de administración de Windows). Con qué método desea que Phant0m detecte el ID de proceso del servicio de registro de eventos, cambie las siguientes líneas en el archivo main.cpp.
Por ejemplo, si desea que el ID del proceso se detecte a través de SCM, debe editarlo de la siguiente manera. (No establezca todos los valores al mismo tiempo, configure solo la técnica que desee).
// 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.
Por ejemplo, si desea eliminar los hilos usando la Técnica-1, debe editarlo de la siguiente manera. (No establezca todos los valores al mismo tiempo, configure solo la técnica que desee).
// 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 utiliza dos opciones diferentes para detectar y eliminar los subprocesos del servicio de registro de eventos.
Cuando cada servicio se registra en una máquina que ejecuta Windows Vista o posterior, el Administrador de control de servicios (SCM) asigna una etiqueta numérica única al servicio (en orden ascendente). Luego, en el momento de la creación del servicio, la etiqueta se asigna al TEB del hilo de servicio principal. Esta etiqueta luego se propagará a cada hilo creado por el hilo de servicio principal. Por ejemplo, si el subproceso del servicio Foo crea un subproceso de trabajo RPC (nota: los subprocesos de trabajo RPC no usan el mecanismo del grupo de subprocesos, hablaremos de eso más adelante), ese subproceso tendrá la etiqueta de servicio del servicio Foo. 2
Entonces, en esta técnica, Phant0m detectará subprocesos del servicio de registro de eventos con la API NtQueryInformationThread para obtener la dirección TEB del subproceso y leer el SubProcessTag del TEB. Luego elimina los subprocesos relacionados con el servicio de registro de eventos. Los códigos para esta técnica se encuentran en the technique_1.h
.
En esta técnica, Phant0m detecta los nombres de las DLL asociadas con los subprocesos. El servicio de registro de eventos de Windows utiliza wevtsvc.dll
. La ruta completa es %WinDir%System32wevtsvc.dll
. Si el subproceso utiliza esa DLL, es el subproceso del servicio de registro de eventos de Windows y luego Phant0m elimina el subproceso. Los códigos para esta técnica se encuentran en the technique_2.h
.
Puede utilizar Phant0m como EXE independiente y como DLL reflectante. Abra el proyecto en Microsoft Visual Studio, realice la configuración (seleccione las técnicas de detección y eliminación) y compílelo. También puedes usar la versión reflectante DLL con Cobalt Strike, para esto hay un archivo Aggressor Script (phant0m.cna) en el repositorio.
El método de bifurcación e inyección se utilizó con bdllspawn
en el tipo de ejecución de Aggressor Script (phant0m.cna) para Cobalt Strike. Si desea inyectar Phant0m en su proceso existente y ejecutarlo, puede revisar este proyecto (https://github.com/rxwx/cs-rdll-ipc-example) y podrá hacerlo fácilmente. También puedes convertir el código a DLL y luego a Shellcode con Donut.
NOTA: El proyecto solo admite arquitectura x64.