Skip to content

Commit e25af9b

Browse files
committed
gis-9099 add microsoft sentinel to one vendor flow
1 parent 5f93815 commit e25af9b

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

uncoder-core/app/translator/core/models/query_container.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def __init__(
6565
date: Optional[str] = None,
6666
output_table_fields: Optional[list[Field]] = None,
6767
query_fields: Optional[list[Field]] = None,
68+
function_fields: Optional[list[Field]] = None,
69+
function_fields_map: Optional[dict[str, list[Field]]] = None,
6870
license_: Optional[str] = None,
6971
severity: Optional[str] = None,
7072
references: Optional[list[str]] = None,
@@ -76,7 +78,7 @@ def __init__(
7678
parsed_logsources: Optional[dict] = None,
7779
timeframe: Optional[timedelta] = None,
7880
query_period: Optional[timedelta] = None,
79-
mitre_attack: MitreInfoContainer = MitreInfoContainer(),
81+
mitre_attack: Optional[MitreInfoContainer] = None,
8082
raw_metainfo_container: Optional[RawMetaInfoContainer] = None,
8183
) -> None:
8284
self.id = id_ or str(uuid.uuid4())
@@ -86,23 +88,25 @@ def __init__(
8688
self.risk_score = risk_score
8789
self.type_ = type_ or ""
8890
self.description = description or ""
89-
self.author = [v.strip() for v in author] if author else []
91+
self.author = [v.strip() for v in author] if author and author != [None] else []
9092
self.date = date or datetime.now().date().strftime("%Y-%m-%d")
9193
self.output_table_fields = output_table_fields or []
9294
self.query_fields = query_fields or []
95+
self.function_fields = function_fields or []
96+
self.function_fields_map = function_fields_map or {}
9397
self.license = license_ or "DRL 1.1"
9498
self.severity = severity or SeverityType.low
9599
self.references = references or []
96100
self.tags = tags or []
97-
self.mitre_attack = mitre_attack or None
101+
self.mitre_attack = mitre_attack or MitreInfoContainer()
98102
self.raw_mitre_attack = raw_mitre_attack or []
99103
self.status = status or "stable"
100104
self.false_positives = false_positives or []
101105
self._source_mapping_ids = source_mapping_ids or [DEFAULT_MAPPING_NAME]
102106
self.parsed_logsources = parsed_logsources or {}
103107
self.timeframe = timeframe
104108
self.query_period = query_period
105-
self.raw_metainfo_container = raw_metainfo_container
109+
self.raw_metainfo_container = raw_metainfo_container or RawMetaInfoContainer()
106110

107111
@property
108112
def author_str(self) -> str:

uncoder-core/app/translator/platforms/microsoft/renders/microsoft_sentinel.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from app.translator.const import DEFAULT_VALUE_TYPE
2323
from app.translator.core.mapping import LogSourceSignature
2424
from app.translator.core.models.platform_details import PlatformDetails
25+
from app.translator.core.models.query_container import RawQueryContainer
2526
from app.translator.core.render import BaseFieldValueRender, PlatformQueryRender
2627
from app.translator.managers import render_manager
2728
from app.translator.platforms.microsoft.const import microsoft_sentinel_query_details
@@ -144,3 +145,6 @@ def generate_prefix(self, log_source_signature: LogSourceSignature, functions_pr
144145
@staticmethod
145146
def _finalize_search_query(query: str) -> str:
146147
return f"| where {query}" if query else ""
148+
149+
def generate_from_raw_query_container(self, query_container: RawQueryContainer) -> str:
150+
return query_container.query

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from app.translator.core.custom_types.meta_info import SeverityType
2727
from app.translator.core.mapping import SourceMapping
2828
from app.translator.core.models.platform_details import PlatformDetails
29-
from app.translator.core.models.query_container import MetaInfoContainer, MitreInfoContainer
29+
from app.translator.core.models.query_container import MetaInfoContainer, MitreInfoContainer, RawQueryContainer
3030
from app.translator.managers import render_manager
3131
from app.translator.platforms.microsoft.const import DEFAULT_MICROSOFT_SENTINEL_RULE, microsoft_sentinel_rule_details
3232
from app.translator.platforms.microsoft.mapping import MicrosoftSentinelMappings, microsoft_sentinel_rule_mappings
@@ -107,7 +107,8 @@ def finalize_query(
107107
*args, # noqa: ARG002
108108
**kwargs, # noqa: ARG002
109109
) -> str:
110-
query = super().finalize_query(prefix=prefix, query=query, functions=functions)
110+
if not kwargs.get("raw_query", False):
111+
query = super().finalize_query(prefix=prefix, query=query, functions=functions)
111112
rule = copy.deepcopy(DEFAULT_MICROSOFT_SENTINEL_RULE)
112113
rule["query"] = query
113114
rule["displayName"] = meta_info.title or _AUTOGENERATED_TEMPLATE
@@ -130,3 +131,8 @@ def finalize_query(
130131
json_rule = json.dumps(rule, indent=4, sort_keys=False)
131132
json_rule = self.wrap_with_unmapped_fields(json_rule, unmapped_fields)
132133
return self.wrap_with_not_supported_functions(json_rule, not_supported_functions)
134+
135+
def generate_from_raw_query_container(self, query_container: RawQueryContainer) -> str:
136+
return self.finalize_query(
137+
prefix="", query=query_container.query, functions="", meta_info=query_container.meta_info, raw_query=True
138+
)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy