Skip to content

Commit 39fd347

Browse files
authored
Merge pull request #138 from UncoderIO/gis-8002
For raw log fields add field type. Add and improve mappings
2 parents dc52ae8 + 041d955 commit 39fd347

File tree

15 files changed

+341
-238
lines changed

15 files changed

+341
-238
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def __init__(
7272
source_id: str,
7373
log_source_signature: _LogSourceSignatureType = None,
7474
fields_mapping: Optional[FieldsMapping] = None,
75-
raw_log_fields: Optional[list] = None,
75+
raw_log_fields: Optional[dict] = None,
7676
):
7777
self.source_id = source_id
7878
self.log_source_signature = log_source_signature
@@ -103,7 +103,7 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
103103
continue
104104

105105
field_mappings_dict = mapping_dict.get("field_mapping", {})
106-
raw_log_fields = mapping_dict.get("raw_log_fields", [])
106+
raw_log_fields = mapping_dict.get("raw_log_fields", {})
107107
field_mappings_dict.update({field: field for field in raw_log_fields})
108108
fields_mapping = self.prepare_fields_mapping(field_mapping=field_mappings_dict)
109109
self.update_default_source_mapping(default_mapping=default_mapping, fields_mapping=fields_mapping)

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

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from typing import Optional, Union
2222

2323
from app.translator.const import DEFAULT_VALUE_TYPE
24+
from app.translator.core.context_vars import return_only_first_query_ctx_var
2425
from app.translator.core.custom_types.tokens import LogicalOperatorType, OperatorType
2526
from app.translator.core.custom_types.values import ValueType
2627
from app.translator.core.escape_manager import EscapeManager
@@ -192,7 +193,7 @@ class PlatformQueryRender(QueryRender):
192193
field_value_map = BaseQueryFieldValue(or_token=or_token)
193194

194195
query_pattern = "{table} {query} {functions}"
195-
raw_log_field_pattern: str = None
196+
raw_log_field_pattern_map: dict = None
196197

197198
def __init__(self):
198199
self.operator_map = {
@@ -283,6 +284,7 @@ def finalize_query(
283284
**kwargs, # noqa: ARG002
284285
) -> str:
285286
query = self.query_pattern.format(prefix=prefix, query=query, functions=functions).strip()
287+
286288
query = self.wrap_query_with_meta_info(meta_info=meta_info, query=query)
287289
if not_supported_functions:
288290
rendered_not_supported = self.render_not_supported_functions(not_supported_functions)
@@ -323,6 +325,16 @@ def _generate_from_raw_query_container(self, query_container: RawQueryContainer)
323325
prefix="", query=query_container.query, functions="", meta_info=query_container.meta_info
324326
)
325327

328+
def process_raw_log_field(self, field: str, field_type: str) -> Optional[str]:
329+
if raw_log_field_pattern := self.raw_log_field_pattern_map.get(field_type):
330+
return raw_log_field_pattern.pattern.format(field=field)
331+
332+
def process_raw_log_field_prefix(self, field: str, source_mapping: SourceMapping) -> Optional[str]:
333+
if self.raw_log_field_pattern_map is None:
334+
return
335+
if raw_log_field_type := source_mapping.raw_log_fields.get(field):
336+
return self.process_raw_log_field(field=field, field_type=raw_log_field_type)
337+
326338
def generate_raw_log_fields(self, fields: list[Field], source_mapping: SourceMapping) -> str:
327339
defined_raw_log_fields = []
328340
for field in fields:
@@ -334,10 +346,8 @@ def generate_raw_log_fields(self, fields: list[Field], source_mapping: SourceMap
334346
)
335347
if not mapped_field and self.is_strict_mapping:
336348
raise StrictPlatformException(field_name=field.source_name, platform_name=self.details.name)
337-
if mapped_field not in source_mapping.raw_log_fields:
338-
continue
339-
field_prefix = self.raw_log_field_pattern.format(field=mapped_field)
340-
defined_raw_log_fields.append(field_prefix)
349+
if field_prefix := self.process_raw_log_field_prefix(field=mapped_field, source_mapping=source_mapping):
350+
defined_raw_log_fields.append(field_prefix)
341351
return "\n".join(set(defined_raw_log_fields))
342352

343353
def _generate_from_tokenized_query_container(self, query_container: TokenizedQueryContainer) -> str:
@@ -368,6 +378,8 @@ def _generate_from_tokenized_query_container(self, query_container: TokenizedQue
368378
meta_info=query_container.meta_info,
369379
source_mapping=source_mapping,
370380
)
381+
if return_only_first_query_ctx_var.get() is True:
382+
return finalized_query
371383
queries_map[source_mapping.source_id] = finalized_query
372384
if not queries_map and errors:
373385
raise errors[0]
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
platform: Palo Alto XSIAM
2+
source: aws_cloudtrail
3+
4+
5+
default_log_source:
6+
dataset: amazon_aws_raw
7+
8+
field_mapping:
9+
eventSource: eventSource
10+
eventName: eventName
11+
errorCode: errorCode
12+
errorMessage: errorMessage
13+
eventType: eventType
14+
requestParameters: requestParameters
15+
responseElements: responseElements
16+
status: status
17+
terminatingRuleId: terminatingRuleId
18+
userAgent: userAgent
19+
AdditionalEventData.MFAUsed: additionalEventData.MFAUsed
20+
21+
22+
raw_log_fields:
23+
additionalEventData.MFAUsed: object
24+
requestParameters.ipPermissions.items.ipRanges.items.cidrIP: object
25+
requestParameters.ipPermissions.items.ipRanges.items.fromPort: object
26+
requestParameters.attribute: object
27+
requestParameters.userData: list
28+
responseElements.ConsoleLogin: object
29+
responseElements.pendingModifiedValues.masterUserPassword: object
30+
responseElements.publiclyAccessible: object
31+
userIdentity.arn: object
32+
userIdentity.principalId: object
33+
userIdentity.sessionContext.sessionIssuer.type: object
34+
userIdentity.type: object
35+
userIdentity.userName: object
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
platform: Palo Alto XSIAM
2+
source: aws_eks
3+
4+
5+
default_log_source:
6+
dataset: amazon_aws_raw
7+
8+
field_mapping:
9+
aws_node_type: aws_node_type
10+
requestURI: requestURI
11+
stage: stage
12+
verb: verb
13+
14+
15+
raw_log_fields:
16+
annotations.authorization.k8s.io\/decision: object
17+
annotations.podsecuritypolicy.policy.k8s.io\/admit-policy: object
18+
objectRef.namespace: object
19+
objectRef.resource: object
20+
objectRef.subresource: object
21+
requestObject.rules.resources: object
22+
requestObject.rules.verbs: object
23+
requestObject.spec.containers.image: object
24+
user.groups: object
25+
user.username: object
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
platform: Palo Alto XSIAM
2+
source: azure_aadnoninteractiveusersigninlogs
3+
4+
5+
default_log_source:
6+
dataset: msft_azure_raw
7+
8+
field_mapping:
9+
UserAgent: properties.userAgent
10+
Type: properties.type
11+
AuthenticationProcessingDetails: properties.authenticationProcessingDetails
12+
13+
raw_log_fields:
14+
properties.userAgent: object
15+
properties.type: object
16+
properties.authenticationProcessingDetails: object

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_application.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ field_mapping:
99
Provider_Name: provider_name
1010

1111
raw_log_fields:
12-
- src_ip
13-
- source
14-
- additional_information
15-
- EventData
16-
- Channel
17-
- statement
18-
- Faulting application path
19-
- object_name
20-
- class_type
21-
- action_id
22-
- Data
23-
- Message
24-
- Level
12+
src_ip: regex
13+
source: regex
14+
additional_information: regex
15+
EventData: regex
16+
Channel: regex
17+
statement: regex
18+
Faulting application path: regex
19+
object_name: regex
20+
class_type: regex
21+
action_id: regex
22+
Data: regex
23+
Message: regex
24+
Level: regex

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_network_connection.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ field_mapping:
5555

5656

5757
raw_log_fields:
58-
- Initiated
58+
Initiated: regex

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_pipe_created.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ field_mapping:
88
EventID: action_evtlog_event_id
99

1010
raw_log_fields:
11-
- PipeName
12-
- Image
11+
PipeName: regex
12+
Image: regex

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_powershell.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ field_mapping:
1010

1111

1212
raw_log_fields:
13-
- CommandLine
14-
- ScriptBlockText
15-
- Payload
16-
- HostApplication
17-
- ContextInfo
18-
- HostName
19-
- EngineVersion
13+
CommandLine: regex
14+
ScriptBlockText: regex
15+
Payload: regex
16+
HostApplication: regex
17+
ContextInfo: regex
18+
HostName: regex
19+
EngineVersion: regex

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_process_access.yml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ default_log_source:
66

77
field_mapping:
88
User: action_process_username
9+
SourceUser: action_process_username
910

1011
raw_log_fields:
11-
- SourceProcessGUID
12-
- SourceProcessId
13-
- SourceThreadId
14-
- SourceImage
15-
- TargetProcessGUID
16-
- TargerProcessId
17-
- TargetImage
18-
- GrantedAccess
19-
- CallTrace
12+
SourceProcessGUID: regex
13+
SourceProcessId: regex
14+
SourceThreadId: regex
15+
SourceImage: regex
16+
TargetProcessGUID: regex
17+
TargerProcessId: regex
18+
TargetImage: regex
19+
GrantedAccess: regex
20+
CallTrace: regex

0 commit comments

Comments
 (0)