MCP攻击面探测器(MCP-ASD)
版本:1.0.2
MCP-ASD是Burp Suite扩展(Montoya API),旨在识别、映射和测试模型上下文协议(MCP)服务器的攻击面。
它在Burp的同步测试工具(中继器、入侵者、扫描器)和MCP连接的异步、持久性(SSE和WebSockets)之间架起了一座桥梁。这允许安全专业人员使用标准的web测试工作流审核MCP工具、资源和提示。
特性
- 多协议支持: 完全支持服务器发送事件(SSE)、WebSockets(ws/wss)和仅HTTP POST传输(适用于不支持GET/SE的服务器)。
- 端点自动发现: 自动检测MCP端点,包括检测需要身份验证的受保护端点。
- 攻击面计数: 自动发现并可视化工具、资源和提示,包括参数的模式提取。
- 同步桥接: 通过处理异步ID关联和会话管理,实现Burp Repeater和Intruder的无缝使用。
- 原型生成: 根据发现的工具模式自动生成有效的JSON-RPC有效载荷。
- 身份验证和mTLS: 支持自定义HTTP头(OAuth承载令牌、API密钥)和mTLS客户端证书(PKCS#12)。
- 本地集成: 报告发现MCP服务器直接发送给Burp 目标 和 仪表盘.
- 高级检测: 包括对已发现域上的MCP服务器进行被动监视和主动探测。
- 身份验证网关检测: 通过识别指向身份验证端点的重定向模式(包括URL编码的origurl参数)来检测身份验证网关(Zscaler、OAuth、SAML、SSO)后面的MCP端点。
安装
先决条件
- Java JDK 17+
- Burp Suite专业版或社区版(2023.12.1+)
从源头构建
_注意:在以下位置有一个预编译的.jar:_\ https://github.com/hoodoer/MCP-ASD/releases/tag/v1.0
git clone https://github.com/your-repo/mcp-asd.git
cd mcp-asd
./gradlew shadowJar生成的JAR将位于 build/libs/mcp-asd.jar.
加载扩展
- 打开Burp套房。
- 导航至 扩展 -> 已安装.
- 点击 添加.
- 选择 Java 并浏览到生成的
mcp-asd.jar.
用法
1.连接管理
- 使用 新建连接 MCP-ASD选项卡中的按钮连接到服务器。
- 这 自动检测端点 该功能标识了常见的MCP路径。
- 连接设置(主机、端口、标头、证书)在会话期间保持不变。
- 取消按钮: 如果连接尝试挂起或耗时过长,请使用 取消 按钮中止握手并重置界面。
*图1:启动新连接*
*图2:自动发现端点*
*图3:检测到需要身份验证*
*图4:配置身份验证*
2.全局设置和检测
点击 设置 顶部标题中的按钮,用于配置高级选项:
- 内部交通能见度:
- 代理握手/枚举流量: 通过Burp的本地代理侦听器路由扩展的内部SSE/Webocket流量(默认值: 127.0.0.1:8080).这允许您在Burp的数据库中看到“不可见”的握手和枚举请求 日志记录器 和 代理历史记录.
- MCP服务器检测:
- 被动检查: 监控MCP指示器的所有通过流量(例如。, MCP-Protocol-Version 标头、JSON-RPC主体、身份验证网关重定向)。提高一个 信息问题 如果检测到Burp。 - 主动检测: 自动探测新域中的常见MCP端点(/mcp, /sse, /ws等等)。检测认证网关后面的端点(302/303重定向到OAuth、SAML、SSO、Zscaler等)。 - 范围限制: 将活动检测探针限制在Burp Target作用域中的域(推荐)。
*图5:MCP ASD设置*
*图6:MCP服务器活动检测警报*
3.身份验证
连接对话框包括一个专用的“身份验证”选项卡,支持三种策略:
- HTTP标头: 添加自定义标题(例如。,
Authorization: Bearer,X-API-Key:)到运输连接。 - mTLS(双向TLS): 提供PKCS#12(
.p12)客户端证书和密码。这允许扩展与需要客户端证书的服务器握手。 - 初始化参数: 将自定义JSON字段注入MCP
initialize握手。
- *用途:* 粘贴JSON对象(例如。, {"apiKey": "secret", "env": "prod"})进入文本区域。 - *效果:* 这些字段合并到 params 对象 initialize 连接后立即发送JSON-RPC消息。
*图7:配置身份验证*
4.身份验证可见性注释
重要提示: MCP-ASD在内部管理身份验证和传输级安全(mTLS)。当您在连接对话框中配置标头或证书时,它们将由扩展注入到实际的传输连接中。 您在中继器或入侵者请求中看不到这些标头,因为这些请求被发送到扩展的内部虚拟网桥。
5.映射和枚举
连接后,扩展程序会用标识的原语填充仪表板:
- 工具: 可执行函数。
- 资源: 数据源或文件。
- 提示: 预定义模板。
*图8:MCP主要元素列举*
*图9:选择primative以生成请求原型*
6.安全测试
- 发送到中继器: 手动测试工具调用。中继器标签被自动命名(例如。,
MCP: get_weather)为了便于识别。 - 发送给入侵者: 执行并发模糊测试。该扩展确保了请求和响应的线程安全关联。
*图10:同步网桥允许请求/响应式中继器和入侵者使用*
7.服务器信息
- 点击 察看连接信息 顶部标题中的按钮,用于查看有关连接的MCP服务器的详细元数据。
- 这包括服务器名称、版本、协议版本、支持的功能和完整的系统说明(提示)。
*图11:一些MCP服务器提供的服务器信息*
工作原理(建筑)
MCP-ASD解决了Burp Suite和模型上下文协议之间的基本阻抗不匹配问题:
- Burp Suite 针对同步、无状态HTTP(请求->响应)进行了优化。
- 主控程序 依赖于异步、持久的连接(服务器发送事件或WebSockets),其中消息(JSON-RPC)可以在任何时候向任何方向流动,通常在传输层没有1:1的请求/响应相关性。
为了弥合这一差距,MCP-ASD实施了一种新的 “虚拟代理”体系结构:
1.异步传输层
与使用的标准Burp扩展不同 Burp.Http,MCP-ASD利用专用、强大的HTTP客户端(OkHttp)以管理持久MCP连接。
- 正当理由: 标准HTTP客户端(包括Burp的本机API)阻止等待响应主体完成。对于SSE(服务器发送事件),响应体是一个永远不会完成的无限流。尝试使用标准方法读取它会导致线程无限期挂起。
- 解决方案: 该扩展维护了一个专用的后台线程,该线程逐个事件读取无限流事件,与Burp UI解耦。
2.同步电桥
当您从Burp Repeater或Intruder发送请求时:
- 虚拟端点: 您向发送一个标准的HTTP POST请求
http://mcp-asd.local/invoke. - 拦截: 扩展的
HttpHandler在离开Burp之前拦截此请求。 - 自动ID关联: 扩展 自动覆盖
id领域 在JSON中使用唯一的UUID。这确保了即使在高并发入侵者攻击中,每个请求都与其特定的响应完全相关。 您不需要在Repeater中手动更改ID。 - 注射: 它将消息注入到 *活跃的* 持久SSE/Webocket连接。
- 螺纹阻塞: 扩展暂停Burp请求线程并等待。
- 缝合: 当匹配的JSON-RPC响应从服务器到达时,扩展将其“缝合”为标准的HTTP 200 OK响应,并将其返回给Burp。
这允许您使用Intruder强大的有效载荷对MCP工具进行模糊化,而无需中断持久连接,也不需要为每次模糊化尝试重新进行身份验证。
开发测试服务器
包含一个模拟MCP服务器,用于测试扩展的功能。
需求
pip3 install -r requirements.txt执行
python3 mcp_server.py服务器支持身份验证(承载令牌: bearer-token-123).
联系
德鲁·柯克帕特里克\ @帽衫\ hoodoer@bitwisemunitions.dev
你可以在TrustedSec找到我。
