← All case studies
Case Study — Security Hardening

Enterprise Security Hardening

Windows Advanced Audit Policy baseline assessment against Microsoft Security Baseline. 27 subcategories audited. 11 ATT&CK techniques unblocked. Zero regressions.

2026-03-29 Audit policy Microsoft baseline MITRE ATT&CK 0 regressions

Problem / Hypothesis

A structured Splunk threat hunt across 283,976 Windows Security events had identified critical audit gaps — command-line logging disabled, zero failed logon events, no NTLM credential validation telemetry. But closing individual gaps is not the same as having a defensible baseline.

The hypothesis: a systematic subcategory-by-subcategory audit against the Microsoft Security Baseline would reveal the full scope of what was configured, what was missing, and what I had already hardened beyond the baseline.

Environment

Windows 11 Enterprise, domain-joined. Domain controller dc01 (Active Directory). Tools: auditpol /get /category:*, wevtutil, PowerShell registry operations. Pipeline: Windows Security Log → Wazuh Agent → Wazuh Manager → Splunk / OpenSearch → Grafana.

Methodology

Step 1 — Capture before-state snapshot

Full Advanced Audit Policy exported in three formats: plain text, CSV, and Local Security Policy export. This is the documented baseline — everything that follows is diffed against it.

Step 2 — Map against Microsoft Security Baseline

All 27 audit subcategories compared against Microsoft-recommended settings. For each: current state, baseline recommendation, and delta classification (match, superset, gap, or hardened-beyond).

Step 3 — Enable subcategories

Each subcategory enabled for both Success and Failure, with documented justification mapping to detection capability and MITRE ATT&CK technique.

Step 4 — Enable command-line logging

Registry key ProcessCreationIncludeCmdLine_Enabled = 1 set. The single highest-priority gap from the threat hunt — the fix that unlocks triage of every process creation event.

Step 5 — Expand Security Event Log

Default 20MB fills in hours with 27 subcategories active. Expanded to 1GB via wevtutil sl Security /ms:1073741824.

Step 6 — After snapshot and diff

After snapshot captured. Diff report generated as markdown table showing every subcategory change.

Findings

27
Subcategories assessed
14
Matched baseline
9
Superset
12
Hardened beyond
0
Regressions
11
ATT&CK techniques unblocked

MITRE ATT&CK Techniques Unblocked

TechniqueIDEnabling Subcategory
Brute ForceT1110Credential Validation
Golden Ticket / AS-REP RoastingT1558Kerberos Auth Service
KerberoastingT1558.003Kerberos Service Ticket Ops
Account ManipulationT1098Security Group Mgmt
Create AccountT1136User Account Mgmt
Windows Credential ManagerT1555.004DPAPI Activity
Removable MediaT1091Plug and Play Events
Data from Local SystemT1005File System
Run Keys / SAM DumpingT1547.001Registry, SAM
Exfil over USBT1052.001Removable Storage
Disable Event LoggingT1562.002Audit Policy Change

Command-Line Logging

Before / After 4688
BEFORE: EventID 4688 CommandLine = [EMPTY in 100% of events]
AFTER:  EventID 4688 CommandLine = populated with full arguments

Security Log Expansion

Log size change 50x
BEFORE: 20 MB (default)
AFTER:  1 GB (1,073,741,824 bytes)

Self-Detection

Event ID 4719 (Audit Policy Change) fired immediately after the hardening changes. The hardening activity was captured by the same pipeline being hardened. Any future attempt to weaken auditing generates the same event class.

Operational Impact

Gaps closed: bash → base64 pattern (30,855 hits) now includes full command-line arguments. Browser → shell spawning (59 hits) can be classified. Failed logon visibility established. NTLM credential validation captured. Meta-detection via 4719 operational.

Verification

  • Before/after exports: Plain text, CSV, and Local Security Policy at C:\OPS\audit-hardening\
  • CommandLine: index=wazuh data.win.system.eventID=4688 | where len(commandLine)>0 | head 20
  • Failed logon: index=wazuh data.win.system.eventID=4625 | head 20
  • Meta-detection: index=wazuh data.win.system.eventID=4719
  • Log size: wevtutil gl SecuritymaxSize=1073741824
  • Registry: reg query "HKLM\SOFTWARE\...\Audit" /v ProcessCreationIncludeCmdLine_Enabled0x1

What This Demonstrates

Individual gap remediation is reactive. Baseline assessment is systematic. I did both.

The before/after snapshot discipline is borrowed from manufacturing process validation. You don’t declare a changeover complete because you believe it worked. You declare it complete because you can show the documented delta between the before state and the after state, and verify the output changed.