阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

簡而言之:攻擊者正在透過 MCP 伺服器竊取對話歷史記錄——我們必須阻止這種情況。 OWASP 將即時注入列為首要威脅。本文分享了保護系統的實用步驟。

破碎的

如果你錯過了這場大屠殺,請閱讀第一部分: 點擊此處

比特軌跡研究結果

Trail of Bits 投下了一顆炸彈,MCP 伺服器正遭受這些攻擊的破壞:

  • 跳行攻擊[^1] - 惡意伺服器透過工具描述注入提示。你的人工智慧甚至可能在你開始與它互動之前就被欺騙。

  • 對話歷史記錄竊取[^2] - 伺服器可以在你不知情的情況下竊取你的完整對話歷史記錄

  • ANSI 終端程式碼攻擊[^3] - 轉義序列隱藏惡意指令。由於指令被隱藏,您的終端可能會顯示虛假或誤導性的訊息。

  • 不安全的憑證儲存[^4] - API 金鑰以明文形式存儲,且擁有所有人可讀的權限。這會導致敏感資料暴露。

安全漏洞

安全漏洞

OWASP 大型語言模型應用十大漏洞(2025 年)[^5] 將即時注入技術列為第一名。同時,大多數安全團隊仍將人工智慧視為普通的 Web 應用。

當發生違規行為時,您的監控工具不會閃爍,API 呼叫、授權和回應時間看起來都正常。違規行為通常難以察覺,直到為時已晚。

基於成本的攻擊向量

攻擊向量

Trail of Bits 在其雲端基礎架構研究[^6]中發現,人工智慧系統可能會產生不安全的雲端設定程式碼,從而導致意外的高成本。

他們的報告指出:

  • 人工智慧工具有時會對憑證進行硬編碼,從而帶來安全風險

  • 「隨機」密碼實際上是可預測的 LLM 輸出

  • 基礎設施程式碼可以無限制地啟動昂貴的資源

攻擊者利用此技術的方式如下:

  1. 尋找連接到昂貴雲端服務的人工智慧工具

  2. 精心設計自然語言請求以最大化資源消耗

  3. 利用人工智慧盲目遵循請求的傾向來繞過傳統的安全控制

  4. 儘管日誌可能看起來很正常,但基礎設施過度使用可能會導致成本飆升

有效的防禦策略

防禦策略

根據 OWASP 建議和記錄的安全研究,以下是在生產中有效的方法:

1. 永遠不要把製作權交給人工智慧

別傻了,永遠不要把你的產品金鑰交給 AI;使用沒有權限的沙盒帳戶。

// 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"

如果您的 AI 需要完全管理權限,那麼是時候重新考慮您的設定了。

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 人工智慧風險管理框架[^7]建議對人工智慧輸入進行語意分析。基本模式匹配可以捕獲大多數已記錄的攻擊媒介:

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. 成本感知速率限制

傳統的速率限制會統計請求數量。而 AI 系統則需要成本感知限制:

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 呼叫增加

  • 地理請求異常

行為危險訊號:

  • 包含系統關鍵字的請求

  • 權限提升嘗試

  • 存取新資料來源的工具

  • 每次請求的成本增加

`如果(($(echo“$current_hour_cost > ($average_daily_cost * 0.3)”| bc -l)));然後

immediate_alert“偵測到成本異常”

更新的身份驗證要求(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 LLMs前 10 名 (2025 年)[^8]:

  1. LLM01:即時注入 - 頭號威脅

  2. LLM02:不安全的輸出處理

  3. LLM03:訓練資料中毒

  4. LLM04:模型拒絕服務

NIST人工智慧風險管理框架[^7]:

  • 將人工智慧系統視為高風險元件

  • 實施持續監控

  • 使用縱深防禦策略

  • 規劃新的攻擊媒介

呼

底線

我們正在建立基於自然語言執行命令並連接到即時基礎設施的系統。這些系統的風險眾所周知,攻擊方法也層出不窮,研究人員也不斷發現新的漏洞。

現在就解決這個問題,否則以後就等著看違規新聞吧。

如果你錯過了這場大屠殺,請閱讀第一部分: 點擊此處

註腳


原文出處:https://dev.to/forgecode/mcp-security-is-broken-heres-how-to-fix-it-31fl

按讚的人:

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!