angelica-han/MCP-Security-Analysis-Multi-Agent

GitHub: angelica-han/MCP-Security-Analysis-Multi-Agent

基于 LangGraph 的多智能体静态代码安全扫描器,用于检测 MCP 项目中的 Prompt 注入、命令执行、文件访问和 SSRF 等安全漏洞并生成证据支撑的报告。

Stars: 0 | Forks: 0

# MCP 安全分析多智能体 一个由 LangGraph 驱动的多智能体系统,用于分析 MCP (Model Context Protocol) 项目目录中的安全漏洞,并生成带有证据支撑的报告。 ## 功能介绍 将其指向任何 MCP 服务端/客户端项目目录,它将会: 1. **扫描目录** — 盘点所有源文件并过滤掉干扰信息 2. **分析项目概况** — 了解项目暴露了哪些 MCP 功能,以及信任边界在哪里 3. **提取代码特征** — 使用静态分析(AST + 正则表达式)查找危险模式,如 shell 调用、文件访问和网络请求 4. **运行风险智能体** — 专门的智能体并行扫描不同的漏洞类别(目前已有四个可用,计划推出第五个) 5. **评估质量** — Evaluator 会检查每项发现是否都有真实证据;低置信度的发现会被标记或退回重新扫描 6. **生成报告** — 输出结构化的 Markdown + JSON,包含证据链、攻击路径和修复建议 ## 风险类别 | 智能体 | 检测内容 | |---|---| | Prompt 注入 | 进入系统提示词或工具描述的用户/远程内容 | | 命令执行 | `shell=True`、命令拼接、未经验证的参数 | | 文件访问 | 路径遍历、敏感目录读取、缺少白名单 | | 网络请求 | SSRF、任意 URL、内网访问 | | 生命周期 *(计划中)* | 会话状态泄漏、清理不完整、日志泄漏 | ## 技术栈 - **LangGraph** — 多智能体编排(StateGraph、条件路由、反馈循环) - **Pydantic** — 用于所有智能体间数据的类型化 schema;防止产生虚构证据 - **Python AST 模块** — 确定性的代码特征提取(无需 LLM 猜测) - **LangChain / LLM 层** *(V2)* — 用于功能分析、supervisor 路由和报告生成的语义解释;所有 V1 智能体均为确定性的基于规则的实现 ## 项目结构 ``` mcp_security_agent/ ├── schemas.py # All data structures (GraphState, RiskFinding, etc.) ├── graph.py # LangGraph graph: nodes, edges, conditional routing ├── cli.py # Command-line entry point ├── agents/ │ ├── functional.py # Capability analysis agent │ ├── risk_prompt_injection.py │ ├── risk_command.py │ ├── risk_file.py │ ├── risk_network.py │ ├── risk_lifecycle.py │ ├── evaluator.py │ └── reporter.py └── tools/ ├── file_inventory.py # Directory walker and file filter ├── ast_scanner.py # Python AST-based feature extraction └── regex_scanner.py # Pattern matching for JS/TS and config files results/ # Output reports land here (gitignored) sample_mcp_server/ # Deliberately vulnerable MCP server used as scan target tests/fixtures/ # Test fixtures ``` ## 快速开始 ``` # 安装依赖 pip install langgraph pydantic # 针对示例漏洞服务器运行完整 pipeline python -m mcp_security_agent.graph ``` 目前不需要 API key — 当前的风险智能体使用确定性的静态分析(AST + 正则表达式),而不是 LLM 调用。报告会写入 `results/` 目录。 ## 当前状态 | 组件 | 状态 | |---|---| | 项目结构 | ✅ 完成 | | Pydantic schema | ✅ 完成 | | LangGraph 图 | ✅ 完成 — 所有节点已连接,完整 pipeline 端到端运行 | | 目录盘点 | ✅ 完成 | | 代码特征提取(AST 扫描器) | ✅ 完成 | | 风险智能体:命令、文件、网络、Prompt 注入 | ✅ 完成 — 真正的静态分析逻辑 | | 功能分析智能体 (`functional.py`) | ✅ 完成 — 基于规则,从 AST 特征推断项目类型 + 敏感功能 | | Supervisor 路由 | ✅ 完成 — 仅根据检测到的功能激活相关的扫描类别 | | Evaluator 智能体 | ✅ 完成 — 置信度阈值、基于邻近度的去重、覆盖盲区检测、重运行循环 | | Reporter 智能体 | ✅ 完成 — 包含严重性分组、行动计划 (P0/P1/P2)、覆盖说明的结构化 Markdown | | 风险智能体:生命周期 | ⏳ 计划中 — 会话状态泄漏、清理不完整、日志泄漏 | | 正则表达式扫描器(针对 JS/TS 目标) | ⏳ 计划中 | | CLI 入口点 | ⏳ 计划中 | ## 设计原则 - **证据优先:** 每个 `RiskFinding` 都必须包含文件路径、代码行范围和代码片段 — 没有证据的发现会被 Evaluator 拒绝 - **确定性优先于 LLM:** 文件扫描、AST 解析和正则表达式匹配作为普通的 Python 工具运行;LLM 仅负责语义解释和风险说明 - **结构化输出:** 所有智能体输出都是类型化的 Pydantic 模型,而不是自由文本 — 这使得自动化测试和下游处理成为可能 - **可重放:** 图可以从中间 JSON 重新生成报告,便于调试和演示
标签:DLL 劫持, GraphQL安全矩阵, LangGraph, PyRIT, Python, 多智能体系统, 大语言模型, 安全专业人员, 安全扫描器, 无后门, 网络安全审计, 自动化payload嵌入, 逆向工具, 错误基检测, 静态代码分析