Enable PPL Protection on LSASS to Prevent Credential Dumping via Mimikatz
Enabling LSASS as a Protected Process prevents credential-dumping tools like Mimikatz from reading passwords from memory, even when run as local administrator.
✓ Tested on WS2022·Rollback included
A local administrator on any domain-joined server can dump LSASS memory in seconds and extract NTLM hashes and Kerberos tickets for every user logged on, including Domain Admins. These credentials are then used for lateral movement, pass-the-hash attacks, and eventually full domain compromise. Enabling PPL forces tools to bypass kernel protections, which is significantly harder and leaves more forensic evidence.
LSASS (lsass.exe) manages Windows authentication and stores credential material in memory including Kerberos tickets, NTLM hashes, and in some configurations plaintext passwords. Without PPL (Protected Process Light) enabled, any local administrator can read LSASS memory using tools like Mimikatz, ProcDump, or Task Manager. This is one of the primary techniques used in every stage of post-compromise lateral movement.
Probably yes if any of these apply:
Affected OS versions
LSASS credential dumping is the single most common post-exploitation technique observed in incident response engagements. Ransomware operators dump LSASS on every server they access to accumulate credentials. Without PPL enabled, a single compromised low-privileged server can yield Domain Admin credentials within minutes.
Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1
3.7 KBRollback-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1
2.7 KBSHA-256: 38b31eb623b7c1a82694e01dbf30531cdc276cde204bdaebb4f4727557edb907
Run interactively
.\Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1
Run silently (SCCM / Intune)
.\Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1 -Silent -OutputPath C:\Logs
Manual fallback (no script)
⏱ 10 minutes + rebootCheck Current LSASS Protection Status
$val = Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL -ErrorAction SilentlyContinue
if ($val.RunAsPPL -ge 1) {
Write-Host "SECURE: LSASS PPL is enabled (RunAsPPL = $($val.RunAsPPL))" -ForegroundColor Green
} else {
Write-Host "VULNERABLE: LSASS PPL is not enabled" -ForegroundColor Red
}
Enable LSASS PPL Protection
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL -Value 2 -Type DWord
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPLBoot -Value 2 -Type DWord
Verification After Reboot
Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' | Select-Object RunAsPPL, RunAsPPLBoot
# RunAsPPL must be 1 or 2
Notes
Verify after patching
Confirm the patched version is running:
# Expect: LSASS PPL enabled (RunAsPPL = 2) or later
Script details · parameters · exit codes↓
Tested On
—
Reboot
Reboot RequiredSCCM
✓ Compatible
Est. Time
10 minutes + reboot
Parameters
How to Run
Interactive — see output in console
.\Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1
Silent mode — for SCCM / automation
.\Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1 -Silent
With custom log path
.\Fix-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1 -OutputPath "C:\Logs"
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success — fix applied or already patched |
| 1 | Failure — check log file |
| 3010 | Success — reboot required to complete |
Fix, idempotency, and rollback verified on
⚠ Rollback available. If this fix causes issues, run Rollback-Windows-Server-Lsass-Protection-Enabled-Hardening.ps1 to restore the previous state.