Skip to content

Commit 874f580

Browse files
committed
upd
1 parent dcdf810 commit 874f580

File tree

6 files changed

+33
-43
lines changed

6 files changed

+33
-43
lines changed

uncoder-core/app/translator/platforms/base/lucene/mapping.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def get_suitable_source_mappings(
3333
continue
3434

3535
log_source_signature: LuceneLogSourceSignature = source_mapping.log_source_signature
36-
if index and log_source_signature.is_suitable(index=index):
36+
if index and log_source_signature.is_suitable(index=index): # noqa: SIM102
3737
if source_mapping.fields_mapping.is_suitable(field_names):
3838
suitable_source_mappings.append(source_mapping)
3939

uncoder-core/app/translator/platforms/elasticsearch/parsers/detection_rule.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
4646
meta_info=MetaInfoContainer(
4747
id_=rule.get("rule_id"),
4848
title=rule.get("name"),
49-
description=parsed_description["rule_description"] or rule.get("description"),
49+
description=parsed_description.get("description") or rule.get("description"),
5050
references=rule.get("references", []),
51-
author=parsed_description["rule_author"],
51+
author=parsed_description.get("author") or rule.get("author", ""),
5252
severity=rule.get("severity"),
53-
license_=parsed_description["rule_license"],
53+
license_=parsed_description.get("license"),
5454
tags=rule.get("tags"),
5555
mitre_attack=mitre_attack if mitre_attack["tactics"] or mitre_attack["techniques"] else None,
5656
),

uncoder-core/app/translator/platforms/logscale/parsers/logscale_alert.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
3838
query=rule["query"]["queryString"],
3939
language=language,
4040
meta_info=MetaInfoContainer(
41-
id_=parsed_description["rule_id"],
42-
author=parsed_description["rule_author"],
43-
references=parsed_description["rule_references"],
44-
title=rule["name"],
45-
description=parsed_description["rule_description"] or rule["description"],
41+
id_=parsed_description.get("rule_id"),
42+
author=parsed_description.get("author"),
43+
references=parsed_description.get("references"),
44+
title=rule.get("name"),
45+
description=parsed_description.get("description") or rule.get("description"),
4646
),
4747
)

uncoder-core/app/translator/platforms/microsoft/parsers/microsoft_sentinel_rule.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ def parse_raw_query(self, text: str, language: str) -> RawQueryContainer:
5656
language=language,
5757
meta_info=MetaInfoContainer(
5858
title=rule.get("displayName"),
59-
description=parsed_description["rule_description"] or rule.get("description"),
59+
description=parsed_description.get("description") or rule.get("description"),
6060
timeframe=self.__parse_timeframe(rule.get("queryFrequency", "")),
6161
severity=rule.get("severity", "medium"),
6262
mitre_attack=mitre_attack if mitre_attack["tactics"] or mitre_attack["techniques"] else None,
63-
author=parsed_description["rule_author"],
64-
license_=parsed_description["rule_license"],
63+
author=parsed_description.get("author") or rule.get("author", ""),
64+
license_=parsed_description.get("license"),
6565
),
6666
)

uncoder-core/app/translator/platforms/roota/renders/roota.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ def __get_data_for_roota_render(
100100
return_only_first_query_ctx_var.set(prev_state_return_only_first_query_ctx_var)
101101
wrap_query_with_meta_info_ctx_var.set(prev_state_wrap_query_with_meta_info_ctx_var)
102102

103-
return (rule_query, rule_query_language,
104-
self.__normalize_log_source(log_source=tokenized_query_container.meta_info.parsed_logsources))
103+
return (
104+
rule_query,
105+
rule_query_language,
106+
self.__normalize_log_source(log_source=tokenized_query_container.meta_info.parsed_logsources),
107+
)
105108
rule_query_language = raw_query_container.language.replace("rule", "query")
106109
rule_query = raw_query_container.query
107110
for source_mapping_id in tokenized_query_container.meta_info.source_mapping_ids:
@@ -150,6 +153,6 @@ def generate(
150153
rule["correlation"]["timeframe"] = self.__render_timeframe(tokenized_query_container.meta_info.timeframe)
151154

152155
if rule_logsources:
153-
rule["logsource"] = rule_logsources
156+
rule["logsource"] = rule_logsources
154157

155158
return yaml.dump(rule, Dumper=IndentedListDumper, default_flow_style=False, sort_keys=False, indent=4)

uncoder-core/app/translator/tools/utils.py

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -74,32 +74,19 @@ def get_rule_description_str(
7474

7575

7676
def parse_rule_description_str(description: str) -> dict:
77-
rule_id: str = ""
78-
rule_author: str = ""
79-
rule_license: str = ""
80-
rule_references: list[str] = []
81-
82-
rule_id_pattern = r"Rule ID:\s*([\w-]+)"
83-
author_pattern = r"Author:\s*([^\.]+)"
84-
license_pattern = r"License:\s*(.+?)\s"
85-
reference_pattern = r"Reference:\s*([^\s]+)"
86-
87-
if rule_id_match := re.search(rule_id_pattern, description):
88-
rule_id = rule_id_match.group(1)
89-
if rule_author_match := re.search(author_pattern, description):
90-
rule_author = rule_author_match.group(1).strip()
91-
if rule_references_match := re.search(reference_pattern, description):
92-
rule_references = [rule_references_match.group(1)]
93-
if "License: DRL 1.1." in description:
94-
rule_license = "DRL 1.1."
95-
elif rule_license_match := re.search(license_pattern, description):
96-
rule_license = rule_license_match.group(1)
97-
description = re.sub(r"\s*(?:Author:|Rule ID:|License:|Reference:|$).*", "", description)
98-
99-
return {
100-
"rule_id": rule_id,
101-
"rule_license": rule_license,
102-
"rule_description": description,
103-
"rule_author": rule_author,
104-
"rule_references": rule_references,
77+
parsed = {}
78+
keys_map = {
79+
"references": "Reference",
80+
"mitre_attack": "MITRE ATT&CK",
81+
"license": "License",
82+
"rule_id": "Rule ID",
83+
"author": "Author",
10584
}
85+
pattern = r"___name___:\s*(?P<value>.+)\."
86+
for key, name in keys_map.items():
87+
if search := re.search(pattern.replace("___name___", name), description):
88+
parsed[key] = search.group("value")
89+
description = description[: search.start()]
90+
91+
parsed["description"] = description.strip()
92+
return parsed

0 commit comments

Comments
 (0)