mcpField
C
conducting-memory-forensics-with-volatility

conducting-memory-forensics-with-volatility

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

关于 conducting-memory-forensics-with-volatility

面向事件响应人员和数字取证分析人员的 Volatility 3 内存取证技能,用于调查内存镜像中的易失性证据。它涵盖进程、网络连接、代码注入及凭据分析,不用于磁盘镜像或文件系统取证。

主要功能

  1. 01识别操作系统与符号信息
  2. 02分析进程列表和进程树
  3. 03提取活动及近期网络连接
  4. 04检测进程注入与内存恶意软件
  5. 05提取凭据和内存伪影
  6. 06整理结构化取证报告

适用场景

  1. 01调查仅驻留内存的恶意软件
  2. 02检查可疑进程注入与 Rootkit
  3. 03关联进程与命令控制网络连接
  4. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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 检测到可疑的命名管道活动,但无法确定来源。从可疑端点采集内存转储以进行分析。

方法:

  1. 运行 windows.pstree 以识别进程层级并发现异常的父子关系
  2. 运行 windows.malfind 以检测注入的代码区域,尤其是 svchost.exe 或 rundll32.exe 中的区域
  3. 转储注入的内存区域,并使用 YARA 规则扫描 Cobalt Strike beacon 特征
  4. 运行 windows.netscan 以识别 C2 连接,并与注入进程的 PID 关联
  5. 使用 CobaltStrikeParser 提取 beacon 配置(C2 URL、sleep time、jitter、watermark)
  6. 运行 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