Skip to content

Commit e784000

Browse files
committed
fix
1 parent 8444a23 commit e784000

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

uncoder-core/app/translator/core/mitre.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,7 @@ def get_mitre_info(
145145
for technique in techniques or []:
146146
if technique_found := self.get_technique(technique_id=technique.lower()):
147147
techniques_list.append(technique_found)
148-
return MitreInfoContainer(tactics=tactics_list, techniques=techniques_list)
148+
return MitreInfoContainer(
149+
tactics=sorted(tactics_list, key=lambda x: x.name),
150+
techniques=sorted(techniques_list, key=lambda x: x.technique_id),
151+
)

uncoder-core/app/translator/core/mixins/rule.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ def parse_mitre_attack(self, tags: list[str]) -> MitreInfoContainer:
3737
if tag.startswith("attack."):
3838
tag = tag[7::]
3939
if tag.startswith("t"):
40-
if technique := self.mitre_config.get_technique(tag):
41-
parsed_techniques.append(technique)
42-
elif tactic := self.mitre_config.get_tactic(tag):
43-
parsed_tactics.append(tactic)
44-
return MitreInfoContainer(tactics=parsed_tactics, techniques=parsed_techniques)
40+
parsed_techniques.append(tag)
41+
else:
42+
parsed_tactics.append(tag)
43+
return self.mitre_config.get_mitre_info(tactics=parsed_tactics, techniques=parsed_techniques)
4544

4645

4746
class XMLRuleMixin:

uncoder-core/app/translator/platforms/splunk/parsers/splunk_alert.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
import re
2020

2121
from app.translator.core.custom_types.meta_info import SeverityType
22+
from app.translator.core.mitre import MitreConfig
2223
from app.translator.core.models.platform_details import PlatformDetails
23-
from app.translator.core.models.query_container import MetaInfoContainer, RawQueryContainer
24+
from app.translator.core.models.query_container import MetaInfoContainer, MitreInfoContainer, RawQueryContainer
2425
from app.translator.managers import parser_manager
2526
from app.translator.platforms.splunk.const import splunk_alert_details
2627
from app.translator.platforms.splunk.mapping import SplunkMappings, splunk_alert_mappings
@@ -31,12 +32,13 @@
3132
class SplunkAlertParser(SplunkQueryParser):
3233
details: PlatformDetails = splunk_alert_details
3334
mappings: SplunkMappings = splunk_alert_mappings
35+
mitre_config: MitreConfig = MitreConfig()
3436

3537
def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
3638
rule_id: str = ""
3739
rule_name: str = ""
3840
severity: str = ""
39-
raw_mitre_attack: list[str] = []
41+
mitre_attack_container: MitreInfoContainer = None
4042
if severity_match := re.search(r"alert\.severity\s*=\s*(\d+)", text):
4143
level_map = {
4244
"1": SeverityType.low,
@@ -46,8 +48,12 @@ def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
4648
}
4749
severity = level_map.get(str(severity_match.group(1)), "low")
4850

49-
if mitre_attack_match := re.search(r'"mitre_attack":\s*\[(.*?)\]', text):
50-
raw_mitre_attack = [attack.strip().strip('"').lower() for attack in mitre_attack_match.group(1).split(",")]
51+
if mitre_attack_match := re.search(r"'mitre_attack':\s*\[(.*?)\]", text):
52+
raw_mitre_attack = [attack.strip().strip("'") for attack in mitre_attack_match.group(1).split(",")]
53+
mitre_attack_container = self.mitre_config.get_mitre_info(
54+
tactics=[i.lower() for i in raw_mitre_attack if not i.lower().startswith("t")],
55+
techniques=[i.lower() for i in raw_mitre_attack if i.lower().startswith("t")],
56+
)
5157

5258
if rule_id_match := re.search(r"Rule ID:\s*([\w-]+)", text):
5359
rule_id = rule_id_match.group(1)
@@ -64,6 +70,6 @@ def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
6470
title=rule_name,
6571
description=description,
6672
severity=severity,
67-
raw_mitre_attack=raw_mitre_attack,
73+
mitre_attack=mitre_attack_container,
6874
),
6975
)

0 commit comments

Comments
 (0)