Skip to content

Commit 749a63d

Browse files
authored
Merge pull request #31 from frack113/Updat_dependencies
build: 📦 Update dependencies version
2 parents 3628c27 + 3a498cf commit 749a63d

10 files changed

+867
-383
lines changed

.git-blame-ignore-revs

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Reformatting with black
2+
cc2e353b04c86a26b0bab1fea3b9ddff6a1568fa

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
repos:
22
- repo: https://github.com/psf/black
3-
rev: 23.3.0
3+
rev: 24.1.1
44
hooks:
55
- id: black

poetry.lock

+372-170
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "pysigma-backend-splunk"
3-
version = "1.0.3"
3+
version = "1.0.4"
44
description = "pySigma Splunk backend"
55
readme = "README.md"
66
authors = ["Thomas Patzke <[email protected]>"]
@@ -15,10 +15,12 @@ python = "^3.8"
1515
pysigma = "^0.11.0"
1616

1717
[tool.poetry.dev-dependencies]
18-
pytest = "^6.2.2"
19-
pytest-cov = "^2.11.1"
20-
defusedxml = "^0.7.1"
18+
black = "^24.1"
19+
pre-commit = "^3.5"
20+
pytest = "^8.0"
21+
pytest-cov = "^4.1"
22+
defusedxml = "^0.7"
2123

2224
[build-system]
23-
requires = ["poetry-core>=1.0.0"]
25+
requires = ["poetry-core>=1.8.1"]
2426
build-backend = "poetry.core.masonry.api"

sigma/backends/splunk/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
backends = {
44
"splunk": SplunkBackend,
5-
}
5+
}

sigma/backends/splunk/splunk.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@ class SplunkDeferredCIDRExpression(DeferredTextQueryExpression):
4242
class SplunkBackend(TextQueryBackend):
4343
"""Splunk SPL backend."""
4444

45-
name: ClassVar[
46-
str
47-
] = "Splunk SPL & tstats data model queries" # A descriptive name of the backend
48-
formats: ClassVar[
49-
Dict[str, str]
50-
] = { # Output formats provided by the backend as name -> description mapping. The name should match to finalize_output_<name>.
51-
"default": "Plain SPL queries",
52-
"savedsearches": "Plain SPL in a savedsearches.conf file",
53-
"data_model": "Data model queries with tstats",
54-
}
55-
requires_pipeline: ClassVar[
56-
bool
57-
] = True # Does the backend requires that a processing pipeline is provided?
45+
name: ClassVar[str] = (
46+
"Splunk SPL & tstats data model queries" # A descriptive name of the backend
47+
)
48+
formats: ClassVar[Dict[str, str]] = (
49+
{ # Output formats provided by the backend as name -> description mapping. The name should match to finalize_output_<name>.
50+
"default": "Plain SPL queries",
51+
"savedsearches": "Plain SPL in a savedsearches.conf file",
52+
"data_model": "Data model queries with tstats",
53+
}
54+
)
55+
requires_pipeline: ClassVar[bool] = (
56+
True # Does the backend requires that a processing pipeline is provided?
57+
)
5858

5959
precedence: ClassVar[Tuple[ConditionItem, ConditionItem, ConditionItem]] = (
6060
ConditionNOT,

sigma/pipelines/splunk/__init__.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
from .splunk import splunk_windows_pipeline, splunk_windows_sysmon_acceleration_keywords, splunk_cim_data_model
1+
from .splunk import (
2+
splunk_windows_pipeline,
3+
splunk_windows_sysmon_acceleration_keywords,
4+
splunk_cim_data_model,
5+
)
26

37
pipelines = {
48
"splunk_windows": splunk_windows_pipeline,
59
"splunk_sysmon_acceleration": splunk_windows_sysmon_acceleration_keywords,
610
"splunk_cim": splunk_cim_data_model,
7-
}
11+
}

sigma/pipelines/splunk/splunk.py

+107-54
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
1-
from sigma.pipelines.common import \
2-
logsource_windows, \
3-
logsource_windows_process_creation, \
4-
logsource_windows_registry_add, \
5-
logsource_windows_registry_delete, \
6-
logsource_windows_registry_event, \
7-
logsource_windows_registry_set, \
8-
logsource_windows_file_event, \
9-
logsource_linux_process_creation, \
10-
generate_windows_logsource_items
11-
from sigma.processing.transformations import AddConditionTransformation, FieldMappingTransformation, DetectionItemFailureTransformation, RuleFailureTransformation, SetStateTransformation
12-
from sigma.processing.conditions import LogsourceCondition, ExcludeFieldCondition, RuleProcessingItemAppliedCondition
1+
from sigma.pipelines.common import (
2+
logsource_windows,
3+
logsource_windows_process_creation,
4+
logsource_windows_registry_add,
5+
logsource_windows_registry_delete,
6+
logsource_windows_registry_event,
7+
logsource_windows_registry_set,
8+
logsource_windows_file_event,
9+
logsource_linux_process_creation,
10+
generate_windows_logsource_items,
11+
)
12+
from sigma.processing.transformations import (
13+
AddConditionTransformation,
14+
FieldMappingTransformation,
15+
DetectionItemFailureTransformation,
16+
RuleFailureTransformation,
17+
SetStateTransformation,
18+
)
19+
from sigma.processing.conditions import (
20+
LogsourceCondition,
21+
ExcludeFieldCondition,
22+
RuleProcessingItemAppliedCondition,
23+
)
1324
from sigma.processing.pipeline import ProcessingItem, ProcessingPipeline
1425

15-
windows_sysmon_acceleration_keywords = { # Map Sysmon event sources and keywords that are added to search for Sysmon optimization pipeline
16-
"process_creation": "ParentProcessGuid",
17-
"file_event": "TargetFilename",
26+
windows_sysmon_acceleration_keywords = { # Map Sysmon event sources and keywords that are added to search for Sysmon optimization pipeline
27+
"process_creation": "ParentProcessGuid",
28+
"file_event": "TargetFilename",
1829
}
1930

2031
splunk_sysmon_process_creation_cim_mapping = {
@@ -36,7 +47,7 @@
3647
splunk_windows_registry_cim_mapping = {
3748
"Computer": "Registry.dest",
3849
"Details": "Registry.registry_value_data",
39-
"EventType": "Registry.action", # EventType: DeleteKey is parsed to action: deleted
50+
"EventType": "Registry.action", # EventType: DeleteKey is parsed to action: deleted
4051
"Image": "Registry.process_path",
4152
"ProcessGuid": "Registry.process_guid",
4253
"ProcessId": "Registry.process_id",
@@ -52,44 +63,52 @@
5263
"TargetFilename": "Filesystem.file_path",
5364
}
5465

66+
5567
def splunk_windows_pipeline():
5668
return ProcessingPipeline(
5769
name="Splunk Windows log source conditions",
5870
allowed_backends={"splunk"},
5971
priority=20,
60-
items=generate_windows_logsource_items("source", "WinEventLog:{source}") + [
61-
ProcessingItem( # Field mappings
72+
items=generate_windows_logsource_items("source", "WinEventLog:{source}")
73+
+ [
74+
ProcessingItem( # Field mappings
6275
identifier="splunk_windows_field_mapping",
63-
transformation=FieldMappingTransformation({
64-
"EventID": "EventCode",
65-
})
76+
transformation=FieldMappingTransformation(
77+
{
78+
"EventID": "EventCode",
79+
}
80+
),
6681
)
6782
],
6883
)
6984

85+
7086
def splunk_windows_sysmon_acceleration_keywords():
7187
return ProcessingPipeline(
7288
name="Splunk Windows Sysmon search acceleration keywords",
7389
allowed_backends={"splunk"},
7490
priority=25,
7591
items=[
76-
ProcessingItem( # Some optimizations searching for characteristic keyword for specific log sources
92+
ProcessingItem( # Some optimizations searching for characteristic keyword for specific log sources
7793
identifier="splunk_windows_sysmon_process_creation",
78-
transformation=AddConditionTransformation({
79-
None: keyword,
80-
}),
94+
transformation=AddConditionTransformation(
95+
{
96+
None: keyword,
97+
}
98+
),
8199
rule_conditions=[
82100
LogsourceCondition(
83101
category=sysmon_category,
84102
product="windows",
85103
service="sysmon",
86104
)
87-
]
105+
],
88106
)
89107
for sysmon_category, keyword in windows_sysmon_acceleration_keywords.items()
90-
]
108+
],
91109
)
92110

111+
93112
def splunk_cim_data_model():
94113
return ProcessingPipeline(
95114
name="Splunk CIM Data Model Mapping",
@@ -98,21 +117,26 @@ def splunk_cim_data_model():
98117
items=[
99118
ProcessingItem(
100119
identifier="splunk_dm_mapping_sysmon_process_creation_unsupported_fields",
101-
transformation=DetectionItemFailureTransformation("The Splunk Data Model Sigma backend supports only the following fields for process_creation log source: " + ",".join(splunk_sysmon_process_creation_cim_mapping.keys())),
120+
transformation=DetectionItemFailureTransformation(
121+
"The Splunk Data Model Sigma backend supports only the following fields for process_creation log source: "
122+
+ ",".join(splunk_sysmon_process_creation_cim_mapping.keys())
123+
),
102124
rule_conditions=[
103125
logsource_windows_process_creation(),
104126
logsource_linux_process_creation(),
105127
],
106128
rule_condition_linking=any,
107129
field_name_conditions=[
108130
ExcludeFieldCondition(
109-
fields = splunk_sysmon_process_creation_cim_mapping.keys()
131+
fields=splunk_sysmon_process_creation_cim_mapping.keys()
110132
)
111-
]
133+
],
112134
),
113135
ProcessingItem(
114136
identifier="splunk_dm_mapping_sysmon_process_creation",
115-
transformation=FieldMappingTransformation(splunk_sysmon_process_creation_cim_mapping),
137+
transformation=FieldMappingTransformation(
138+
splunk_sysmon_process_creation_cim_mapping
139+
),
116140
rule_conditions=[
117141
logsource_windows_process_creation(),
118142
logsource_linux_process_creation(),
@@ -121,7 +145,9 @@ def splunk_cim_data_model():
121145
),
122146
ProcessingItem(
123147
identifier="splunk_dm_fields_sysmon_process_creation",
124-
transformation=SetStateTransformation("fields", splunk_sysmon_process_creation_cim_mapping.values()),
148+
transformation=SetStateTransformation(
149+
"fields", splunk_sysmon_process_creation_cim_mapping.values()
150+
),
125151
rule_conditions=[
126152
logsource_windows_process_creation(),
127153
logsource_linux_process_creation(),
@@ -130,7 +156,9 @@ def splunk_cim_data_model():
130156
),
131157
ProcessingItem(
132158
identifier="splunk_dm_sysmon_process_creation_data_model_set",
133-
transformation=SetStateTransformation("data_model_set", "Endpoint.Processes"),
159+
transformation=SetStateTransformation(
160+
"data_model_set", "Endpoint.Processes"
161+
),
134162
rule_conditions=[
135163
logsource_windows_process_creation(),
136164
logsource_linux_process_creation(),
@@ -139,7 +167,10 @@ def splunk_cim_data_model():
139167
),
140168
ProcessingItem(
141169
identifier="splunk_dm_mapping_sysmon_registry_unsupported_fields",
142-
transformation=DetectionItemFailureTransformation("The Splunk Data Model Sigma backend supports only the following fields for registry log source: " + ",".join(splunk_windows_registry_cim_mapping.keys())),
170+
transformation=DetectionItemFailureTransformation(
171+
"The Splunk Data Model Sigma backend supports only the following fields for registry log source: "
172+
+ ",".join(splunk_windows_registry_cim_mapping.keys())
173+
),
143174
rule_conditions=[
144175
logsource_windows_registry_add(),
145176
logsource_windows_registry_delete(),
@@ -149,13 +180,15 @@ def splunk_cim_data_model():
149180
rule_condition_linking=any,
150181
field_name_conditions=[
151182
ExcludeFieldCondition(
152-
fields = splunk_windows_registry_cim_mapping.keys()
183+
fields=splunk_windows_registry_cim_mapping.keys()
153184
)
154-
]
185+
],
155186
),
156187
ProcessingItem(
157188
identifier="splunk_dm_mapping_sysmon_registry",
158-
transformation=FieldMappingTransformation(splunk_windows_registry_cim_mapping),
189+
transformation=FieldMappingTransformation(
190+
splunk_windows_registry_cim_mapping
191+
),
159192
rule_conditions=[
160193
logsource_windows_registry_add(),
161194
logsource_windows_registry_delete(),
@@ -166,7 +199,9 @@ def splunk_cim_data_model():
166199
),
167200
ProcessingItem(
168201
identifier="splunk_dm_fields_sysmon_registry",
169-
transformation=SetStateTransformation("fields", splunk_windows_registry_cim_mapping.values()),
202+
transformation=SetStateTransformation(
203+
"fields", splunk_windows_registry_cim_mapping.values()
204+
),
170205
rule_conditions=[
171206
logsource_windows_registry_add(),
172207
logsource_windows_registry_delete(),
@@ -177,7 +212,9 @@ def splunk_cim_data_model():
177212
),
178213
ProcessingItem(
179214
identifier="splunk_dm_sysmon_registry_data_model_set",
180-
transformation=SetStateTransformation("data_model_set", "Endpoint.Registry"),
215+
transformation=SetStateTransformation(
216+
"data_model_set", "Endpoint.Registry"
217+
),
181218
rule_conditions=[
182219
logsource_windows_registry_add(),
183220
logsource_windows_registry_delete(),
@@ -188,48 +225,64 @@ def splunk_cim_data_model():
188225
),
189226
ProcessingItem(
190227
identifier="splunk_dm_mapping_sysmon_file_event_unsupported_fields",
191-
transformation=DetectionItemFailureTransformation("The Splunk Data Model Sigma backend supports only the following fields for file_event log source: " + ",".join(splunk_windows_file_event_cim_mapping.keys())),
228+
transformation=DetectionItemFailureTransformation(
229+
"The Splunk Data Model Sigma backend supports only the following fields for file_event log source: "
230+
+ ",".join(splunk_windows_file_event_cim_mapping.keys())
231+
),
192232
rule_conditions=[
193233
logsource_windows_file_event(),
194234
],
195235
field_name_conditions=[
196236
ExcludeFieldCondition(
197-
fields = splunk_windows_file_event_cim_mapping.keys()
237+
fields=splunk_windows_file_event_cim_mapping.keys()
198238
)
199-
]
239+
],
200240
),
201241
ProcessingItem(
202242
identifier="splunk_dm_mapping_sysmon_file_event",
203-
transformation=FieldMappingTransformation(splunk_windows_file_event_cim_mapping),
243+
transformation=FieldMappingTransformation(
244+
splunk_windows_file_event_cim_mapping
245+
),
204246
rule_conditions=[
205247
logsource_windows_file_event(),
206-
]
248+
],
207249
),
208250
ProcessingItem(
209251
identifier="splunk_dm_fields_sysmon_file_event",
210-
transformation=SetStateTransformation("fields", splunk_windows_file_event_cim_mapping.values()),
252+
transformation=SetStateTransformation(
253+
"fields", splunk_windows_file_event_cim_mapping.values()
254+
),
211255
rule_conditions=[
212256
logsource_windows_file_event(),
213-
]
257+
],
214258
),
215259
ProcessingItem(
216260
identifier="splunk_dm_mapping_sysmon_file_event_data_model_set",
217-
transformation=SetStateTransformation("data_model_set", "Endpoint.Filesystem"),
261+
transformation=SetStateTransformation(
262+
"data_model_set", "Endpoint.Filesystem"
263+
),
218264
rule_conditions=[
219265
logsource_windows_file_event(),
220-
]
266+
],
221267
),
222268
ProcessingItem(
223269
identifier="splunk_dm_mapping_log_source_not_supported",
224270
rule_condition_linking=any,
225-
transformation=RuleFailureTransformation("Rule type not yet supported by the Splunk data model CIM pipeline!"),
271+
transformation=RuleFailureTransformation(
272+
"Rule type not yet supported by the Splunk data model CIM pipeline!"
273+
),
226274
rule_condition_negation=True,
227275
rule_conditions=[
228-
RuleProcessingItemAppliedCondition("splunk_dm_mapping_sysmon_process_creation"),
229-
RuleProcessingItemAppliedCondition("splunk_dm_mapping_sysmon_registry"),
230-
RuleProcessingItemAppliedCondition("splunk_dm_mapping_sysmon_file_event"),
276+
RuleProcessingItemAppliedCondition(
277+
"splunk_dm_mapping_sysmon_process_creation"
278+
),
279+
RuleProcessingItemAppliedCondition(
280+
"splunk_dm_mapping_sysmon_registry"
281+
),
282+
RuleProcessingItemAppliedCondition(
283+
"splunk_dm_mapping_sysmon_file_event"
284+
),
231285
],
232286
),
233-
]
287+
],
234288
)
235-

0 commit comments

Comments
 (0)