Home SOC Lab Pack · Lab 1, built on the Home SOC foundation
Meridian Logistics Group represents a common and dangerous gap in mid-size organisations: infrastructure provisioned for a specific business need, RDP access for a contractor, that outlives its purpose and its oversight. The jump host had no visibility into authentication activity at all, so a sustained brute-force campaign of roughly 4,000 attempts could run undetected. The brief called for detection within 15 minutes of brute-force success, with supporting evidence, not just an alert that fires, but a documented chain from raw log to dashboard to incident summary.
The approach: enable the right log sources, write detection logic that recognises the specific pattern of high-frequency failed logons followed by a success from the same source, author that same logic as a vendor-neutral Sigma rule and its Elastic equivalent, then validate the entire pipeline against a real simulated attack and a credential-reuse pivot toward the domain controller.
Built directly on the four-endpoint Home SOC foundation: HOM-PC-L002 as the attack source, HOM-PC-W001 as the exposed RDP jump host, HOM-SVR-W004 as the pivot target, and HOM-PC-L003 running the Wazuh Manager that correlates and alerts on the whole chain.
Before simulating anything, both Windows endpoints were confirmed sending logon telemetry end to end. On HOM-PC-W001, a deliberately incorrect runas credential was submitted against the local Administrator account, followed by a correct one. The failed logon was flagged by rule 60122 at level 5; a successful authentication followed 5.2 seconds later, triggering a tight, correctly ordered cluster, privilege assignment (67028), account changed (60110).
The same confirmatory test was repeated on HOM-SVR-W004, with a successful authentication following 43 seconds later, correctly classified by rule 60118 with the same expected supporting events.
local_rules.xml was edited to add the lab1_bruteforce group:
rule 100210 (the failure-threshold base) and rule 100211 (the brute-force success
correlation, 8+ failed logons followed by a success from the same source). Structure was
verified with cat -A before validation. A wazuh-logtest attempt
against rule 100211 returned the generic rule 1002 (unmatched) rather than 100211, a known
limitation, manually pasted logs lack the eventchannel location metadata the rule depends
on, so this was treated as expected rather than a real failure and validation moved to a
live restart instead.
Hydra was installed on the attack source, HOM-PC-L002. The jump host's built-in Administrator account, disabled by default on Windows 11, was enabled with a known credential, and RDP was confirmed running with the correct inbound firewall rule after an initial check found the service stopped.
A custom password wordlist was built for the Hydra simulation, deliberately incorrect entries followed by the known correct Administrator credential, then trimmed to 8 invalid entries plus 1 valid entry to stay within the jump host's lockout threshold of 10 while still meeting rule 100211's frequency requirement of 8.
From HOM-PC-L002, Hydra ran the prepared password list against HOM-PC-W001's RDP service, and the resulting activity was mapped against the MITRE ATT&CK framework alongside the live Wazuh alerts.
Rule 100211 didn't fire on this first live attack. The root cause: Wazuh credited the
built-in rule 92657 (level 6, a generic pass-the-hash/RDP detection) as the primary
classification for the successful logon event, so the custom rule, conditioned on
<if_sid>100210</if_sid>, never saw a matching parent to correlate
against. The fix: change the trigger condition from a specific rule SID to a broader group
context, <if_group>authentication_success</if_group>, so the
correlation fires regardless of which specific built-in rule classifies the successful
logon first.
The Hydra attack was re-run from HOM-PC-L002 against HOM-PC-W001's RDP using the same 9-entry wordlist. Rule 100211 fired at level 12, correctly identifying the full pattern, 8+ failed logons via rule 60122, followed by a successful logon from the same source IP, targeting Administrator@HOM-PC-W001, within milliseconds of the successful logon. The priority collision with rule 92657 was confirmed resolved, validated end to end against a genuine, live RDP brute-force attack rather than a synthetic test.
The brief's scenario has the attacker pivoting toward the domain controller using the same
credentials after the jump host is compromised, lateral movement through valid accounts.
A matching Administrator password was set on HOM-SVR-W004, RDP reachability confirmed, and
the pivot executed via xfreerdp from HOM-PC-L002 using the password already
compromised in the brute-force phase.
The same detection logic proven working in Wazuh was authored as a vendor-neutral Sigma
rule and documented as its Elastic equivalent. One honest technical note: Sigma's
correlation types, value_count for the frequency threshold and
temporal_ordered for the failure-then-success sequence, couldn't express the
full logic as a single rule. Converting through sigma-cli with the Wazuh backend produced
two separate native rules, a counter and a sequence, which had to be manually merged. The
native Wazuh configuration, combining a frequency threshold, sequence tracking, and
same-source correlation in one rule, turned out more expressive than either standard could
cleanly represent on its own. Elastic Security enforces the same structural split: the
frequency threshold maps to a built-in Threshold rule type, and the ordered sequence to a
separate EQL sequence query, not raw KQL.
Scope: Meridian's jump host (HOM-PC-W001) had an exposed RDP service with no logon monitoring, a legacy of contractor remote access that outlived its purpose. This engagement built, tested, and validated detection for exactly that gap.
Detection logic: a custom Wazuh correlation rule (ID 100211) detects eight or more failed RDP logons followed by a successful logon from the same source IP, within a 120-second window.
Results: Phase 1, brute force (HOM-PC-L002 → HOM-PC-W001), Hydra ran a 9-entry credential list against RDP; rule 100211 fired at level 12 within milliseconds of the successful logon. Phase 2, lateral movement (HOM-PC-L002 → HOM-SVR-W004), using the credential compromised in Phase 1, a single clean RDP authentication simulated a valid-account pivot, detected independently by Wazuh's built-in anomalous-logon rules.
False positives: two unrelated alerts on HOM-SVR-W004 during testing were investigated and confirmed as false positives rather than indicators of compromise, a "possible PrintNightmare" alert traced to the legitimate Terminal Services Easy Print driver auto-installed by FreeRDP's printer redirection, and a "PowerShell created executable in Windows root" alert traced to PowerShell's own internal script-policy validation artifacts.
Recommended containment:
The full project report, including the Sigma and Elastic rule YAML, is documented on Notion.