Skip to main content

Professional SOC investigation, threat hunting, and incident narrative engine for security analysts

Project description

soc-chronicle banner

PyPI version Python versions Build Status License GitHub Stars GitHub Issues

Open-source Professional Attack Investigation & Incident Narrative Engine — transforms raw cybersecurity alerts into complete, evidence-driven attack narratives.

Vision

SOC-Chronicle sits between existing detection platforms (SIEM, EDR, XDR, Cloud Security, IDS/IPS) and incident response workflows. Unlike traditional SIEMs that collect and search logs, SOC-Chronicle focuses on:

  • Investigation automation — correlate events, build attack graphs, reconstruct timelines
  • Evidence correlation — every conclusion traces back to supporting evidence
  • Root cause analysis — patient zero, initial compromise, blast radius
  • Deterministic analysis — explainable outputs, no black-box scoring

Key Capabilities (v0.2.0)

  • Unified Log Normalization: Maps logs from Sysmon, Microsoft Sentinel, Okta, PAN-OS, CEF, Zeek, Windows Security, and more into an OCSF-aligned schema with large file stream support.
  • Automated Correlation: Links events temporally and directionally using an in-memory or DuckDB-powered correlation engine.
  • MITRE ATT&CK Mapping: High-fidelity detection of over 70+ techniques including LOLBin abuse, credential access tools, network C2, and lateral movement.
  • Threat Intelligence: Built-in free enrichment from VirusTotal, Shodan InternetDB, IP-API, AlienVault OTX, and GreyNoise.
  • Interactive Reporting: Generates a professional HTML report featuring a dynamic D3.js attack graph, risk gauge, IOC tables, and a chronological attack narrative.
  • Case Management: Triage workflow allowing creation of cases, attaching notes/artifacts, and exporting case summaries.
  • Live Ingestion: Supports parsing Windows EVTX files, watching log directories, Syslog UDP/TCP, and HTTP webhooks.

Installation

# Install from PyPI
pip install soc-chronicle

Install with optional live ingest connectors and PDF export capability:

pip install soc-chronicle[all]

Or pick specific dependencies: [evtx], [watch], [serve], [pdf].

Quick Start

Run a full automated investigation and generate a professional interactive HTML report:

chronicle investigate examples/alert.json --logs examples/logs/ --enrich -o report.html --format html

Triage & Case Management Workflow

Create a case directly from an investigation report:

chronicle case new --from-report report.json

List active cases:

chronicle case list --status open

Add investigation notes:

chronicle case note CASE-A1B2C3D4 "Confirmed lateral movement via SMB."

Supported Ingest Connectors

Connector Description Usage
EVTX Parse Windows Event Log binary files chronicle ingest evtx file.evtx
File Watch Stream from growing local log directories chronicle ingest watch /var/log/syslog
Syslog Receive RFC 5424/3164 Syslog (UDP) chronicle ingest syslog --port 514
Webhook Receive JSON HTTP POSTs chronicle serve --port 8514

Threat Hunting Pack

Automatically generate pivoting queries across Sigma, Splunk, Sentinel, and Elastic for IOCs identified in the alert:

chronicle hunt --alert alert.json --logs /path/to/logs

Advanced Search

Search the normalized event database (DuckDB) quickly:

chronicle search --query "powershell.exe" --field process

Python API

from soc_chronicle import InvestigationEngine

engine = InvestigationEngine()
report = engine.investigate(
    alert="examples/alert.json",
    logs="./examples/logs",
)

print(report.summary)
print(report.narrative)
print(f"Risk: {report.risk.total_score}/100")
print(f"Patient zero: {report.patient_zero}")

Architecture

Security Alert → Alert Intake → IOC Extraction + Log Normalization (OCSF)
                                      ↓
                              Correlation Engine (DuckDB)
                                      ↓
              Attack Graph ← Timeline Engine → Risk Engine
                                      ↓
                        Incident Narrative Generator
                                      ↓
                    Interactive HTML / JSON / Markdown Reports

Configuration

Create chronicle.yaml:

log_level: INFO
correlation_window_seconds: 3600
threat_intel:
  virustotal:
    enabled: true
    api_key: "${VT_API_KEY}"

Plugin Development

Register plugins via entry points in pyproject.toml:

[project.entry-points."soc_chronicle.plugins"]
my_parser = "my_package:MyLogParser"

Implement LogParserPlugin, EnrichmentProviderPlugin, or ExporterPlugin from soc_chronicle.plugins.registry.

Development

pip install -e ".[dev,all]"
pytest
ruff check src tests
mypy src/soc_chronicle
mkdocs serve

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

soc_chronicle-0.2.0.tar.gz (75.8 kB view details)

Uploaded Source

Built Distribution

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

soc_chronicle-0.2.0-py3-none-any.whl (93.7 kB view details)

Uploaded Python 3

File details

Details for the file soc_chronicle-0.2.0.tar.gz.

File metadata

  • Download URL: soc_chronicle-0.2.0.tar.gz
  • Upload date:
  • Size: 75.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for soc_chronicle-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9f2468fc21af9f3f3df2ea95b7f61d9c7fda9aa589144b21734945ca41e51a3f
MD5 e3d3787ce514e6f581d367377f085a12
BLAKE2b-256 9cf8a5c22ca57264ced876e6a2bec1f58ab5c7783f33b1ad6e310b35179e30c6

See more details on using hashes here.

File details

Details for the file soc_chronicle-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: soc_chronicle-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 93.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for soc_chronicle-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58a7acab6ab6a771f37c9e56cd32686fc2818d0071d20a020d8dd35f47692d32
MD5 54009f54a2c83b4fc4ac31a23e5227f0
BLAKE2b-256 dcf58a14e5e974838a9cbc3b531a4940d5206eb2cdac050e19b869ef8beb45e1

See more details on using hashes here.

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