
Un outil pour évaluer la qualité des données, construit sur le formidable OSSEM.

Un outil pour évaluer la qualité des données, construit sur le super projet OSSEM.
Power-up utilise le Detection Data Model (DDM) d'OSSEM comme fondement de son évaluation de la qualité des données. La raison principale est qu'il offre un moyen structuré de corréler les ATT&CK Data Sources, les entités du modèle d'information commun (CIM) et les Data Dictionaries (événements) entre eux.
Pour ceux qui ne connaissent pas la structure DDM, voici un exemple :
Comme vous pouvez le voir, chaque entrée du DDM définit une sous-source de données (périmètre) en utilisant des entités abstraites comme process, user, file, etc. Chacune de ces entrées contient également un ID d'événement, où le périmètre s'applique. Vous pouvez en savoir plus sur ces entités ici.
En résumé, les entrées DDM jouent un rôle majeur en supprimant la complexité des événements bruts, en fournissant un périmètre qui définit comment une source de journal (canaux de données) peut être consommée.
Power-up évalue le score de qualité des données selon cinq dimensions distinctes :
Chaque dimension est notée avec un score entre 0 (aucun) et 5 (excellent).
Ces dimensions sont liées aux canaux de données et se propagent à tous les événements qu'ils fournissent.
En raison de la nature de ces dimensions, elles doivent être évaluées manuellement, selon les spécificités des canaux de données.
Power-up utilise resources/dcs.yml pour définir le canal de données et noter les dimensions :
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
Afin de calculer à quel point la structure de l'événement est complète, power-up compare les noms standard du dictionnaire de données avec les champs des entités (CIM) référencées dans l'entrée DDM (source et destination).
Parce que tous les champs d'entité ne sont pas pertinents (cela dépend du contexte), power-up utilise le concept de profils pour sélectionner quels champs doivent correspondre aux noms standard du dictionnaire de données. Par exemple :
# OSSEM CIM Profile
process:
- process_name
- process_path
- process_command_line
Note : Un exemple de profil se trouve dans
profiles/default.ymlpour vous permettre de jouer avec.
Le score de structure est calculé avec la formule suivante :
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
Pour plus de clarté, voici un exemple de calcul du score de structure :

Note : Parce que le dictionnaire de données de Sysmon Event Id 1 correspond à 100 % des champs d'entité pertinents, le score de structure sera noté 5 (excellent).
Le score de structure est traduit sur l'échelle de 0 à 5 de la manière suivante :
| Percentage | Score |
|---|
Note : Selon le cas d'usage (SIEM, Threat Hunting, Forensics), vous pouvez définir différents profils pour noter vos journaux différemment.
Pour calculer la cohérence, power-up calcule simplement le pourcentage de champs ayant un nom standard dans un dictionnaire de données. Les dictionnaires de données avec un grand nombre de champs mappés à un nom standard sont plus susceptibles de corréler avec les entités CIM.
Le score de cohérence est calculé avec la formule suivante :
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
Le score de cohérence est traduit sur l'échelle de 0 à 5 de la manière suivante :
| Percentage | Score |
|---|---|
| 0 | 0 |
| 1 to 50 | 1 |
| 51 to 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
Comme vous pouvez le voir, power-up peut consommer des données OSSEM à partir de deux formats différents :
Actuellement, Power-up exporte la sortie OSSEM vers :
output/output/Note : si aucun chemin de fichier de profil n'est spécifié, power-up utilise
profiles/default.ymlpar défaut.
$> 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
Le but de l'exportation/importation vers/depuis YAML est de faciliter la personnalisation d'OSSEM. Il est probable que la première chose que vous fassiez soit de créer vos propres dictionnaires de données, puis d'ajouter de nouvelles entrées DDM, donc YAML facilitera les mises à jour.
Note 1 : modifiez
resources/config.ymlpour informer power-up des noms de fichiers pour les structures correctes. Ensuite, il vous suffit de les placer dans un dossier et de les passer à l'argument OSSEM_YAML.
Note 2 : power-up n'analyse pas tous les objets OSSEM en YAML, seulement les champs de données et quelques métadonnées (par exemple, description). La raison en est que je voulais garder l'objet YAML aussi léger que possible, juste avec les données nécessaires pour évaluer la qualité des données.
$> 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
Lors de l'exportation vers Excel, power-up créera un DDM attrayant, avec les dimensions de qualité des données respectives pour chaque entrée :

$> 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
Lors de l'exportation vers Elastic, power-up stockera toutes les données OSSEM dans elastic. Comme le DDM est également enrichi avec les dimensions de qualité des données respectives, vous pourrez créer des tableaux de bord comme celui-ci :

$> 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
Lors de l'exportation vers un calque, power-up créera un fichier JSON de calque Attack Navigator, avec les dimensions de qualité des données respectives pour chaque technique :

Note : les scores des techniques sont dérivés des scores moyens des sources de données dans le DDM.
| 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 | Type | Description |
|---|
| Coverage | Data channel | Combien d'appareils ou segments réseau sont couverts par le canal de données |
| Timeliness | Data channel | Combien de temps faut-il pour que l'événement soit disponible |
| Retention | Data channel | Combien de temps l'événement reste disponible |
| Structure | Event | À quel point l'événement est complet, si les champs pertinents sont disponibles |
| Consistency | Event | À quel point les champs de l'événement sont standardisés, si les champs ont été normalisés |
| 0 | 0 |
| 1 to 25 | 1 |
| 26 to 50 | 2 |
| 51 to 75 | 3 |
| 76 to 99 | 4 |
| 100 | 5 |