发布于 2026-01-06 10 阅读
0

MCP 安全机制失效:以下是修复方法

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 输出的“随机”密码
  • 基础设施代码可以毫无限制地启动昂贵的资源

以下是攻击者如何利用这种漏洞:

  1. 寻找与昂贵云服务相连的人工智能工具
  2. 编写能够最大限度利用资源的自然语言请求
  3. 利用人工智能盲目服从请求的倾向来绕过传统的安全控制
  4. 即使日志看起来正常,基础设施过度使用也可能导致成本飙升。

有效的防御策略

防御策略

根据 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"
Enter fullscreen mode Exit fullscreen mode

如果你的人工智能需要完整的管理员权限,那么是时候重新考虑你的设置了。

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
Enter fullscreen mode Exit fullscreen mode

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]
}
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode

攻击检测与监控

攻击检测监控

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)
  }
}
Enter fullscreen mode Exit fullscreen mode

这解决了一些身份验证问题,但并没有解决工具描述注入问题。

行业安全建议

行业安全

OWASP 和 NIST 的安全专家们不断强调:人工智能领域不允许任何生产环境认证,绝对不允许。

OWASP 2025 年法学硕士十大挑战榜单8 名:

  1. LLM01:快速注射——头号威胁
  2. LLM02:不安全输出处理
  3. LLM03:训练数据中毒
  4. LLM04:拒绝服务攻击模型

NIST人工智能风险管理框架7

  • 将人工智能系统视为高风险组件
  • 实施持续监测
  • 采用纵深防御策略
  • 制定新型攻击途径的计划

呼!

底线

我们正在构建基于自然语言运行命令并连接到实时基础设施的系统。风险众所周知,攻击方法也已存在,研究人员还在不断发现新的漏洞。

现在就解决这个问题,否则以后就等着看新闻头条吧。

如果你错过了第一部分,请点击此处阅读:

脚注


  1. Trail of Bits。“抢先一步:MCP 服务器如何在您使用它们之前就对您发起攻击。”(2025 年 4 月 21 日) 

  2. Trail of Bits。“MCP 服务器如何窃取您的对话记录。”(2025 年 4 月 23 日) 

  3. Trail of Bits。“在MCP中使用ANSI终端代码欺骗用户。”(2025年4月29日) 

  4. Trail of Bits。“不安全的凭证存储困扰着 MCP。”(2025 年 4 月 30 日) 

  5. OWASP。“大型语言模型应用十大安全风险(2025)”  

  6. Trail of Bits。“以错误的方式配置云基础设施,但速度更快。”(2024年8月27日) 

  7. 美国国家标准与技术研究院 (NIST)。“人工智能风险管理框架 (AI RMF 1.0)”  

  8. OWASP。“2025 年法学硕士十大热门方向”  

文章来源:https://dev.to/forgecode/mcp-security-is-broken-heres-how-to-fix-it-31fl