Detecting T1055 Process Injection with Sysmon
When to Use
- When hunting for defense evasion techniques that hide malicious code inside legitimate processes
- After EDR alerts for suspicious cross-process memory access or remote thread creation
- When investigating malware that injects into svchost.exe, explorer.exe, or other system processes
- During purple team exercises testing detection of process injection variants
- When validating Sysmon configuration coverage for injection detection
Prerequisites
- Sysmon deployed with comprehensive configuration capturing Events 1, 7, 8, 10, 25
- Event ID 8 (CreateRemoteThread) enabled for remote thread detection
- Event ID 10 (ProcessAccess) configured with appropriate access mask filters
- Event ID 7 (ImageLoaded) for DLL injection detection
- Event ID 25 (ProcessTampering) for process hollowing on Sysmon 13+
- SIEM platform for correlation and alerting
Workflow
- Monitor CreateRemoteThread (Event 8): Detect when one process creates a thread in another process's address space. This is the primary indicator of classic DLL injection and shellcode injection.
- Analyze ProcessAccess (Event 10): Track cross-process handle requests with PROCESS_VM_WRITE (0x0020), PROCESS_VM_OPERATION (0x0008), and PROCESS_CREATE_THREAD (0x0002) access rights. Legitimate processes rarely need these on other processes.
- Detect Anomalous DLL Loading (Event 7): Identify DLLs loaded from unusual paths (user temp directories, download folders) into system processes.
- Hunt Process Hollowing (Event 25): Sysmon 13+ generates ProcessTampering events when the executable image in memory diverges from what was mapped from disk -- a hallmark of process hollowing (T1055.012).
- Correlate with Process Creation: Link injection events to the originating process creation (Event 1) to build the full attack chain from initial execution to injection.
- Filter Known-Good Cross-Process Activity: Exclude legitimate software that performs cross-process operations (debuggers, AV products, accessibility tools, RMM agents).
- Map to ATT&CK Sub-Techniques: Classify detected injection as classic injection (T1055.001), PE injection (T1055.002), thread execution hijacking (T1055.003), APC injection (T1055.004), thread local storage (T1055.005), process hollowing (T1055.012), or process doppelganging (T1055.013).
Key Concepts
| Concept |
Description |
| T1055.001 |
Dynamic-link Library Injection |
| T1055.002 |
Portable Executable Injection |
| T1055.003 |
Thread Execution Hijacking |
| T1055.004 |
Asynchronous Procedure Call (APC) Injection |
| T1055.005 |
Thread Local Storage |
| T1055.012 |
Process Hollowing |
| T1055.013 |
Process Doppelganging |
| T1055.015 |
ListPlanting |
| Sysmon Event 8 |
CreateRemoteThread detected |
| Sysmon Event 10 |
ProcessAccess with memory write permissions |
| Sysmon Event 25 |
ProcessTampering (image mismatch) |
| Access Mask 0x1FFFFF |
PROCESS_ALL_ACCESS -- full cross-process control |
Tools & Systems
| Tool |
Purpose |
| Sysmon |
Primary telemetry source for injection detection |
| Process Hacker |
Manual investigation of process memory regions |
| PE-sieve |
Scan running processes for hollowed/injected code |
| Moneta |
Detect anomalous memory regions in processes |
| Splunk / Elastic |
SIEM correlation of Sysmon events |
| Volatility |
Memory forensics for injection artifacts |
| Hollows Hunter |
Automated scan for hollowed processes |
Detection Queries
Splunk -- Remote Thread Creation
index=sysmon EventCode=8
| where SourceImage!=TargetImage
| where NOT match(SourceImage, "(?i)(csrss|lsass|services|svchost|MsMpEng|SecurityHealthService|vmtoolsd)\.exe$")
| eval suspicious=if(match(TargetImage, "(?i)(svchost|explorer|lsass|winlogon|csrss|services)\.exe$"), "high_value_target", "normal_target")
| where suspicious="high_value_target"
| table _time Computer SourceImage SourceProcessId TargetImage TargetProcessId StartFunction NewThreadId
Splunk -- Suspicious ProcessAccess Patterns
index=sysmon EventCode=10
| where SourceImage!=TargetImage
| where match(GrantedAccess, "(0x1FFFFF|0x1F3FFF|0x143A|0x0040)")
| where match(TargetImage, "(?i)(lsass|svchost|explorer|winlogon)\.exe$")
| where NOT match(SourceImage, "(?i)(MsMpEng|csrss|services|svchost|taskmgr|procexp)\.exe$")
| table _time Computer SourceImage TargetImage GrantedAccess CallTrace
KQL -- Process Injection via Remote Thread
DeviceEvents
| where Timestamp > ago(7d)
| where ActionType == "CreateRemoteThreadApiCall"
| where InitiatingProcessFileName !in~ ("csrss.exe", "lsass.exe", "services.exe", "svchost.exe")
| where FileName in~ ("svchost.exe", "explorer.exe", "lsass.exe", "winlogon.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine
Sigma Rule -- Process Injection Detection
title: Process Injection via CreateRemoteThread into System Process
status: stable
logsource:
product: windows
category: create_remote_thread
detection:
selection:
TargetImage|endswith:
- '\svchost.exe'
- '\explorer.exe'
- '\lsass.exe'
- '\winlogon.exe'
filter_legitimate:
SourceImage|endswith:
- '\csrss.exe'
- '\lsass.exe'
- '\services.exe'
- '\MsMpEng.exe'
condition: selection and not filter_legitimate
level: high
tags:
- attack.defense_evasion
- attack.t1055
Common Scenarios
- Classic DLL Injection: Malware uses VirtualAllocEx + WriteProcessMemory + CreateRemoteThread to load a malicious DLL into a target process. Detected via Sysmon Event 8.
- Process Hollowing (RunPE): Attacker creates a suspended process, unmaps its image, writes malicious PE, and resumes execution. Detected via Sysmon Event 25.
- APC Injection: Malware queues an Asynchronous Procedure Call to threads of a target process using QueueUserAPC. Harder to detect, requires Event 10 monitoring.
- Reflective DLL Injection: DLL is loaded directly from memory without touching disk, bypassing ImageLoaded detection. Requires memory-level analysis.
- Process Doppelganging: Leverages NTFS transactions to replace a legitimate process image. Detected via process integrity checking.
Output Format
Hunt ID: TH-INJECT-[DATE]-[SEQ]
Host: [Hostname]
Source Process: [Injecting process path]
Source PID: [Process ID]
Target Process: [Target process path]
Target PID: [Process ID]
Injection Type: [DLL/Shellcode/Hollowing/APC]
Sysmon Events: [Event IDs triggered]
Access Mask: [Granted access value]
Risk Level: [Critical/High/Medium/Low]
ATT&CK Sub-Technique: [T1055.xxx]
1---2name: detecting-t1055-process-injection-with-sysmon3description: Detect process injection techniques (T1055) including classic DLL injection, process hollowing, and APC injection by analyzing Sysmon events for cross-process memory operations, remote thread creation, and anomalous DLL loading patterns.4license: Apache-2.05---6
7# Detecting T1055 Process Injection with Sysmon
8
9## When to Use
10
11- When hunting for defense evasion techniques that hide malicious code inside legitimate processes
12- After EDR alerts for suspicious cross-process memory access or remote thread creation
13- When investigating malware that injects into svchost.exe, explorer.exe, or other system processes
14- During purple team exercises testing detection of process injection variants
15- When validating Sysmon configuration coverage for injection detection
16
17## Prerequisites
18
19- Sysmon deployed with comprehensive configuration capturing Events 1, 7, 8, 10, 25
20- Event ID 8 (CreateRemoteThread) enabled for remote thread detection
21- Event ID 10 (ProcessAccess) configured with appropriate access mask filters
22- Event ID 7 (ImageLoaded) for DLL injection detection
23- Event ID 25 (ProcessTampering) for process hollowing on Sysmon 13+
24- SIEM platform for correlation and alerting
25
26## Workflow
27
281. **Monitor CreateRemoteThread (Event 8)**: Detect when one process creates a thread in another process's address space. This is the primary indicator of classic DLL injection and shellcode injection.
292. **Analyze ProcessAccess (Event 10)**: Track cross-process handle requests with PROCESS_VM_WRITE (0x0020), PROCESS_VM_OPERATION (0x0008), and PROCESS_CREATE_THREAD (0x0002) access rights. Legitimate processes rarely need these on other processes.
303. **Detect Anomalous DLL Loading (Event 7)**: Identify DLLs loaded from unusual paths (user temp directories, download folders) into system processes.
314. **Hunt Process Hollowing (Event 25)**: Sysmon 13+ generates ProcessTampering events when the executable image in memory diverges from what was mapped from disk -- a hallmark of process hollowing (T1055.012).
325. **Correlate with Process Creation**: Link injection events to the originating process creation (Event 1) to build the full attack chain from initial execution to injection.
336. **Filter Known-Good Cross-Process Activity**: Exclude legitimate software that performs cross-process operations (debuggers, AV products, accessibility tools, RMM agents).
347. **Map to ATT&CK Sub-Techniques**: Classify detected injection as classic injection (T1055.001), PE injection (T1055.002), thread execution hijacking (T1055.003), APC injection (T1055.004), thread local storage (T1055.005), process hollowing (T1055.012), or process doppelganging (T1055.013).
35
36## Key Concepts
37
38| Concept | Description |
39|---------|-------------|
40| T1055.001 | Dynamic-link Library Injection |
41| T1055.002 | Portable Executable Injection |
42| T1055.003 | Thread Execution Hijacking |
43| T1055.004 | Asynchronous Procedure Call (APC) Injection |
44| T1055.005 | Thread Local Storage |
45| T1055.012 | Process Hollowing |
46| T1055.013 | Process Doppelganging |
47| T1055.015 | ListPlanting |
48| Sysmon Event 8 | CreateRemoteThread detected |
49| Sysmon Event 10 | ProcessAccess with memory write permissions |
50| Sysmon Event 25 | ProcessTampering (image mismatch) |
51| Access Mask 0x1FFFFF | PROCESS_ALL_ACCESS -- full cross-process control |
52
53## Tools & Systems
54
55| Tool | Purpose |
56|------|---------|
57| Sysmon | Primary telemetry source for injection detection |
58| Process Hacker | Manual investigation of process memory regions |
59| PE-sieve | Scan running processes for hollowed/injected code |
60| Moneta | Detect anomalous memory regions in processes |
61| Splunk / Elastic | SIEM correlation of Sysmon events |
62| Volatility | Memory forensics for injection artifacts |
63| Hollows Hunter | Automated scan for hollowed processes |
64
65## Detection Queries
66
67### Splunk -- Remote Thread Creation
68```spl
69index=sysmon EventCode=8
70| where SourceImage!=TargetImage
71| where NOT match(SourceImage, "(?i)(csrss|lsass|services|svchost|MsMpEng|SecurityHealthService|vmtoolsd)\.exe$")
72| eval suspicious=if(match(TargetImage, "(?i)(svchost|explorer|lsass|winlogon|csrss|services)\.exe$"), "high_value_target", "normal_target")
73| where suspicious="high_value_target"
74| table _time Computer SourceImage SourceProcessId TargetImage TargetProcessId StartFunction NewThreadId
75```
76
77### Splunk -- Suspicious ProcessAccess Patterns
78```spl
79index=sysmon EventCode=10
80| where SourceImage!=TargetImage
81| where match(GrantedAccess, "(0x1FFFFF|0x1F3FFF|0x143A|0x0040)")
82| where match(TargetImage, "(?i)(lsass|svchost|explorer|winlogon)\.exe$")
83| where NOT match(SourceImage, "(?i)(MsMpEng|csrss|services|svchost|taskmgr|procexp)\.exe$")
84| table _time Computer SourceImage TargetImage GrantedAccess CallTrace
85```
86
87### KQL -- Process Injection via Remote Thread
88```kql
89DeviceEvents
90| where Timestamp > ago(7d)
91| where ActionType == "CreateRemoteThreadApiCall"
92| where InitiatingProcessFileName !in~ ("csrss.exe", "lsass.exe", "services.exe", "svchost.exe")
93| where FileName in~ ("svchost.exe", "explorer.exe", "lsass.exe", "winlogon.exe")
94| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
95 FileName, ProcessCommandLine
96```
97
98### Sigma Rule -- Process Injection Detection
99```yaml
100title: Process Injection via CreateRemoteThread into System Process
101status: stable
102logsource:
103 product: windows
104 category: create_remote_thread
105detection:
106 selection:
107 TargetImage|endswith:
108 - '\svchost.exe'
109 - '\explorer.exe'
110 - '\lsass.exe'
111 - '\winlogon.exe'
112 filter_legitimate:
113 SourceImage|endswith:
114 - '\csrss.exe'
115 - '\lsass.exe'
116 - '\services.exe'
117 - '\MsMpEng.exe'
118 condition: selection and not filter_legitimate
119level: high
120tags:
121 - attack.defense_evasion
122 - attack.t1055
123```
124
125## Common Scenarios
126
1271. **Classic DLL Injection**: Malware uses VirtualAllocEx + WriteProcessMemory + CreateRemoteThread to load a malicious DLL into a target process. Detected via Sysmon Event 8.
1282. **Process Hollowing (RunPE)**: Attacker creates a suspended process, unmaps its image, writes malicious PE, and resumes execution. Detected via Sysmon Event 25.
1293. **APC Injection**: Malware queues an Asynchronous Procedure Call to threads of a target process using QueueUserAPC. Harder to detect, requires Event 10 monitoring.
1304. **Reflective DLL Injection**: DLL is loaded directly from memory without touching disk, bypassing ImageLoaded detection. Requires memory-level analysis.
1315. **Process Doppelganging**: Leverages NTFS transactions to replace a legitimate process image. Detected via process integrity checking.
132
133## Output Format
134
135```
136Hunt ID: TH-INJECT-[DATE]-[SEQ]
137Host: [Hostname]
138Source Process: [Injecting process path]
139Source PID: [Process ID]
140Target Process: [Target process path]
141Target PID: [Process ID]
142Injection Type: [DLL/Shellcode/Hollowing/APC]
143Sysmon Events: [Event IDs triggered]
144Access Mask: [Granted access value]
145Risk Level: [Critical/High/Medium/Low]
146ATT&CK Sub-Technique: [T1055.xxx]
147```