| name | conducting-memory-forensics-with-volatility |
| description | 使用 Volatility 3 执行内存取证分析,从事件响应期间采集的 RAM 转储中提取恶意软件执行、进程注入、网络连接和凭据窃取的证据。涵盖内存采集、进程分析、DLL 检查和恶意软件检测。适用于内存取证、RAM 分析、Volatility 框架、内存转储调查、易失性证据分析或实时内存采集相关请求。
|
| domain | cybersecurity |
| subdomain | incident-response |
| tags | ["memory-forensics","volatility","RAM-analysis","process-injection","DFIR"] |
| version | 1.0.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Volatility 进行内存取证(Memory Forensics with Volatility)
适用场景
- 活跃事件期间端点已被遏制且必须保全易失性证据
- EDR 告警提示仅存在于内存中的进程注入或无文件恶意软件
- 需要从感染勒索软件的系统中恢复加密密钥(在关机前)
- 怀疑存在凭据窃取(Mimikatz、LSASS 转储)且必须确认证据
- 怀疑存在 Rootkit 或内核级攻陷且基于磁盘的分析不足
不适用于分析磁盘镜像或文件系统产物;此类任务请使用磁盘取证工具(Autopsy、FTK)。
前置条件
- 已部署或可用的内存采集工具:WinPmem、Magnet RAM Capture、DumpIt 或 AVML(Linux)
- 已安装 Volatility 3,配有 Python 3.8+ 和所需符号表
- 充足的内存转储存储空间(等于系统 RAM 大小,通常 8-64 GB)
- 用于内存恶意软件检测的 YARA 规则(Florian Roth 的 signature-base、自定义规则)
- 被分析操作系统版本的正常进程和 DLL 参考基线
- 证据处理的监管链文档
工作流程
步骤 1:采集内存镜像
使用取证可靠的方法从目标系统采集 RAM:
Windows(WinPmem):
winpmem_mini_x64.exe output.raw
Windows(Magnet RAM Capture):
MagnetRAMCapture.exe
# 基于图形界面,选择输出路径,生成 .raw 文件
Windows(DumpIt):
DumpIt.exe
# 自动在当前目录创建内存转储
Linux(AVML - Acquire Volatile Memory for Linux):
./avml output.lime
记录采集元数据:
采集记录:
━━━━━━━━━━━━━━━━━
目标主机: WKSTN-042
RAM 大小: 16 GB
转储文件: WKSTN-042_20251115_1445.raw
转储大小: 16,843,612,160 字节
SHA-256: a4b3c2d1e5f6...
采集工具: WinPmem 4.0
采集人: [分析员姓名]
时间戳: 2025-11-15T14:45:00Z
步骤 2:识别操作系统和配置文件
Volatility 3 自动识别操作系统,但需验证:
vol -f WKSTN-042_20251115_1445.raw windows.info
步骤 3:分析运行中的进程
检查进程树以发现可疑活动:
vol -f memory.raw windows.pslist
vol -f memory.raw windows.pstree
vol -f memory.raw windows.psscan
进程分析中的关键失陷指标:
- 运行时没有
-k 参数或父进程错误的 svchost.exe(应为 services.exe)
- 父进程异常的
csrss.exe 或 lsass.exe
- 名称拼写错误的进程(
scvhost.exe、lssas.exe)
- 由
outlook.exe、winword.exe 或 excel.exe 生成的异常进程
- 应为单例的进程出现多个实例(
lsass.exe、smss.exe)
步骤 4:调查网络连接
提取活跃和最近关闭的网络连接:
vol -f memory.raw windows.netscan
将可疑连接与进程树交叉引用以识别 C2 通信。注意:
- 意外进程与外部 IP 的连接
- 非浏览器进程通过高端口号连接至 443/80 端口
svchost.exe 或系统进程与外部 IP 的连接
步骤 5:检测进程注入和恶意软件
使用 malfind 识别注入代码和内存驻留恶意软件:
vol -f memory.raw windows.malfind
vol -f memory.raw windows.memmap --pid 3847 --dump
vol -f memory.raw windows.dlllist --pid 3847
vol -f memory.raw windows.yarascan --yara-file malware_rules.yar
步骤 6:提取凭据和产物
从内存中恢复敏感数据:
vol -f memory.raw windows.registry.hivelist
vol -f memory.raw windows.hashdump
vol -f memory.raw windows.cmdline
vol -f memory.raw windows.handles --pid 3847
vol -f memory.raw windows.clipboard
vol -f memory.raw windows.dumpfiles --pid 3847
步骤 7:生成取证报告
将调查结果汇编成结构化分析报告,记录从内存中提取的所有证据:
- 带 PID、父进程和时间戳的进程异常
- 带关联进程上下文的网络连接
- 带内存保护标志的注入代码区域
- 提取的 IOC(哈希、IP、域名、互斥量、注册表键)
- YARA 规则匹配(规则名称和匹配偏移量)
- 凭据暴露情况(发现的哈希、面临风险的账号)
核心概念
| 术语 | 定义 |
|---|
| 易失性证据(Volatile Evidence) | 仅存在于 RAM 中、系统断电后即丢失的数据;包括运行中的进程、网络连接、加密密钥 |
| 进程注入(Process Injection) | 恶意软件将代码插入合法进程内存空间以规避检测的技术(malfind 可检测此行为) |
| EPROCESS | 代表进程的 Windows 内核数据结构;psscan 即使在进程从活跃进程列表中取消链接后仍会搜索这些结构 |
| VAD(Virtual Address Descriptor,虚拟地址描述符) | 跟踪分配给进程的内存区域的 Windows 内核结构;malfind 检查 VAD 中可执行但非文件支持的区域 |
| 符号表(Symbol Tables) | Volatility 3 用于解析内存的特定操作系统数据结构;根据检测到的操作系统版本自动下载 |
| PAGE_EXECUTE_READWRITE | 表示区域可读、可写和可执行的内存保护标志;注入恶意代码的常见指标 |
| 内存驻留恶意软件(Memory-Resident Malware) | 完全在 RAM 中运行而不向磁盘写入持久文件的恶意软件,使其对传统基于磁盘的杀毒软件不可见 |
工具与系统
- Volatility 3:主要的开源内存取证框架;Python 3 重写版,具有自动符号解析功能
- WinPmem / DumpIt / Magnet RAM Capture:Windows 系统的内存采集工具
- AVML(Acquire Volatile Memory for Linux):微软的开源 Linux 内存采集工具
- YARA:用于将内存转储与恶意软件签名和行为规则进行匹配的模式匹配引擎
- MemProcFS:将内存呈现为虚拟文件系统以供直观浏览的内存分析工具
常见场景
场景:检测内存中的 Cobalt Strike Beacon
背景:EDR 检测到可疑的命名管道活动但无法识别来源。从可疑端点采集内存转储进行分析。
处理方法:
- 运行
windows.pstree 识别进程层次结构并发现异常的父子关系
- 运行
windows.malfind 检测注入代码区域,特别是在 svchost.exe 或 rundll32.exe 中
- 转储注入的内存区域并使用 YARA 规则扫描 Cobalt Strike Beacon 签名
- 运行
windows.netscan 识别 C2 连接并与注入进程 PID 关联
- 使用 CobaltStrikeParser 提取 Beacon 配置(C2 URL、睡眠时间、抖动、水印)
- 运行
windows.cmdline 识别已执行的后渗透命令
常见陷阱:
- 只分析进程列表而不运行 malfind(遗漏合法进程中的注入代码)
- 在隔离端点前未采集内存(EDR 遏制可能触发恶意软件自删除)
- 在较新版本 Windows 上使用 Volatility 2 配置文件而非 Volatility 3 自动符号解析
输出格式
内存取证分析报告
==================================
事件: INC-2025-1547
证据文件: WKSTN-042_20251115_1445.raw
SHA-256: a4b3c2d1e5f6...
已识别操作系统:Windows 10 22H2(Build 19045)
分析工具: Volatility 3.2.0
进程异常
PID 进程名 父进程 异常
3847 update.exe powershell Temp 目录中的可疑可执行文件
5102 svchost.exe explorer 错误的父进程(应为 services.exe)
--- [隐藏] --- 在 psscan 中存在但 pslist 中不存在
注入代码
PID 进程名 地址范围 保护 发现
5102 svchost.exe 0x00A10000-0x00A14 PAGE_EXECUTE_READWRITE MZ 头(PE 注入)
网络连接
PID 进程名 本地 远程 状态
3847 update.exe 10.1.5.42:49721 185.220.101.42:443 ESTABLISHED
5102 svchost.exe 10.1.5.42:51003 91.215.85.17:8443 ESTABLISHED
YARA 匹配
规则: CobaltStrike_Beacon_x64
匹配 PID: 5102(svchost.exe)
偏移量: 0x00A10240
提取的 IOC
哈希: [转储的注入代码的 SHA-256]
C2 IP: 185.220.101.42, 91.215.85.17
C2 域名: [从 Beacon 配置提取]
互斥量: Global\MSCTF.Shared.MUTEX.ZRQ