MCP 安全机制失效:以下是修复方法
简而言之:攻击者正在通过 MCP 服务器窃取对话历史记录——我们必须阻止这种情况。OWASP 将提示注入列为首要威胁。本文分享了保护系统的实用步骤。
如果你错过了第一部分,请点击此处阅读:
比特轨迹研究发现
Trail of Bits 发起了猛烈攻击,MCP 服务器正遭受重创:
- 跳线攻击1 - 恶意服务器通过工具描述注入提示信息。你的 AI 甚至在你开始与之交互之前就可能被欺骗。
- 聊天记录被盗2——服务器可以在你不知情的情况下窃取你的完整聊天记录
- ANSI终端代码攻击3——转义序列隐藏恶意指令。由于隐藏的指令,您的终端可能会显示错误或误导性信息。
- 不安全的凭证存储方式4 - API 密钥以明文形式存储,且权限对所有用户可见。这会导致敏感数据暴露。
安全差距
OWASP Top 10 for Large Language Model Applications (2025)将提示注入列为首要威胁。与此同时,大多数安全团队仍然将人工智能视为另一个 Web 应用程序。
您的监控工具不会发出任何警报,API 调用、身份验证和响应时间在安全漏洞发生时看起来一切正常。漏洞往往在为时已晚之前都难以被发现。
基于成本的攻击向量
Trail of Bits 在其云基础设施研究6中发现,人工智能系统可能会生成不安全的云设置代码,从而导致意想不到的高昂成本。
他们的报告指出:
- 人工智能工具有时会将凭证硬编码到程序中,从而造成安全风险。
- 实际上是可预测的 LLM 输出的“随机”密码
- 基础设施代码可以毫无限制地启动昂贵的资源
以下是攻击者如何利用这种漏洞:
- 寻找与昂贵云服务相连的人工智能工具
- 编写能够最大限度利用资源的自然语言请求
- 利用人工智能盲目服从请求的倾向来绕过传统的安全控制
- 即使日志看起来正常,基础设施过度使用也可能导致成本飙升。
有效的防御策略
根据 OWASP 建议和已记录的安全研究,以下是在生产环境中行之有效的方法:
1. 永远不要把制作功劳归于人工智能
别犯傻,永远不要把你的生产环境密钥交给人工智能;使用一个权限为零的沙盒账户。
// Unsafe: Directly embedding production credentials
const DATABASE_URL =
"postgresql://admin:password@prod-db:5432/main"
// Safe: Using a restricted account with limited access
const DATABASE_URL =
"postgresql://readonly_ai:limited@replica:5432/public_data"
如果你的人工智能需要完整的管理员权限,那么是时候重新考虑你的设置了。
2. 资源限制和约束
传统速率限制对人工智能无效。你需要基于成本的限制和严格的资源约束:
# docker-compose.yml - Actual protection
services:
mcp-tool:
image: your-tool:latest
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
environment:
- MAX_COST_PER_HOUR=10.00
- MAX_REQUESTS_PER_MINUTE=5
3. 语义攻击检测
传统日志记录完全无法检测到语义攻击。请密切关注提示符注入攻击的迹象:
function catchInjectionAttempts(
request: string,
): [boolean, string | null] {
// Based on OWASP LLM Top 10 indicators and CVE database<sup><a id="ref-9" href="#footnote-9">9</a></sup>
const suspiciousShit = [
/ignore.*previous.*instructions/i,
/system.*prompt.*override/i,
/execute.*as.*admin/i,
/delete.*from.*table/i,
/show.*credentials/i,
]
for (const pattern of suspiciousShit) {
if (pattern.test(request.toLowerCase())) {
return [true, `Injection attempt: ${pattern.source}`]
}
}
return [false, null]
}
4. 语义输入验证
NIST AI风险管理框架7建议对AI输入进行语义分析。基本的模式匹配可以捕获大多数已知的攻击途径:
class PromptInjectionFilter {
private redFlags: RegExp[]
constructor() {
// Patterns from documented CVEs and research<sup><a id="ref-10" href="#footnote-10">10</a></sup><sup><a id="ref-11" href="#footnote-11">11</a></sup><sup><a id="ref-12" href="#footnote-12">12</a></sup>
this.redFlags = [
/ignore.*instructions/i,
/new.*role.*system/i,
/pretend.*you.*are/i,
/override.*safety/i,
/jailbreak.*mode/i,
]
}
isSafe(userInput: string): boolean {
for (const pattern of this.redFlags) {
if (pattern.test(userInput.toLowerCase())) {
return false
}
}
return true
}
}
5. 成本感知型速率限制
传统速率限制是对请求进行计数。人工智能系统需要考虑成本的速率限制:
class RateLimitExceeded extends Error {
constructor(message: string) {
super(message)
this.name = "RateLimitExceeded"
}
}
class CostAwareRateLimit {
private maxCost: number
private currentCost: number
private resetTime: number
constructor(maxCostPerHour: number = 50.0) {
this.maxCost = maxCostPerHour
this.currentCost = 0.0
this.resetTime = Date.now() + 3600000 // 1 hour in milliseconds
}
checkRequest(estimatedCost: number): void {
if (Date.now() > this.resetTime) {
this.currentCost = 0.0
this.resetTime = Date.now() + 3600000
}
if (this.currentCost + estimatedCost > this.maxCost) {
throw new RateLimitExceeded("Cost limit exceeded")
}
this.currentCost += estimatedCost
}
}
攻击检测与监控
OWASP和云巨头一致认为,这些指标可以捕捉到人工智能攻击:
资源消耗异常:
- 计算资源使用量激增,远超基线水平。
- 异常数据访问模式
- 跨服务 API 调用增加
- 地理请求异常
行为上的危险信号:
- 包含系统关键字的请求
- 权限升级尝试
- 访问新数据源的工具
- 每次请求成本增加
if (($(echo "$current_hour_cost > ($average_daily_cost * 0.3)" | bc -l))); then
immediate_alert "Cost anomaly detected"
fi
更新的身份验证要求(MCP 2025-06-18)
最新的MCP规范现在强制要求正确实施OAuth:
// Required: OAuth Resource Server pattern
class MCPServer {
private authConfig: OAuth2ResourceServer
constructor() {
this.authConfig = {
// Now required by spec
resourceServer: "https://your-auth-server.com",
requiredScopes: [
"mcp:tools:read",
"mcp:tools:execute",
],
tokenValidation: "RFC8707", // Resource Indicators required
}
}
async validateRequest(
request: MCPRequest,
): Promise<boolean> {
// Resource Indicators prevent token theft attacks
const token = this.extractToken(request)
return await this.validateWithResourceIndicators(token)
}
}
这解决了一些身份验证问题,但并没有解决工具描述注入问题。
行业安全建议
OWASP 和 NIST 的安全专家们不断强调:人工智能领域不允许任何生产环境认证,绝对不允许。
OWASP 2025 年法学硕士十大挑战榜单第8 名:
- LLM01:快速注射——头号威胁
- LLM02:不安全输出处理
- LLM03:训练数据中毒
- LLM04:拒绝服务攻击模型
NIST人工智能风险管理框架7:
- 将人工智能系统视为高风险组件
- 实施持续监测
- 采用纵深防御策略
- 制定新型攻击途径的计划
底线
我们正在构建基于自然语言运行命令并连接到实时基础设施的系统。风险众所周知,攻击方法也已存在,研究人员还在不断发现新的漏洞。
现在就解决这个问题,否则以后就等着看新闻头条吧。
如果你错过了第一部分,请点击此处阅读:
脚注
文章来源:https://dev.to/forgecode/mcp-security-is-broken-heres-how-to-fix-it-31fl






