detecting-process-injection-techniques

检测和分析恶意软件使用的进程注入技术,包括经典 DLL 注入、进程空洞化、APC 注入、线程劫持 和反射式加载。使用内存取证、API 监控和行为分析来识别注入痕迹。适用于进程注入检测、 代码注入分析、空洞化进程调查或内存威胁检测等请求场景。

9 stars

Best use case

detecting-process-injection-techniques is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

检测和分析恶意软件使用的进程注入技术,包括经典 DLL 注入、进程空洞化、APC 注入、线程劫持 和反射式加载。使用内存取证、API 监控和行为分析来识别注入痕迹。适用于进程注入检测、 代码注入分析、空洞化进程调查或内存威胁检测等请求场景。

Teams using detecting-process-injection-techniques should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/detecting-process-injection-techniques/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/detecting-process-injection-techniques/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/detecting-process-injection-techniques/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How detecting-process-injection-techniques Compares

Feature / Agentdetecting-process-injection-techniquesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

检测和分析恶意软件使用的进程注入技术,包括经典 DLL 注入、进程空洞化、APC 注入、线程劫持 和反射式加载。使用内存取证、API 监控和行为分析来识别注入痕迹。适用于进程注入检测、 代码注入分析、空洞化进程调查或内存威胁检测等请求场景。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 检测进程注入技术

## 适用场景

- EDR 告警显示可疑 API 调用序列(VirtualAllocEx + WriteProcessMemory + CreateRemoteThread)
- 合法进程(explorer.exe、svchost.exe)出现意外的网络连接或文件操作
- 内存取证发现本不应含有可执行代码的内存区域中存在可执行代码
- 调查恶意软件藏匿在可信进程内部的就地取材(LOL)攻击
- 为 EDR 或 SIEM 规则中的特定注入技术构建检测逻辑

**不适用**于标准 DLL 加载分析;注入意味着在未经目标进程配合的情况下将未授权代码植入该进程。

## 前置条件

- Volatility 3,用于注入痕迹的内存取证分析
- 配置了事件 ID 8(CreateRemoteThread)和 10(ProcessAccess)的 Sysmon
- API Monitor 或 x64dbg,用于实时观察注入 API 调用
- Process Hacker 或 Process Explorer,用于检查进程内存区域
- 理解 Windows 内存管理(VirtualAlloc、VAD、页面保护)
- 用于安全执行和监控恶意软件的隔离分析环境

## 工作流程

### 步骤 1:通过内存取证识别注入

使用 Volatility 检测进程内存中的注入代码:

```bash
# malfind:主要的注入检测插件
vol3 -f memory.dmp windows.malfind

# malfind 检测以下内容:
# - 具有 PAGE_EXECUTE_READWRITE(RWX)保护的内存区域
# - 非镜像 VAD 条目中的 PE 头(MZ 签名)
# - 未被磁盘文件支撑的可执行内存

# 按特定进程过滤
vol3 -f memory.dmp windows.malfind --pid 852

# 转储注入的内存区域以供分析
vol3 -f memory.dmp windows.malfind --dump

# 检查 VAD(虚拟地址描述符)树是否存在异常
vol3 -f memory.dmp windows.vadinfo --pid 852

# 检测空洞化进程(内存中的映像与磁盘不匹配)
vol3 -f memory.dmp windows.hollowfind
```

### 步骤 2:对注入技术进行分类

根据痕迹识别所使用的注入方法:

```
进程注入技术与检测痕迹:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 经典 DLL 注入
   API:OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread
   痕迹:目标进程中已加载的 DLL 在已知基线中不存在
   检测:dlllist 中的新 DLL 与磁盘哈希不符、CreateRemoteThread 事件

2. 进程空洞化(RunPE)
   API:CreateProcess(SUSPENDED) -> NtUnmapViewOfSection -> VirtualAllocEx ->
         WriteProcessMemory -> SetThreadContext -> ResumeThread
   痕迹:内存中的进程映像与磁盘文件不匹配
   检测:hollowfind 插件、PE 头与磁盘文件不一致

3. APC 注入
   API:OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> QueueUserAPC
   痕迹:可警觉线程中已排队的 APC 指向注入代码
   检测:线程起始地址超出已知模块范围

4. 线程劫持
   API:OpenProcess -> VirtualAllocEx -> WriteProcessMemory ->
         SuspendThread -> GetThreadContext -> SetThreadContext -> ResumeThread
   痕迹:线程指令指针被修改为指向注入代码
   检测:线程上下文被修改,EIP/RIP 超出模块边界

5. 反射式 DLL 注入
   API:VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread(指向反射式加载器)
   痕迹:DLL 已加载到内存但不在已加载模块列表中
   检测:malfind(非镜像内存中的 PE)、模块不在 ldrmodules 中

6. 进程幻影化(Process Doppelganging)
   API:NtCreateTransaction -> NtCreateFile(事务性)-> NtWriteFile ->
         NtCreateSection -> NtRollbackTransaction -> NtCreateProcessEx
   痕迹:进程由已回滚的事务性文件创建
   检测:磁盘上无对应文件的进程

7. AtomBombing
   API:GlobalAddAtom -> NtQueueApcThread(配合 GlobalGetAtomName)
   痕迹:代码存储在全局原子表中,APC 触发将其复制到目标进程
   检测:异常的原子表条目、APC 注入指标
```

### 步骤 3:通过 Sysmon 事件检测注入

分析 Sysmon 和 Windows 事件日志数据:

```bash
# Sysmon 事件 ID 8:CreateRemoteThread
# 检测一个进程在另一个进程中创建线程的行为
wevtutil qe "Microsoft-Windows-Sysmon/Operational" \
  /q:"*[System[EventID=8]]" /f:text /c:20

# Sysmon 事件 ID 10:ProcessAccess
# 检测对其他进程的可疑访问权限
# DesiredAccess 包含 PROCESS_VM_WRITE(0x0020)+ PROCESS_CREATE_THREAD(0x0002)
wevtutil qe "Microsoft-Windows-Sysmon/Operational" \
  /q:"*[System[EventID=10]]" /f:text /c:20

# Sysmon 事件 ID 1:进程创建
# 通过可疑的父子关系检测进程空洞化
wevtutil qe "Microsoft-Windows-Sysmon/Operational" \
  /q:"*[System[EventID=1]]" /f:text /c:20
```

```python
# 解析 Sysmon 事件中的注入指标
import xml.etree.ElementTree as ET
import subprocess

# 查询 CreateRemoteThread 事件
result = subprocess.run(
    ["wevtutil", "qe", "Microsoft-Windows-Sysmon/Operational",
     "/q:*[System[EventID=8]]", "/f:xml", "/c:100"],
    capture_output=True, text=True
)

suspicious_injections = []
for event_xml in result.stdout.split("</Event>"):
    if not event_xml.strip():
        continue
    try:
        root = ET.fromstring(event_xml + "</Event>")
        ns = {"e": "http://schemas.microsoft.com/win/2004/08/events/event"}
        data = {}
        for d in root.findall(".//e:EventData/e:Data", ns):
            data[d.get("Name")] = d.text

        source = data.get("SourceImage", "")
        target = data.get("TargetImage", "")

        # 标记从异常来源注入系统进程的行为
        system_procs = ["svchost.exe", "explorer.exe", "lsass.exe", "winlogon.exe"]
        if any(p in target.lower() for p in system_procs):
            if not any(p in source.lower() for p in ["csrss.exe", "services.exe", "lsass.exe"]):
                print(f"[!] Suspicious injection: {source} -> {target}")
                suspicious_injections.append(data)
    except:
        pass
```

### 步骤 4:分析注入代码

检查注入的载荷以了解其目的:

```bash
# 从 Volatility malfind 转储注入代码
vol3 -f memory.dmp windows.malfind --pid 852 --dump

# 分析转储的区域
file malfind.*.dmp

# 如果包含 PE(MZ 头),作为独立可执行文件分析
python3 << 'PYEOF'
import pefile

# 尝试作为 PE 解析
try:
    pe = pefile.PE("malfind.852.0x400000.dmp")
    print("Injected PE detected!")
    print(f"  Architecture: {'x64' if pe.FILE_HEADER.Machine == 0x8664 else 'x86'}")
    print(f"  Imports:")
    if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'):
        for entry in pe.DIRECTORY_ENTRY_IMPORT:
            print(f"    {entry.dll.decode()}: {len(entry.imports)} functions")
except:
    print("Not a valid PE - likely shellcode")
    # 作为 Shellcode 分析
    with open("malfind.852.0x400000.dmp", "rb") as f:
        shellcode = f.read()
    print(f"  Size: {len(shellcode)} bytes")
    print(f"  First bytes: {shellcode[:32].hex()}")
PYEOF

# 反汇编 Shellcode
python3 -c "
from capstone import Cs, CS_ARCH_X86, CS_MODE_64
with open('malfind.852.0x400000.dmp', 'rb') as f:
    code = f.read()[:256]
md = Cs(CS_ARCH_X86, CS_MODE_64)
for insn in md.disasm(code, 0x400000):
    print(f'  0x{insn.address:X}: {insn.mnemonic} {insn.op_str}')
"

# 使用 YARA 扫描已知载荷
vol3 -f memory.dmp yarascan.YaraScan --pid 852 --yara-file malware_rules.yar
```

### 步骤 5:映射到 MITRE ATT&CK

在 ATT&CK 框架中对检测到的技术进行分类:

```
MITRE ATT&CK 进程注入子技术(T1055):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
T1055.001  动态链接库注入
T1055.002  可移植可执行文件注入
T1055.003  线程执行劫持
T1055.004  异步过程调用(APC)
T1055.005  线程本地存储
T1055.008  Ptrace 系统调用(Linux)
T1055.009  Proc 内存(/proc/pid/mem - Linux)
T1055.011  额外窗口内存注入
T1055.012  进程空洞化
T1055.013  进程幻影化
T1055.014  VDSO 劫持(Linux)
T1055.015  ListPlanting
```

### 步骤 6:创建检测签名

为已识别的技术构建检测规则:

```yaml
# CreateRemoteThread 注入的 Sigma 规则
title: Suspicious CreateRemoteThread into System Process
logsource:
    product: windows
    service: sysmon
detection:
    selection:
        EventID: 8
        TargetImage|endswith:
            - '\svchost.exe'
            - '\explorer.exe'
            - '\lsass.exe'
    filter:
        SourceImage|endswith:
            - '\csrss.exe'
            - '\services.exe'
            - '\svchost.exe'
    condition: selection and not filter
level: high
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **进程注入** | 在另一个进程的地址空间中执行代码的技术,通常用于规避检测并继承目标进程的信任级别 |
| **进程空洞化** | 以挂起状态创建合法进程、取消映射其内存、写入恶意代码并恢复执行,以伪装成合法进程 |
| **反射式 DLL 注入** | 在不使用 Windows 加载器的情况下将 DLL 加载到进程内存中,使 DLL 不出现在已加载模块列表中 |
| **APC 注入** | 向目标进程中的线程排队异步过程调用,使其在线程进入可警觉状态时执行注入代码 |
| **VAD(虚拟地址描述符)** | 描述进程内存区域的 Windows 内核结构;异常的 VAD 条目(RWX 权限、非镜像 PE)表明存在注入 |
| **CreateRemoteThread** | 在另一个进程中创建线程的 Windows API;是经典 DLL 注入及许多其他注入技术的主要机制 |
| **PAGE_EXECUTE_READWRITE** | 允许读、写和执行的内存保护标志;合法应用程序极少使用,是注入代码的常见指标 |

## 工具与系统

- **Volatility(malfind)**:内存取证插件,通过 VAD 分析和扫描非镜像内存中的 PE 头来检测注入代码
- **Sysmon**:系统监控工具,提供详细的 Windows 事件日志,包括 CreateRemoteThread(EID 8)和 ProcessAccess(EID 10)
- **Process Hacker**:高级进程管理工具,显示详细的内存区域、线程栈和注入模块
- **API Monitor**:Windows 工具,用于监控和记录进程的 API 调用,便于实时观察注入序列
- **pe-sieve**:扫描运行中进程以发现代码注入、钩挂和空洞化迹象的工具

## 常见场景

### 场景:调查空洞化的 svchost.exe 进程

**背景**:EDR 告警显示 svchost.exe 向外部 IP 发起 HTTPS 连接。svchost.exe 通常只与 Microsoft 服务通信,需要进行内存分析以确认进程空洞化。

**方法**:
1. 捕获可疑 svchost.exe 进程的内存转储
2. 运行 Volatility `malfind` 检测进程内存中注入的 PE
3. 将内存中的映像基地址与磁盘上 svchost.exe 文件的哈希进行对比
4. 检查进程父进程(应为 services.exe)和创建参数
5. 从内存中转储空洞化的可执行文件并使用 Ghidra 分析
6. 运行 `netscan` 确认空洞化进程的网络连接
7. 使用 YARA 扫描转储代码以识别恶意软件家族

**注意事项**:
- 不要假设所有 svchost.exe 实例完全相同(每个实例加载不同的服务 DLL)
- 不要忘记检查父进程(空洞化进程通常父进程有误)
- 不要仅依赖进程名称匹配(攻击者特意针对 svchost.exe,因为系统中预期存在多个实例)
- 注意注入源进程可能已经终止

## 输出格式

```
进程注入分析报告
====================================
转储文件:      memory.dmp
分析工具:      Volatility 3.2 + Sysmon

检测到注入
目标进程:      svchost.exe(PID:852)
源进程:        malware.exe(PID:2184)[已终止]
技术:          进程空洞化(T1055.012)

证据
malfind 结果:
  PID 852(svchost.exe):
    地址:0x00400000
    大小:184,320 字节
    保护:PAGE_EXECUTE_READWRITE
    头:MZ(PE32 可执行文件)
    未被磁盘文件支撑

进程验证:
  预期映像:C:\Windows\System32\svchost.exe(SHA-256:aaa...)
  内存映像:未知 PE(SHA-256:bbb...)
  结果:不匹配 - 进程已被空洞化

Sysmon 事件:
  [4688] malware.exe(PID 2184)以挂起状态创建 svchost.exe(PID 852)
  [10]   malware.exe 以 PROCESS_VM_WRITE 权限访问 svchost.exe
  [8]    malware.exe 在 svchost.exe 中创建了远程线程

注入载荷分析
SHA-256:         bbb123def456...
YARA 匹配:       CobaltStrike_Beacon_x64
类型:            Cobalt Strike Beacon(HTTP)
C2:              hxxps://185.220.101[.]42/updates

MITRE ATT&CK
T1055.012  进程空洞化
T1071.001  Web 协议(HTTPS C2)
T1036.005  匹配合法名称(svchost.exe)
```

Related Skills

testing-for-xxe-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。

testing-for-xml-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。

testing-for-host-header-injection

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。

testing-for-email-header-injection

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序邮件功能中的 SMTP 头部注入漏洞,这些漏洞允许攻击者注入额外的邮件头部、修改收件人,并通过联系表单实施垃圾邮件中继。

processing-stix-taxii-feeds

9
from killvxk/cybersecurity-skills-zh

处理通过 TAXII 2.1 服务器分发的 STIX 2.1 威胁情报包,将对象规范化为平台原生模式并路由到相应消费系统。适用于接入新的 TAXII 集合端点、自动化与 ISAC 的双向情报共享,或为格式错误的 STIX 包构建管道验证。当涉及 OASIS STIX、TAXII 服务器配置、MISP TAXII 或 Cortex XSOAR 情报源集成时激活。

performing-packet-injection-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全评估中使用 Scapy、hping3 和 Nemesis 构造并注入自定义网络数据包, 测试防火墙规则、IDS 检测、协议处理能力以及网络协议栈对畸形和伪造流量的抵御能力。

mapping-mitre-attack-techniques

9
from killvxk/cybersecurity-skills-zh

将观察到的对手行为、安全告警和检测规则映射到 MITRE ATT&CK 技术和子技术,以量化检测覆盖率并指导控制优先级。当构建基于 ATT&CK 的覆盖热图、为 SIEM 告警标记技术 ID、将安全控制与对手攻击手册对齐,或向高层报告威胁暴露时使用。适用于涉及 ATT&CK Navigator、Sigma 规则、MITRE D3FEND 或覆盖缺口分析的请求。

hunting-for-process-injection-techniques

9
from killvxk/cybersecurity-skills-zh

通过 Sysmon 事件 ID 8 和 10 以及 EDR 进程遥测,检测进程注入技术(T1055),包括 CreateRemoteThread、进程空洞化和 DLL 注入。

hunting-for-living-off-the-cloud-techniques

9
from killvxk/cybersecurity-skills-zh

狩猎攻击者滥用合法云服务(Azure、AWS、GCP 和 SaaS 平台)进行 C2、数据暂存和数据外泄的行为。

exploiting-template-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

检测并利用 Jinja2、Twig、Freemarker 等模板引擎中的服务器端模板注入(SSTI)漏洞,实现远程代码执行。

exploiting-sql-injection-with-sqlmap

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中使用 sqlmap 检测并利用 SQL 注入漏洞以提取数据库内容。

exploiting-sql-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中,使用手动技术和 sqlmap 等自动化工具识别并利用 Web 应用程序中的 SQL 注入漏洞。测试人员通过基于错误、基于联合、布尔盲注和时间盲注技术,在所有主要数据库引擎(MySQL、PostgreSQL、MSSQL、Oracle)中检测注入点,以演示数据提取、认证绕过和潜在的远程代码执行。