0xb007ab1e/vivarium-mcp

GitHub: 0xb007ab1e/vivarium-mcp

Vivarium 是一个安全隔离的 MCP 服务器,允许 LLM 客户端通过 Ghidra 进行可控的二进制逆向工程分析。

Stars: 0 | Forks: 0

# Vivarium Vivarium 是一个安全的 [MCP](https://modelcontextprotocol.io) 服务器,允许 AI 助手使用 [Ghidra](https://ghidra-sre.org/) 来分析程序二进制文件。它将 Ghidra 的逆向工程功能 (反编译、反汇编、交叉引用、字符串等)作为 MCP 工具公开,供 Claude 等客户端调用。 Vivarium 的核心在于安全。你分析的二进制文件会被视为恶意输入。Ghidra 永远不会 与服务器运行在同一个进程中。相反,每次分析都在一个锁定、一次性且 无法联网的容器中进行。从二进制文件返回的每一条数据在到达模型之前, 都会被封装并标记为不受信任。 这个名字非常契合其设计理念:“生态箱”(vivarium)是一个封闭的围栏, 你可以在其中安全地存放和观察活的样本。在这里,样本就是不受信任的二进制文件。 ## 功能说明 - **读取和探索二进制文件。** 反编译和反汇编函数,列出函数、导入、导出、 字符串、符号、数据类型和注释,追踪交叉引用,读取内存映射,以及搜索 字节或字符串。每个读取工具都设有大小和数量限制,因此响应不会无限增长。 - **汇总和度量。** 报告圈复杂度、代码和数据覆盖率、调用图摘要, 扫描入侵指标和常见的加密常数,并生成整个程序的摘要。 - **识别库代码。** 将函数与内置的 Function ID 数据库进行匹配(`identify_functions`) 以标记静态链接的库代码(libc、OpenSSL、zlib 等),这样你就可以专注于程序自身的 逻辑,而无需重新逆向标准库。 - **以深度换取速度。** `session_analyze` 接受一个分析 `profile`(`light`、`default`、`deep`), 这样你可以先对大型二进制文件进行快速的初步扫描,并在需要时进行更全面的分析。 - **边生成边流式传输结果。** 将批量反编译作为作业启动,并在提取继续的同时 通过游标拉取部分结果——这样 LLM 就可以开始对早期的函数进行推理—— 并在获取足够数据时中途取消运行。 - **建议名称。** 辅助工具支持客户端驱动的工作流,用于从反编译代码中 提出人类可读的函数名称。 - **仅在获得许可时进行修改。** 重命名函数和符号、设置注释、应用或 定义数据类型以及类似的编辑默认是关闭的。会话必须显式启用写入权限, 然后才能进行任何更改,并且可以将编辑导出并重新导入为便携式注释文件。 总共有 56 个工具。完整的列表以及每个工具的输入和输出在 [`docs/contracts/tool-catalog.md`](./docs/contracts/tool-catalog.md) 中。 ## 工作原理 Vivarium 由两部分组成: 1. **服务器**是你的 MCP 客户端与之通信的进程。它不包含任何二进制解析代码,也从不 加载 Ghidra。它负责验证每个请求、执行限制并管理会话。 2. **工作进程**是一个独立的、经过强化的容器,实际运行 Ghidra。服务器为每个会话 启动一个工作进程,并通过私有本地 socket 与其通信。当会话结束或超时时, 服务器会终止工作进程并清除其临时存储。 你可以通过 **stdio**(默认)或 **HTTP** 连接客户端。HTTP 增加了 bearer、OAuth 或 反向代理 mTLS 身份验证,旨在将 Vivarium 作为共享服务运行。 ## 安装与运行 请参阅 **[`docs/getting-started.md`](./docs/getting-started.md)** 了解分步设置指南:前置条件、 构建两个容器镜像、安装软件包、运行服务器、连接客户端以及 进行首次分析。简短版本如下: ``` git clone https://github.com/0xb007ab1e/vivarium-mcp.git cd vivarium-mcp # 构建 worker 和 server 镜像(这会下载 Ghidra;有关固定值,请参见 getting-started) # 创建 Python 3.12+ 虚拟环境并安装该 package # 将 server 指向 worker 镜像和一个 import 目录,然后运行:python -m vivarium ``` Vivarium 运行在 Linux 上,并使用 rootless [podman](https://podman.io) 来启动工作进程容器。 ## 通俗易懂的安全模型 - **二进制文件是不受信任的。** Ghidra 报告的关于它的一切(反编译代码、字符串、名称、 字节)都被封装为不受信任的数据。不要执行它、评估它或将其渲染为代码。 - **分析器是被隔离的。** 工作进程以非 root 用户身份运行,具有只读的根文件系统、 无网络访问权限、被剥夺的 Linux capabilities、seccomp 配置文件以及内存和 CPU 限制。在生产环境中,它还运行在 gVisor 之下,以提供额外的隔离边界。 - **工作进程是一次性的。** 每个会话一个工作进程,在驱逐或超时时会被终止并清除。 - **写入受控。** 在会话所有者启用写入权限之前,任何工具都无法更改分析结果。 - **供应链锁定。** Ghidra、JDK 和基础镜像均通过摘要锁定。发布 镜像会经过扫描和签名,并附带软件物料清单(SBOM)和构建来源进行发布。 完整的设计原理位于 [`docs/adr/`](./docs/adr/) 下的决策记录和 [威胁模型](./docs/security/threat-model.md) 中。 ## 文档 - [`docs/getting-started.md`](./docs/getting-started.md):从零开始设置和运行 Vivarium。 - [`docs/faq.md`](./docs/faq.md):快速解答——它是什么、用于恶意软件是否安全、只读与 写入、持久化、准确性、限制。 - [`docs/architecture.md`](./docs/architecture.md):各个组件是如何组合在一起的。 - [`docs/contracts/`](./docs/contracts/):工具目录、RPC 协议和数据封装。 - [`docs/examples/`](./docs/examples/README.md):分层的、实践性的逆向工程工作流,展示了实际的工具 调用——[初步查看](./docs/examples/simple-first-look.md)(简单), [分流未知的 ELF 文件](./docs/examples/medium-triage.md)(中等), [恢复并记录集群](./docs/examples/large-annotate-and-recover.md)(大型)——此外还有一个 针对剥离过的 SQLite 二进制文件的盲测分析](./docs/examples/blind-analysis-sqlite.md),并已与 原始源代码进行了核对。 - [`docs/runbooks/`](./docs/runbooks/):操作程序(部署、回滚、事件响应等), 包括 [HTTP 暴露](./docs/runbooks/http-exposure.md)。 - [`docs/adr/`](./docs/adr/):带编号的设计决策(ADR-001 至 ADR-044);请参阅 [ADR 索引](./docs/adr/README.md) 获取路线图和建议的阅读顺序。 - [`SECURITY.md`](./SECURITY.md):如何报告漏洞。 - [`CHANGELOG.md`](./CHANGELOG.md):发布历史。 - [`PLAN.md`](./PLAN.md):交付计划和锁定的决策。 ## 许可证 [Apache License 2.0](./LICENSE),与 Ghidra 自身的许可证相匹配。请参阅 [`NOTICE`](./NOTICE)。
标签:DLL 劫持, Ghidra, MCP, 云安全监控, 云资产清单, 大语言模型, 操作系统探测, 沙箱隔离, 逆向工具, 逆向工程, 静态分析