From 5d211341c6626a76d58ad8dd29ca630b294c1ed4 Mon Sep 17 00:00:00 2001 From: Marcus Bakker Date: Mon, 21 Dec 2020 16:52:56 +0100 Subject: [PATCH] Added support for Navigator 4.1 and the metada divider --- generic.py | 6 +++--- technique_mapping.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/generic.py b/generic.py index 9f34e27..81c10b8 100644 --- a/generic.py +++ b/generic.py @@ -218,7 +218,7 @@ def _get_base_template(name, description, platform, sorting): """ layer = dict() layer['name'] = name - layer['versions'] = {'navigator': '4.0', 'layer': '4.0'} + layer['versions'] = {'navigator': '4.1', 'layer': '4.1'} layer['domain'] = 'enterprise-attack' layer['description'] = description @@ -935,7 +935,7 @@ def make_layer_metadata_compliant(metadata): :return: compliant list of metadata dictionaries """ for md_item in metadata: - if not md_item['value'] or md_item['value'] == '': + if not 'divider' in md_item.keys() and (not md_item['value'] or md_item['value'] == ''): md_item['value'] = '-' return metadata @@ -952,7 +952,7 @@ def add_metadata_technique_object(technique, obj_type, metadata): if obj_type not in ['detection', 'visibility']: raise Exception("Invalid value for 'obj_type' provided.") - metadata.append({'name': '------', 'value': ' '}) + metadata.append({'divider': True}) metadata.append({'name': 'Applicable to', 'value': ', '.join(set([a for v in technique[obj_type] for a in v['applicable_to']]))}) # noqa metadata.append({'name': '' + obj_type.capitalize() + ' score', 'value': ', '.join([str(calculate_score(technique[obj_type]))])}) # noqa if obj_type == 'detection': diff --git a/technique_mapping.py b/technique_mapping.py index 11f2182..2c73a83 100644 --- a/technique_mapping.py +++ b/technique_mapping.py @@ -2,6 +2,7 @@ import simplejson import xlsxwriter from generic import * from datetime import datetime +from copy import deepcopy # Imports for pandas and plotly are because of performance reasons in the function that uses these libraries. @@ -193,7 +194,7 @@ def _map_and_colorize_techniques_for_detections(my_techniques): x['metadata'].append({'name': 'Technique comment', 'value': detection['comment']}) x['metadata'].append({'name': 'Detection comment', 'value': get_latest_comment(detection)}) if cnt != tcnt: - x['metadata'].append({'name': '------', 'value': ' '}) + x['metadata'].append({'divider': True}) cnt += 1 x['metadata'] = make_layer_metadata_compliant(x['metadata']) mapped_techniques.append(x) @@ -243,7 +244,7 @@ def _map_and_colorize_techniques_for_visibility(my_techniques, my_data_sources, x['metadata'].append({'name': 'Available data sources', 'value': my_ds}) x['metadata'].append({'name': 'ATT&CK data sources', 'value': ', '.join(get_applicable_data_sources_technique(technique.get('x_mitre_data_sources', ''), applicable_data_sources))}) - x['metadata'].append({'name': '------', 'value': ' '}) + x['metadata'].append({'divider': True}) x['score'] = s cnt = 1 @@ -255,9 +256,8 @@ def _map_and_colorize_techniques_for_visibility(my_techniques, my_data_sources, x['metadata'].append({'name': 'Technique comment', 'value': visibility['comment']}) x['metadata'].append({'name': 'Visibility comment', 'value': get_latest_comment(visibility)}) if cnt != tcnt: - x['metadata'].append({'name': '------', 'value': ' '}) + x['metadata'].append({'divider': True}) cnt += 1 - x['metadata'] = make_layer_metadata_compliant(x['metadata']) mapped_techniques.append(x) else: