Volatility 内存取证框架使用指南
什么是内存取证
内存取证(Memory Forensics)是从计算机的随机存取存储器(RAM)中提取和分析数据的过程。与磁盘取证不同,RAM 中的数据是动态的、易失的——计算机关机就没了。但 RAM 中包含:
- 当前运行的所有进程(包括恶意进程)
- 网络连接(目标主机与哪些 IP 通信)
- 加密密钥(内存中的明文密钥)
- 注册表(当前系统配置和凭据)
- 密码哈希(Windows 的 SAM/LSA 明文密码)
- 文件句柄(进程正在访问哪些文件)
Volatility 简介
Volatility 是最广泛使用的开源内存取证框架,支持 Windows、Linux、macOS 三大平台的内存镜像分析。Kali 自带 Volatility 3(Python 版本)。
第一步:识别内存镜像格式
Volatility 首先需要知道这是什么操作系统、哪个版本的内存:
vol -f memory.raw windows.info
如果不确定操作系统,可以自动扫描:
vol -f memory.raw windows.info 2>/dev/null || vol -f memory.raw linux.info 2>/dev/null
常用插件(以 Windows 为例)
列出所有进程
vol -f memory.raw windows.pslist
vol -f memory.raw windows.pslist --output-file pslist.txt
对比正常进程列表,找可疑的(伪装成 svchost、但没有对应服务的进程)。
网络连接
vol -f memory.raw windows.netstat
列出目标主机所有 TCP/UDP 连接,包括当前活跃的、监听的、已建立的。找 C2 通信的关键线索。
命令历史(PowerShell)
vol -f memory.raw windows.powershell
提取密码哈希
vol -f memory.raw windows.hashdump
导出 Windows SAM + LSA 的密码哈希,可以直接喂给 Hashcat 破解。
注册表分析
# 列出注册表项
vol -f memory.raw windows.printkey --key "Microsoft\\Windows\\CurrentVersion\\Run"
# 提取注册表值
vol -f memory.raw windows.registry.printkey --key "ControlSet001\\Services"
Run key 和 RunOnce key 是持久化木马的经典位置。
文件下载分析
# 列出内存中的文件对象
vol -f memory.raw windows.filescan | grep "Download"
导出恶意进程的内存片段
# 找到可疑进程 PID(比如 PID 1234)
vol -f memory.raw windows.vad --pid 1234 --dump
导出后可以用 7-Zip 解压,得到进程的内存镜像,再用 Ghidra/IDA 分析。
Linux 内存取证
同样实用,插件名略有不同:
vol -f linux-memory.raw linux.pslist
vol -f linux-memory.raw linux.netstat
vol -f linux-memory.raw linux.bash
vol -f linux-memory.raw linux.mount
vol -f linux-memory.raw linux.hashdump
与磁盘取证配合
内存取证和磁盘取证是互补关系:
- 内存取证发现实时攻击行为(正在运行的恶意进程、当前网络连接)
- 磁盘取证发现持久化痕迹(被篡改的系统文件、注册表 Run key)
- 组合使用才能还原完整的攻击链
实战场景:确认是否中了勒索软件
- 目标主机被勒索软件加密后立刻断电,用 DD 工具 dump 内存
- Volatility
windows.pslist找到勒索软件进程 windows.netstat找到勒索软件的 C2 服务器 IPwindows.hashdump提取内存中的密码哈希(勒索软件通常不会加密已登录用户的凭据)- 把勒索软件进程的 VAD 导出来,送 VirusTotal 分析
Volatility 2 vs Volatility 3
Kali 可能同时包含两个版本:
- Volatility 2.x:Python 2 时代,插件更丰富,社区资源多
- Volatility 3.x:Python 3 重写,速度更快,插件体系重构(部分 V2 插件未迁移)
两个都要会——某些插件只有 V2 有。