Como ya sabéis, Sysmon es una herramienta que tiene la capacidad de detectar muchos indicadores que genera un atacante como la creación de procesos, cambios en el registro, creación de archivos, entre muchas otras cosas.
Sysmon se compone de 2 piezas principales: un servicio del sistema y un driver. El driver proporciona al servicio información que el usuario procesa para su consumo. Tanto el servicio como los nombres del driver se pueden cambiar para ocultar que se está ejecutando Sysmon en el host.
Pues bien, para evadir la detección de Sysmon Matt Hand aka matterpreter ha publicado Shhmon, una herramienta escrita en C# que propone la descarga del driver de Sysmon por el usuario sin fltMC.exe mientras que el servicio continúa ejecutándose.
A pesar de que Sysmon puede cambiar el nombre del driver durante la instalación (Sysmon.exe -i -d $DriverName), por defecto se carga siempre con una altitud predefinida de 385201.
Nota: Para quien no le suene, Windows maneja un grupo de drivers de filtros y minifiltros del sistema de ficheros y, como podéis imaginar, el orden de su ejecución desde el boot del sistema es muy importante. La altitud del driver es el identificador único asignado por Microsoft que indica la posición del driver en relación con los otros en la pila o stack del sistemas de archivos.
Podemos usar las funciones proporcionadas en fltlib.dll (FilterFindFirst() y FilterFindNext()) para buscar un driver en 385201 y descargarlo. Esto es parecido a la funcionalidad de descarga mediante el comando fltMC.exe $DriverName, pero nos permite evadir el logging de la línea de comandos que Sysmon capturaría antes de descargar el driver.
Una vez encontrado el driver en la altitud 385201, para descargarlo el token del proceso actual debe tener SeLoadDriverPrivileges habilitado, que Shhmon se otorga a sí mismo usando advapi32!AdjustTokenPrivileges. Si todo es ok llamará a fltlib!FilterUnload con éxito.
En el caso de no encontrar el driver en la altitud 385201, recorrerá HKLM\SYSTEM\CurrentControlSet\Services en busca de una subclave "Sysmon Instance", repetiendo el proceso como se describía antes.
Uso
Shhmon.exe <hunt|kill>
Orientación defensiva
Esta técnica genera eventos interesantes que vale la pena investigar y correlacionar.
- Sysmon Event ID 255 - evento de error con una ID de DriverCommunication.
- Windows System Event ID 1 - Este evento también se generará al hacer el unload desde "FilterManager" indicando que el filtro del sistema de archivos (Versión 0.0, ) se descargó correctamente. No se observó que este evento se generara durante un reinicio normal del sistema.
- Windows Security Event ID 4672 - SeLoadDriverPrivileges siendo concedidos a una cuenta distinta de SYSTEM.
- Sysmon Event ID 1/Windows Security Event 4688 - Proceso anormal de alta integridad que se correlaciona con la descarga del driver. Este evento sería el último antes del error del driver en Sysmon.
Repo: https://github.com/matterpreter/Shhmon
Ref: https://posts.specterops.io/shhmon-silencing-sysmon-via-driver-unload-682b5be57650
Sysmon se compone de 2 piezas principales: un servicio del sistema y un driver. El driver proporciona al servicio información que el usuario procesa para su consumo. Tanto el servicio como los nombres del driver se pueden cambiar para ocultar que se está ejecutando Sysmon en el host.
Pues bien, para evadir la detección de Sysmon Matt Hand aka matterpreter ha publicado Shhmon, una herramienta escrita en C# que propone la descarga del driver de Sysmon por el usuario sin fltMC.exe mientras que el servicio continúa ejecutándose.
A pesar de que Sysmon puede cambiar el nombre del driver durante la instalación (Sysmon.exe -i -d $DriverName), por defecto se carga siempre con una altitud predefinida de 385201.
Nota: Para quien no le suene, Windows maneja un grupo de drivers de filtros y minifiltros del sistema de ficheros y, como podéis imaginar, el orden de su ejecución desde el boot del sistema es muy importante. La altitud del driver es el identificador único asignado por Microsoft que indica la posición del driver en relación con los otros en la pila o stack del sistemas de archivos.
Podemos usar las funciones proporcionadas en fltlib.dll (FilterFindFirst() y FilterFindNext()) para buscar un driver en 385201 y descargarlo. Esto es parecido a la funcionalidad de descarga mediante el comando fltMC.exe $DriverName, pero nos permite evadir el logging de la línea de comandos que Sysmon capturaría antes de descargar el driver.
Una vez encontrado el driver en la altitud 385201, para descargarlo el token del proceso actual debe tener SeLoadDriverPrivileges habilitado, que Shhmon se otorga a sí mismo usando advapi32!AdjustTokenPrivileges. Si todo es ok llamará a fltlib!FilterUnload con éxito.
En el caso de no encontrar el driver en la altitud 385201, recorrerá HKLM\SYSTEM\CurrentControlSet\Services en busca de una subclave "Sysmon Instance", repetiendo el proceso como se describía antes.
Uso
Shhmon.exe <hunt|kill>
Orientación defensiva
Esta técnica genera eventos interesantes que vale la pena investigar y correlacionar.
- Sysmon Event ID 255 - evento de error con una ID de DriverCommunication.
- Windows System Event ID 1 - Este evento también se generará al hacer el unload desde "FilterManager" indicando que el filtro del sistema de archivos
- Windows Security Event ID 4672 - SeLoadDriverPrivileges siendo concedidos a una cuenta distinta de SYSTEM.
- Sysmon Event ID 1/Windows Security Event 4688 - Proceso anormal de alta integridad que se correlaciona con la descarga del driver. Este evento sería el último antes del error del driver en Sysmon.
Repo: https://github.com/matterpreter/Shhmon
Ref: https://posts.specterops.io/shhmon-silencing-sysmon-via-driver-unload-682b5be57650
Comentarios
Publicar un comentario