
Uno strumento per valutare la qualità dei dati, basato sul fantastico OSSEM.

Uno strumento per valutare la qualità dei dati, costruito sopra l'eccezionale OSSEM progetto.
Power-up utilizza il Modello di Rilevamento dei Dati (DDM) dell'OSSEM come fondamento della sua valutazione della qualità dei dati. La ragione principale è che fornisce un modo strutturato per correlare Fonti di Dati ATT&CK, Entità del Modello Informativo Comune (CIM) e Dizionari di Dati (eventi) tra loro.
Per chi non conosce la struttura DDM, ecco un esempio:
Come puoi vedere, ogni voce nel DDM definisce una sotto fonte di dati (ambito) utilizzando entità astratte come process, user, file, ecc. Ogni voce contiene anche un ID evento, a cui l'ambito si applica. Puoi leggere di più su queste entità qui.
In sintesi, le voci DDM giocano un ruolo importante nel rimuovere la complessità degli eventi grezzi, fornendo un ambito che definisce come una fonte di log (canali di dati) può essere consumata.
Power-up valuta il punteggio di qualità dei dati secondo cinque dimensioni distinte:
Ogni dimensione viene valutata con un punteggio da 0 (nessuno) a 5 (eccellente).
Queste dimensioni sono legate ai canali di dati e si propagano a tutti gli eventi da essi forniti.
A causa della natura di queste dimensioni, devono essere valutate manualmente, in base alle specificità dei canali di dati.
Power-up utilizza resources/dcs.yml per definire il canale di dati e valutare le dimensioni:
data channel: sysmon
description: monitoraggio sysmon
coverage: 2
timeliness: 5
retention: 2
---
data channel: security
description: controllo di sicurezza di Windows
coverage: 5
timeliness: 5
retention: 2
Per calcolare quanto è completa la struttura dell'evento, power-up confronta i nomi standard del dizionario di dati con i campi delle entità (CIM) referenziate nella voce DDM (sorgente e destinazione).
Poiché non tutti i campi delle entità sono rilevanti (dipende dal contesto), power-up utilizza il concetto di profili per selezionare quali campi devono corrispondere ai nomi standard del dizionario di dati. Ad esempio:
# Profilo CIM OSSEM
process:
- process_name
- process_path
- process_command_line
Nota: C'è un profilo di esempio in
profiles/default.ymlcon cui giocare.
Il punteggio di struttura viene calcolato con la seguente formula:
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
Per chiarezza, ecco un esempio di come viene calcolato il punteggio di struttura:

Nota: Poiché il dizionario di dati di Sysmon Event Id 1 corrisponde al 100% dei campi dell'entità rilevanti, il punteggio di struttura sarà valutato 5 (eccellente).
Il punteggio di struttura viene tradotto nella scala 0-5 nel modo seguente:
| Percentuale | Punteggio |
|---|
Nota: A seconda del caso d'uso (SIEM, Threat Hunting, Forensics), puoi definire diversi profili per valutare i tuoi log in modo diverso.
Per calcolare la consistenza, power-up calcola semplicemente la percentuale di campi con un nome standard in un dizionario di dati. I dizionari di dati con un numero elevato di campi mappati a un nome standard hanno maggiori probabilità di correlarsi con le entità CIM.
Il punteggio di consistenza viene calcolato con la seguente formula:
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
Il punteggio di consistenza viene tradotto nella scala 0-5 nel modo seguente:
| Percentuale | Punteggio |
|---|---|
| 0 | 0 |
| da 1 a 50 | 1 |
| da 51 a 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
Come puoi vedere, power-up può consumare dati OSSEM da due formati diversi:
Attualmente, Power-up esporta l'output OSSEM in:
output/output/Nota: se non viene specificato un percorso del file di profilo, power-up utilizza
profiles/default.ymlper impostazione predefinita.
$> python3 powerup.py -o ../OSSEM --yaml
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Percorso profilo: profiles/default.yml
[*] Analisi OSSEM da markdown
[*] Esportazione OSSEM in YAML
[*] Creato output/ddm_20191114_160246.yml
[*] Creato output/cim_20191114_160246.yml
[*] Creato output/dds_20191114_160246.yml
L'obiettivo dell'esportazione/importazione da/verso YAML è facilitare la personalizzazione di OSSEM. È probabile che la prima cosa che farai sia creare i tuoi dizionari di dati e poi aggiungere nuove voci DDM, quindi YAML renderà gli aggiornamenti più facili.
Nota 1: modifica
resources/config.ymlper istruire power-up sui nomi dei file per le strutture corrette. Poi ti basta metterli in una cartella e passarli all'argomento OSSEM_YAML.
Nota 2: power-up non analizza l'intero oggetto OSSEM in YAML, solo i campi dati e alcuni metadati (ad es. descrizione). Il motivo è che volevo mantenere l'oggetto YAML il più snello possibile, solo con i dati necessari per valutare la qualità dei dati.
$> python3 powerup.py -o ../OSSEM --excel
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Percorso profilo: profiles/default.yml
[*] Analisi OSSEM da markdown
[*] Esportazione DDM OSSEM in Excel
[*] Salvato Excel in output/ddm_enriched_20191114_160041.xlsx
Quando esporti in Excel, power-up creerà un DDM accattivante, con le rispettive dimensioni di qualità dei dati per ogni voce:

$> python3 powerup.py -o ../OSSEM --elastic
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Percorso profilo: profiles/default.yml
[*] Analisi OSSEM da markdown
[*] Esportazione OSSEM in Elastic
[*] Creazione indice elastic ossem.ddm
[*] Creazione indice elastic ossem.cim
[*] Creazione indice elastic ossem.dds
[*] Creazione indice elastic ossem.dcs
Quando esporti in Elastic, power-up memorizzerà tutti i dati OSSEM in elastic. Poiché il DDM è anche arricchito con le rispettive dimensioni di qualità dei dati, sarai in grado di creare dashboard come questa:

$> python3 powerup.py -o ../OSSEM --layer
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Percorso profilo: profiles/default.yml
[*] Analisi OSSEM da markdown
[*] Esportazione OSSEM in Layer Navigator
[*] Recupero dati ATT&CK
[*] Generazione layer qualità fonti dati
[*] Creato output/ds_layer_20191119_220141.json
Quando esporti in layer, power-up creerà un file JSON del Layer ATT&CK Navigator, con le rispettive dimensioni di qualità dei dati per ogni tecnica:

Nota: i punteggi delle tecniche sono derivati dalle medie dei punteggi delle fonti dati nel DDM.
| Fonte di Dati ATT&CK | Sotto Fonte di Dati | Oggetto Dati Sorgente | Relazione | Oggetto Dati Destinazione | EventID |
|---|
| Process monitoring | creazione processo | process | created | process | 4688 |
| Process monitoring | creazione processo | process | created | process | 1 |
| Process monitoring | terminazione processo | process | terminated | - | 4689 |
| Process monitoring | terminazione processo | process | terminated | - | 5 |
| Dimensione | Tipo | Descrizione |
|---|
| Copertura | Canale di dati | Quanti dispositivi o segmenti di rete sono coperti dal canale di dati |
| Tempestività | Canale di dati | Quanto tempo impiega l'evento per essere disponibile |
| Conservazione | Canale di dati | Per quanto tempo l'evento rimane disponibile |
| Struttura | Evento | Quanto completo è l'evento, se i campi rilevanti sono disponibili |
| Consistenza | Evento | Quanto sono standardizzati i campi dell'evento, se i campi sono stati normalizzati |
| 0 | 0 |
| da 1 a 25 | 1 |
| da 26 a 50 | 2 |
| da 51 a 75 | 3 |
| da 76 a 99 | 4 |
| 100 | 5 |