mcpField
M
memory-forensics

memory-forensics

github.com/wshobson安全41.9k11.2k 次安装2 周前更新
代码仓库

关于 memory-forensics

面向事件响应人员和恶意软件分析人员的内存取证技能。介绍 RAM 转储采集,并使用 Volatility 3、YARA 等工具检查进程、网络活动、注入代码、凭据及其他痕迹。

主要功能

  1. 01实时系统与虚拟机内存采集
  2. 02Volatility 3 分析流程
  3. 03进程与网络痕迹检查
  4. 04代码注入和 Rootkit 检测模式
  5. 05凭据与字符串提取
  6. 06使用 YARA 扫描内存

适用场景

  1. 01在事件响应中调查内存
  2. 02筛查 RAM 转储中的恶意软件痕迹
  3. 03检查可疑进程注入或 Rootkit
  4. 04从内存中恢复凭据或打开文件痕迹

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshobson/agents --skill memory-forensics

安装后在 Claude Code 中输入/memory-forensics确认已加载。

附带文件references/details.md

详细介绍

内存取证

用于事件响应和恶意软件分析的内存转储获取、分析与工件提取综合技术。

何时使用此技能

  • 在事件响应或入侵调查期间执行内存分析
  • 从 RAM 捕获中提取恶意软件工件(进程、注入代码、网络连接)
  • 在关机前从活动的 Windows/Linux/macOS 系统获取易失性内存
  • 使用 Volatility 3 / Rekall 对内存转储进行初步排查
  • 从进程内存中恢复凭据、浏览器会话或打开的文件

内存获取

实时获取工具
Windows
# WinPmem (Recommended)
winpmem_mini_x64.exe memory.raw

# DumpIt
DumpIt.exe

# Belkasoft RAM Capturer
# GUI-based, outputs raw format

# Magnet RAM Capture
# GUI-based, outputs raw format
Linux
# LiME (Linux Memory Extractor)
sudo insmod lime.ko "path=/tmp/memory.lime format=lime"

# /dev/mem (limited, requires permissions)
sudo dd if=/dev/mem of=memory.raw bs=1M

# /proc/kcore (ELF format)
sudo cp /proc/kcore memory.elf
macOS
# osxpmem
sudo ./osxpmem -o memory.raw

# MacQuisition (commercial)
虚拟机内存
# VMware: .vmem file is raw memory
cp vm.vmem memory.raw

# VirtualBox: Use debug console
vboxmanage debugvm "VMName" dumpvmcore --filename memory.elf

# QEMU
virsh dump <domain> memory.raw --memory-only

# Hyper-V
# Checkpoint contains memory state

详细章节:Volatility 3 框架

原本是此 SKILL.md 中一个 2680 字节的章节。已移至 references/details.md,以适应 Codex 的 8 KB 技能正文上限。

分析工作流

恶意软件分析工作流
# 1. Initial process survey
vol -f memory.raw windows.pstree > processes.txt
vol -f memory.raw windows.pslist > pslist.txt

# 2. Network connections
vol -f memory.raw windows.netscan > network.txt

# 3. Detect injection
vol -f memory.raw windows.malfind > malfind.txt

# 4. Analyze suspicious processes
vol -f memory.raw windows.dlllist --pid <PID>
vol -f memory.raw windows.handles --pid <PID>

# 5. Dump suspicious executables
vol -f memory.raw windows.pslist --pid <PID> --dump

# 6. Extract strings from dumps
strings -a pid.<PID>.exe > strings.txt

# 7. YARA scanning
vol -f memory.raw windows.yarascan --yara-rules malware.yar
事件响应工作流
# 1. Timeline of events
vol -f memory.raw windows.timeliner > timeline.csv

# 2. User activity
vol -f memory.raw windows.cmdline
vol -f memory.raw windows.consoles

# 3. Persistence mechanisms
vol -f memory.raw windows.registry.printkey \
    --key "Software\Microsoft\Windows\CurrentVersion\Run"

# 4. Services
vol -f memory.raw windows.svcscan

# 5. Scheduled tasks
vol -f memory.raw windows.scheduled_tasks

# 6. Recent files
vol -f memory.raw windows.filescan | grep -i "recent"

数据结构

Windows 进程结构
// EPROCESS (Executive Process)
typedef struct _EPROCESS {
    KPROCESS Pcb;                    // Kernel process block
    EX_PUSH_LOCK ProcessLock;
    LARGE_INTEGER CreateTime;
    LARGE_INTEGER ExitTime;
    // ...
    LIST_ENTRY ActiveProcessLinks;   // Doubly-linked list
    ULONG_PTR UniqueProcessId;       // PID
    // ...
    PEB* Peb;                        // Process Environment Block
    // ...
} EPROCESS;

// PEB (Process Environment Block)
typedef struct _PEB {
    BOOLEAN InheritedAddressSpace;
    BOOLEAN ReadImageFileExecOptions;
    BOOLEAN BeingDebugged;           // Anti-debug check
    // ...
    PVOID ImageBaseAddress;          // Base address of executable
    PPEB_LDR_DATA Ldr;              // Loader data (DLL list)
    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
    // ...
} PEB;
VAD(虚拟地址描述符)
typedef struct _MMVAD {
    MMVAD_SHORT Core;
    union {
        ULONG LongFlags;
        MMVAD_FLAGS VadFlags;
    } u;
    // ...
    PVOID FirstPrototypePte;
    PVOID LastContiguousPte;
    // ...
    PFILE_OBJECT FileObject;
} MMVAD;

// Memory protection flags
#define PAGE_EXECUTE           0x10
#define PAGE_EXECUTE_READ      0x20
#define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80

检测模式

进程注入指标
# Malfind indicators
# - PAGE_EXECUTE_READWRITE protection (suspicious)
# - MZ header in non-image VAD region
# - Shellcode patterns at allocation start

# Common injection techniques
# 1. Classic DLL Injection
#    - VirtualAllocEx + WriteProcessMemory + CreateRemoteThread

# 2. Process Hollowing
#    - CreateProcess (SUSPENDED) + NtUnmapViewOfSection + WriteProcessMemory

# 3. APC Injection
#    - QueueUserAPC targeting alertable threads

# 4. Thread Execution Hijacking
#    - SuspendThread + SetThreadContext + ResumeThread
Rootkit 检测
# Compare process lists
vol -f memory.raw windows.pslist > pslist.txt
vol -f memory.raw windows.psscan > psscan.txt
diff pslist.txt psscan.txt  # Hidden processes

# Check for DKOM (Direct Kernel Object Manipulation)
vol -f memory.raw windows.callbacks

# Detect hooked functions
vol -f memory.raw windows.ssdt  # System Service Descriptor Table

# Driver analysis
vol -f memory.raw windows.driverscan
vol -f memory.raw windows.driverirp
凭据提取
# Dump hashes (requires hivelist first)
vol -f memory.raw windows.hashdump

# LSA secrets
vol -f memory.raw windows.lsadump

# Cached domain credentials
vol -f memory.raw windows.cachedump

# Mimikatz-style extraction
# Requires specific plugins/tools

YARA 集成

编写内存 YARA 规则
rule Suspicious_Injection
{
    meta:
        description = "Detects common injection shellcode"

    strings:
        // Common shellcode patterns
        $mz = { 4D 5A }
        $shellcode1 = { 55 8B EC 83 EC }  // Function prologue
        $api_hash = { 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 }  // Push hash, call

    condition:
        $mz at 0 or any of ($shellcode*)
}

rule Cobalt_Strike_Beacon
{
    meta:
        description = "Detects Cobalt Strike beacon in memory"

    strings:
        $config = { 00 01 00 01 00 02 }
        $sleep = "sleeptime"
        $beacon = "%s (admin)" wide

    condition:
        2 of them
}
扫描内存
# Scan all process memory
vol -f memory.raw windows.yarascan --yara-rules rules.yar

# Scan specific process
vol -f memory.raw windows.yarascan --yara-rules rules.yar --pid 1234

# Scan kernel memory
vol -f memory.raw windows.yarascan --yara-rules rules.yar --kernel

字符串分析

提取字符串
# Basic string extraction
strings -a memory.raw > all_strings.txt

# Unicode strings
strings -el memory.raw >> all_strings.txt

# Targeted extraction from process dump
vol -f memory.raw windows.memmap --pid 1234 --dump
strings -a pid.1234.dmp > process_strings.txt

# Pattern matching
grep -E "(https?://|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})" all_strings.txt
用于混淆字符串的 FLOSS
# FLOSS extracts obfuscated strings
floss malware.exe > floss_output.txt

# From memory dump
floss pid.1234.dmp

最佳实践

获取最佳实践
  1. 最小化占用:使用轻量级获取工具
  2. 记录一切:记录捕获时间、工具和哈希
  3. 验证完整性:捕获后立即对内存转储进行哈希
  4. 证据链:保持适当的取证处理
分析最佳实践
  1. 从广处入手:在深入之前先概览全局
  2. 交叉引用:对同一数据使用多个插件
  3. 时间线关联:将内存发现与磁盘/网络关联
  4. 记录发现:保留详细笔记和截图
  5. 验证结果:通过多种方法验证发现
常见陷阱
  • 陈旧数据:内存是易失的,应及时分析
  • 不完整的转储:验证转储大小是否与预期 RAM 匹配
  • 符号问题:确保为操作系统版本使用正确的符号文件
  • 涂抹:内存在获取过程中可能发生变化
  • 加密:某些数据可能在内存中已加密

评论

支持 Markdown