Skip to content

Commit 81d771a

Browse files
authored
Merge pull request #21 from UncoderIO/fix-translation-bugs
fix small bugs which appear while translating
2 parents 44ef47a + de479f3 commit 81d771a

File tree

6 files changed

+15
-4
lines changed

6 files changed

+15
-4
lines changed

siem-converter/app/converter/core/parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from app.converter.core.models.platform_details import PlatformDetails
2525
from app.converter.core.models.parser_output import SiemContainer, MetaInfoContainer
2626
from app.converter.core.tokenizer import QueryTokenizer, TOKEN_TYPE
27+
from app.converter.core.exceptions.parser import TokenizerGeneralException
2728

2829

2930
class Parser(ABC):
@@ -43,6 +44,8 @@ def get_tokens_and_source_mappings(self,
4344
query: str,
4445
log_sources: Dict[str, List[str]]
4546
) -> Tuple[List[TOKEN_TYPE], List[SourceMapping]]:
47+
if not query:
48+
raise TokenizerGeneralException("Can't translate empty query. Please provide more details")
4649
tokens = self.tokenizer.tokenize(query=query)
4750
field_tokens = self.tokenizer.filter_tokens(tokens, Field)
4851
field_names = [field.source_name for field in field_tokens]

siem-converter/app/converter/platforms/chronicle/const.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
rule_id = "<rule_id_place_holder>"
99
status = "<status_place_holder>"
1010
severity = "<severity_place_holder>"
11+
falsepositives = "<falsepositives_place_holder>"
1112
1213
events:
1314
<query_placeholder>

siem-converter/app/converter/platforms/chronicle/renders/chronicle_rule.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,5 @@ def finalize_query(self, prefix: str, query: str, functions: str, meta_info: Met
9595
rule = rule.replace("<rule_id_place_holder>", meta_info.id)
9696
rule = rule.replace("<severity_place_holder>", meta_info.severity)
9797
rule = rule.replace("<status_place_holder>", meta_info.status)
98+
rule = rule.replace("<falsepositives_place_holder>", ', '.join(meta_info.false_positives))
9899
return rule

siem-converter/app/converter/platforms/elasticsearch/renders/detection_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def finalize_query(self, prefix: str, query: str, functions: str, meta_info: Met
6464
"tags": meta_info.mitre_attack,
6565
"false_positives": meta_info.false_positives
6666
})
67-
rule_str = json.dumps(rule, indent=4, sort_keys=False)
67+
rule_str = json.dumps(rule, indent=4, sort_keys=False, ensure_ascii=False)
6868
if not_supported_functions:
6969
rendered_not_supported = self.render_not_supported_functions(not_supported_functions)
7070
return rule_str + rendered_not_supported

siem-converter/app/converter/platforms/sigma/parsers/sigma.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020

2121
import re
22-
from typing import List
22+
from typing import List, Union
2323

2424
from app.converter.platforms.sigma.const import SIGMA_RULE_DETAILS
2525
from app.converter.platforms.sigma.mapping import SigmaMappings, sigma_mappings
@@ -47,9 +47,16 @@ def __parse_mitre_attack(tags: List[str]) -> List[str]:
4747

4848
return result
4949

50+
@staticmethod
51+
def __parse_false_positives(false_positives: Union[str, List[str], None]) -> list:
52+
if isinstance(false_positives, str):
53+
return [i.strip() for i in false_positives.split(',')]
54+
return false_positives
55+
5056
def _get_meta_info(self, rule: dict, source_mapping_ids: List[str]) -> MetaInfoContainer:
5157
return MetaInfoContainer(
5258
title=rule.get("title"),
59+
id_=rule.get('id'),
5360
description=rule.get("description"),
5461
author=rule.get("author"),
5562
date=rule.get("date"),
@@ -58,7 +65,7 @@ def _get_meta_info(self, rule: dict, source_mapping_ids: List[str]) -> MetaInfoC
5865
mitre_attack=self.__parse_mitre_attack(rule.get("tags", [])),
5966
severity=rule.get("level"),
6067
status=rule.get("status"),
61-
false_positives=rule.get("falsepositives"),
68+
false_positives=self.__parse_false_positives(rule.get("falsepositives")),
6269
source_mapping_ids=source_mapping_ids
6370
)
6471

siem-converter/app/dictionaries/uncoder_meta_info_roota.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
{ "name": "logscale-lql-query", "description": "Falcon LogScale Query" },
5656
{ "name": "mde-kql-query", "description": "Microsoft Defender for Endpoint Query" },
5757
{ "name": "qradar-aql-query", "description": "IBM QRadar Query" },
58-
{ "name": "sigma-yml-rule", "description": "Sigma Rule" },
5958
{ "name": "athena-sql-query", "description": "AWS Athena Query (Security Lake)" },
6059
{ "name": "chronicle-yaral-query", "description": "Chronicle Security Query" }
6160
]

0 commit comments

Comments
 (0)