memory-forensics-evasion

$npx mdskill add wgpsec/AboutSecurity/memory-forensics-evasion

Analyze memory dumps and evade forensic detection

  • Recover hidden processes and credentials from volatile memory
  • Integrates Volatility3 plugins and memory dump analysis tools
  • Uses decision trees to select specific forensic or evasion techniques
  • Outputs actionable commands and detection avoidance strategies

SKILL.md

.github/skills/memory-forensics-evasionView on GitHub ↗
---
name: memory-forensics-evasion
description: "内存取证与反内存取证方法论。从蓝队视角理解内存取证如何发现恶意行为(Volatility3 分析流程),从红队视角掌握如何规避内存检测(进程隐藏、内存加密、痕迹清除)。当需要分析内存 dump 或设计反取证策略时使用"
metadata:
  tags: "memory,forensics,volatility,anti-forensics,process-hollow,injection,内存取证,反取证,进程隐藏"
  category: "dfir"
  mitre_attack: "T1055,T1070.004,T1014,T1620,T1055.012"
---

# 内存取证与反内存取证

> **双面视角**:理解蓝队如何从内存中找到你 → 设计红队对策让自己不被找到

## ⛔ 深入参考

- Volatility3 完整插件速查与实战命令 → [references/volatility3-cheatsheet.md](references/volatility3-cheatsheet.md)
- 反内存取证技术实现细节 → [references/anti-memory-forensics.md](references/anti-memory-forensics.md)

---

## Part A: 蓝队视角 — 内存取证分析流程

### Phase 1: 内存获取

```bash
# Windows (DumpIt)
DumpIt.exe /OUTPUT memory.raw

# Windows (WinPmem)
winpmem_mini_x64.exe memory.raw

# Linux (LiME)
sudo insmod lime-$(uname -r).ko "path=memory.lime format=lime"

# 远程 (Velociraptor)
# 通过 Velociraptor agent 远程获取内存
```

### Phase 2: Volatility3 分析决策树

```
内存分析目标?
├─ 发现恶意进程 → windows.pslist / windows.psscan / windows.cmdline
├─ 发现注入代码 → windows.malfind / windows.hollowprocesses
├─ 提取网络连接 → windows.netscan / windows.netstat
├─ 提取凭据 → windows.hashdump / windows.lsadump
├─ 发现隐藏进程 → windows.psscan(扫描已释放 EPROCESS)
├─ Rootkit 检测 → windows.ssdt / windows.callbacks
└─ 提取文件 → windows.filescan / windows.dumpfiles
```

**核心命令:**
```bash
# 系统信息
vol -f mem.raw windows.info

# 进程列表(链表遍历 → 已 unlink 的看不到)
vol -f mem.raw windows.pslist

# 进程扫描(池标签扫描 → 能找到隐藏进程)
vol -f mem.raw windows.psscan

# ⛔ 对比 pslist vs psscan → 差异 = 隐藏进程
# pslist 有但 psscan 无 → 异常
# psscan 有但 pslist 无 → 被 unlink 的进程(Rootkit)

# 注入检测(PAGE_EXECUTE_READWRITE 内存区域)
vol -f mem.raw windows.malfind

# 网络连接
vol -f mem.raw windows.netscan

# DLL 列表
vol -f mem.raw windows.dlllist --pid <PID>

# 命令行参数
vol -f mem.raw windows.cmdline
```

### Phase 3: 关键检测指标

| 蓝队检测项 | 含义 |
|-----------|------|
| RWX 内存页 (malfind) | 进程注入/Shellcode |
| 父进程异常 (svchost→cmd) | 恶意进程创建链 |
| pslist ≠ psscan | 进程隐藏(DKOM) |
| 同名异路径进程 | 进程伪装 |
| 异常 VAD 标签 | 内存区域被篡改 |
| SSDT/IDT hook | Rootkit |
| 网络连接到异常端口 | C2 通信 |

---

## Part B: 红队视角 — 反内存取证

### 策略 1: 避免被 malfind 发现

```
malfind 原理:扫描 PAGE_EXECUTE_READWRITE 的 VAD 节点
├─ 对策 1: 分配时用 RW,写入 shellcode 后改为 RX(不要 RWX)
├─ 对策 2: 使用 NtMapViewOfSection 映射 → 权限为 SECTION_MAP_EXECUTE
├─ 对策 3: Module Stomping — 覆盖合法 DLL 的 .text 节
└─ 对策 4: 使用回调执行(APC/Timer)→ 不创建远程线程
```

### 策略 2: 避免进程异常

```
父子进程关系审计绕过:
├─ Parent PID Spoofing → 伪造正常父进程
├─ 使用合法签名进程执行 → LOLBins
├─ 进程名/路径完全模仿 → svchost.exe 在正确路径
└─ 命令行参数正常化 → 不留异常 cmdline
```

### 策略 3: 内存加密(Sleep Mask)

```
Cobalt Strike Sleep Mask 原理:
1. Beacon 进入 Sleep 状态前 → 加密自身在内存中的代码段
2. 加密期间 → malfind 只看到随机数据,无 MZ 头/PE 特征
3. 唤醒时 → 解密执行 → 完成任务 → 再加密

现代 C2 实现:
├─ Havoc: Ekko/Zilean sleep obfuscation(加密 + 更改内存保护)
├─ Sliver: 无需 sleep mask(Go 二进制特征不同)
├─ BRC4: 自带 heap 加密
└─ 自定义: SystemFunction032 (RC4) + VirtualProtect(RW)
```

### 策略 4: 避免 Credential Dump 暴露

```
蓝队会检查 LSASS 访问:
├─ 对策: 用 MiniDumpWriteDump 的替代方式(NanoDump/HandleDuplicate)
├─ 对策: SSP 注入代替直接读取
├─ 对策: 使用 comsvcs.dll 的 MiniDump 导出函数
└─ 对策: Kerberos 票据攻击代替直接 dump
```

### 策略 5: 清除内存痕迹

```
⛔ 注意:内存获取通常是一次性快照,不像日志可以被删除
最佳策略:从一开始就不留痕迹(预防 > 清除)

有限清除手段:
├─ Unmap 已用内存区域 → VirtualFree
├─ 清除线程调用栈 → 伪造 Call Stack
├─ 结束并清理 worker 线程 → 不留挂起线程
└─ Module 卸载 + 内存置零
```

## 对照表:取证技术 vs 红队对策

| 取证技术 | 发现什么 | 红队对策 |
|----------|---------|---------|
| pslist/psscan 对比 | 隐藏进程 | 不隐藏进程,伪装合法进程 |
| malfind | 注入代码 | Module Stomping + RW→RX |
| netscan | C2 连接 | 使用合法流量混淆 |
| hashdump | 凭据被提取 | 使用 Kerberos 代替 NTLM |
| handles | 打开的文件/注册表 | 用完即关闭 handle |
| callbacks/SSDT | Rootkit hook | 避免内核操作 |
| YARA scan | 内存中的恶意特征 | Sleep Mask 加密 |

## 工具速查

| 工具 | 用途 | 方向 |
|------|------|------|
| Volatility3 | 内存取证框架 | 蓝 |
| MemProcFS | 内存文件系统化分析 | 蓝 |
| WinDbg | 内核调试/分析 | 蓝 |
| BeaconEye | 检测 CS Beacon | 蓝 |
| Moneta | 检测内存注入 | 蓝 |
| Sleep Mask Kit | CS sleep 加密 | 红 |
| SysWhispers3 | 直接 syscall(绕 hook)| 红 |
| NanoDump | LSASS 低检测 dump | 红 |

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|