Professional SOC investigation, threat hunting, and incident narrative engine for security analysts
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f2468fc21af9f3f3df2ea95b7f61d9c7fda9aa589144b21734945ca41e51a3f
|
|
| MD5 |
e3d3787ce514e6f581d367377f085a12
|
|
| BLAKE2b-256 |
9cf8a5c22ca57264ced876e6a2bec1f58ab5c7783f33b1ad6e310b35179e30c6
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58a7acab6ab6a771f37c9e56cd32686fc2818d0071d20a020d8dd35f47692d32
|
|
| MD5 |
54009f54a2c83b4fc4ac31a23e5227f0
|
|
| BLAKE2b-256 |
dcf58a14e5e974838a9cbc3b531a4940d5206eb2cdac050e19b869ef8beb45e1
|