eSully MCP扫描仪
 
用于模型上下文协议(MCP)服务器的全面安全漏洞扫描程序
目录
概述
eSull MCP Scanner是一种专门的安全工具,旨在分析和评估模型上下文协议(MCP)服务器实现。随着MCP不断发展,并在各种平台(包括Slack、Box和AWS S3)上实现强大的代理AI功能,确保其安全性变得越来越重要。该扫描程序通过检测和分析恶意提示注入、工具描述中毒和名称冲突等潜在漏洞,解决了MCP生态系统中新出现的安全挑战。
我们的扫描程序直接连接到MCP服务器,并通过检查服务器功能、元数据和实现模式来执行全面的安全评估。它提供了详细的报告,以帮助维护MCP实现的安全性和完整性。
特性
🔍 证券分析
- \[\]身份验证机制检测与分析
- \[\]HTTPS/TLS合规性验证
- \[\]服务器和功能名称冲突检测
- \[\]跨服务器特征相似性检测
- \[\]服务器内功能参考分析
- \[\]跨源违规检测
- \[\]中毒检测功能描述
- \[\]变量中毒分析
- \[\]快速注射漏洞评估
- \[\]Rug pull尝试检测
- \[\]安装程序欺骗标识
📊 报告
- \[\]用于程序分析的JSON输出
- \[\]具有交互式元素的专业HTML报告
- \[\]执行摘要的PDF报告
- \[\]颜色编码的安全状态指示器
- \[\]详细的漏洞解释
🛠️ 灵活性
- \[\]支持多个MCP服务器配置
- \[\]可配置的扫描参数
安装
先决条件
- Python 3.8或更高版本
- Git
- pip(Python包安装程序)
- OpenAI API密钥:基于LLM的分析功能(描述中毒检测)所需
- 码头工人:如果扫描基于Docker的MCP服务器,则必须运行
- 本地MCP服务器:必须正确配置并可在其环境中运行
环境设置
- OpenAI API密钥:将您的OpenAI API密钥设置为环境变量:
export OPENAI_API_KEY="your-API-key-here"如果没有此密钥,基于LLM的安全分析功能将被禁用。
- Docker要求:如果扫描基于Docker的MCP服务器,请确保Docker正在运行:
# Check if Docker is running
docker --version
docker ps- 本地服务器要求:对于本地MCP服务器:
- 每台服务器都必须处于适当的环境中 - 必须安装并配置所有依赖项 - 在扫描之前,服务器必须能够无错误地运行 - 在运行扫描程序之前,单独测试服务器
安装步骤
# Clone the repository
git clone https://github.com/esentire/mcp-scanner.git
cd mcp-scanner
# Create and activate a virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows, use: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt快速开始
现场演示

*以上演示显示了从开始到结束的完整扫描过程*
常见用法示例:
# Scan local MCP server (The scanner reads the Claude desktop and Cursor MCP files by default and asks if you want to add more files)
python main.py
# Pass external config file
python main.py --config ABSOLUTE PATH IS REQUIRED
# Generate PDF report
python main.py --pdf
# Specify custom output location
python main.py --output ./reports/scan_results.json用法
基本命令选项
python main.py [OPTIONS]
Options:
--config FILE External file path for scan
--output FILE Output file path for scan results (default: ./scan_results.json)
--pdf Generate PDF report配置文件格式
扫描仪接受指定扫描设置和MCP文件位置的JSON配置文件。格式如下:
{
"mcpServers": {
"time": {
"command": "uvx",
"args": [
"mcp-server-time",
"--local-timezone=America/New_York"
]
},
"mcp-server-test": {
"command": "/Users/Parya.Abadeh/.local/bin/uv",
"args": [
"--directory",
"path to mcp-server-test",
"run",
"main.py"
]
},
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://localhost/mydb"
]
}
}
}扫描仪设置
扫描仪可以配置以下设置:
MCP文件
claude_desktop:克劳德桌面MCP配置的路径(默认:自动检测)cursor:光标MCP配置路径(默认:自动检测)custom_file:要扫描的附加MCP文件
报表配置
output_dir:用于存储扫描结果的目录(默认:./scan_results)pdf:PDF报告生成设置
- enabled:启用/禁用PDF报告生成
安全检查
身份验证分析
扫描程序分析MCP服务器身份验证机制,以识别安全漏洞:
- 身份验证检测:标识服务器是否实现身份验证(API密钥、OAuth、基于浏览器的身份验证)
- 身份验证类型分类:对身份验证类型进行分类(no_auth、api_key、oauth、browser_interactive等)
- 安全风险评估:将未进行身份验证的服务器标记为高风险
- OAuth端点发现:自动检测基于URL的服务器的OAuth端点
- 浏览器身份验证检测:标识需要基于浏览器的身份验证流的服务器
检测到的安全问题:
- 没有任何身份验证机制的服务器
- 访问控制薄弱或缺失
- 身份验证流配置不当
HTTPS合规性
验证MCP服务器是否使用安全通信协议:
- URL分析:检查所有服务器URL和端点的HTTPS使用情况
- 论据检查:检查HTTP URL的命令行参数
- 配置审查:标识服务器设置中的不安全配置
- 加密验证:确保敏感数据传输加密
检测到的安全问题:
- HTTP URL而不是HTTPS(未加密通信)
- 配置中的混合协议使用
- 通过不安全的渠道暴露敏感数据
碰撞检测
识别可能导致混淆或安全问题的命名冲突和功能关系:
- 特征名称分析:检测服务器中重复的工具、提示和资源名称
- 服务器名称冲突:标识名称冲突或混淆的服务器
- 跨服务器冲突:在不同服务器上查找相似的功能名称(相似性阈值:0.9)
- 流行名称冲突:检测与已知MCP服务器名称的冲突
- 服务器内部引用:分析功能如何在同一服务器内相互引用
- 参考链检测:识别潜在的安全问题,如循环依赖关系
- 上下文提取:为检测到的特征引用提供周围上下文
- 命名变化处理:考虑不同的命名样式(下划线/连字符)
检测到的安全问题:
- 可能引起混淆的相同或高度相似的功能名称
- 通过相似命名进行服务器模拟
- 命名空间污染攻击
- 循环特征依赖关系
- 隐藏特征链
- 通过间接引用进行未经授权的功能访问
- 跨服务器功能与详细上下文冲突
漏洞检测
特征描述中毒
使用人工智能分析检测工具、提示和资源描述中的恶意或误导性内容:
- 基于LLM的检测:使用OpenAI GPT模型分析描述内容以检测恶意意图
- 模式识别:识别功能描述中的可疑模式
- 上下文分析:评估欺骗性或有害内容的描述
- 多特征扫描:全面分析工具、提示和资源
检测到的安全问题:
- 旨在欺骗用户的误导性功能描述
- 看似无害的工具中隐藏的恶意功能
- 通过特征描述进行社会工程尝试
- 旨在绕过安全控制的欺骗性内容
可变中毒
分析工具中的变量名称和描述,并提示安全风险:
- 危险变量名称:标识可能有害的变量名(例如,系统路径、凭据)
- 变量描述分析:使用LLM分析检测变量描述中的恶意内容
- 输入参数安全:评估工具和提示输入参数的安全风险
- 数据过滤向量:标识可用于数据提取的变量
检测到的安全问题:
- 具有危险或可疑名称的变量
- 包含恶意指令的变量描述
- 为未经授权的访问而设计的输入参数
- 潜在的数据泄露机制
快速注射
识别MCP提示中提示注入攻击的漏洞:
- 注射模式检测:扫描常见的快速注射技术
- 动态提示分析:使用各种注射有效载荷进行测试提示
- 上下文操纵:标识易受上下文操纵的提示
- 安全边界测试:评估即时安全控制
检测到的安全问题:
- 易受注射攻击的提示
- 提示处理中的输入验证较弱
- 上下文操纵漏洞
- 通过迅速操纵绕过安全控制
地毯拉扯尝试
检测在用户同意后更改其描述或行为的工具/资源/提示:
- 描述一致性监控:跟踪同意后工具/资源/提示描述的变化
- 行为漂移检测:确定同意的功能和实际行为之间的差异
- 同意利用分析:检测通过改变目的滥用用户同意的工具
- 信任违规指标:标记通过批准后更改滥用用户同意的服务器
检测到的安全问题:
- 在用户同意使用后修改其描述的工具
- 改变最初约定行为的资源
- 在获得同意后改变其功能的提示
- 通过更改工具/资源/提示定义来利用用户同意的服务器
安装程序欺骗
识别使用非官方或潜在恶意安装方法的服务器:
- 官方来源验证:将安装命令与已知的官方来源进行比较
- 非官方安装程序检测:标识非标准安装方法
- 包源分析:评估包来源的合法性
- 供应链安全:评估安装安全风险
检测到的安全问题:
- 使用非官方或未经证实的安装来源
- 可能受损的包存储库
- 绕过安全控制的安装方法
- 通过恶意安装程序的供应链攻击媒介
跨来源违规
扫描程序检测MCP服务器在其工具、提示或资源描述中是否不恰当地引用了其他MCP服务器名称。此安全检查有助于识别:
- 冒充企图:声称“像github服务器”或类似服务器工作的服务器
- 误导性描述:参考其他流行MCP服务器功能的工具
- 供应链混乱:可能试图伪装成合法替代品的服务器
检测特点:
- 智能令牌分析:逐字分析描述以识别服务器名称引用
- 消除重复单词:在分析之前从描述中删除重复的单词,以防止同一引用出现多次违规
- 归一化:处理下划线、连字符和标点符号等变体(例如,“github server”、“github服务器”、“github”)
- 热门服务器数据库:维护一份众所周知的MCP服务器列表以供检查
- 交叉配置检测:标识对配置中其他服务器的引用
违规示例:
- 工具描述:“此工具的工作原理类似于github服务器来获取文件”→ 标记“github”
- 资源描述:“类似于文件系统访问,但随着时间的推移”→ 标记“文件系统”和“时间”
- 提示描述:“像postgres服务器一样查询数据”→ 旗帜“postgres”
扫描仪将报告: Cross-origin violation in tool 'example_tool': References 'github'
代码结构
MCP eSull扫描仪被组织成模块化组件,以实现可维护性和可扩展性:
MCP_eSentire_Scanner/
├── main.py # Main entry point and CLI interface
├── server_scanner.py # Core MCP server scanning logic
├── config_manager.py # Configuration file management
├── requirements.txt # Python dependencies
├── README.md # Documentation
│
├── analyzer_helpers/ # Security analysis modules
│ ├── auth_analyzer.py # Authentication mechanism detection
│ ├── cross_origin_analyzer.py # Cross-origin violations detection
│ ├── feature_name_collision_analyzer.py # Name collision detection
│ ├── server_name_collision_analyzer.py # Server name conflict analysis
│ ├── feature_description_poisoning_analyzer.py # Malicious description detection
│ ├── feature_variables_analyzer.py # Variable poisoning analysis
│ ├── prompt_injection_analyzer.py # Prompt injection detection
│ ├── rug_pull_analyzer.py # Rug pull attempt detection
│ ├── installer_spoofing_analyzer.py # Installation source verification
│ ├── html_report_generator.py # HTML report generation
│ ├── pdf_report_generator.py # PDF report generation
│ └── nova_rules/ # LLM analysis rule definitions
│ ├── hidden_instruction_rules.nov # Rules for hidden instruction detection
│ └── variable_poisoning_rules.nov # Rules for variable poisoning detection
│
└── figs/ # Images and assets
├── demo.gif # Demo animation
├── eSentire Labs - Logo (FULL).png # Company logo (PNG)
└── eSentire Labs - Logo (FULL).svg # Company logo (SVG)核心组件
main.py
- 目的:应用程序入口点和命令行界面
- 职责:
- 参数解析(--config, --output, --pdf) - 配置加载和管理 - 服务器发现和扫描协调 - 报告生成编排 - 其他配置文件的用户交互
server_scanner.py
- 目的:核心MCP服务器分析引擎
- 关键功能:
- scan_server():具有超时处理的主服务器扫描功能 - scan_server_capabilities():提取工具、提示和资源 - parse_mcp_config():解析MCP配置文件
- 整合:协调所有安全分析器并汇总结果
config_manager.py
- 目的:配置文件发现和管理
- 特性:
- 自动检测Claude桌面和光标配置 - 多平台路径分辨率(macOS、Windows、Linux) - 配置合并和验证 - 交互式配置文件添加
安全分析器模块
身份验证和网络安全
auth_analyzer.py:检测身份验证机制(API密钥、OAuth、浏览器身份验证)cross_origin_analyzer.py:在描述中标识不适当的服务器引用
内容分析
feature_description_poisoning_analyzer.py:使用LLM分析检测恶意描述feature_variables_analyzer.py:分析变量名称和安全风险描述prompt_injection_analyzer.py:测试注射漏洞提示
行为分析
rug_pull_analyzer.py:检测通过更改审批后内容违反用户同意的工具/资源/提示installer_spoofing_analyzer.py:验证安装源的合法性
碰撞检测
feature_name_collision_analyzer.py:标识冲突的要素名称server_name_collision_analyzer.py:检测服务器名称冲突
报告生成
html_report_generator.py
- 带有安全状态指示器的交互式HTML报告
- 颜色编码的威胁级别和详细解释
- 可折叠部分的响应式设计
pdf_report_generator.py
- 适用于执行摘要的专业PDF报告
- 通过徽标集成提供企业品牌支持
- 结构化安全评估文件
基于规则的分析
nova_rules/
hidden_instruction_rules.nov:检测隐藏恶意指令的模式variable_poisoning_rules.nov:识别危险变量模式的规则- 格式:用于基于LLM的分析的自定义规则定义语言
