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

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
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)
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