Stop spinning up real SIEMs for integration tests.
Synthetic SIEM data in three real-vendor shapes
(Falcon LogScale, IBM QRadar,
Splunk Enterprise) with the chaos-engineering and
regression-testing primitives you actually need.
38 multi-source attack scenarios,
record/replay/diff, real-time SSE push. Zero customer data —
every response carries x-mock-source: siemulator.
// One of 38 scenarios — stable IDs survive replays [ { "id": 90011, "offense_id": 90011, "_scenario_id": "S1", "description": "Living-off-the-Land Supply Chain — Proofpoint", "severity": 5, "start_time": 1780839721000, "categories": ["S1", "Sophisticated-Test"], "_raw_alert": { "source": "Proofpoint TAP", "event_type": "MessagesDelivered", "timestamp": "2026-05-22T08:14:22Z" }, "x-mock-source": "siemulator" }, // + 37 more ]
Everything you need to pin SOAR / agent integration behavior, without standing up real SIEMs.
Falcon LogScale (Humio REST), IBM QRadar (offences + Ariel), Splunk Enterprise (search jobs + oneshot). Consumers drop in unchanged — same fields, same envelopes.
Multi-source attack narratives (S1–S5), advanced tradecraft (TEST), synthetic-IOC fixtures (DEMO), pentest chains (SCAN), TI-confirmed (ENRICH). Each carries a stable _scenario_id + offence ID for dedup.
Real-time alert streaming via EventSource. Configurable rate, method-preserving, with monotonic event IDs. Test push-style ingestion in your SOAR without polling.
Inject configurable faults — ?inject_status=503, latency, malformed JSON. Three layers: per-request, env-default, live admin dials. Validate your consumer's failure handling.
Capture every (request, response) pair. Diff two consumer-version runs to detect behavior regressions. Replay captured responses verbatim to snapshot-pin siemulator's own output.
Per-request capture (timestamp, path, status, latency, IP, UA) with auth channels logged as names only — Bearer / SEC / query token values are never stored. Pinned by regression test.
One process, three surface mounts, one shared scenario library. No external dependencies. pip install or docker run and you're done.
Point your XSOAR / Splunk SOAR / Resilient connector at siemulator and exercise three vendor shapes from one fixture. Snapshot-pin the response shape in CI.
?scenarios=all + /api/sessions/<run>/start38 scenarios with stable offence IDs let you reproduce the same incident stream every CI run. Diff two consumer versions to catch regressions before prod.
GET /api/sessions/diff?a=v1&b=v2Multi-source narratives (S1: Proofpoint→Defender→CrowdStrike→Zscaler) let agents practice correlation across vendors. Real-TI fixtures (ENRICH) test the enrichment path.
?scenarios=batch for slow-drip / ?scenarios=replay for bulkReset the served-scenarios set, replay the same chain every cohort. EICAR + WannaCry + Tor egress + Shodan scanner cover the full disposition spectrum.
POST /qradar/_debug/reset_scenarios
Paste a token to populate every curl example with your value, then
run them in-browser via the Try it panel below.
Defaults assume the local-dev token logscale-dev-token /
qradar-dev-token.
Health (no auth required):
LogScale alerts:
QRadar offences (5 synthetic):
All 38 multi-source attack scenarios at once:
Splunk oneshot search:
Runs same-origin against the API you're already looking at. No CORS, no relay.
Streams synthetic alerts from /logscale/api/v1/repositories/detections/stream
via the browser's EventSource API. One alert per
rate seconds. Disconnects cleanly when you click Stop or
leave the page.
Inject configurable faults to test how your consumer handles
5xx, rate-limits, slow responses, and corrupt JSON. Per-request
overrides (anyone can use) attach a ?inject_… param to any
request. Live-tunable env-default % via the admin endpoints below.
Try a one-shot fault on any endpoint:
curl -i "/qradar/api/help?inject_status=503"
curl -i "/qradar/api/help?inject_latency=2000"
curl -i "/qradar/api/siem/offenses?inject_malformed=1" -H "SEC: qradar-dev-token"
Live-tune env-default fault rates (admin-key required):
Twenty-two hand-crafted offences across two batches. S1–S5 are multi-alert narrative chains (e.g. S1 spans 5 alerts across Proofpoint → Defender → CrowdStrike → Zscaler); TEST-A through TEST-J are single-offence advanced-tradecraft scenarios. Click a chip to expand.
Rotating pool drawn from by LogScale /alerts and QRadar
default-mode /offenses. Every alert response picks a
random template; multi-response polls show variety across the pool.
| Tactic | Technique | DetectName | Severity |
|---|---|---|---|
TA0006 Credential Access | T1003.001 LSASS Memory | Credential Dumping via Mimikatz | Critical |
TA0002 Execution | T1059.001 PowerShell | Suspicious PowerShell with Base64 Encoded Command | High |
TA0008 Lateral Movement | T1021.002 SMB Admin Shares | Lateral Movement via PsExec | High |
TA0001 Initial Access | T1566.001 Spearphishing Attachment | Phishing — Suspicious Outlook Attachment | Medium |
TA0011 Command and Control | T1071.001 Web Protocols | Beaconing C2 Traffic to Known Bad Domain | Critical |
TA0003 Persistence | T1547.001 Registry Run Keys | Suspicious File Write to Startup Folder | Medium |
X-Admin-Key)Set X-Admin-Key here to probe:
Capture every (request, response) pair into a named session, then
diff two sessions to detect consumer-behaviour regressions.
Snapshot-pin siemulator's own output by replaying captured responses
via ?replay_from=<session> on any bound endpoint.
Diff two sessions (request-stream regression):
Every request to /logscale/* and /qradar/* is captured
with timestamp, method, path, redacted query, auth channel, client IP,
user-agent, status, duration, and response size. Token values are
never recorded — only the channel name
(bearer / sec / query / none).
Set X-Admin-Key below to probe.