在 Agent 時代佈局陷阱:打造誘餌 MCP 伺服器捕捉攻擊者 (Decoy MCP Server Honeypot)
原始來源與檔名:20260512_2026-05-05T094100+0800-Build a Decoy MCP Server to Catch AI Agent Attackers.md
來源:[[@lennyzeltser]] / X (Twitter) — 2026-05-03
原始檔名:2026-05-05T094100+0800-Build a Decoy MCP Server to Catch AI Agent Attackers.md
NAPKIN | 餐巾紙
餐巾紙公式
Attacker Goal: Compromise dev machine -> Read
.claude.json(MCP config) -> Pivot to infra. Defender Strategy: Inject fake “Vault” MCP entry -> Route to Cloudflare Worker (Honeypot) -> Alert on interaction. Decoy Design = Tempting tool names (secrets_vault_read) + Plausible Refusals (Access denied. Incident logged.) = High-fidelity Tripwire.
在 Agentic Workflow 時代,你的 .mcp.json 或 ~/.claude.json 設定檔成為了駭客眼中的金礦,因為裡面記錄了 Agent 可以存取的所有系統權限(如資料庫、GitHub 權限)。這篇資安文章提出了一個絕妙的主意:在配置檔中植入一個「誘餌 (Decoy) MCP Server」,指向你自己架設的 Cloudflare Worker (蜜罐)。當駭客取得開發機控制權並試圖用這個假的 MCP 伺服器去探勘機密時,Worker 會立刻觸發警報(如 Slack 通知),讓你精準捕捉攻擊者的意圖與行為。
一句話
防禦新範式:把你的 MCP 配置檔變成地雷區。當攻擊者黑進你的電腦,他們第一件事就是查看 Claude Code 或 Hermes 的設定檔,尋找高權限工具。這篇文章教你如何用 Cloudflare Worker 寫一個假的 MCP 伺服器,偽裝成「生產環境密碼庫 (Vault)」。一旦攻擊者的 Agent 試圖呼叫這個工具提取密碼,你不但會收到警報,還能看到他們下的 SQL 語法或搜尋關鍵字,將對方的偵查行動反轉為你的情報來源。
餐巾紙草圖
[ The MCP Honeypot Architecture ]
Attacker on Dev Machine
│
▼
Reads ~/.claude.json (MCP Config)
{
"github": "api.github...", <-- Real
"vault": "https://worker..." <-- Honeypot Decoy!
}
│
▼
Attacker sends MCP Request: `tools/call` -> `secrets_vault_read`
│
▼
[ Cloudflare Worker ]
1. Logs IP, User-Agent, Tool Args
2. Sends Alert to Slack Webhook
3. Returns: "Access denied. Incident logged."
ROUND 1: SKELETON | 骨架掃描
“這篇文章在說什麼”
- 攻擊路徑 (Attack Vector): 攻擊者獲得開發機權限後,會去讀取 AI Agent 的配置檔 (如
.claude.json或.mcp.json) 來尋找值得下手的資源(Pivot 機會)。 - 防禦策略 (Honeypot/Tripwire): 在設定檔中混入一個虛假的 MCP 伺服器條目。只有攻擊者(或誤操作的本機 Agent)才會去嘗試連線。
- 建置 Cloudflare Worker 蜜罐:
- 扮演真正的 MCP 伺服器,廣播誘人的假工具(如
secrets_vault_read或production_db_query)。 - 對於探勘請求,回傳逼真的拒絕訊息(如
Access denied. Incident logged.),讓攻擊者以為只是觸發了正常安控,而實際上參數已經被記錄。 - 將警告 Payload(包含來源 IP、User-Agent、呼叫的工具和傳入的參數)送到 Slack Webhook。
- 扮演真正的 MCP 伺服器,廣播誘人的假工具(如
- 實作細節: 建議使用原生的
fetchhandler 而不是官方 MCP SDK,因為原生 handler 可以捕捉到被 SDK 丟棄的畸形探測封包,並獲取更多網路層資訊。 - 過濾誤報: 為了防止自己的 Claude Code 每次啟動都觸發警報,需要在
settings.json的disabledMcpjsonServers中排除這個誘餌伺服器。
ROUND 2: DISSECTION | 血肉解剖
“憑什麼這麼說”
核心論證鏈
- 高保真度警報 (High-confidence signal): 在網路安全中,最怕的是誤報 (False Positives)。這個誘餌 MCP 只存在於設定檔中,沒有任何正常的業務邏輯會去呼叫它。因此,只要這個 URL 收到任何
tools/call請求,有 99% 的機率是有人正在你的電腦上進行惡意橫向移動,這是一個極高價值的警報訊號 (Tripwire)。 - 意圖捕捉 (Capturing Intent): 與傳統的端口掃描器不同,MCP 的
tools/call負載會包含具體的參數 (args)。例如{"sql": "SELECT * FROM users"},這讓防禦者可以直接看到攻擊者「到底在找什麼」,從「發現有人入侵」升級為「理解敵人的意圖」。
關鍵證據
- 結合 AWS Canarytokens 的運用:作者提到可以在回應中故意給出一組假 AWS 憑證 (Honeytoken)。當攻擊者以為挖到寶並在外部嘗試使用這組 AWS 憑證時,會觸發第二道警報。這是資安領域經典的「深度防禦與欺敵戰術 (Deception Technology)」。
邊界條件
- 安全防護漏洞: 作者警告,送往 Slack 或 SIEM 的警報 Payload 包含了攻擊者提供的參數(如 SQL 語法)。如果沒有進行適當的淨化 (Sanitize),精明的攻擊者可能會利用這個警報系統發動二階注入攻擊 (Second-order injection)。
ROUND 3: SOUL | 靈魂提取
“還能怎么用”
- 知識連結: 本文與《工業級 Skill 撰寫指南》形成對比。在那裡,我們討論如何讓 Agent 更強大;而在這裡,我們討論當 Agent(或控制 Agent 的人)變成敵人時,如何防禦。MCP 作為標準協議的普及,不可避免地帶來了標準化的攻擊面。
- 深層洞見: “The decoy turns the attacker’s reconnaissance into yours.” (誘餌將攻擊者的偵查行動轉化為你的偵查行動)。 這是資安攻防中最優雅的藝術。最好的防禦不是建一道無堅不摧的牆,而是建一扇看起來沒鎖的門,門後接著警鈴與攝影機。
- 行動呼籲:
如果你的開發機上運行著 Claude Code、Cursor 或 Hermes,且綁定了公司內網的敏感資料庫 MCP,強烈建議花 15 分鐘建立這個 Cloudflare Worker 蜜罐。把它命名為
production_vault塞進你的.claude.json中,為你的開發環境加上一道無形的絆線。