← Back to Explore
splunk_escuAnomaly
Windows WMI Impersonate Token
The following analytic detects WMI token impersonation by identifying `wmiprvse.exe` requesting the query, VM, and duplicate-handle rights associated with WMI process access. It leverages Sysmon EventCode 10 and checks for access masks that combine PROCESS_QUERY_INFORMATION (0x400), PROCESS_QUERY_LIMITED_INFORMATION (0x1000), PROCESS_VM_OPERATION (0x8), PROCESS_VM_READ (0x10), PROCESS_VM_WRITE (0x20), PROCESS_DUP_HANDLE (0x40), and PROCESS_ALL_ACCESS (0x1f3fff).
Detection Query
`sysmon`
EventCode=10
SourceImage="*\\wmiprvse.exe"
```
The 0x1478 mask combines query, VM, and duplicate-handle rights;
The 0x1fffff mas is full process access.
Additional requested rights are allowed.
```
| eval g_access_decimal = tonumber(replace(GrantedAccess,"0x",""),16)
| eval PROCESS_QUERY_INFORMATION = 1024
| eval PROCESS_QUERY_LIMITED_INFORMATION = 4096
| eval PROCESS_VM_OPERATION = 8
| eval PROCESS_VM_READ = 16
| eval PROCESS_VM_WRITE = 32
| eval PROCESS_DUP_HANDLE = 64
| eval WMI_REQUIRED_ACCESS = PROCESS_QUERY_INFORMATION + PROCESS_QUERY_LIMITED_INFORMATION + PROCESS_VM_OPERATION + PROCESS_VM_READ + PROCESS_VM_WRITE + PROCESS_DUP_HANDLE
| eval PROCESS_ALL_ACCESS = 2097151
| eval wmi_access_set = bit_and(g_access_decimal, WMI_REQUIRED_ACCESS)
| eval full_access_set = bit_and(g_access_decimal, PROCESS_ALL_ACCESS)
| where wmi_access_set == WMI_REQUIRED_ACCESS
OR full_access_set == PROCESS_ALL_ACCESS
| stats count min(_time) as firstTime
max(_time) as lastTime
BY user_id dest
signature_id signature granted_access Opcode
SourceImage SourceProcessGUID SourceProcessId
TargetImage TargetProcessGUID TargetProcessId
CallTrace vendor_product
| eval CallTrace=split(CallTrace, "|")
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_wmi_impersonate_token_filter`Author
Teoderick Contreras, Splunk
Data Sources
Sysmon EventID 10
References
Raw Content
name: Windows WMI Impersonate Token
id: cf192860-2d94-40db-9a51-c04a2e8a8f8b
version: 11
creation_date: '2022-10-26'
modification_date: '2026-09-08'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
The following analytic detects WMI token impersonation by identifying `wmiprvse.exe` requesting the query, VM, and duplicate-handle rights associated with WMI process access.
It leverages Sysmon EventCode 10 and checks for access masks that combine PROCESS_QUERY_INFORMATION (0x400), PROCESS_QUERY_LIMITED_INFORMATION (0x1000), PROCESS_VM_OPERATION (0x8), PROCESS_VM_READ (0x10), PROCESS_VM_WRITE (0x20), PROCESS_DUP_HANDLE (0x40), and PROCESS_ALL_ACCESS (0x1f3fff).
data_source:
- Sysmon EventID 10
search: |-
`sysmon`
EventCode=10
SourceImage="*\\wmiprvse.exe"
```
The 0x1478 mask combines query, VM, and duplicate-handle rights;
The 0x1fffff mas is full process access.
Additional requested rights are allowed.
```
| eval g_access_decimal = tonumber(replace(GrantedAccess,"0x",""),16)
| eval PROCESS_QUERY_INFORMATION = 1024
| eval PROCESS_QUERY_LIMITED_INFORMATION = 4096
| eval PROCESS_VM_OPERATION = 8
| eval PROCESS_VM_READ = 16
| eval PROCESS_VM_WRITE = 32
| eval PROCESS_DUP_HANDLE = 64
| eval WMI_REQUIRED_ACCESS = PROCESS_QUERY_INFORMATION + PROCESS_QUERY_LIMITED_INFORMATION + PROCESS_VM_OPERATION + PROCESS_VM_READ + PROCESS_VM_WRITE + PROCESS_DUP_HANDLE
| eval PROCESS_ALL_ACCESS = 2097151
| eval wmi_access_set = bit_and(g_access_decimal, WMI_REQUIRED_ACCESS)
| eval full_access_set = bit_and(g_access_decimal, PROCESS_ALL_ACCESS)
| where wmi_access_set == WMI_REQUIRED_ACCESS
OR full_access_set == PROCESS_ALL_ACCESS
| stats count min(_time) as firstTime
max(_time) as lastTime
BY user_id dest
signature_id signature granted_access Opcode
SourceImage SourceProcessGUID SourceProcessId
TargetImage TargetProcessGUID TargetProcessId
CallTrace vendor_product
| eval CallTrace=split(CallTrace, "|")
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_wmi_impersonate_token_filter`
how_to_implement: This search requires Sysmon Logs and a Sysmon configuration, which includes EventCode 10. This search uses an input macro named `sysmon`. We strongly recommend that you specify your environment-specific configurations (index, source, sourcetype, etc.) for Windows Sysmon logs. Replace the macro definition with configurations for your Splunk environment. The search also uses a post-filter macro designed to filter out known false positives.
known_false_positives: administrator may execute impersonate wmi object script for auditing. Filter is needed.
references:
- https://github.com/trustedsec/SysmonCommunityGuide/blob/master/chapters/process-access.md
- https://www.joesandbox.com/analysis/278341/0/html
drilldown_searches:
- name: View the detection results for - "$dest$"
search: '%original_detection_search% | search dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
- name: View risk events for the last 7 days for - "$dest$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$") | stats count min(_time) as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
earliest_offset: 7d
latest_offset: "0"
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: The [$SourceImage$] requested the access mask [$granted_access$] from [$TargetImage$] on [$dest$]. This may indicate WMI token impersonation.
threat_objects:
- field: SourceImage
type: file_path
analytic_story:
- Qakbot
- Water Gamayun
asset_type: Endpoint
mitre_attack_id:
- T1047
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/wmi_impersonate/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
test_type: unit