Cómo detectar malware con reglas de Suricata

Una breve introducción a cómo implementar reglas en Suricata para detectar códigos maliciosos en una red.

Una breve introducción a cómo implementar reglas en Suricata para detectar códigos maliciosos en una red.

Suricata es más que un IDS, básicamente se trata de un motor de red de código abierto y multiplataforma de alto rendimiento que combina las tecnologías IDS (Intrusion Detection System), IPS (Intrusion Prevention System) y NSM (Network Security Monitoring), que fue lanzado en el año 2009 y es desarrollado por la comunidad OISF (Open Information Security Foundation).

Como ya explicamos en este artículo, un IDS es un sistema pasivo que se encarga de monitorear el comportamiento de una red para detectar e informar sobre posibles intrusiones no autorizadas, mientras que un IPS es un sistema activo que funciona como una extensión de los IDS y que, además de enviar alertas sobre las detecciones, también puede bloquear la actividad maliciosa dentro de la red —como ataques de fuerza bruta, DDoS, o ataques que buscan la explotación de vulnerabilidades— y crear un registro (log) con la intrusión. Todo esto a partir del tráfico, las firmas de archivos, y el análisis heurístico del flujo. Adicionalmente, los IPS permiten agregar políticas y restringir acceso a usuarios y/o incluso aplicaciones.

Dicho esto, los usos más comunes de Suricata están relacionados con el escaneo de tráfico de red y el análisis de registros de tráfico dentro de un entorno de prueba o sandbox (como puede ser la ejecución de malware). Sin embargo, también podemos utilizar esta herramienta para la creación de reglas con el fin de clasificar malware.

Probando Suricata

A continuación, vamos a ver un ejemplo sencillo de cómo utilizar Suricata para la clasificación de malware.

Supongamos que tenemos una máquina destinada a realizar análisis dinámicos de muestras de malware, podríamos agregar distintas reglas de Suricata para poder clasificar el tipo de malware que se está ejecutando de acuerdo con el tráfico.

En este caso, mientras se ejecuta en la red una muestra del troyano bancario Trickbot, se genera un archivo .pcap con información sobre el comportamiento del tráfico.

A través del flujo de red generado por el malware y conociendo su comportamiento podríamos crear algunas reglas en Suricata en la carpeta /etc/suricata/rules:

Imagen 1. Reglas que vienen por defecto en Suricata.

En la Imagen 1 se puede observar el listado de algunas reglas que vienen por defecto al instalar Suricata.

Antes de avanzar con la generación de la regla para detectar Trickbot, veremos una pequeña descripción de los campos básicos para generar reglas en Suricata:

Action Header Rule Options
  • Action: corresponde con la acción (drop, alert, etc.) que realizará Suricata cuando se identifica la regla en el flujo de red.
  • Header: esta sección corresponde al flujo de red en concreto que se va a analizar. De origen a destino. Con la palabra “any” podemos indicarle a Suricata que se analizarán todos los puertos.
  • Rule: regla a implementar para detectar en nuestro caso el malware. Dentro de este campo existen palabras claves que nos ayuda a crear nuestra regla:
    • Msg: mensaje de alerta que emitirá Suricata.
    • flow: flujo de red.
    • Content: contiene la cadena de caracteres que se debe buscar dentro del tráfico.
    • Reference: contiene referencias, en este caso colocamos un hash MD5 de verificación de una muestra de Trickbot.
    • Sid: ID de la regla identificada.
    • Rev: versión de la regla.
    • Classtype: brinda información sobre la clasificación de las reglas y alertas.

Tomando de ejemplo la regla para el malware de Trickbot, procedamos a adicionar la regla de Suricata en el directorio de /etc/suricata/rules para su detección:

Action alert
Header http $EXTERNAL_NET any -> $HOME_NET any
Rule alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:”TROJAN Win32/Trickbot Data Exfiltration”; flow:established,to_server; content:”POST”; http_method; content:”name=\”proclist\””;content:”svchost.exe”;content:”name=\”sysinfo\””;content:”ipconfig”;content:”net view /all”;content:”nltest”;distance:0; reference:md5,f99adab7b2560097119077b99aceb40d; classtype:trojan-activity; sid:1001001;rev:1; )

Guardamos nuestra regla para Trickbot tomada del repositorio anteriormente mencionado:

Imagen 2. Regla de Suricata para el malware Trickbot

Ahora pasamos a analizar el tráfico con Suricata ejecutando el comando:

sudo suricata -c /etc/suricata/suricata.yaml -r [archivo.pcap]:

La sentencia anterior genera cuatro archivos:

Imagen 3. Archivos generados a partir de las reglas para Trickbot

El archivo eve.json es el archivo que más nos interesa en este momento, ya que es el archivo de salida que da información sobre alertas, anomalías, metadatos, e incluso la información de archivos y registros específicos:

Si buscamos por el nombre del mensaje Trickbotcon el comando:

grep “Trickbot” eve.json

Veremos que nuestra regla pudo detectar el archivo malicioso como Trickbot.

Imagen 4. Ejemplo de detección de Trickbot en el sistema a partir de las reglas creadas en Suricata

Para cerrar esta prueba de concepto es importante mencionar que Suricata es una herramienta muy útil para realizar Threat Hunting. Es capaz de identificar protocolos de red (TPC, UDP, HTTP, ICMP, etc.) posibilitando el control en tiempo real del tráfico que se genera en nuestra red y controlando la presencia de posibles códigos maliciosos. Esto último se puede realizar a través de las verificaciones de MD5, tal como vimos en la regla de Trickbot.

Por otro lado, también recomendamos revisar el repositorio Open Source de reglas Suricata de Emerging Threats, en donde podrán encontrar reglas que detectan a nuevas amenazas.

Para seguir profundizando en las reglas de Suricata recomendados leer la documentación oficial sobre la herramienta.

Newsletter

Discusión