
Ein Werkzeug zur Bewertung der Datenqualität, das auf dem großartigen OSSEM aufbaut.

Ein Tool zur Bewertung der Datenqualität, basierend auf dem großartigen OSSEM-Projekt.
Power-up verwendet das OSSEM Detection Data Model (DDM) als Grundlage seiner Datenqualitätsbewertung. Der Hauptgrund dafür ist, dass es eine strukturierte Möglichkeit bietet, ATT&CK Data Sources, Common Information Model Entitäten (CIM) und Data Dictionaries (Events) miteinander zu korrelieren.
Für diejenigen, die mit der DDM-Struktur nicht vertraut sind, hier ein Beispiel:
Wie Sie sehen, definiert jeder Eintrag im DDM eine Sub-Datenquelle (Scope) unter Verwendung abstrakter Entitäten wie process, user, file usw. Jeder dieser Einträge enthält auch eine Ereignis-ID, für die der Scope gilt. Lesen Sie mehr über diese Entitäten hier.
Kurz gesagt, DDM-Einträge spielen eine große Rolle bei der Entfernung der Komplexität roher Ereignisse, indem sie einen Scope bereitstellen, der definiert, wie eine Logquelle (Datenkanäle) konsumiert werden kann.
Power-up bewertet die Datenqualität anhand von fünf verschiedenen Dimensionen:
Jede Dimension wird mit einer Punktzahl zwischen 0 (keine) und 5 (ausgezeichnet) bewertet.
Diese Dimensionen sind an Datenkanäle gebunden und wirken sich auf alle von ihnen bereitgestellten Ereignisse aus.
Aufgrund der Natur dieser Dimensionen müssen sie manuell entsprechend den Besonderheiten der Datenkanäle bewertet werden.
Power-up verwendet resources/dcs.yml, um Datenkanäle zu definieren und die Dimensionen zu bewerten:
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
Um zu berechnen, wie vollständig die Ereignisstruktur ist, vergleicht power-up die Standardnamen des Data Dictionary mit den Feldern der Entitäten (CIM), die im DDM-Eintrag referenziert werden (Quelle und Ziel).
Da nicht alle Entitätsfelder relevant sind (abhängig vom Kontext), verwendet power-up das Konzept der Profile, um auszuwählen, welche Felder mit den Standardnamen des Data Dictionary übereinstimmen müssen. Beispiel:
# OSSEM CIM Profile
process:
- process_name
- process_path
- process_command_line
Hinweis: Es gibt ein Beispielprofil in
profiles/default.ymlzum Ausprobieren.
Der Struktur-Score wird mit der folgenden Formel berechnet:
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
Zur Verdeutlichung hier ein Beispiel, wie der Struktur-Score berechnet wird:

Hinweis: Da das Data Dictionary von Sysmon Event Id 1 zu 100 % mit den relevanten Entitätsfeldern übereinstimmt, wird der Struktur-Score mit 5 (ausgezeichnet) bewertet.
Der Struktur-Score wird wie folgt in die 0-5-Skala übersetzt:
| Prozentsatz | Punktzahl |
|---|
Hinweis: Abhängig vom Anwendungsfall (SIEM, Threat Hunting, Forensik) können Sie verschiedene Profile definieren, um Ihre Logs unterschiedlich zu bewerten.
Zur Berechnung der Konsistenz berechnet power-up einfach den Prozentsatz der Felder mit einem Standardnamen in einem Data Dictionary. Data Dictionaries mit einer hohen Anzahl von Feldern, die einem Standardnamen zugeordnet sind, korrelieren eher mit CIM-Entitäten.
Der Konsistenz-Score wird mit der folgenden Formel berechnet:
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
Der Konsistenz-Score wird wie folgt in die 0-5-Skala übersetzt:
| Prozentsatz | Punktzahl |
|---|---|
| 0 | 0 |
| 1 bis 50 | 1 |
| 51 bis 99 | 3 |
| 100 | 5 |
pip install -r requirements.txt aus$> 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
Wie Sie sehen, kann power-up OSSEM-Daten aus zwei verschiedenen Formaten konsumieren:
Derzeit exportiert Power-up OSSEM-Ausgabe nach:
output/output/Hinweis: Wenn kein Profildateipfad angegeben wird, verwendet power-up standardmäßig
profiles/default.yml.
$> 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
Das Ziel des Exports/Imports von/nach YAML ist es, die OSSEM-Anpassung zu erleichtern. Wahrscheinlich werden Sie zuerst Ihre eigenen Data Dictionaries erstellen und dann neue DDM-Einträge hinzufügen, daher macht YAML Aktualisierungen einfacher.
Hinweis 1: Ändern Sie
resources/config.yml, um power-up über die Dateinamen für die korrekten Strukturen zu informieren. Dann müssen Sie sie nur noch in einen Ordner legen und als OSSEM_YAML-Argument übergeben.
Hinweis 2: power-up parst nicht die gesamten OSSEM-Objekte in YAML, sondern nur die Datenfelder und einige Metadaten (z.B. Beschreibung). Der Grund dafür ist, dass ich das YAML-Objekt so schlank wie möglich halten wollte, nur mit den Daten, die Sie zur Bewertung der Datenqualität benötigen.
$> 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
Beim Export nach Excel erstellt power-up eine ansprechende DDM mit den entsprechenden Datenqualitätsdimensionen für jeden Eintrag:

$> 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
Beim Export nach Elastic speichert power-up alle OSSEM-Daten in Elastic. Da die DDM auch mit den entsprechenden Datenqualitätsdimensionen angereichert ist, können Sie Dashboards wie dieses erstellen:

$> 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
Beim Export in eine Layer-Datei erstellt power-up eine ATT&CK Navigator Layer JSON-Datei mit den entsprechenden Datenqualitätsdimensionen für jede Technik:

Hinweis: Technik-Scores werden aus den Durchschnittswerten der Datenquellen im DDM abgeleitet.
| ATT&CK Data Source | Sub Data Source | Source Data Object | Relationship | Destination Data Object | 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 |
| Dimension | Typ | Beschreibung |
|---|
| Abdeckung | Datenkanal | Wie viele Geräte oder Netzwerksegmente werden vom Datenkanal abgedeckt |
| Aktualität | Datenkanal | Wie lange dauert es, bis das Ereignis verfügbar ist |
| Aufbewahrung | Datenkanal | Wie lange bleibt das Ereignis verfügbar |
| Struktur | Ereignis | Wie vollständig ist das Ereignis, ob relevante Felder verfügbar sind |
| Konsistenz | Ereignis | Wie standardisiert sind die Ereignisfelder, ob Felder normalisiert wurden |
| 0 | 0 |
| 1 bis 25 | 1 |
| 26 bis 50 | 2 |
| 51 bis 75 | 3 |
| 76 bis 99 | 4 |
| 100 | 5 |