Skip to main content

pySigma sqlite backend

Project description

Tests Coverage Badge Status

pySigma SQLite Backend

This is the SQLite backend for pySigma. It provides the package sigma.backends.sqlite with the sqliteBackend class.

This backend also aims to be compatible with Zircolite which uses pure SQLite queries to perform SIGMA-based detection on EVTX, Auditd, Sysmon for linux, XML or JSONL/NDJSON Logs.

It supports the following output formats:

  • default: plain SQLite queries
  • zircolite : SQLite queries in JSON format for Zircolite

This backend is currently maintained by:

Supported Features

Sigma Modifiers

Modifier Description SQLite Implementation
contains Substring matching LIKE '%value%'
startswith Prefix matching LIKE 'value%'
endswith Suffix matching LIKE '%value'
all All values must match Multiple AND conditions
re Regular expressions REGEXP
cidr CIDR network matching Expanded to LIKE patterns
cased Case-sensitive matching GLOB
fieldref Compare two fields field1=field2 or with LIKE for startswith/endswith/contains
exists Field existence check field = field
gt, gte, lt, lte Numeric comparisons >, >=, <, <=
hour, minute, day, week, month, year Timestamp part extraction strftime()

Correlation Rules

The backend supports Sigma correlation rules with the following types:

Correlation Type Description
event_count Count events matching conditions
value_count Count distinct field values
temporal Events from multiple rules occurring within a timespan
temporal_ordered Events occurring in a specific order within a timespan
value_sum Sum of field values
value_avg Average of field values

Correlation rules support group-by for grouping results and timespan for temporal constraints.

SQLite Requirements for Correlation

For correlation rules to work properly, your SQLite database must meet the following requirements:

Requirement Description
Timestamp field Required for temporal correlations. Must be in a format compatible with SQLite's julianday() function (ISO8601, Julian day number, or Unix timestamp)

Configurable Parameters:

The backend provides configurable parameters for correlation queries:

Parameter Default Description
timestamp_field timestamp Field name containing the event timestamp

Example usage with custom parameters:

backend = sqliteBackend(correlation_methods=["default"])
backend.timestamp_field = "event_time"

Notes:

  • The timestamp field is used with julianday() for time difference calculations in temporal correlations
  • For multi-rule correlations (temporal, temporal_ordered), the backend automatically adds a sigma_rule_id column to identify which rule matched each event
  • Timespan values are converted to seconds internally for comparison

Other Features

  • NULL value handling: field: nullfield IS NULL
  • Boolean values: true/false support
  • Field name quoting: Special characters in field names are quoted with backticks
  • Wildcard escaping: Proper escaping of % and _ characters in values

Known issues/limitations

  • Full text search support will need some work and is not a priority since it needs virtual tables on SQLite side

Quick Start

Example script (default output) with sysmon pipeline

Add pipelines

poetry add pysigma-pipeline-sysmon
poetry add pysigma-pipeline-windows

Convert a rule

from sigma.collection import SigmaCollection
from sigma.backends.sqlite import sqlite
from sigma.pipelines.sysmon import sysmon_pipeline
from sigma.pipelines.windows import windows_logsource_pipeline

# Combine pipelines to map both Channel and EventID:
# 1. sysmon_pipeline: maps category (e.g., process_creation) -> EventID (e.g., 1)
#                     and changes logsource to service=sysmon
# 2. windows_logsource_pipeline: maps service=sysmon -> Channel
#
# For process_creation/windows, this produces:
#   Channel='Microsoft-Windows-Sysmon/Operational' AND EventID=1
combined_pipeline = sysmon_pipeline() + windows_logsource_pipeline()
sqlite_backend = sqlite.sqliteBackend(combined_pipeline)
# Set the table name for the generated SQL queries
sqlite_backend.table = "logs"


rule = SigmaCollection.from_yaml(
r"""
    title: Test
    status: test
    logsource:
        category: test_category
        product: test_product
    detection:
        sel:
            fieldA: valueA
            fieldB: valueB
        condition: sel
""")

print(sqlite_backend.convert(rule)[0])

Running

poetry run python3 example.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysigma_backend_sqlite-1.1.2.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pysigma_backend_sqlite-1.1.2-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file pysigma_backend_sqlite-1.1.2.tar.gz.

File metadata

  • Download URL: pysigma_backend_sqlite-1.1.2.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pysigma_backend_sqlite-1.1.2.tar.gz
Algorithm Hash digest
SHA256 e6e3914092ec4737cd61c06f27decdcd5a25a3f4af28200b98b1f669054df6f2
MD5 730e36532fa0a754fe10b298fcb3285a
BLAKE2b-256 87e23e7175b096b3f051a536ea9c7b0cec34602cc8405368450435b4916d4215

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysigma_backend_sqlite-1.1.2.tar.gz:

Publisher: release.yml on SigmaHQ/pySigma-backend-sqlite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pysigma_backend_sqlite-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pysigma_backend_sqlite-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ef6c17e1c93a025d716b2b5c71daef394bb38cbfef46bf7385c56a910e46a091
MD5 d60bff333e1f40f4ed6dec12c9bf6b2e
BLAKE2b-256 c42fa999afec2fade6dc12582341a3a5b04ea8880c9ee1860f2f6c98e7610e79

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysigma_backend_sqlite-1.1.2-py3-none-any.whl:

Publisher: release.yml on SigmaHQ/pySigma-backend-sqlite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page