Detection rules › Splunk
Windows Phantom DLL Created on Disk
The following analytic detects creation of DLL files with names associated with phantom DLL hijacking opportunities. These DLLs are usually absent from standard Windows installations, but legitimate Windows components or services may attempt to load them when they are present in expected search paths such as System32. Phantom DLL hijacking involves placing a malicious DLL where a legitimate process will search for a non-existent dependency, allowing the attacker-controlled library to execute in that process context. ShieldBreak is one example where the exploit redirects a privileged Defender-driven write into C:\Windows\System32\phoneinfo.dll and then triggers Windows Error Reporting so wermgr.exe loads the planted DLL at SYSTEM integrity. If confirmed malicious, this activity can indicate preparation for code execution, persistence, or local privilege escalation through DLL search order hijacking.
Known false positives
- Some legacy or third-party components may create DLLs with these names for legitimate compatibility reasons, but creation in Windows system paths should be uncommon. Review the creating process, signer, file hash, path, and whether the DLL is expected on the host before tuning.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Privilege Escalation | |
| Stealth |
Telemetry coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule body
name: Windows Phantom DLL Created on Disk
id: 34cb2dfb-1dec-4b6b-bc72-c3904e5e4521
version: 2
creation_date: '2026-08-17'
modification_date: '2026-08-20'
author: Onur Mustafa Erdogan, Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: |-
The following analytic detects creation of DLL files with names associated with phantom DLL hijacking opportunities.
These DLLs are usually absent from standard Windows installations, but legitimate Windows components or services may attempt to load them when they are present in expected search paths such as System32.
Phantom DLL hijacking involves placing a malicious DLL where a legitimate process will search for a non-existent dependency, allowing the attacker-controlled library to execute in that process context.
ShieldBreak is one example where the exploit redirects a privileged Defender-driven write into C:\Windows\System32\phoneinfo.dll and then triggers Windows Error Reporting so wermgr.exe loads the planted DLL at SYSTEM integrity.
If confirmed malicious, this activity can indicate preparation for code execution, persistence, or local privilege escalation through DLL search order hijacking.
data_source:
- Sysmon EventID 11
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Filesystem where
Filesystem.action IN ("created","modified")
Filesystem.file_path IN (
"*:\\Windows\\System32\\axeonoffhelper.dll",
"*:\\Windows\\System32\\cdpsgshims.dll",
"*:\\Windows\\System32\\oci.dll",
"*:\\Windows\\System32\\offdmpsvc.dll",
"*:\\Windows\\System32\\shellchromeapi.dll",
"*:\\Windows\\System32\\TSMSISrv.dll",
"*:\\Windows\\System32\\TSVIPSrv.dll",
"*:\\Windows\\System32\\wbem\\wbemcomn.dll",
"*:\\Windows\\System32\\WLBSCTRL.dll",
"*:\\Windows\\System32\\wow64log.dll",
"*:\\Windows\\System32\\WptsExtensions.dll",
"*\\phoneinfo.dll",
"*\\SprintCSP.dll"
)
by Filesystem.action Filesystem.dest Filesystem.file_hash
Filesystem.file_name Filesystem.file_path Filesystem.process_id
Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_phantom_dll_created_on_disk_filter`
how_to_implement: |-
To successfully implement this search, you need file creation telemetry from Windows endpoints mapped into the Endpoint.Filesystem datamodel.
If you are using Sysmon, enable EventID 11 and ensure the FileCreate configuration captures the full target filename for DLL creations in Windows system paths.
known_false_positives: |-
Some legacy or third-party components may create DLLs with these names for legitimate compatibility reasons, but creation in Windows system paths should be uncommon.
Review the creating process, signer, file hash, path, and whether the DLL is expected on the host before tuning.
references:
- http://remoteawesomethoughts.blogspot.com/2019/05/windows-10-task-schedulerservice.html
- https://clement.notin.org/blog/2020/09/12/CVE-2020-7315-McAfee-Agent-DLL-injection/
- https://decoded.avast.io/martinchlumecky/png-steganography/
- https://github.com/blackarrowsec/redteam-research/tree/26e6fc0c0d30d364758fa11c2922064a9a7fd309/LPE%20via%20StorSvc
- https://github.com/Wh04m1001/SysmonEoP
- https://itm4n.github.io/cdpsvc-dll-hijacking/
- https://posts.specterops.io/lateral-movement-scm-and-dll-hijacking-primer-d2f61e8ab992
- https://securelist.com/passiveneuron-campaign-with-apt-implants-and-cobalt-strike/117745/
- https://www.crowdstrike.com/en-us/blog/4-ways-adversaries-hijack-dlls/
- https://www.cyderes.com/howler-cell/rogueplanet-windows-zero-day
- https://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/
- https://www.hexacorn.com/blog/2016/06/02/beyond-good-ol-run-key-part-40/
- https://www.hexacorn.com/blog/2025/06/14/wermgr-exe-boot-offdmpsvc-dll-lolbin/
- https://www.hexacorn.com/blog/2025/06/14/wpr-exe-boottrace-phantom-dll-axeonoffhelper-dll-lolbin/
- https://www.threatlocker.com/blog/nightmareeclipse-releases-new-poc-shieldbreak-exploits-same-weakness-as-rogueplanet
- https://x.com/0gtweet/status/1564131230941122561
finding:
title: A phantom DLL candidate named [$file_name$] was created at [$file_path$] on [$dest$]
entity:
field: dest
type: system
score: 50
threat_objects:
- field: file_name
type: file_name
- field: file_path
type: file_path
analytic_story:
- RoguePlanet
- Windows Privilege Escalation
- Windows Defense Evasion Tactics
asset_type: Endpoint
mitre_attack_id:
- T1574.001
- T1068
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Filesystem where
Filesystem.action IN ("created","modified")
Filesystem.file_path IN (
"*:\\Windows\\System32\\axeonoffhelper.dll",
"*:\\Windows\\System32\\cdpsgshims.dll",
"*:\\Windows\\System32\\oci.dll",
"*:\\Windows\\System32\\offdmpsvc.dll",
"*:\\Windows\\System32\\shellchromeapi.dll",
"*:\\Windows\\System32\\TSMSISrv.dll",
"*:\\Windows\\System32\\TSVIPSrv.dll",
"*:\\Windows\\System32\\wbem\\wbemcomn.dll",
"*:\\Windows\\System32\\WLBSCTRL.dll",
"*:\\Windows\\System32\\wow64log.dll",
"*:\\Windows\\System32\\WptsExtensions.dll",
"*\\phoneinfo.dll",
"*\\SprintCSP.dll"
)
by Filesystem.action Filesystem.dest Filesystem.file_hash
Filesystem.file_name Filesystem.file_path Filesystem.process_id
Filesystem.user Filesystem.vendor_product
Stage 2: search
| `drop_dm_object_name(Filesystem)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_phantom_dll_created_on_disk_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.action | in |
| field:"event_action" kind:in |
Filesystem.file_path | in |
| field:"TargetFilename" kind:in |