Demostración en vídeo del post
Phant0m es un proyecto que se encuentra disponible en Github que se encarga de «matar» los procesos de un sistema Windows que están vinculados con el Event Log. El objetivo de esto evidentemente es el de ocultar las actividades del atacante e impedir que quede registro de cualquier evento en el Event Log del sistema.
Una de las cosas que hay que saber para entender su funcionamiento es el funcionamiento de los procesos compartidos y el proceso Service Host (srvhost.exe) el cual es el encargado de agrupar uno o más servicios con el objetivo de reducir el consumo de recursos. Por ese motivo es tan habitual ver múltiples servicios del tipo «srvhost.exe» ejecutándose en un sistema Windows y de hecho, es una buena práctica que se viene implementando desde Windows 2000 y simplemente funciona, mejora el rendimiento ya que la creación de servicios en Windows es mucho más costosa que en sistemas basados en Unix. No obstante, esto ha traído consigo algunos otros problemas relacionados con la depuración y resolución de problemas, ya que si un proceso de este tipo «crashea» será más difícil saber la causa del error, dado que cualquiera de los procesos que están agrupados podría ser el responsable. Probablemente, este ha sido uno de los motivos por los que en sistemas Windows 10 este comportamiento ha cambiado y cada proceso se ejecuta en de forma separada (sin agrupación) lo que significa que habrá un mayor consumo de recursos pero será más fácil analizar lo que pasa en un proceso. No obstante hay que tener en cuenta que esto solo funciona si el entorno en el que se ejecuta Windows tiene más de 3,5 GB de RAM, de lo contrario se implementa el sistema de agrupación de servicios clásica.
Una vez entendido esto, se puede comprender mejor el objetivo de Phant0m y sus limitaciones. A grandes rasgos, Phant0m accede al Event Log y procede a encontrar el proceso responsable de dicho servicio, a continuación detecta y «mata» los hilos vinculados a dicho servicio. Por lo tanto, aunque el Event Log se sigue ejecutando en el sistema ya que no se ha matado el proceso principal, no hará su función principal que es la de recolectar los logs puesto que los hilos que hacen esa tarea no se encuentran en ejecución. Es una forma sutil de evitar la detección por medio del análisis de eventos en un sistema comprometido, sin embargo requiere privilegios elevados para poder realizar dicha operación, lo que significa que es una herramienta pensada para post-explotación en una campaña de Red Team que se encuentra en un estado avanzado.
Llegados a este punto, merece la pena mencionar que es una herramienta que se puede personalizar hasta cierto punto. Permite definir la técnica utilizada para detectar el proceso que ejecuta el servicio de Event Log (utilizando SCM o WMI) y posteriormente matar los hilos vinculados. En la primera técnica (usando SCM) se utiliza la función NtQueryInformationThread para obtener la dirección TEB del proceso, leer el campo SubProcessTag y finalmente, matar todos los hilos relacionados con el Event Log. En la segunda técnica la herramienta se encarga simplemente de detectar las DLLs que están asociadas con los hilos filtrando por «wevtsvc.dll», que es precisamente la DLL utilizada por el Event Log y a continuación, los hilos que cumplen con dicho filtro se interrumpen. Como se puede ver es una herramienta que no es para nada compleja, sin embargo es necesario descargar el proyecto (solución) y compilar con Visual Studio .NET, de esta manera se podrá generar un EXE o DLL que luego se podrá transferir y ejecutar el sistema comprometido.
Como se comentaba anteriormente, en el fichero main.cpp se puede definir la técnica de detección que la herramienta utilizará. A continuación, se debe compilar y se generará el binario correspondiente (EXE o DLL). Es una herramienta orientada a procesos de post-explotación en donde ya se cuenta con un nivel de acceso con privilegios elevados en el sistema, evidentemente esto es requerido para poder acceder y manipular un proceso tan importante como el Event Log. Si se ejecuta desde una shell sin privilegios suficientes aparecerá un mensaje indicando que no es posible realizar la acción.
Esta herramienta no recibe ningún tipo de argumento por línea de comandos, de hecho, tal como se puede apreciar en el código solamente consta del fichero «main.cpp» desde donde se realiza todo el trabajo aplicando las técnicas descritas anteriormente. No es una herramienta compleja pero la idea que se implementa es muy útil en procesos de post-explotación para evitar dejar rastros en el sistema comprometido.
Tal como se aprecia en la imagen anterior, detecta el PID del servicio Event Log y posteriormente, aplica la técnica seleccionada para interrumpir los threads que están relacionados con dicho servicio.
Por último, en Empire Framework hay un módulo para post-explotación que ejecuta Phant0m en el sistema comprometido sin necesidad de compilar el proyecto ni subir nada, otra de las «maravillas» que hace Empire Framework 🙂
Un saludo y Happy Hack!
Adastra.