DEV Community

Cover image for 🔐 Threat Intelligence Data Integration Framework: Potenciando el Análisis de Amenazas basados en Grafos 📊🕵️‍♀️
agusvillarreal
agusvillarreal

Posted on

🔐 Threat Intelligence Data Integration Framework: Potenciando el Análisis de Amenazas basados en Grafos 📊🕵️‍♀️

En el panorama actual de ciberseguridad, las organizaciones enfrentan el desafío de gestionar y analizar eficazmente grandes volúmenes de datos de inteligencia de amenazas provenientes de múltiples fuentes. El Threat Intelligence Data Integration Framework aborda este problema al proporcionar una solución integral para la recopilación, almacenamiento, análisis y visualización de estos datos críticos.

🎯 Descripción del Problema

La integración y el análisis de datos de inteligencia de amenazas presentan varios desafíos:

  1. Variedad de Fuentes: Los datos provienen de diversas plataformas como MISP, MITRE ATT&CK y CAPEC, cada una con sus propios esquemas y formatos.
  2. Relaciones Complejas: Comprender las interconexiones entre actores de amenazas, malware, vulnerabilidades e indicadores es crucial pero difícil de representar en estructuras de datos tradicionales.
  3. Consultas y Análisis Eficientes: Realizar consultas complejas y análisis profundos sobre grandes conjuntos de datos de amenazas puede ser un proceso lento y engorroso.

🧩 Modelos de Datos: Relacional vs. Grafos

Para abordar estos desafíos, exploré dos enfoques de modelado de datos: el modelo relacional y el modelo basado en grafos.

Modelo de Datos Relacional

En el modelo relacional, los datos se organizan en tablas con columnas y filas, y las relaciones se establecen mediante claves primarias y foráneas. Para el Threat Intelligence Data Integration Framework, el modelo relacional incluiría tablas como:

  • threat_actor: Almacena información sobre actores de amenazas, como nombre, descripción y nivel de sofisticación. malware: Contiene detalles sobre malware, incluyendo nombre, descripción y tipo.
  • vulnerability: Representa vulnerabilidades con campos como ID de CVE, puntuación CVSS y descripción.
  • indicator: Almacena indicadores de compromiso, como patrones, tipos y nivel de confianza.
  • Tablas de relación: actor_uses_malware, malware_exploits_vulnerability, etc., para representar las relaciones entre entidades.

Aquí se muestra un ejemplo de cómo se define la tabla threat_actor en SQLite:

CREATE TABLE IF NOT EXISTS threat_actor (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    stix_id TEXT UNIQUE,
    name TEXT NOT NULL,
    description TEXT,
    sophistication_level TEXT,
    first_seen TIMESTAMP,
    last_seen TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Enter fullscreen mode Exit fullscreen mode

Modelo de Datos Basado en Grafos

En el modelo basado en grafos, los datos se representan como nodos y relaciones. Los nodos representan entidades, mientras que las relaciones capturan las conexiones entre ellas. Para el Threat Intelligence Data Integration Framework, el modelo basado en grafos incluiría:

  • Nodos:

    • ThreatActor: Representa actores de amenazas con propiedades como nombre y nivel de sofisticación.
    • Malware: Representa malware con propiedades como nombre y tipo.
    • Vulnerability: Representa vulnerabilidades con propiedades como ID de CVE y puntuación CVSS.
    • Indicator: Representa indicadores de compromiso con propiedades como patrón y tipo.
  • Relaciones:

    • USES: Conecta un ThreatActor con Malware que utiliza.
    • EXPLOITS: Conecta Malware con Vulnerability que explota.
    • INDICATES: Conecta un Indicator con Malware que indica.

Aquí se muestra un ejemplo de cómo se crea un nodo ThreatActor en Neo4j:

MERGE (ta:ThreatActor {stix_id: $stix_id})
SET ta.name = $name,
    ta.description = $description,
    ta.sophistication_level = $sophistication_level,
    ta.first_seen = datetime($first_seen),
    ta.last_seen = datetime($last_seen),
    ta.updated_at = datetime()
RETURN ta
Enter fullscreen mode Exit fullscreen mode

❓ Preguntas de Valor y Consultas

Para demostrar la relevancia de cada modelo de datos, presento cinco preguntas de valor y las consultas correspondientes para responderlas.

  1. ¿Cuáles son los actores de amenazas de alto riesgo?
  • Modelo Relacional (SQL):
SELECT * 
FROM threat_actor
WHERE sophistication_level = 'high' AND last_seen > DATE('now', '-6 months');
Enter fullscreen mode Exit fullscreen mode
  • Modelo de Grafos (Cypher):
MATCH (a:ThreatActor)
WHERE a.sophistication_level = 'high' AND a.last_seen > datetime()-duration('P6M')
RETURN a;
Enter fullscreen mode Exit fullscreen mode
  1. ¿Qué malware está explotando una vulnerabilidad específica?
  • Modelo Relacional (SQL):
SELECT m.name as malware_name
FROM malware m
JOIN malware_exploits_vulnerability mev ON m.id = mev.malware_id
JOIN vulnerability v ON mev.vulnerability_id = v.id
WHERE v.cve_id = 'CVE-2021-1234';
Enter fullscreen mode Exit fullscreen mode
  • Modelo de Grafos (Cypher):
MATCH (m:Malware)-[:EXPLOITS]->(v:Vulnerability {cve_id: 'CVE-2021-1234'})
RETURN m.name as malware_name;
Enter fullscreen mode Exit fullscreen mode
  1. ¿Cuáles son los indicadores relacionados con un actor de amenazas específico?
  • Modelo Relacional (SQL):
SELECT i.pattern as indicator_pattern
FROM indicator i
JOIN indicator_indicates_malware iim ON i.id = iim.indicator_id
JOIN malware m ON iim.malware_id = m.id
JOIN actor_uses_malware aum ON m.id = aum.malware_id
JOIN threat_actor ta ON aum.actor_id = ta.id
WHERE ta.name = 'APT28';
Enter fullscreen mode Exit fullscreen mode
  • Modelo de Grafos (Cypher):
MATCH (ta:ThreatActor {name: 'APT28'})-[:USES]->(:Malware)<-[:INDICATES]-(i:Indicator)
RETURN i.pattern as indicator_pattern;
Enter fullscreen mode Exit fullscreen mode
  1. ¿Cuál es la cadena de ataque para un actor de amenazas específico?
  • Modelo Relacional (SQL):
-- Consulta compleja que implica múltiples JOINs y subconsultas
Enter fullscreen mode Exit fullscreen mode
  • Modelo de Grafos (Cypher):
MATCH path = (ta:ThreatActor {name: 'APT28'})-[:USES*1..4]->(:Vulnerability)
RETURN path;

Enter fullscreen mode Exit fullscreen mode
  1. ¿Cuáles son los actores de amenazas relacionados a través de malware compartido?
  • Modelo Relacional (SQL):
-- Consulta compleja que implica múltiples JOINs y subconsultas
Enter fullscreen mode Exit fullscreen mode
  • Modelo de Grafos (Cypher):
MATCH (ta1:ThreatActor)-[:USES]->(:Malware)<-[:USES]-(ta2:ThreatActor)
WHERE ta1 <> ta2
RETURN ta1.name as actor1, ta2.name as actor2;
Enter fullscreen mode Exit fullscreen mode

💡 Reflexión sobre la Idoneidad de Cada Modelo

Después de explorar ambos modelos de datos y las consultas correspondientes, podemos hacer las siguientes observaciones:

El modelo relacional proporciona una estructura bien definida y es adecuado para consultas simples y directas. Sin embargo, a medida que las preguntas se vuelven más complejas e involucran múltiples relaciones, las consultas SQL pueden volverse difíciles de manejar y el rendimiento puede verse afectado debido a los múltiples JOINs necesarios.

El modelo basado en grafos, por otro lado, se adapta de manera natural a los datos altamente interconectados. Las consultas Cypher son más intuitivas y expresivas para navegar por las relaciones complejas. El rendimiento de las consultas basadas en grafos se mantiene incluso para patrones de consulta complejos, ya que las relaciones se almacenan de manera nativa en la base de datos.

Para el Threat Intelligence Data Integration Framework, donde comprender las relaciones complejas entre entidades es fundamental, el modelo basado en grafos demuestra ser más adecuado. Permite un análisis más eficiente de las cadenas de ataque, la identificación de conexiones entre actores de amenazas y la detección de patrones en los datos de inteligencia de amenazas.

Sin embargo, es importante tener en cuenta que el modelo relacional sigue siendo valioso para almacenar y consultar datos estructurados simples. En el framework, se utiliza una combinación de Neo4j para el modelo basado en grafos y SQLite para el almacenamiento relacional, aprovechando las fortalezas de cada uno.

Al momento de nosotros querer visualizar, podemos desarrollar nuestro propio dashboard y obtener algo como esto

Image description

🚀 Cómo Empezar

Si deseas utilizar el Threat Intelligence Data Integration Framework en tu propio entorno, sigue estos pasos:

Clona el repositorio:

clone https://github.com/tu_usuario/threat_intel_framework.git
cd threat_intel_framework
Enter fullscreen mode Exit fullscreen mode

Configura tu entorno virtual y instala las dependencias:

python -m venv venv
source venv/bin/activate  # En Windows: venv\Scripts\activate
pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

Configura las variables de entorno en el archivo .env:

# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_password

# MISP Configuration
MISP_URL=https://your-misp-instance.com
MISP_API_KEY=your_misp_api_key

# MITRE ATT&CK Configuration
MITRE_API_URL=https://attack.mitre.org/api/

# Database Configuration
SQLITE_DB_PATH=data/threat_intel.db
Enter fullscreen mode Exit fullscreen mode

Configura las bases de datos:

python setup_databases.py
Enter fullscreen mode Exit fullscreen mode

Utiliza la interfaz de línea de comandos (CLI) para interactuar con el framework:

Para recolectar datos de fuentes de inteligencia de amenazas:

python src/cli/cli.py collect misp --days 30
python src/cli/cli.py collect mitre
python src/cli/cli.py collect capec
Enter fullscreen mode Exit fullscreen mode

Para realizar tareas de análisis:

python src/cli/cli.py analyze recent-threats --months 3
python src/cli/cli.py analyze risk-assessment --threshold 80
python src/cli/cli.py analyze attack-patterns --min-occurrences 5
Enter fullscreen mode Exit fullscreen mode

Para migrar datos entre bases de datos:

python src/cli/cli.py migrate neo4j-to-sqlite --only threat-actors
Enter fullscreen mode Exit fullscreen mode

🤝 Contribución

El Threat Intelligence Data Integration Framework es un proyecto de código abierto y agradezco las contribuciones de la comunidad. Si tienes ideas para mejoras, nuevas características o correcciones de errores, no dudes en abrir un issue o enviar una pull request en el repositorio del proyecto.

🚀 Conclusión

El Threat Intelligence Data Integration Framework aborda los desafíos de integrar y analizar datos de inteligencia de amenazas al aprovechar la combinación de modelos de datos relacionales y basados en grafos. Al utilizar Neo4j y SQLite, el framework permite consultas eficientes, análisis profundos y visualización de relaciones complejas entre entidades de amenazas.

Mediante la exploración de preguntas de valor y las consultas correspondientes en cada modelo, he demostrado la relevancia y la idoneidad del modelo basado en grafos para el análisis de inteligencia de amenazas. Este enfoque proporciona una base sólida para que las organizaciones obtengan información accionable y tomen decisiones informadas en la lucha contra las ciberamenazas.

Espero que este artículo te haya brindado una visión clara de cómo el Threat Intelligence Data Integration Framework puede potenciar tu análisis de inteligencia de amenazas. Si tienes alguna pregunta o comentario, no dudes en contactarme.

Top comments (0)