DET-001fixture-validated
high severity
PowerShell Launched With an Encoded Command or a Hidden Window Plus a Download Cradle
T1059.001 · PowerShell · windows / process_creation
Detects powershell.exe or pwsh.exe process creation where the command line either carries an
encoded command (-enc / -EncodedCommand / -ec) or combines a hidden window with a download
cradle (Net.WebClient, DownloadString, Invoke-WebRequest, IEX). Both shapes are how Atomic Red
Team T1059.001 launches payloads and how commodity loaders stage second stages. Plain
interactive or scripted PowerShell without those flags is deliberately out of scope.
ATT&CK Enterprise v19.2 and the Atomic test catalog were accessed 2026-08-29.
What is proven: the Elastic query returned 4 synthetic positive fixtures and none of this rule's 3 negative controls in the live-Elasticsearch CI test.
What is not proven: no retained Windows/Sysmon host telemetry exists; VM validation remains pending.
Inspect implementation and limits
Source and compiled targets
Fixtures and validation
Representative blind spot
Case sensitivity is a deployment property, not a rule property. Sigma contains is case-insensitive; the compiled Lucene query is only case-insensitive if the index field is lowercase-normalised.
Read the complete detection write-up
DET-002fixture-validated
critical severity
LSASS Memory Dump via comsvcs MiniDump or ProcDump
T1003.001 · LSASS Memory · windows / process_creation
Detects two documented ways of writing lsass.exe memory to disk without a custom tool: rundll32
invoking the MiniDump export of comsvcs.dll, and Sysinternals ProcDump targeting lsass with a
full (-ma) or mini (-mm) dump. These are Atomic Red Team T1003.001 tests 1, 2 and 9. Direct
system-call dumpers (Dumpert, NanoDump) do not create these command lines and need the
Sysmon process-access (EventID 10) variant recorded in future-work.
ATT&CK Enterprise v19.2 and the Atomic test catalog were accessed 2026-08-29.
What is proven: the Elastic query returned 3 synthetic positive fixtures and none of this rule's 3 negative controls in the live-Elasticsearch CI test.
What is not proven: no retained Windows/Sysmon host telemetry exists; VM validation remains pending.
Inspect implementation and limits
Source and compiled targets
Fixtures and validation
Representative blind spot
Direct-syscall and API-unhooking dumpers (Atomic tests 3, 4, 14), Task Manager (test 5), and Mimikatz operating in memory (test 6, 10) create no matching command line.
Read the complete detection write-up
DET-003fixture-validated
medium severity
Scheduled Task Created to Run as SYSTEM or From a User-Writable Path or Script Host
T1053.005 · Scheduled Task · windows / process_creation
Detects schtasks.exe creating a task that either runs as SYSTEM or whose action points at a
user-writable location (AppData, Temp, Users\Public) or a script host / shell (powershell,
cmd /c, mshta, wscript, cscript, rundll32, regsvr32). This is the shape of Atomic Red Team
T1053.005 tests 1 and 2. Tasks created through the Task Scheduler COM API or PowerShell
cmdlets (tests 4, 6) do not spawn schtasks.exe and need Security 4698 telemetry instead.
ATT&CK Enterprise v19.2 and the Atomic test catalog were accessed 2026-08-29.
What is proven: the Elastic query returned 3 synthetic positive fixtures and none of this rule's 3 negative controls in the live-Elasticsearch CI test.
What is not proven: no retained Windows/Sysmon host telemetry exists; VM validation remains pending.
Inspect implementation and limits
Source and compiled targets
Fixtures and validation
Representative blind spot
Capitalisation: positive 3 (/Create) hits on the lab mapping only; on the stock Elastic mapping the compiled query is case-sensitive (see DET-001, Blind spots).
Read the complete detection write-up
DET-004fixture-validated
medium severity
Run Key Persistence Pointing at a User-Writable Path or Script Host
T1547.001 · Registry Run Keys / Startup Folder · windows / registry_set
Detects a registry value written under a Run, RunOnce or Policies\Explorer\Run key whose data
points at a user-writable location (AppData, Temp, Users\Public) or launches a script host or
shell. Atomic Red Team T1547.001 tests 1, 3, 9, 12 and 13 write such values. Values that point
at Program Files binaries are excluded because that is how legitimate software registers tray
agents; the trade-off is documented in the writeup. Startup-folder variants (tests 4-7) are file
writes, not registry sets, and are out of scope for this rule.
ATT&CK Enterprise v19.2 and the Atomic test catalog were accessed 2026-08-29.
What is proven: the Elastic query returned 3 synthetic positive fixtures and none of this rule's 3 negative controls in the live-Elasticsearch CI test.
What is not proven: no retained Windows/Sysmon host telemetry exists; VM validation remains pending.
Inspect implementation and limits
Source and compiled targets
- Sigma: source rule
- Elastic: json, lucene, ndjson (executed with synthetic fixtures)
- LogScale: recorded gap — NoLogsourceMapping: crowdstrike_falcon_pipeline has no event mapping for logsource category=registry_set/product=windows; field names passed through untranslated
Fixtures and validation
Representative blind spot
Startup-folder persistence (Atomic tests 4–7), Winlogon Userinit/Shell (14–15), and BootExecute (17) are different keys or file writes and are out of scope here.
Read the complete detection write-up
DET-005fixture-validated
medium severity
RDP Logon From a Source Outside the Documented Jump Hosts
T1021.001 · Remote Desktop Protocol · windows / security
Detects a successful RemoteInteractive logon (Security 4624, LogonType 10) whose source address
is not one of the documented RDP jump hosts. In the lab the jump hosts are 10.10.20.5 and
10.10.20.6; the list is the tuning surface and must match the environment. Atomic Red Team
T1021.001 test 1 produces this event on the target when it opens mstsc from a workstation.
Restricted Admin and NLA pre-authentication produce additional LogonType 3 events that this
rule deliberately ignores. Local logons carry IpAddress "-" in the raw event; Winlogbeat drops
that value before it reaches source.ip, so no "-" filter is needed at the ECS layer and one
would break the ip-typed field.
ATT&CK Enterprise v19.2 and the Atomic test catalog were accessed 2026-08-29.
What is proven: the Elastic query returned 2 synthetic positive fixtures and none of this rule's 3 negative controls in the live-Elasticsearch CI test.
What is not proven: no retained Windows/Sysmon host telemetry exists; VM validation remains pending.
Inspect implementation and limits
Source and compiled targets
- Sigma: source rule
- Elastic: json, lucene, ndjson (executed with synthetic fixtures)
- LogScale: recorded gap — NoLogsourceMapping: crowdstrike_falcon_pipeline has no event mapping for logsource product=windows/service=security; field names passed through untranslated
Fixtures and validation
Representative blind spot
Restricted Admin mode and some RDP wrappers produce different logon types; the rule only sees type 10.
Read the complete detection write-up
Questions a screen actually asks
Written for a recruiter or hiring manager with a few minutes, ahead of the engineer with an hour. Every answer links to the evidence it rests on, and every figure is derived from the catalog, compile manifest, and validation matrix when this page is generated.
What is this, in one sentence?
5 behaviour-based detection rules for common Windows attacker techniques, written in Sigma, compiled to Elastic and CrowdStrike LogScale, and replayed against synthetic events on a real Elasticsearch in CI, with the line between “the query works” and “the telemetry was really generated” enforced by the build rather than described in a document.
Is this a real SOC deployment? Does it catch real attacks?
No. It is a portfolio lab. Every event the rules have ever matched is a synthetic fixture, no production telemetry has been ingested, and no false-positive rate is claimed. 5 of 5 rules are at the lifecycle state fixture-validated; 0 are validated, and the page says so on every card.
What role is this evidence for?
Detection engineering and SOC analyst or threat-hunting work: authoring Sigma rules with documented blind spots, mapping to MITRE ATT&CK, compiling one rule to two query languages, testing detections in CI with positive and negative controls, and keeping an evidence trail a reviewer can audit. It is not evidence of incident response on production telemetry, and does not claim to be.
What exactly has been proven, and what has not?
Proven: 5 of 5 rules compile to Elastic and 3 of 5 to LogScale; each compiled Elastic query returned exactly its own positives (15 in total) and none of the 15 negative controls on elasticsearch 8.19.20 in CI. Not proven: that any rule fires on Sysmon or Security events generated by a real Windows host. The isolated-VM plan that would prove it is written, per detection, and deliberately unexecuted; until it runs, the promotion gate must fail, and CI asserts that it fails.
Why is LogScale only 3 of 5?
Because the pySigma Falcon pipeline has no mapping for registry-set events or for Security event 4624, and it does not raise when it meets one: it passes the Windows field names through untouched. The compiler treats a query without the Falcon event marker as unsupported and records why, rather than committing a query that could never match. That quiet failure was found here and is the first entry in the validation log.
Is anything actually executed? Is the data real?
No payload runs anywhere. The fixtures are text, hand-authored to the shape of named Atomic Red Team tests (the GUIDs and access dates are recorded beside each fixture), and nothing from a third party is ingested. The public site links those fixtures, which contain command-line shapes such as a comsvcs MiniDump call; they are detection test data that already appears in the public Atomic catalog, not tooling. The site content policy states the boundary: no payload binaries, no execution path, no secrets, no raw host telemetry.
Was it built with AI?
Yes, as a collaboration between the author and Claude Code rather than a hand-off to either. The author set the problem, the lifecycle boundary, the stop conditions, and the rule that every gate is watched failing once before it counts; Claude Code did much of the implementation and testing under those rules. ROADMAP.md records the division of labour, including the unattended passes and two independent tool-assisted reviews whose confirmed findings are tracked there by ID.
Are the numbers on this page hand-typed?
No. This page, the status image in the README, and the compiled queries are all generated from the catalog, the compile manifest, the rules, and the validation matrix, and CI fails if a committed copy differs from a fresh render. The figures in this FAQ are derived from the same sources when the page is built, and a test pins them. The rules are checked against MITRE ATT&CK v19.2 and compiled with pySigma 1.5.0, pinned exactly because a backend upgrade can change the emitted query. One honest caveat: GitHub Pages publishes from the branch on its own, so CI detects drift rather than gating publication.
Has anyone outside the author reviewed it?
Two independent tool-assisted reviews on 4 September 2026, both recommending the repository for junior detection-engineering screens. Every substantive finding was verified in code and is tracked in ROADMAP.md by ID: the wording and truth items are closed; the mechanical promotion gate and the isolated-VM run remain, and both are gated on the owner because they change the lifecycle rather than the presentation.
What would a detection engineer probe first?
Case sensitivity. Sigma “contains” is case-insensitive, but the compiled Lucene query is only case-insensitive if the index field is lowercase-normalised, and the stock Elastic Windows integration maps the command line as a case-sensitive wildcard field. One test proves both outcomes on the same fixture. The second probe is the Falcon pipeline’s quiet failure above. Both are in the README under findings worth knowing before deploying these queries.
How long did it take?
The commit history is the record: built and published on 28 and 29 August 2026, the explorer on 2 September, external review and finalization on 4 September, and the wording pass with this FAQ on 12 September. Speed is not the point. The discipline is that every gate was watched failing once, and the mutation that made it fail is written down in the validation log.
Is it finished, and is it maintained?
The fixture-validated release is finished and tagged. What remains is the only work that would change the lifecycle: a stronger mechanical promotion gate and the isolated-VM run, both owner-gated and described in ROADMAP.md with their stop conditions. Nothing is promoted to validated as polish, and the inverted CI step stays until the last rule earns it. The backlog is in future-work.md.
Can I run it, and is anything hosted?
The unit and contract suite runs from a clean clone with no SIEM. The query replay needs Docker: a localhost-bound Elasticsearch from the compose lab, then one pytest marker. Nothing is hosted beyond this static page, deliberately: Elasticsearch, Kibana, and any laboratory host stay off the internet.
Where should an engineer spend ten minutes?
The DET-001 rule for the logic and its false positives, its write-up for how a SOC would document it, test_siem.py for the two tests that carry every claim, and the validation log for what broke when each gate was tested.