skills/dfir/memory-forensics-evasion/SKILL.md
内存取证与反内存取证方法论。从蓝队视角理解内存取证如何发现恶意行为(Volatility3 分析流程),从红队视角掌握如何规避内存检测(进程隐藏、内存加密、痕迹清除)。当需要分析内存 dump 或设计反取证策略时使用
npx skillsauth add wgpsec/AboutSecurity memory-forensics-evasionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
双面视角:理解蓝队如何从内存中找到你 → 设计红队对策让自己不被找到
# 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 远程获取内存
内存分析目标?
├─ 发现恶意进程 → 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
核心命令:
# 系统信息
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
| 蓝队检测项 | 含义 | |-----------|------| | RWX 内存页 (malfind) | 进程注入/Shellcode | | 父进程异常 (svchost→cmd) | 恶意进程创建链 | | pslist ≠ psscan | 进程隐藏(DKOM) | | 同名异路径进程 | 进程伪装 | | 异常 VAD 标签 | 内存区域被篡改 | | SSDT/IDT hook | Rootkit | | 网络连接到异常端口 | C2 通信 |
malfind 原理:扫描 PAGE_EXECUTE_READWRITE 的 VAD 节点
├─ 对策 1: 分配时用 RW,写入 shellcode 后改为 RX(不要 RWX)
├─ 对策 2: 使用 NtMapViewOfSection 映射 → 权限为 SECTION_MAP_EXECUTE
├─ 对策 3: Module Stomping — 覆盖合法 DLL 的 .text 节
└─ 对策 4: 使用回调执行(APC/Timer)→ 不创建远程线程
父子进程关系审计绕过:
├─ Parent PID Spoofing → 伪造正常父进程
├─ 使用合法签名进程执行 → LOLBins
├─ 进程名/路径完全模仿 → svchost.exe 在正确路径
└─ 命令行参数正常化 → 不留异常 cmdline
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)
蓝队会检查 LSASS 访问:
├─ 对策: 用 MiniDumpWriteDump 的替代方式(NanoDump/HandleDuplicate)
├─ 对策: SSP 注入代替直接读取
├─ 对策: 使用 comsvcs.dll 的 MiniDump 导出函数
└─ 对策: Kerberos 票据攻击代替直接 dump
⛔ 注意:内存获取通常是一次性快照,不像日志可以被删除
最佳策略:从一开始就不留痕迹(预防 > 清除)
有限清除手段:
├─ Unmap 已用内存区域 → VirtualFree
├─ 清除线程调用栈 → 伪造 Call Stack
├─ 结束并清理 worker 线程 → 不留挂起线程
└─ Module 卸载 + 内存置零
| 取证技术 | 发现什么 | 红队对策 | |----------|---------|---------| | 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 | 红 |
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能