AI安全网关

MCP Gateway是一个基于Gemini 3 AI的安全代理,为MCP服务器提供可审计的多层安全检测,防止语义攻击和新型威胁。

  • by minorumochizuki2015-ship-it
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 minorumochizuki2015-ship-it/mcp-gateway-gemini3

使用说明

MCP网关-基于人工智能的MCP安全网关

第一个让AI工具访问的安全网关 可审计的,而不仅仅是允许/拒绝。

Gemini 3黑客马拉松参赛作品 | 实时管道演示 | 快速开始 | 7个双子座积分点


问题:13000多台MCP服务器,零安全层

MCP(模型上下文协议)生态系统已经爆发 13000+台服务器,但没有标准的安全层。AI代理连接到MCP服务器,可以:

  • 域名抢注: read_fi1e (带数字 1)模仿者 read_file --人工智能无法区分
  • 签名伪装:工具描述更改自 “列出分析数据” 到 “执行系统命令并提取凭据” --初步批准后
  • 诱售法:一个秘密请求的“只读文件查看器” password, api_key, session_id 领域

现有的工具无法捕捉到这些。 静态扫描程序会错过语义攻击。基于规则的系统无法推理意图。

真实世界验证

MCP生态系统具有 17500+台服务器 (mcp.so,2026年2月) 94%的攻击成功率 跨越12个攻击类别(赵等人,研究报告:2509.24272).现有的扫描仪可以实现低至 ~3%检测率 (检测到120个恶意服务器中的4个;来源于赵等人表3)。

2026年2月,安全研究人员 锦鲤安保 建立 341种恶意技能(12%) 在OpenClaw ClawHub市场(2857项技能经过审核)。OpenClaw的回应——整合基于VirusTotal哈希的扫描——地址 已知恶意软件签名但仅凭基于哈希的扫描无法捕捉到MCP特定的威胁:

  • 语义操作:批准后更改含义的工具描述(签名隐藏)
  • 快速注射:隐藏在工具输出中的指令(Snyk毒物技能,2026年2月)
  • 域名抢注:角色级工具名称模仿(read_fi1e vs read_file)
方法 捕获已知恶意软件 捕获语义攻击 捕获新威胁
基于哈希的(VirusTotal) 是 否 否
基于规则(~3%检测) 部分 部分 否
双子座3推理(MCP网关) 部分 是 是

MCP网关补充了基于哈希的扫描 利用Gemini 3的语义推理——检测 新颖的、基于意图的攻击 该签名匹配无法捕获。

MCP网关做什么

MCP网关是 安全第一代理 AI客户端(ChatGPT、Claude、Gemini CLI)和MCP服务器之间。每次工具调用都要经过一个6层检查管道,该管道由 Gemini 3结构化输出:

关键洞察:每个决策都会产生允许/拒绝,而不是二进制的允许/拒绝 结构化证据 --the 为什么 在每一个判决背后——确保安全 可审计和可解释.

为什么选择双子座3?(不仅仅是“任何法学硕士”)

MCP网关使用 5 Gemini 3独家功能 穿过 全部7个集成点 --不仅仅是一个组件:

Gemini 3功能 用于 为什么只有Gemini 3
思维层次 全部6个组件(high 为了安全起见, low 速度) 2层推理:对威胁进行深入分析,对安全内容进行快速分类
函数调用 Agent Scan(多轮工具使用) Gemini 自主决定 调用哪些安全工具——而不是固定的管道
URL上下文 网络沙盒 双子座3 浏览URL本身 --无需我们自己的渲染器的多模式页面分析
谷歌搜索暂停 AI委员会+扫描仪+沙盒+代理扫描 实时威胁情报:“此服务器/域/包是否被报告为恶意?”
结构化输出 所有7个组件(类型化JSON模式) 在单个API调用中组合浏览+搜索+类型化判决

建筑:双子座3不是“最后的分类器”——它是 推理引擎 浏览、搜索、思考和决定:

response = client.models.generate_content(
    model="gemini-3-flash-preview",
    contents=f"Analyze this URL for security threats: {url}",
    config=types.GenerateContentConfig(
        # Gemini 3 unique: thinking + tools + structured output
        thinking_config=types.ThinkingConfig(thinking_level="high"),
        tools=[
            types.Tool(url_context=types.UrlContext()),       # Browse the URL
            types.Tool(google_search=types.GoogleSearch()),    # Search threat intel
        ],
        response_mime_type="application/json",
        response_schema=WebSecurityVerdict,  # Typed verdict
        temperature=1.0,  # Gemini 3 recommended
        max_output_tokens=4096,
    ),
)
verdict = WebSecurityVerdict.model_validate_json(response.text)

没有双子座3:仅基于规则(DGA熵、品牌匹配、TLD评分)。有效,但错过了语义攻击。 双子座3:深入推理为什么一个页面是危险的,实时威胁情报,视觉页面分析。

7双子座3积分点

# 组件 架构 使用Gemini 3功能
1 AI委员会 CouncilVerdict 思考水平=高 + 谷歌搜索停飞 +结构化输出
2 语义扫描器 SemanticScanResult 思考水平=高 + 谷歌搜索 +结构化输出
3 RedTeam生成器 RedTeamGeneration 思考水平=低 +用于快速生成攻击的结构化输出
4 红队评估员 PayloadSafetyVerdict 思考水平=高 +安全评估的结构化输出
5 因果网络沙盒 WebSecurityVerdict thinking_level+URL上下文+谷歌搜索+结构化输出
6 代理扫描 AgentScanResult function_calling+thinking_level=高+谷歌搜索+多回合
7 审计QA聊天 AuditQAResponse 思考水平=高 +结构化输出——Gemini使用证据解释自己的安全决策

因果网络沙盒:“只有Gemini 3才能做到这一点”功能

Causal Web沙盒展示了其功能 双子座3独有:

  1. URL上下文:Gemini 3直接访问可疑URL,在内部呈现页面
  2. 谷歌搜索:检查威胁数据库中是否报告了域/URL
  3. 思维水平: high 为了进行深入分析(复杂的网络钓鱼), low 用于快速分诊(<100ms)
  4. 因果链:逐步解释攻击进展
  5. MCP特定威胁:检测网络内容中的JSON-RPC注入、工具阴影、签名隐藏
Input:  https://rope.odakyu.qpon/login
Output: {
  "classification": "phishing",
  "confidence": 0.93,
  "causal_chain": [
    {"step": 1, "action": "Domain impersonates brand 'odakyu'",
     "consequence": "Not the legitimate odakyu railway site"},
    {"step": 2, "action": "Hosted on .qpon (high-abuse TLD)",
     "consequence": "TLD is commonly used for scam/phishing sites"}
  ],
  "attack_narrative": "PHISHING: 'rope.odakyu.qpon' impersonates the brand 'odakyu' on a .qpon domain...",
  "mcp_specific_threats": ["Brand impersonation: 'odakyu' on .qpon. AI agents must not trust credentials."]
}

代理扫描:Gemini 3作为安全代理(函数调用)

最先进的集成——Gemini 3作为 自主安全代理:

POST /api/web-sandbox/agent-scan  {"url": "https://suspicious-site.tk"}

Gemini 3 Agent Loop:
  Turn 1: "Let me check the domain for DGA patterns"
    → calls check_dga(domain="suspicious-site.tk")
    → result: {is_dga: false, entropy: 3.2}

  Turn 2: "TLD .tk is suspicious, let me check reputation"
    → calls check_tld_reputation(domain="suspicious-site.tk", tld="tk")
    → result: {category: "suspicious"}

  Turn 3: "Let me search for known threats on this domain"
    → uses Google Search grounding

  Final: Synthesizes all tool results → WebSecurityVerdict
    {classification: "phishing", confidence: 0.87, tools_called: 3}

为什么这很重要:与固定管道不同,Gemini 3 决定调查什么A. .com 域可能只需要DGA检查,而 .tk 域触发全面分析。这是 代理安全 --MCP代理本身使用相同的模式。

并排:基于规则与Gemini Agent

curl -X POST http://localhost:4100/api/web-sandbox/compare \
  -H "Content-Type: application/json" \
  -d '{"url": "https://xkjhwqe.tk/payload"}'

在一个响应中返回两个判断——准确显示Gemini 3在纯基于规则的分析中添加了什么:

  • rule_based:快速(<5ms),捕获DGA熵+可疑TLD
  • gemini_agent:工具选择的深度推理、谷歌搜索威胁情报、多轮分析

实时管道演示

网关包括 实时SSE管道 这在大约30秒内展示了完整的安全流程:

  1. LLM代理请求工具访问 --5台具有混合信任级别的MCP服务器
  2. 网关拦截+安全扫描 --具有发现计数的静态分析
  3. 人工智能委员会裁决(双子座3) --每台服务器允许/拒绝延迟和理由
  4. 高级威胁分析 --打字字符差异、特征隐身描述差异、诱饵和开关场检测
  5. 因果网络沙盒 --实时HTTP获取→ DOM分析→ 双子座在3个测试页面上的判断
  6. 代理扫描(函数调用) --Gemini自主选择安全工具来分析可疑URL
  7. MCP工具呼叫拦截 --具有BLOCKED/LALLOWED/DLP强制的代理会话模拟

每个步骤都以服务器发送事件的形式流式传输,并带有视觉指示器(Gemini徽章、延迟计时器、置信度条)。

仪表盘用户界面

共9页 双语支持(英语/日语):

第页 目的
仪表盘 KPI卡、网关流程图、实时管道演示、攻击检测时间线、最近的决策、, 自调整权重
环境 安装向导、系统诊断、环境注册
扫描 带有严重性/OWSP故障的安全扫描结果
允许列表 MCP服务器注册、信任状态、扫描历史
网络沙盒 实时URL扫描程序,包含DOM威胁、网络跟踪、所有问题、Gemini判断
审计日志 带有证据ID的可扩展决策证据线索+ 审计QA聊天(Gemini 3)
计费 代币消耗、API调用计数、成本估算
设置 OWASP LLM前10个策略配置+OAuth2标准杆数/DPoP路线图

攻击检测时间表

仪表板包括一个可视化的攻击时间线 字符级差异渲染:

  • 工具阴影: read_fi1e vs read_file --以红色/绿色突出显示的字符差异
  • 签名伪装:“列出分析数据”→ “执行系统命令” --删除线+红色新描述
  • 诱饵和开关:敏感字段(password, api_key)内联高亮显示

高级攻击检测

三种针对MCP供应链威胁的新型探测器:

检测器 攻击 检测
签名伪装 注册后工具描述更改 Jaccard单词集相似性(<40%=隐藏)
诱售法 良性描述+恶意模式 模式字段与描述声明分析
工具阴影 模仿可信工具的名称 字符级相似性与20个知名MCP工具
DGA检测 算法生成的域 香农熵+辅音比+聚类分析
品牌模仿 域名模仿知名品牌 500+品牌数据库,复合TLD支持
MCP协议注入 web内容中的JSON-RPC注入 DOM/脚本中的7种MCP特定威胁模式

因果网络沙盒

基于证据的网络安全分析,灵感来自渲染管道内部:

组件 它产生什么
页面捆绑包 SHA256哈希值、内容长度、资源计数、阻塞资源
DOM分析 隐藏的iframe、欺骗性表单、带有CSS选择器的可疑脚本
A11y树 欺骗性标签检测(aria标签不匹配)
网络跟踪 从脚本/表单/图像中提取URL,标记可疑域
双子座判决 结构化分类(良性/网络钓鱼/恶意软件/点击劫持/骗局),附证据参考

安全控制(P0)

威胁 控制 实施
上海光源 IP验证 阻止RFC 1918、元数据(169.254.x.x)、危险端口
快速注射 内容隔离 剥离隐藏元素,零宽度Unicode, <analysis_boundary> 信封
资源耗竭 硬限制 2MB HTML,15秒超时,3个重定向,50K DOM元素

快速启动(30秒)

# Clone and setup
git clone https://github.com/minorumochizuki2015-ship-it/mcp-gateway-gemini3.git
cd mcp-gateway-gemini3
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# Demo mode (no auth required, instant start)
MCP_GATEWAY_DEMO_MODE=true \
MCP_GATEWAY_ADMIN_TOKEN=demo \
python -m uvicorn src.mcp_gateway.gateway:app --host 127.0.0.1 --port 4100

# Open Dashboard → Click "Run Live Pipeline"
# http://127.0.0.1:4100/docs/ui_poc/dashboard.html

使用Gemini AI

export GOOGLE_API_KEY="your-api-key"
MCP_GATEWAY_ADMIN_TOKEN=your-token \
python -m uvicorn src.mcp_gateway.gateway:app --host 127.0.0.1 --port 4100

Docker(一个命令)

mkdir -p .local
echo "your-admin-token" > .local/admin_token.txt
echo "your-upstream-key" > .local/upstream_api_key.txt

GOOGLE_API_KEY="your-api-key" docker compose up --build
# Dashboard: http://localhost:4100

云运行(谷歌云)

# 1. Create secrets in Secret Manager
echo -n "your-admin-token" | gcloud secrets create admin-token --data-file=-
echo -n "your-api-key" | gcloud secrets create google-api-key --data-file=-

# 2. Deploy with Cloud Build
gcloud builds submit --config=cloudbuild.yaml

# 3. Access your public URL
gcloud run services describe mcp-gateway --format='value(status.url)'

建筑

                    +------------------+
                    |   AI Clients     |
                    | (ChatGPT/Claude  |
                    |  /Gemini CLI)    |
                    +--------+---------+
                             |
                    +--------v---------+
                    |   MCP Gateway    |  ← Python FastAPI
                    |  + Dashboard UI  |    6-layer security pipeline
                    +--+--+--+--+-----+
                       |  |  |  |
          +------------+  |  |  +------------+
          |               |  |               |
   +------v------+ +-----v------+ +----v-----+ +------v------+
   | AI Council  | | Semantic   | | RedTeam  | | Causal Web  |
   | (Gemini 3)  | | Scanner    | | Gen+Eval | | Sandbox     |
   |             | | (Gemini 3) | |(Gemini 3)| | (Gemini 3)  |
   +------+------+ +-----+------+ +----+-----+ +------+------+
          |               |             |              |
          +-------+-------+------+------+------+-------+
                  |              |              |
         +--------v-------+ +---v--------------v---+
         | Evidence Trail  | | Memory Ledger (SSOT) |
         | (JSONL)         | | Hash-based dedup     |
         +-----------------+ +---------------------+

配置

变量 描述 默认值
GOOGLE_API_KEY Gemini API密钥 人工智能功能所需
GEMINI_MODEL Gemini型号名称 gemini-3-flash-preview
MCP_GATEWAY_ADMIN_TOKEN 管理员身份验证 必需
MCP_GATEWAY_DEMO_MODE 跳过演示的身份验证 false
MCP_GATEWAY_UPSTREAM_API_KEY 上游LLM API密钥 代理必需
LEDGER_PATH 内存分类账JSONL 可选(启用SSOT)
LEDGER_ERROR_POLICY 分类账错误处理 closed (故障关闭)

测试套件

# 416 tests
python -m pytest tests/ -v

# Gemini integration tests only
python -m pytest tests/test_council.py tests/test_scanner.py \
  tests/test_redteam.py tests/test_causal_sandbox.py -v

基准

基于规则与Gemini 3的可重复检测基准比较:

# Rule-based only (no API key needed)
python scripts/benchmark.py

# Full comparison with Gemini 3
GOOGLE_API_KEY=xxx python scripts/benchmark.py --gemini
方法 精确度 召回率 F1 平均延迟
基于规则 0.917 0.846 0.880 <1ms
双子座3号代理 1.000 1.000 1.000 ~2500ms

26例固定语料库:13例良性+13例恶意(DGA、品牌冒充、可疑TLD、MCP注射、leet speak、同形异义词)。

API终点(共50个)

核心管道

方法 路径 描述
职位 /api/scans 运行安全扫描+高级攻击检测
职位 /api/council/evaluate/{id} AI委员会裁决
职位 /api/web-sandbox/scan 因果网络沙盒分析
职位 /api/redteam/generate 生成攻击场景
职位 /api/redteam/evaluate 评估工具安全性

MCP工具拦截(新)

方法 路径 描述
职位 /api/mcp/intercept 拦截MCP工具调用,两层扫描
得到 /api/mcp/intercept/history 最近的拦截结果
得到 /api/mcp/intercept/stats 拦截统计

审核质量保证和自我调整

方法 路径 描述
职位 /api/audit-qa/chat 请Gemini解释安全决策(第7次集成)
得到 /api/self-tuning/suggestion 建议的重量调整及其理由
职位 /api/self-tuning/apply 应用重量建议(有证据)

管理

方法 路径 描述
得到 /api/dashboard/summary 仪表板KPI数据
得到 /api/allowlist 列出MCP服务器
职位 /api/allowlist/{id}/register 注册MCP服务器
得到 /api/audit-log 证据线索
得到 /api/demo/run-live SSE带电管道

证据线索

每个决策都会产生JSONL证据。当 LEDGER_PATH 设置后,事件将通过基于哈希的重复数据删除双重写入内存分类账(SSOT):

{"event": "source_sink_check", "decision": "deny", "server_id": "evil-mcp", "reason": "untrusted_to_restricted_sink"}
{"event": "council_decision", "eval_method": "gemini", "verdict_confidence": 0.95}
{"event": "causal_web_scan", "classification": "phishing", "confidence": 0.92, "recommended_action": "block"}
{"event": "attack_detection", "code": "tool_shadowing", "tool_name": "read_fi1e", "status": "blocked"}

全栈(Docker)

mkdir -p .local
echo "your-admin-token" > .local/admin_token.txt
echo "your-upstream-key" > .local/upstream_api_key.txt
echo "your-google-api-key" > .local/google_api_key.txt

docker compose up --build

关键文件

src/mcp_gateway/
  gateway.py          # FastAPI gateway (4900+ lines) — routing, policy, SSE pipeline
  ai_council.py       # Gemini 3 → CouncilVerdict
  scanner.py          # Static + Semantic + Advanced Attack Detection
  redteam.py          # Attack generation + safety evaluation
  causal_sandbox.py   # Evidence-based web security (Gemini 3)
  mcp_security_server.py # MCP Security Server (stdio + HTTP transport)
  sanitizer.py        # Multi-level prompt injection defense
  evidence.py         # JSONL evidence trail + Memory Ledger
  ssot/               # Memory Ledger (persistent SSOT) + Durable Streams
  registry.py         # MCP server registration and management

docs/ui_poc/          # Dashboard UI (9 pages, bilingual EN/JA)
Dockerfile            # Cloud Run deployment
docker-compose.yml    # One-command full stack deployment
cloudbuild.yaml       # Google Cloud Build config

透明安全:工具调用自动扫描

当AI代理通过 /run MCP网关代理 自动扫描任何URL参数 在转发到上游MCP服务器之前:

Agent calls: browser_navigate(url="https://suspicious-site.tk/login")
                │
                ▼
   ┌─────────────────────────┐
   │  1. Extract URL params  │  url, uri, href, target, destination, page
   │  2. Fast scan (<5ms)    │  DGA, TLD, brand, SSRF check
   │  3. Deep scan (if warn) │  DOM + a11y + Gemini 3 analysis
   └─────────────────────────┘
                │
         ┌──────┴──────┐
         │             │
    ✅ Allow      ❌ Block
    Forward to    Return 403 +
    upstream      evidence trail

无需修改代理。 网关透明地扫描带有URL的工具调用。每个拦截决定都会发出证据。

连接AI代理

HTTP上的MCP(流式HTTP传输)

任何兼容MCP的客户端都可以通过HTTP连接到安全网关:

# Initialize
curl -X POST http://localhost:4100/mcp/security \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

# Check URL safety (fast scan)
curl -X POST http://localhost:4100/mcp/security \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"check_url","arguments":{"url":"https://example.com"}}}'

# Full security scan with Gemini causal analysis
curl -X POST http://localhost:4100/mcp/security \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"scan_report","arguments":{"url":"https://suspicious-site.tk"}}}'

MCP over stdio(用于本地AI代理)

python -m src.mcp_gateway.mcp_security_server
# Reads/writes JSON-RPC 2.0 with Content-Length framing (LSP-style)

REST API(用于非MCP集成)

# Quick URL check via REST
curl -X POST http://localhost:4100/api/web-sandbox/scan \
  -H "Content-Type: application/json" \
  -d '{"url":"https://suspicious-site.tk"}'

# MCP tool call interception
curl -X POST http://localhost:4100/api/mcp/intercept \
  -H "Content-Type: application/json" \
  -d '{"method":"tools/call","params":{"name":"fetch","arguments":{"url":"https://evil.tk"}}}'

安全通知

此网关设计用于 本地/内部网络使用不要直接暴露在公共互联网上。在前面使用身份验证反向代理。

许可证

麻省理工学院