
Una herramienta para evaluar la calidad de los datos, construida sobre la excelente OSSEM.

Una herramienta para evaluar la calidad de los datos, construida sobre el increíble proyecto OSSEM.
Power-up utiliza el Modelo de Datos de Detección (DDM) de OSSEM como base para su evaluación de calidad de datos. La razón principal es que proporciona una manera estructurada de correlacionar Fuentes de Datos ATT&CK, Entidades del modelo de información común (CIM) y Diccionarios de Datos (eventos) entre sí.
Para aquellos no familiarizados con la estructura del DDM, aquí hay un ejemplo:
Como puedes ver, cada entrada en el DDM define una sub fuente de datos (alcance) usando entidades abstractas como proceso, usuario, archivo, etc. Cada una de estas entidades también contiene un ID de evento, donde se aplica el alcance. Puedes leer más sobre estas entidades aquí.
En resumen, las entradas del DDM juegan un papel importante en eliminar la complejidad de los eventos en bruto, proporcionando un alcance que define cómo se puede consumir una fuente de registro (canales de datos).
Power-up evalúa la puntuación de calidad de datos según cinco dimensiones distintas:
Cada dimensión se califica con una puntuación entre 0 (ninguno) y 5 (excelente).
Estas dimensiones están vinculadas a los canales de datos y se propagan a todos los eventos proporcionados por ellos.
Debido a la naturaleza de estas dimensiones, deben calificarse manualmente, según las especificidades de los canales de datos.
Power-up utiliza resources/dcs.yml para definir el canal de datos y calificar las dimensiones:
data channel: sysmon
description: sysmon monitoring
coverage: 2
timeliness: 5
retention: 2
---
data channel: security
description: windows security auditing
coverage: 5
timeliness: 5
retention: 2
Para calcular qué tan completa es la estructura del evento, power-up compara los nombres estándar del diccionario de datos con los campos de las entidades (CIM) referenciadas en la entrada del DDM (origen y destino).
Debido a que no todos los campos de las entidades son relevantes (depende del contexto), power-up utiliza el concepto de perfiles para seleccionar qué campos deben coincidir con los nombres estándar del diccionario de datos. Por ejemplo:
# OSSEM CIM Profile
process:
- process_name
- process_path
- process_command_line
Nota: Hay un perfil de ejemplo en
profiles/default.ymlpara que juegues con él.
La puntuación de estructura se calcula con la siguiente fórmula:
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
Para mayor claridad, aquí hay un ejemplo de cómo se calcula la puntuación de estructura:

Nota: Debido a que el diccionario de datos de Sysmon Event Id 1 coincide al 100% con los campos de entidad relevantes, la puntuación de estructura se calificará como 5 (excelente).
La puntuación de estructura se traduce a la escala 0-5 de la siguiente manera:
| Porcentaje | Puntuación |
|---|
Nota: Dependiendo del caso de uso (SIEM, Caza de Amenazas, Forense), puedes definir diferentes perfiles para calificar tus registros de manera diferente.
Para calcular la consistencia, power-up simplemente calcula el porcentaje de campos con un nombre estándar en un diccionario de datos. Los diccionarios de datos con un alto número de campos mapeados a un nombre estándar tienen más probabilidades de correlacionarse con las entidades CIM.
La puntuación de consistencia se calcula con la siguiente fórmula:
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
La puntuación de consistencia se traduce a la escala 0-5 de la siguiente manera:
| Porcentaje | Puntuación |
|---|---|
| 0 | 0 |
| 1 al 50 | 1 |
| 51 al 99 | 3 |
| 100 | 5 |
pip install -r requirements.txt$> python3 powerup.py --help
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
usage: powerup.py [-h] [-o OSSEM] [-y OSSEM_YAML] [-p PROFILE] [--excel]
[--elastic] [--yaml]
A tool to assess ATT&CK data source coverage, built on top of awesome OSSEM.
optional arguments:
-h, --help show this help message and exit
-o OSSEM, --ossem OSSEM
path to import OSSEM markdown
-y OSSEM_YAML, --ossem-yaml OSSEM_YAML
path to import OSSEM yaml
-p PROFILE, --profile PROFILE
path to CIM profile
--excel export OSSEM DDM to excel
--elastic export OSSEM data models to elastic
--yaml export OSSEM data models to yaml
--layer export OSSEM data models to navigator layer
Como puedes ver, power-up puede consumir datos de OSSEM desde dos formatos diferentes:
Actualmente, Power-up exporta la salida de OSSEM a:
output/output/Nota: si no se especifica una ruta de archivo de perfil, power-up usa
profiles/default.ymlpor defecto.
$> python3 powerup.py -o ../OSSEM --yaml
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to YAML
[*] Created output/ddm_20191114_160246.yml
[*] Created output/cim_20191114_160246.yml
[*] Created output/dds_20191114_160246.yml
El objetivo de exportar/importar a/desde YAML es facilitar la personalización de OSSEM. Lo más probable es que lo primero que hagas sea crear tus propios diccionarios de datos y luego añadir nuevas entradas DDM, por lo que YAML hará las actualizaciones más fáciles.
Nota 1: modifica
resources/config.ymlpara instruir a power-up sobre los nombres de archivo para las estructuras correctas. Luego solo necesitas colocarlos en una carpeta y pasarlos al argumento OSSEM_YAML.
Nota 2: power-up no analiza todos los objetos OSSEM a YAML, solo los campos de datos y algunos metadatos (por ejemplo, descripción). La razón es que quería mantener el objeto YAML lo más ligero posible, solo con los datos que necesitas para evaluar la calidad de datos.
$> python3 powerup.py -o ../OSSEM --excel
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM DDM to Excel
[*] Saved Excel to output/ddm_enriched_20191114_160041.xlsx
Al exportar a Excel, power-up creará un DDM atractivo, con las respectivas dimensiones de calidad de datos para cada entrada:

$> python3 powerup.py -o ../OSSEM --elastic
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to Elastic
[*] Creating elastic index ossem.ddm
[*] Creating elastic index ossem.cim
[*] Creating elastic index ossem.dds
[*] Creating elastic index ossem.dcs
Al exportar a Elastic, power-up almacenará todos los datos de OSSEM en elastic. Debido a que el DDM también está enriquecido con las respectivas dimensiones de calidad de datos, podrás crear paneles como este:

$> python3 powerup.py -o ../OSSEM --layer
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to Naviagator Layer
[*] Pulling ATT&CK data
[*] Generating data source quality layer
[*] Created output/ds_layer_20191119_220141.json
Al exportar a capa, power-up creará un archivo JSON de capa de Attack Navigator, con las respectivas dimensiones de calidad de datos para cada técnica:

Nota: las puntuaciones de las técnicas se derivan de las puntuaciones promedio de las fuentes de datos en el DDM.
| Fuente de Datos ATT&CK | Sub Fuente de Datos | Objeto de Datos Origen | Relación | Objeto de Datos Destino | EventID |
|---|
| Process monitoring | process creation | process | created | process | 4688 |
| Process monitoring | process creation | process | created | process | 1 |
| Process monitoring | process termination | process | terminated | - | 4689 |
| Process monitoring | process termination | process | terminated | - | 5 |
| Dimensión | Tipo | Descripción |
|---|
| Cobertura | Canal de datos | Cuántos dispositivos o segmentos de red están cubiertos por el canal de datos |
| Oportunidad | Canal de datos | Cuánto tiempo tarda en estar disponible el evento |
| Retención | Canal de datos | Cuánto tiempo permanece disponible el evento |
| Estructura | Evento | Qué tan completo es el evento, si los campos relevantes están disponibles |
| Consistencia | Evento | Qué tan estándar son los campos del evento, si los campos han sido normalizados |
| 0 | 0 |
| 1 al 25 | 1 |
| 26 al 50 | 2 |
| 51 al 75 | 3 |
| 76 al 99 | 4 |
| 100 | 5 |