Skip to main content

pySigma DuckDB Backend

Tests Status

This is a pySigma backend that generates DuckDB SQL queries from Sigma rules. It's designed for local validation of Sigma rules against JSON log files, making it ideal for CI/CD pipelines and regression testing.

Features

  • Convert Sigma rules to DuckDB SQL queries
  • Validate rules against local JSON log files
  • Support for JSON arrays, single objects, and NDJSON formats
  • Built-in LogIndex class for efficient log loading and querying
  • ValidationResult with match counts and matched log details

Installation

pip install pySigma-backend-duckdb

Usage

Basic Query Generation

from sigma.rule import SigmaRule
from sigma.collection import SigmaCollection
from sigma.backends.duckdb import DuckDBBackend

rule = SigmaRule.from_yaml("""
    title: Suspicious PowerShell Execution
    logsource:
        category: process_creation
        product: windows
    detection:
        selection:
            CommandLine|contains: powershell
        condition: selection
""")

backend = DuckDBBackend()
queries = backend.convert(SigmaCollection([rule]))
print(queries[0])
# SELECT * FROM logs WHERE CommandLine ILIKE '%powershell%'

Validating Rules Against Local Logs

from sigma.backends.duckdb import DuckDBBackend, LogIndex

# Load logs from JSON files
index = LogIndex()
index.load_json_file("logs.json")
# Or load from a directory
index.load_directory("logs/")

# Validate a rule
backend = DuckDBBackend()
result = backend.validate_rule(rule_yaml, index)

print(f"Rule: {result.rule_title}")
print(f"Matches: {result.match_count}/{result.total_logs}")
print(f"Success: {result.success}")

for log in result.matched_logs:
    print(f"  - {log.get('CommandLine', 'N/A')}")

Directory Validation for CI

from sigma.backends.duckdb import validate_rules_directory

# Validate all rules against all logs
results = validate_rules_directory(
    rules_dir="rules/",
    logs_dir="test_logs/",
)

for result in results:
    status = "PASS" if result.has_matches else "FAIL"
    print(f"{status}: {result.rule_title} ({result.match_count} matches)")

Log Format

The backend expects logs in JSON format. By default, it uses Sysmon field names (e.g., CommandLine, Image, ParentImage). You can use custom pipelines for different schemas.

Splunk Sysmon format (default):

{
    "CommandLine": "powershell.exe -e ...",
    "Image": "C:\\Windows\\System32\\powershell.exe",
    "ParentImage": "C:\\Windows\\System32\\cmd.exe"
}

Elastic ECS format (with elastic_ecs pipeline):

{
    "process": {
        "command_line": "powershell.exe -e ...",
        "executable": "C:\\Windows\\System32\\powershell.exe"
    }
}

Pipelines

The backend includes pipelines for common log formats:

from sigma.backends.duckdb import DuckDBBackend
from sigma.backends.duckdb.pipelines import splunk_sysmon, elastic_ecs

# For Splunk with Sysmon TA (default)
backend = DuckDBBackend(processing_pipeline=splunk_sysmon())

# For Elasticsearch with ECS
backend = DuckDBBackend(processing_pipeline=elastic_ecs())

License

MIT

Release files for pySigma-backend-duckdb 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pySigma-backend-duckdb 0.1.4
File Size Uploaded
pysigma_backend_duckdb-0.1.4.tar.gz 51.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pySigma-backend-duckdb 0.1.4
File Interpreter ABI Platform
pysigma_backend_duckdb-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size:61.2 kB

Release files / pysigma_backend_duckdb-0.1.4.tar.gz

Download URL pysigma_backend_duckdb-0.1.4.tar.gz
Size 51.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6342804da05cb392441b3cf7a5225f6a9dc296296533eff715f5636160e7eaad
BLAKE2b-256 checksum
How to use checksums
74f1ef187044bda48f7e879675e4e2d90ca147b3b64951fe564149555055eb34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / pysigma_backend_duckdb-0.1.4-py3-none-any.whl

Download URL pysigma_backend_duckdb-0.1.4-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c03d3507f0abcc422f6d75de22444bfba542dd2409fd2eef88a58a064935ace
BLAKE2b-256 checksum
How to use checksums
38879278459cd20541a558e8e3a3e87be3ef4664b1b9547fafe828eed73c86af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page