SecureAEye LAB ONLINE · SIG 657 · DET ~41s

← Research

Research report — campaign detection-loop-2026-10-11

_Narrative report, drafted 2026-10-13 from ledger item led-b9bd61b99b62, the run bundles, lab/config/wazuh/rules/local_rules.xml and lab/config/wazuh/sigma-mapping.md. Proposal for human review; nothing here is deployed by this document. Not a deterministic projection: hand-written, every claim cites a ledger event, run id or rule._

At a glance

What was measured

The measurement was the full benign Windows plan run on 2026-10-11 (lab source lab-2026-10-11). Five runs graded partially-detected and were fed into the ledger item:

RunPlan entry / attackInitial reading
run-2026-10-11-001t1021.001-atomic, lateral-movement-via-remote-servicespartial
run-2026-10-11-002t1539-atomic, cookie-theftpartial
run-2026-10-11-003pass-the-hash (t1550.002)partial
run-2026-10-11-004pass-the-ticket (t1550.003)partial
run-2026-10-11-006modbus-dnp3-s7-protocol-abuse (t1571)partial

The engineer then read each bundle against the exact Atomic command rather than the technique label, which is what exposed the three buckets.

Three-bucket triage

Bucket A, gap 1: lateral-movement-via-remote-services (T1021.001 "Disable NLA")

Bucket A, gap 2: cookie-theft (T1539, Chrome v127+ remote-debugging theft)

Bucket B: 100220/100222 shadowed behind the bundled Security base

Bucket C: not SIEM gaps

Public-Sigma-backed vs lab-original (per sigma-mapping.md)

All rules below are translations of public logic; none is claimed as novel detection content.

RuleStatusPublic source it mirrors
100203public-backed (adapted)SigmaHQ Browser Started with Remote Debugging (proc_creation_win_susp_web_browser_debugging); lab adds a parent-image negate
100213public-backed (adapted)SigmaHQ command-line variants of disable-NLA / enable-RDP (proc_creation_win_reg_disable_nla)
100212public-backed (adapted)SigmaHQ registry_set_disable_nla, registry_set_rdp_enabled, RDP Sensitive Settings Changed
100210public-backed, 1:1SigmaHQ proc_creation_win_rdp_hijack_tscon
100221public-backedSigmaHQ win_security_susp_logon_type_9_seclogo; lab FP negates are its own
100222public-backedSigmaHQ win_security_susp_kerberos_rc4; machine-account exclusion matches SigmaHQ/TrustedSec; lab omits the 0x40810000 guard on purpose
100220lab-original infrastructureno Sigma; a feeder providing a stable if_matched_sid anchor for 100240
100240lab-originalcomposite E1 session-usage correlation; no single public Sigma

Note that the validator's prior-art check found 100221 and 100222 are well-covered public idioms, so they add little beyond translation. The re-anchoring work (bucket B) and the telemetry-vs-rule diagnosis are the lab's contribution here, not the rule logic. One divergence: 100212/100213 sigma-mapping text still says 100212 is unreachable because "win-victim Sysmon does not audit RegistryValueSet" (measured 2026-10-12); this predates the 2026-10-14 EID13 enablement, so that row is stale and the accurate current reading is "telemetry on, rule field mismatch".

Proven firing vs load-proven only

RuleStateEvidence
100213proven firingrun-2026-10-12-002 and run-2026-10-14-001, both graded detected
100203proven firingreal msedge --remote-debugging-port launch, alert 2026-10-12 (ledger; no graded bundle)
100212loaded, known not firing in-labEID13 telemetry on, no EID13 alert in run-2026-10-14-001; field fix pending
100220re-anchored, load/static onlyno type 3/9/10 4624 yet; 60119 if_fts pre-emption unchecked
100221re-anchored transitively + FP-hardened, load/static onlyneeds 100220 firing on a type-9 4624
100222re-anchored + FP-hardened, load/static onlyneeds a KDC/4769 the lab lacks
100210pre-existing, not exercised by this Atomicmispredicted for it

Methods note: wazuh-logtest cannot prove any Sysmon/eventchannel/Security rule fires. A pasted {"win":...} event decodes with the json decoder into the syslog tree (rule 1), never reaching rule 60000. wazuh-analysisd -t proves load only. Firing needs a real agent -> manager -> indexer round-trip.

Operator / still open

1. 100212 field fix (G2). Briefly enable logall_json, write one Disable-NLA reg set, read the raw EID13 from wazuh-archives, correct the targetObject/details match to the actual rendering, deploy via sed -i on the single local_rules.xml (never a second rules file), then re-detonate to prove firing. Turn logall_json off afterwards. Until then 100213 covers Disable-NLA, so this is an evasion-resistance refinement, not an open coverage gap. Note the validator's warning that the patch self-verify cannot show 100212 fires (it writes the existing value back, not 0). 2. 100220 fire-test (G2). Re-confirm 60106/67022 on the live manager (ids can drift), deploy the re-anchor, check the 60119 if_fts field set, then run a benign type-3 logon (e.g. loopback SMB) and a type-9 logon (runas /netonly) round-trip. 100221 is tested by the type-9 case. 3. 100222 fire-test (G2). Needs domain/KDC 4769 telemetry. It stays a load-proven proposal and must not be called a validated detection until then. Deploy of the 2026-10-13 FP-hardening is also still G2 and not applied. 4. Do not call the E1 chain covered until 100220/100240 are seen firing. 5. Bucket C decisions. (a) Re-detonate t1571 (t1571-custom-windows) against a listening lin-victim sink so an established connection produces EID3, then regrade 100300. (b) Decide whether to extend the lab with domain/KDC telemetry to measure t1550.002/.003, or accept those entries as out-of-scope for the isolated lab. 6. Residual FP exposure. 100203, 100212 and 100213 have no admin allow-list. Legitimate RDP-enable via System Properties will set fDenyTSConnections=0. 100213's command-line regex is order-dependent and misses reg import of a .reg file. runas /netonly admin activity remains a measured FP for 100221. 7. Housekeeping. Refresh the stale 100212 row in sigma-mapping.md (see above); close ledger item led-b9bd61b99b62 and record this report as a ledger report item with the PR as artifact once reviewed.

Evidence index