Skip to content

Commit

Permalink
Fixed query table not applied to SigmaRules, added testing for SigmaR…
Browse files Browse the repository at this point in the history
…ules
  • Loading branch information
slincoln-aiq committed Oct 3, 2024
1 parent 9e81001 commit 697a2d0
Show file tree
Hide file tree
Showing 8 changed files with 1,236 additions and 1,346 deletions.
7 changes: 4 additions & 3 deletions sigma/pipelines/azuremonitor/azuremonitor.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from typing import Optional

from sigma.pipelines.kusto_common.postprocessing import (
PrependQueryTablePostprocessingItem,
)
from sigma.processing.conditions import (
# DetectionItemProcessingItemAppliedCondition,
ExcludeFieldCondition,
IncludeFieldCondition,
LogsourceCondition,
Expand All @@ -16,7 +18,6 @@
)

from ..kusto_common.errors import InvalidFieldTransformation
from ..kusto_common.finalization import QueryTableFinalizer
from ..kusto_common.schema import create_schema
from ..kusto_common.transformations import (
DynamicFieldMappingTransformation,
Expand Down Expand Up @@ -215,5 +216,5 @@ def azure_monitor_pipeline(query_table: Optional[str] = None) -> ProcessingPipel
priority=10,
items=pipeline_items,
allowed_backends=frozenset(["kusto"]),
finalizers=[QueryTableFinalizer()],
postprocessing_items=[PrependQueryTablePostprocessingItem],
)
17 changes: 17 additions & 0 deletions sigma/pipelines/kusto_common/conditions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from dataclasses import dataclass
from typing import Union

from sigma.correlations import SigmaCorrelationRule
from sigma.processing.conditions import RuleProcessingCondition
from sigma.rule import SigmaRule


@dataclass
class QueryTableSetCondition(RuleProcessingCondition):
def match(
self,
pipeline: "sigma.processing.pipeline.ProcessingPipeline", # noqa: F821 # type: ignore
rule: Union[SigmaRule, SigmaCorrelationRule],
) -> bool:
"""Match condition on Sigma rule."""
return pipeline.state.get("query_table", None) is not None
19 changes: 19 additions & 0 deletions sigma/pipelines/kusto_common/postprocessing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from sigma.processing.pipeline import QueryPostprocessingItem
from sigma.processing.postprocessing import QueryPostprocessingTransformation
from sigma.rule import SigmaRule

from ..kusto_common.conditions import QueryTableSetCondition


class PrependQueryTablePostprocessingItem(QueryPostprocessingTransformation):
def apply(self, pipeline: "sigma.processing.pipeline.ProcessingPipeline", rule: SigmaRule, query: str) -> str: # type: ignore # noqa: F821
return f"{pipeline.state['query_table']}\n| where {query}"


PrependQueryTablePostprocessingItem = QueryPostprocessingItem(
identifier="kusto_prepend_query_table",
transformation=PrependQueryTablePostprocessingItem(),
rule_conditions=[
QueryTableSetCondition(),
],
)
4 changes: 2 additions & 2 deletions sigma/pipelines/microsoftxdr/microsoftxdr.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
)

from ..kusto_common.errors import InvalidFieldTransformation
from ..kusto_common.finalization import QueryTableFinalizer
from ..kusto_common.postprocessing import PrependQueryTablePostprocessingItem
from ..kusto_common.schema import create_schema
from ..kusto_common.transformations import (
DynamicFieldMappingTransformation,
Expand Down Expand Up @@ -253,5 +253,5 @@ def microsoft_xdr_pipeline(
priority=10,
items=pipeline_items,
allowed_backends=frozenset(["kusto"]),
finalizers=[QueryTableFinalizer()],
postprocessing_items=[PrependQueryTablePostprocessingItem],
)
6 changes: 4 additions & 2 deletions sigma/pipelines/sentinelasim/sentinelasim.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from typing import Optional

from sigma.pipelines.kusto_common.postprocessing import (
PrependQueryTablePostprocessingItem,
)
from sigma.processing.conditions import (
DetectionItemProcessingItemAppliedCondition,
ExcludeFieldCondition,
Expand All @@ -16,7 +19,6 @@
)

from ..kusto_common.errors import InvalidFieldTransformation
from ..kusto_common.finalization import QueryTableFinalizer
from ..kusto_common.schema import create_schema
from ..kusto_common.transformations import (
DynamicFieldMappingTransformation,
Expand Down Expand Up @@ -219,5 +221,5 @@ def sentinel_asim_pipeline(
priority=10,
items=pipeline_items,
allowed_backends=frozenset(["kusto"]),
finalizers=[QueryTableFinalizer()],
postprocessing_items=[PrependQueryTablePostprocessingItem],
)
Loading

0 comments on commit 697a2d0

Please sign in to comment.