关于 conducting-memory-forensics-with-volatility
面向事件响应人员和数字取证分析人员的 Volatility 3 内存取证技能,用于调查内存镜像中的易失性证据。它涵盖进程、网络连接、代码注入及凭据分析,不用于磁盘镜像或文件系统取证。
主要功能
- 01识别操作系统与符号信息
- 02分析进程列表和进程树
- 03提取活动及近期网络连接
- 04检测进程注入与内存恶意软件
- 05提取凭据和内存伪影
- 06整理结构化取证报告
适用场景
- 01调查仅驻留内存的恶意软件
- 02检查可疑进程注入与 Rootkit
- 03关联进程与命令控制网络连接
- 04在关机前恢复内存中的加密密钥
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill conducting-memory-forensics-with-volatility安装后在 Claude Code 中输入/conducting-memory-forensics-with-volatility确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 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
# GUI-based, select output path, generates .raw file
Windows(DumpIt):
DumpIt.exe
# Creates memory dump in current directory automatically
Linux(AVML - Acquire Volatile Memory for Linux):
./avml output.lime
记录获取元数据:
Acquisition Record:
━━━━━━━━━━━━━━━━━
Target Host: WKSTN-042
RAM Size: 16 GB
Dump File: WKSTN-042_20251115_1445.raw
Dump Size: 16,843,612,160 bytes
SHA-256: a4b3c2d1e5f6...
Acquisition Tool: WinPmem 4.0
Acquired By: [Analyst Name]
Timestamp: 2025-11-15T14:45:00Z
步骤 2:识别操作系统和配置文件
Volatility 3 会自动识别操作系统,但需验证:
# Get system information
vol -f WKSTN-042_20251115_1445.raw windows.info
# Output includes:
# OS: Windows 10 22H2 (Build 19045.3693)
# Kernel Base: 0xf8066c200000
# DTB: 0x1aa000
# Symbols: ntkrnlmp.pdb
步骤 3:分析运行中的进程
检查进程树中是否存在可疑活动:
# List all running processes
vol -f memory.raw windows.pslist
# Show process tree (parent-child relationships)
vol -f memory.raw windows.pstree
# Scan for hidden/unlinked processes (rootkit detection)
vol -f memory.raw windows.psscan
# Compare pslist vs psscan to find hidden processes
# Processes in psscan but NOT in pslist may be hidden by rootkits
进程分析中的关键入侵指标:
svchost.exe运行时没有-k参数或父进程错误(应为services.exe)csrss.exe或lsass.exe的父进程异常- 名称拼写错误的进程(
scvhost.exe、lssas.exe) - 由
outlook.exe、winword.exe或excel.exe派生的异常进程 - 本应单实例的进程出现多个实例(
lsass.exe、smss.exe)
步骤 4:调查网络连接
提取活动及最近关闭的网络连接:
# List all network connections
vol -f memory.raw windows.netscan
# Focus output fields:
# Offset Proto LocalAddr LocalPort ForeignAddr ForeignPort State PID Owner
# 0xe10... TCPv4 10.1.5.42 49721 185.220.101.42 443 ESTAB 3847 update.exe
将可疑连接与进程树交叉比对,以识别 C2 通信。留意:
- 异常进程连接外部 IP
- 非浏览器进程使用高位端口连接端口 443/80
svchost.exe或系统进程连接外部 IP
步骤 5:检测进程注入和恶意软件
使用 malfind 识别注入代码和驻留内存的恶意软件:
# Detect injected code in processes
vol -f memory.raw windows.malfind
# Output shows:
# PID Process Start End Tag Protection Hexdump/Disassembly
# 3847 explorer.exe 0x2a10000 0x2a14000 VadS PAGE_EXECUTE_READWRITE
# MZ header detected - injected PE
# Dump suspicious process memory
vol -f memory.raw windows.memmap --pid 3847 --dump
# List DLLs loaded by a suspicious process
vol -f memory.raw windows.dlllist --pid 3847
# Scan memory with YARA rules
vol -f memory.raw windows.yarascan --yara-file malware_rules.yar
步骤 6:提取凭据和痕迹
从内存中恢复敏感数据:
# Dump registry hives from memory (for password hash extraction)
vol -f memory.raw windows.registry.hivelist
vol -f memory.raw windows.hashdump
# Extract command line history
vol -f memory.raw windows.cmdline
# List handles (files, registry keys, mutexes)
vol -f memory.raw windows.handles --pid 3847
# Extract clipboard contents
vol -f memory.raw windows.clipboard
# Dump cached files from memory
vol -f memory.raw windows.dumpfiles --pid 3847
步骤 7:生成取证报告
将发现汇总为结构化分析报告,记录从内存中提取的所有证据:
- 进程异常,包括 PID、父进程和时间戳
- 网络连接及其关联的进程上下文
- 注入代码区域及其内存保护标志
- 提取的 IOC(哈希、IP、域名、互斥体、注册表项)
- YARA 规则匹配,包括规则名称和匹配偏移
- 凭据暴露情况(发现的哈希、面临风险的账户)
核心概念
| 术语 | 定义 |
|---|---|
| 易失性证据 | 仅存在于 RAM 中、系统断电即丢失的数据;包括运行中的进程、网络连接、加密密钥 |
| 进程注入 | 恶意软件将代码插入合法进程内存空间以规避检测的技术(malfind 可检测此类行为) |
| EPROCESS | 表示进程的 Windows 内核数据结构;psscan 即使这些结构已从活动进程列表中解除链接,仍会搜索它们 |
| VAD(虚拟地址描述符) | 跟踪分配给进程的内存区域的 Windows 内核结构;malfind 会检查 VAD 中可执行但无文件支撑的区域 |
| 符号表 | Volatility 3 用于解析内存的、特定于操作系统的数据结构;根据检测到的操作系统版本自动下载 |
| PAGE_EXECUTE_READWRITE | 表明某内存区域可读、可写且可执行的内存保护标志;是注入恶意代码的常见指示 |
| 内存驻留型恶意软件 | 完全在 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、sleep time、jitter、watermark)
- 运行
windows.cmdline以识别已执行的任何后渗透命令
陷阱:
- 仅分析进程列表而不运行 malfind(会遗漏合法进程中的注入代码)
- 在隔离端点之前未采集内存(EDR 遏制可能触发恶意软件自删除)
- 在较新的 Windows 版本上使用 Volatility 2 配置文件,而不是 Volatility 3 的自动符号解析
输出格式
MEMORY FORENSICS ANALYSIS REPORT
==================================
Incident: INC-2025-1547
Evidence File: WKSTN-042_20251115_1445.raw
SHA-256: a4b3c2d1e5f6...
OS Identified: Windows 10 22H2 (Build 19045)
Analysis Tool: Volatility 3.2.0
PROCESS ANOMALIES
PID Process Parent Anomaly
3847 update.exe powershell Suspicious executable in Temp directory
5102 svchost.exe explorer Wrong parent (expected services.exe)
--- [hidden] --- Found in psscan but not pslist
INJECTED CODE
PID Process Address Range Protection Finding
5102 svchost.exe 0x00A10000-0x00A14 PAGE_EXECUTE_READWRITE MZ header (PE injection)
NETWORK CONNECTIONS
PID Process Local Foreign State
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 MATCHES
Rule: CobaltStrike_Beacon_x64
Match PID: 5102 (svchost.exe)
Offset: 0x00A10240
EXTRACTED IOCS
Hashes: [SHA-256 of dumped injected code]
C2 IPs: 185.220.101.42, 91.215.85.17
C2 Domains: [extracted from beacon config]
Mutexes: Global\MSCTF.Shared.MUTEX.ZRQ
评论
支持 Markdown