Hola de nuevo a todos. Esta vez os traigo una herramienta muy útil para encontrar anomalías en los logs de Windows. Vamos a ello.

Esta nueva herramienta, que tiene muy poco tiempo de vida (Abril de 2021), se llama Zircolite. Esta está desarrollada en python3, y permite ejecutar reglas Sigma de manera muy rápida en los ficheros de log con formato EVTX.

Si conoces el funcionamiento de las reglas Sigma ve directo a la instalación de la herramienta: Instalación

¿Qué es una regla Sigma?

Antes de continuar, debe quedar claro el concepto de regla Sigma. Para el que conozca las reglas YARA es prácticamente el mismo concepto pero aplicado a ficheros de log. De hecho, en el repositorio oficial de las reglas Sigma se destaca de la siguiente manera:

Sigma is for log files what Snort is for network traffic and YARA is for files.

Traducción: SIGMA es para los ficheros de log lo que SNORT es para el tráfico de red y YARA es para los ficheros.

A continuación, os dejo el enlace al repositorio de Sigma: https://github.com/SigmaHQ/sigma

Por tanto, las reglas Sigma se ejecutan sobre un fichero de log con el objetivo de comprobar/detectar aquellas condiciones que se han establecido en la regla. Estas reglas han permitido crear y establecer una estructura o estándar que es fácil de interpretar por todos los miembros de la comunidad.

Para que quede más claro, veamos un ejemplo de regla Sigma:

title: Netcat The Powershell Version
id: bf7286e7-c0be-460b-a7e8-5b2e07ecc2f2
status: experimental
author: frack113
date: 2021/07/21
modified: 2021/10/16
description: Adversaries may use a non-application layer protocol for communication between host and C2 server or among infected hosts within a network
references:
    - https://nmap.org/ncat/
    - https://github.com/besimorhino/powercat
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1095/T1095.md
tags:
    - attack.command_and_control
    - attack.t1095
logsource:
    product: windows
    category: ps_module
    definition: PowerShell Module Logging must be enabled
detection:
    selection:
        ContextInfo|contains:
            - 'powercat '
            - 'powercat.ps1'
    condition: selection 
falsepositives:
    - Unknown
level: medium

En esta regla se pretende encontrar el patrón que hay definido en la sección selection, la cual está dentro del apartado detection. Dicho patrón pretende buscar las cadenas que contengan powercat o powercat.ps1. Cuando esto ocurra, la regla nos dirá que ha encontrado una coincidencia. Creo que con esto queda claro el funcionamiento de las reglas Sigma.

Por ultimo, comentar que las reglas se escriben en ficheros con extensión yml, estos ficheros posteriormente pueden ser convertido o “mapeados”. Por ejemplo, se pueden convertir en búsquedas para Elastic o SIEMs como Splunk.

Instalación de la herramienta

Para instalar la herramienta, debemos tener en nuestro sistema python3 y el gestor de paquete de python denominado pip3. Y además, la herramienta git. Para aquel que no lo tenga en su equipo, simplemente debe ejecutar el siguiente comando en el caso de los sistemas operativos basados en Debian:

sudo apt install python3 python3-pip git

Si tenemos el software mínimo necesario, podemos pasar a la instalación manual de la herramienta. Para ello, abrimos una terminal y nos desplazamos al directorio en el que queremos que se descargue la utilidad. Situados en el directorio deseado ejecutamos el siguiente comando:

git clone https://github.com/wagga40/Zircolite.git

Cuando este finalice, tendremos una nueva carpeta en el directorio denominada Zircolite. Accedemos a ella haciendo uso de nuestra terminal. Al hacerlo, si lanzamos el comando ls, veremos que existe un fichero denominado requirements.txt. Debemos abrir este fichero y editarlo, de forma que quede como se ve en la siguiente imagen. Esto es así porque si no se genera un error al instalar la librería evtx:

Fichero requirements.txt modificado

Tras modificar el fichero, instalamos las dependencias de la siguiente manera:

pip3 install -r requirements.txt

Si todo ha funcionado con éxito, ya podemos utilizar la herramienta sin problemas.

Ejemplo de uso

Para utilizar la herramienta, primero debemos tener a nuestra disposición ficheros EVTX con los que probar la utilidad. Para ello podemos descargarnos los ficheros de los siguientes repositorios:

En mi caso, en lugar de utilizar estos ficheros, voy a utilizar los logs de un CTF en el que participé no hace mucho. Os dejo por aquí el enlace a los CTFs del gran @antoniosanzalc: https://ctf.unizar.es/

Una vez tenemos los ficheros de log en nuestro equipo, podemos utilizar la herramienta de la siguiente manera:

python3 zircolite.py --evtx <EVTX_FOLDER/EVTX_FILE> --ruleset <Converted Sigma rules>

Como se puede ver en la sintaxis del comando, debemos indicarle la ruta en la que se encuentran los logs EVTX y las reglas Sigma a utilizar. Un dato curioso es que la herramienta proporciona las reglas transformadas en formato JSON, lo cual hace que el rendimiento mejore. Sin embargo, también existe la posibilidad de ejecutar las reglas Sigma tal cual. Pero habrá que indicar cuál es el fichero encargado de realizar el “mapping” de las reglas, y además, el rendimiento bajará. Es decir, tardara más en ejecutarse.

A continuación se muestra un ejemplo de ejecución de la herramienta:

Ejecución de Zircolite
Ejecución de Zircolite

Como se puede ver en la anterior imagen, solo ha tardado 23 segundos en analizar 149 ficheros de log. Entre ellos se encuentran los logs de Sysmon y los del sistema operativo Windows. Como se puede observar, devuelve un fichero JSON denominado detected_events.json, en el cual se encuentran los registros que han coincidido con las reglas Sigma utilizadas. En la imagen podemos ver qué reglas Sigma han dado resultados y la cantidad de registros que han detectado cada una de ellas. El aspecto del fichero JSON es el siguiente:

Ejemplo de los resultados obtenidos

Al llegar a este punto podemos pensar “¿Y no hay nada para poder visualizar los resultados mejor?🤔” (o por lo menos es lo que yo pensé). Y la respuesta es sí 😬👌.

Mini-Gui

La aplicación dispone de una pequeña interfaz gráfica que se puede utilizar a nivel local. Para poder utilizar la interfaz gráfica debemos descomprimir la estructura. Para ello, nos situamos en la carpeta de Zircolite y accedemos a la carpeta gui. Dentro de esta carpeta se encuentra un fichero llamado zircogui.zip. Simplemente descomprimimos el fichero zip, ya sea mediante el comando unzip o utilizando el método más cómodo para nosotros. Como resultado, dentro de la carpeta gui se crea una nueva carpeta denominada zircogui.

Ahora solo falta generar los datos para que la interfaz los pueda interpretar. Para ello debemos volver a ejecutar el comando anterior, pero esta vez le indicamos que queremos utilizar la plantilla de la interfaz gráfica y que queremos que nos guarde los resultados en un fichero denominado data.js. El nombre debe ser este, sino la interfaz no sabrá interpretarlo.

Por tanto, en mi caso el comando queda tal que así:

python zircolite.py --evtx ~/Descargas/ejemplo/LiveResponseData/CopiedFiles/eventlogs/Logs -r rules/rules_windows_generic.json --template templates/exportForZircoGui.tmpl --templateOutput data.js

Lo ejecutamos, y obtendremos un fichero data.js tras la ejecución. Este fichero, lo debemos copiar o mover a Zircolite/gui/zircogui, de forma que el contenido de esta carpeta queda así:

Contenido de la carpeta zircogui

Como se puede observar en la imagen, en la carpeta existe un fichero index.html. Simplemente debemos abrir este fichero con nuestro navegador web preferido y podremos observar los resultados que hemos generado:

Aspecto de la web

Como se puede apreciar, la web es capaz de clasificar los resultados por las técnicas de Mitre ATT&CK o por el nivel de criticidad de las reglas Sigma. Tras seleccionar cualquiera de estos filtros, se genera una tabla con los resultados que cumplen con la característica indicada.

Estos resultados que aparecen en la tabla pueden ser consultados en la propia interfaz, la cual nos deja poner filtros en cada columna, o pueden ser exportados a formato Excel o CSV. A partir de aquí, podemos elegir aquello que nos venga mejor.

Por ejemplo, por ver un poco el funcionamiento de la web, podemos seleccionar las alertas de criticidad alta, filtrar por la palabra powershell y si fuera necesario, filtrar los resultados de la columna que nos interese:

Filtros en las tablas

Conclusiones

Como se ha podido observar en el post, es una herramienta muy útil si tenemos que detectar anomalías en los logs. No obstante, el uso de este tipo de herramientas es solamente un apoyo más para el analista. Al final, este tipo de herramientas como Zircolite o Chainsaw (https://github.com/countercept/chainsaw) solo van a encontrar aquello que aparezca en las reglas Sigma y/o en los tipos de eventos que puedan procesar estas herramientas.

Es decir, estás utilidades no realizan la correlación ni extracción de inteligencia que sí que debe hacer un analista. Por ejemplo, la copia de un simple fichero que pueda contener información sensible, tal y como haría un usuario normal, no suele ser detectada por estas utilidades. O sea, estas herramientas no saben que el fichero “supermegahypertopsecret.docx” es un documento crítico que no debe salir bajo ningún concepto del equipo.

¿Qué quiero decir con esto? Que no nos quedemos solo con los resultados que devuelvan las herramientas de este tipo porque puede ser que nos perdamos cosas importantes.

Como se ha visto, la ejecución de esta herramienta se realiza en un momento y de una manera bastante simple. Además, puede detectar bastantes cosas con las que tirar del hilo en nuestra investigación que nosotros, quizás, hayas pasado por alto.

A mí, personalmente, es una herramienta que me ha gustado bastante. Espero que a vosotros también y que a partir de ahora la incorporéis en vuestra caja de herramientas.

Muchas gracias por vuestra atención. Saludos!