MCP内存取证
用于内存取证的高性能MCP服务器,使AI代理能够通过模型上下文协议分析内存转储。采用两层架构构建,将Rust速度与Volatility3覆盖率相结合。
学分
特性
- 两层技术模型:快速Rust引擎(内存)+Volatility3回退,实现最大覆盖率
- 智能高速缓存:带有LRU驱逐的200个条目缓存(在服务器重新启动之前一直有效)
- 自动检测:自动操作系统配置文件检测和插件名称解析
- 高性能:用于常见操作的Rust原生插件(3s vs 60s)
- 全面覆盖:通过挥发性3 API访问可用的挥发性3插件
- 智能路由:自动选择最快的可用发动机
- 无需预分析:如果需要,插件会自动分析图像
性能基准
在Windows崩溃转储上测试(2GB,~109个进程):
| 操作 | 锈蚀(氧化物) | 挥发性3 | 加速 |
|---|---|---|---|
| 分析图像 | 3s | 60s | 快20倍 |
| 进程列表(pslist) | 1.5s | 15s | 快10倍 |
| 网络扫描(netscan) | 2s | 20s | 快10倍 |
需求
- Python 3.10+
- Git CLI-用于克隆/更新Volatility3
stable分支 - Rust工具链(可选,用于从源代码构建内存)
- MCP兼容客户端(克劳德桌面、VSCode、Cline等)
安装
1.配置波动性3源
Volatility3是从托管的git签出加载的,而不是从pip加载的 volatility3 包裹。
创建 .env 在项目根目录中:
cp .env.example .env默认 .env:
VOLATILITY3_REPO_URL=https://github.com/volatilityfoundation/volatility3
VOLATILITY3_BRANCH=stable
VOLATILITY3_REPO_PATH=.cache/volatility3
VOLATILITY3_AUTO_UPDATE=true
VOLATILITY3_UPDATE_INTERVAL_SECONDS=864002.安装MCP服务器
来源:
git clone https://github.com/jus1-c/mem-forensics-mcp-server.git
cd mem-forensics-mcp-server
pip install -e .配置
日志被写入 mem-forensics-mcp.log 在project/install root中,旁边 .env.
克劳德桌面
编辑 claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json\ 窗户: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"mem-forensics": {
"command": "python",
"args": ["-m", "mem_forensics_mcp_server"]
}
}
}VSCode(带Cline扩展)
添加到您的设置中:
{
"mcpServers": {
"mem-forensics": {
"command": "python",
"args": ["-m", "mem_forensics_mcp_server"],
"disabled": false,
"autoApprove": []
}
}
}可用工具
1.记忆_分析_图像
初始化内存映像分析并检测操作系统配置文件。
参数:
image_path:内存转储的绝对路径(必需)dtb:覆盖DTB地址(可选,十六进制字符串)kernel_base:覆盖内核基址(可选,十六进制字符串)
例子:
{
"image_path": "/evidence/memory.raw",
"dtb": "0x1ad000"
}2.内存_运行_插件
运行取证插件。自动路由到Rust(快速)或Vol3(回退)。
参数:
image_path:内存转储的绝对路径(必需)plugin:插件名称-可以是短的(“pslist”)或完整的(“windows.pslist.pslist”)args:插件参数列表(可选,例如\[“--pid”,“1234”\])filter:服务器端筛选器字符串(可选)
重要提示:
- 使用
args所有插件参数的参数 - 输出始终是通过Volatility3 API呈现的JSON
-r json已接受,但由于向后兼容性而忽略- 短插件名称会自动解析为完整格式
示例:
// List all processes
{
"image_path": "/evidence/memory.raw",
"plugin": "pslist"
}
// Dlllist for specific PID
{
"image_path": "/evidence/memory.raw",
"plugin": "dlllist",
"args": ["--pid", "3692"]
}
// Filescan with filter
{
"image_path": "/evidence/memory.raw",
"plugin": "filescan",
"filter": "svchost"
}
// Using full plugin name
{
"image_path": "/evidence/memory.raw",
"plugin": "windows.netscan.NetScan"
}3.内存列表插件
列出两个引擎的所有可用插件。
参数:
image_path:内存转储路径(用于上下文)
退货:
- 9个Rust插件(快速)
- 从托管服务器发现的Vol3插件
stable结账(Windows/Linux/Mac/其他)
4.记忆列表会话
列出所有活动的分析会话。
参数: 无
5.记忆_状态
获取服务器状态和引擎可用性。
参数: 无
6.memory_list_dumpable_files
使用filescan插件列出在内存中找到的文件。
参数:
image_path:内存转储的绝对路径(必需)args:可选参数,如["--pid", "1234"]
7.记忆_工具_帮助
获取任何工具的详细帮助和示例。
参数:
tool_name:工具名称(例如“memory_run_plugin”)
用法示例
基础分析(自动检测)
Please analyze this memory dump and list all processes.
File: /evidence/windows.dmp服务器将:
- 自动分析图像
- 缓存结果
- 退货流程列表
PID滤波器的过程研究
Get command line for process ID 1234 from this memory dump.
File: /evidence/malware.dmp{
"image_path": "/evidence/malware.dmp",
"plugin": "cmdline",
"args": ["--pid", "1234"]
}网络分析
Find all network connections in this memory dump.
File: /evidence/c2.dmp代码注入检测
Scan for injected code (malfind) in this memory dump.
File: /evidence/suspicious.dmp列出内存中的文件
List all files found in memory.
File: /evidence/windows.dmp缓存系统
服务器包括一个智能缓存系统:
- 缓存大小:200个条目(可配置)
- 缓存键:
(image_path, plugin, args) - 坚持:缓存将一直存在,直到服务器重新启动
- 自动清除:分析新图像时清除缓存
- LRU驱逐:缓存已满时删除最旧的条目
优点:
- 对同一插件的第二次查询会立即返回
- TTL缓存在服务器重新启动之前无效
- 每个内存转储文件都有单独的缓存
安全特性
- 路径验证:只允许绝对路径
- 发动机隔离:Rust插件在单独的子进程中运行
- 超时保护:Rust引擎调用超时60秒
- 大小限制:可配置的响应大小限制
- 没有秘密:不记录敏感内存内容
.env变量
| 变量 | 描述 | 默认值 |
|---|---|---|
VOLATILITY3_REPO_URL | Volatility3-git存储库URL | https://github.com/volatilityfoundation/volatility3 |
VOLATILITY3_BRANCH | Volatility 3分支使用 | stable |
VOLATILITY3_REPO_PATH | 本地签出路径,如果不是绝对的,则相对于项目根目录 | .cache/volatility3 |
VOLATILITY3_AUTO_UPDATE | 到期时启动时自动更新签出 | true |
VOLATILITY3_UPDATE_INTERVAL_SECONDS | 自动更新间隔 | 86400 |
建筑
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ MCP Client │────▶│ MCP Server │────▶│ Memoxide │
│ (Claude/VSCode) │ │ (Python/FastMCP)│ │ (Rust) │
└─────────────────┘ └──────────────────┘ └─────────────┘
│ │
│ ┌──────┴──────┐
│ │ Memory Dump │
│ └─────────────┘
▼
┌─────────────┐ ┌─────────────┐
│ Cache │────▶│ Volatility3│
│ (200 entries)│ │ API Fallback│
└─────────────┘ └─────────────┘项目结构
mem-forensics-mcp-server/
├── mem_forensics_mcp_server/
│ ├── __init__.py
│ ├── __main__.py # Entry point
│ ├── server.py # MCP server with tools
│ ├── config.py # Configuration
│ ├── core/
│ │ ├── session.py # Session management
│ │ ├── cache.py # Plugin result caching
│ │ ├── settings.py # .env settings loader
│ │ ├── vol3_repo.py # Managed Volatility3 git checkout
│ │ ├── vol3_api.py # Vol3 API backend
│ │ └── vol3_cli.py # Compatibility shim
│ ├── engine/
│ │ ├── memoxide_client.py # Rust engine client
│ │ └── memoxide/ # Prebuilt binaries
│ │ ├── x86_64/
│ │ └── aarch64/
│ └── utils/
│ └── helpers.py
├── pyproject.toml
├── .env.example
├── README.md
└── .gitignore发展
设置开发环境
pip install -e ".[dev]"构建生锈引擎
cd mem_forensics_mcp_server/engine/memoxide-src
cargo build --release故障排除
备忘录不可用
Memoxide需要特定于平台的二进制文件。包括以下预构建二进制文件:
- Windows x86_64
- Linux x86_64
- macOS x86_64和aarch64
为其他平台构建:
cd mem_forensics_mcp_server/engine/memoxide-src
cargo build --release --target Vol3插件要求未满足
某些内存转储格式可能与某些插件不兼容。错误消息将指示:
- 翻译层问题(不支持的格式)
- 符号表问题(缺少ISF文件)
大型转储发生超时错误
Rust引擎超时60秒。对于非常大的转储,将自动使用Vol3回退。
插件参数错误
这意味着传递的参数不符合插件的Volatility3要求。 使用 memory_get_tool_help 对于MCP示例或调用 memory_list_plugins 为了验证 解析插件名称。
最近的更新
v0.1.19
- 从托管git添加了Volatility3 API后端
stable结账 - 添加
.env-仅Volatility3配置和自动更新设置 - ✨ 新增智能缓存系统(200条)
- ✨ 自动插件名称解析(pslist→ windows.pslist。PsList)
- ✨ 第一次插件调用时自动分析
- ✨ 简化args参数(替换pid/params)
- 🔧 已删除memory_dump_process工具
- 🔧 改进了错误处理和日志记录
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
致谢
支持
对于问题和功能请求,请使用GitHub问题跟踪器。
