Image
SYSMON para monitorizarlos a todos.

SYSMON para monitorizarlos a todos 2/3


Instalación de Sysmon

¡Hola a todos! Hoy retomaremos la temática del post anterior. Lo primero que voy a explicar es cómo instalar el Sysmon.

La instalación la vamos a hacer en los equipos Windows. Sysmon requiere un fichero de configuración para que determine qué tipos de eventos recoger, cuáles no y dónde podremos realizar excepciones con el fin de no generar eventos que no queramos recibir. Para una primera toma de contacto, hemos empleado el fichero de configuración obtenido de este repositorio:

https://github.com/olafhartong/sysmon-modular

El fichero de configuración se puede editar con la herramienta Sysmon Shell, que se puede descargar desde:

https://github.com/nshalabi/SysmonTools

Además, esta configuración contiene muchos tipos de eventos etiquetados con las técnicas y tácticas de la matriz de MITRE.

En esta prueba, vamos a instalar Sysmon directamente en nuestro cliente Windows 10, aunque si se desea instalar en muchos equipos, se puede realizar la instalación mediante GPO.

La herramienta Sysmon se puede descargar desde:

https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon

Hemos descargado la versión 10.2, la cual añade la posibilidad de registrar todas las peticiones DNS que realice la máquina, pudiendo aplicar filtros sobre dominios que no nos interesen registrar. Para ello, tenemos que añadir al fichero de configuración la siguiente directiva dentro de ‘‘<EventFiltering>’:

<DnsQuery onmatch="exclude">
</DnsQuery>

Dentro, podremos definir exclusiones de nombres de dominio que no queramos registrar.Una vez listo el fichero de configuración y el instalador de Sysmon, se instala en la máquina de la siguiente manera:

sysmon.exe -accepteula -i sysmonconfig.xml

Si todo va bien, se empezarán a registrar eventos de Sysmon en la ruta Microsoft-Windows-Sysmon/Operational

Ahora, solo nos falta añadir una nueva suscripción al servidor WEC para recoger estos logs del cliente y enviarlos junto con el resto de logs. Para ello, tenemos que añadir Microsoft-Windows-Sysmon/Operational en la lista de “Registros de eventos”, y los enviamos junto con el resto.

Para que se pueda enviar también este registro, necesitamos añadir permisos al usuario “Network Service”. Para ello, tenemos que añadir una clave de registro, que podremos definir como una política en nuestro directorio activo. Necesitaremos coger la cadena ‘channelAccess’ actual e incluirla en un registro añadiendo también “(A;;0x1;;;NS)”. Para obtener el channelAccess de Sysmon lanzamos el siguiente comando:

wevutil gl Microsoft-Windows-Sysmon/Operational

Y creamos una política con una clave de registro del siguiente modo:

Una vez hecho esto, y recargado las GPO, ya deberían empezar a entrar eventos de Sysmon dentro del registro que hayamos definido en la suscripción, en nuestro caso, Eventos reenviados.

Con esto, queda terminada la recogida y reenvío de eventos desde un cliente Windows hacia un servidor Windows Event Collector.


Configuración de Winlogbeat


Para recoger los logs de un sistema Microsoft Windows y enviarlos a un ElasticSearch, la mejor forma es a través de la herramienta Winlogbeat. Al usar esta herramienta, podemos enviar todos los logs en formato EVTX directamente a un Elasticsearch, sin emplear elementos intermedios como Logstash. Además, Winlogbeat tiene mecanismos de gestión de colas para manejar de forma eficiente momentos de grandes picos de envío de eventos.

Como hemos comentado antes, el fichero de configuración de Sysmon tiene etiquetados algunos tipos de eventos con la técnica definida MITRE: <Image condition="image" name="technique_id=T1202,technique_name=Indirect Command Execution">wscript.exe</Image>

Esta información puede ser muy interesante, por lo que vamos a parsearla adecuadamente para que, posteriormente, podamos realizar búsquedas por las técnicas que hayan saltado. Como no disponemos de un Logstash para realizar este tipo de tarea, vamos a realizarlo mediante un Pipeline en un nodo de ElasticSearch. Los nodos de ElasticSearch tienen una funcionalidad llamada ‘Ingest Node’, que permite básicamente realizar ciertos cambios en el tratamiento de eventos sin necesidad de usar Logstash. No ofrece toda la funcionalidad de Logstash, pero para tareas sencillas es muy cómodo de emplear.

Lo primero que tenemos que hacer es crear nuestro pipeline. Si vemos en detalle la línea "technique_id=T1202,technique_name=Indirect Command Execution" , vemos que contiene la técnica y la táctica separadas por coma en un formato clave-valor. Con el siguiente pipeline, extraemos cada clave y creamos nuevos campos con el valor asociado a cada clave:

PUT _ingest/pipeline/mitre-parse-sysmon
{
  "description": "parser mitre sysmon",
  "version": 1,
  "processors": [
    {
      "kv": {
        "field": "winlog.event_data.RuleName",
        "field_split": ",",
        "value_split": "=",
        "ignore_missing": true
      }
    }
  ] 
}

Creamos el pipeline en la sección ‘Developer’ de Kibana. Una vez creado, configuraremos Winlogbeat. En el fichero de configuración ‘winlogbeat.yml’ tenemos que añadir el nuevo registro que queremos enviar a ElasticSearch, ‘Eventos reenviados’, indicar dónde se encuentra nuestro Elasticsearch, y añadir el nuevo pipeline, creado para que parsee la técnica recogida por Sysmon.

Para indicar a Winlogbeat que recoja los logs de ‘Eventos Reenviados’ , tenemos que añadir la siguiente línea dentro de winlogbeat.event_logs:

- name: ForwardedEvents

Ahora, nos queda definir el output de ElasticSearch:

output.elasticsearch:

# Array of hosts to connect to.

hosts: ["https://node1.local:9200"]

pipeline: "mitre-parse-sysmon"

protocol: "https"

username: ""

password: ""

ssl.enabled: true

ssl.certificate_authorities: ["ca.crt"]

Hemos añadido la línea ‘pipeline’, en la que decimos que ejecute ese pipeline para los eventos que indexe. Si el evento no tiene el campo ‘winlog.event_data.RuleName’ , no sucede nada, ya que hemos especificado "ignore_missing": true.

Ahora podemos probar que Winlogbeat funciona correctamente lanzándolo de la siguiente forma:

winlogbeat.exe -c winlogbeat.yml

Si no genera ningún error, los eventos comenzarán a indexarse en ElasticSearch. Recordaros que, para ver los eventos hay que crear un patrón de índice en Kibana que contenga el nombre del índice, en nuestro caso, se llama ‘winlogbeat-7.2.0-*’.

Vemos eventos indexados, y si nos fijamos en un evento de Sysmon, vemos como tienen creados los campos ‘tecnique_id’ y ‘technique_name’:

Con esta parte funcionando ya podemos empezar a generar logs y realizar nuestras hipótesis de detección.

Y hasta aquí hemos llegado por hoy. Espero que os haya gustado y que no os perdáis la tercera y última publicación sobre este tema.

¡Un saludo!


 

José Pablo Ferrero