返回所有文章
發佈於 · 作者 Renaud Deraison

代理有一個位址

在 DEF CON 34 上,Team Cymru 的 Eli Woodward 展示了一座 AI 蜜罐 48 小時的擷取紀錄:3,993 次請求、327 個來源 IP、344 次憑證探測,目標是沒有人對外公告過的連接埠。針對編碼代理的其他攻擊,都需要一條把文字送到它眼前的路。這一種只需要一條通往它的路由。Bromure Agentic Coding 預設讓代理跑在 NAT 之後,於是根本沒有路由可找。

針對編碼代理的其他攻擊,都需要一條把文字送到它眼前的路。這一種需要的是一條 通往它的路由,而掃描器早就有了。

DEF CON 34 的週六早上,在 Creator Stage 3, Team Cymru 的 Eli Woodward 做了一場半小時的演講,題目是 MCPwned: How Exposed AI Agents Became the Internet's New Recon Toy。他建了一座 AI 蜜罐:16 個 LLM 與 AI 基礎設施角色分佈在 16 個連接埠上,每一個都回傳與框架一模一樣的回應、 標頭、錯誤與協定行為,讓碰上它的掃描器相信自己找到了真貨。

在一段 48 小時的視窗裡,這座蜜罐收下了 來自 327 個唯一來源 IP 的 3,993 次請求, 其中包含 155 次 MCP 探測與 344 次 AI API 金鑰探測。

沒有人公告過那些連接埠,那 327 個位址也沒有一個是專程衝著 Woodward 來的。 他從擷取紀錄裡整理出的套路,屬於無聊而工業化的那一類:濫用 LiteLLM 的模型 註冊、列舉 MCP 資源、依框架而異的憑證暴力破解,以及協同掃描外露的本機推論 服務。那些花了十年掃遍位址空間、尋找開放 RDP 與免驗證 Redis 的團夥,把同一 套機器對準了 AI 開發工具,而且走在威脅模型前面。

沒有人需要寄任何東西給你

回頭讀過去一年針對編碼代理的攻擊,它們共用同一個形狀。代理讀到的某樣東西裡 帶著指令:一份 錯誤回報、一則 看不見的 PR 留言、一個 代理抓回來的網頁、一份 README、一列 WAF 日誌。在上述每一種裡,投遞都是攻擊者 真正困難的部分。他們得找到一條你刻意接上的通道,再把自己的文字送進去。

把箭頭反過來,這個難題就消失了。掃描器往連接埠 11434 送一個 SYN,你機器上的 某樣東西就回應了。

掃描器找到了什麼

Woodward 那份擷取紀錄背後的母體,是五位數的量級。

Censys 繪製了可從網際網路存取的 MCP 服務, 在 2026 年 4 月 28 日找到 12,520 個,分布於 56 個國家、425 個自治系統的 8,758 個唯一 IP 位址上。一週後的 5 月 6 日,數量已超過 21,000。大約每十個裡有四個 不做任何憑證檢查就接受任何人的請求,因為協定預設並不要求。

Wiz 直接去敲了門。在一份 7 月 28 日發表的調查 裡,他們發現 80% 的雲端環境中都有 MCP,其中約六分之一至少外露一台伺服器。在 外露的那些之中,約 70% 會把完整的工具目錄交給未驗證的呼叫方,約 42% 在研究 人員實際呼叫工具時回傳了真實資料,約 10% 則擋在敏感後端前面。Wiz 把已確認的 一部分指向雲端中繼資料端點,換回了臨時憑證。

Knostic 從 Shodan 做了同樣的練習,對 1,862 台外露伺服器 取指紋;他們手動驗證的 119 台,每一台都在沒有驗證的情況下回答了 tools/list。 那些伺服器都在為一個陌生人,做著它存在的唯一那件事。

本機推論是同一幅畫面,只是數字更整。LeakIX 在 2026 年 2 月 23 日數到 12,269 個未驗證的 Ollama 實例, 每一個都提供經由 /api/tags 的模型列舉、經由 /api/generate/api/chat 的免費算力、經由 /api/pull/api/push 的模型竊取,其中約一千個還帶著 Probllama 的路徑穿越鏈。

沒有人公告過的 16 個連接埠上的 48 小時正在掃描的網際網路沒有目標清單,沒有釣魚也沒有東西要投遞只是往連接埠送個 SYN有東西回應了16 個 LLM 與 AI 基建角色分佈 16 埠,忠於框架標頭、錯誤、協定行為然後日誌就滿了3,993 次請求來自 327 個唯一來源 IP在單一個 48 小時視窗內套路換了 IP 也一樣155 次 MCP 探測344 次 AI 金鑰探測LiteLLM 模型註冊本機推論的全面掃描資源列舉、依框架而異的憑證暴力破解,以及上一次回應過的任何東西掃描器在真實網際網路上找到的東西21,000+ 個 MCP 服務Censys,2026 年 5 月,原為 12,520約每十個有四個不要憑證70% 交出工具目錄Wiz,2026 年 7 月,匿名取得42% 被呼叫時回傳真實資料12,269 個開放 OllamaLeakIX,2026 年 2 月列舉、生成、pull、push
Woodward 的 48 小時擷取,以及它背後真實存在的母體。掃描器不需要目標清單,也不需要投遞通道,因為那些服務會自己回應。

你的機器怎麼就開始回應了

你並沒有決定要把一項服務放上網際網路。你設了 OLLAMA_HOST=0.0.0.0,好讓沙發 上的筆電能用桌機上的模型,也基於同樣理由把一台 MCP 伺服器綁到所有介面上。你 跑了 docker run -p 8080:8080,因為 README 這樣寫。你為了在手機上除錯而開了 一條通道,然後就一直開著。

接著你把筆電帶去了別的地方。研討會 Wi-Fi、共享辦公室樓層、旅館、一台 UPnP 替你熱心代勞的家用路由器,或是一台安全群組被誰匆忙放寬的雲端開發機。綁定只是 一個旗標;外露則屬於寫下你此刻所在那張路由表的人。你從頭到尾都沒有同意過。

Bromure Agentic Coding 預設就把這道縫隙關上,你什麼都不必設定。

這台 VM 沒有位址

Bromure 讓編碼代理跑在 Apple Silicon 上的一次性 Linux VM 裡,它流量的每一個 位元組都要穿過主機上的代理伺服器, 也就是代理所在那個盒子的外面。對這一類攻擊來說, 這套安排的網路那一側扛下了主要的份量。

資源 → 網路 底下,模式是 NAT,而不做任何選擇時你拿到的就是 NAT。 VM 透過 Virtualization.framework 內建的 NAT 共用你 Mac 的網路連線:出站可行, 你區網上的任何東西都到不了這台 VM。在那台 VM 裡把服務綁到 0.0.0.0,你綁到 的是 NAT 之後一個 VM 內部的介面。這裡沒有連接埠轉發表可以填錯,因為這個模式 根本不轉發連接埠。

掃描器的 SYN 連任何一個連接埠都碰不到,無論是被過濾還是關閉的,因為沒有路由 通往那裡。Woodward 的蜜罐需要 16 個監聽行程才收得到東西。Bromure 的設定檔一個 也不提供,那 344 次憑證探測沒有地方可以落腳。

橋接 在你需要時就在那裡,它會在你指名的實體介面上,透過 DHCP 給 VM 一個 區網可路由的位址。這是每個設定檔各自的選項,還附上明確的介面選擇器,所以你 只會在你本來就打算上區網的那一次執行裡上區網。

你的 MCP 伺服器不會監聽

MCP 面板裡的伺服器是設定檔組態。Bromure 會把它們轉成 Claude Code 的 JSON 或 Codex 的 TOML,並在開機時注入。stdio 伺服器是 VM 內部一個用 管線溝通的子行程,因此沒有通訊端,tools/list 列舉也就無處可達。HTTP 伺服器是你指向的一個 URL,可選擇附上 bearer 權杖,這讓發出請求的人是你。 那 40% 會回應陌生人的 MCP 服務,是有人親手架起並綁定的伺服器。

本機推論跑在 Mac 上

「協同掃描外露的本機推論服務」是蜜罐自己的說法,而它找到的就是 12,269 個 開放的 Ollama。Claude Code 的 本機模型 驗證,會把推論導向在 本機 模型 面板中選定的裝置端 MLX 模型,它跑在 macOS 上,也就是代理伺服器的 主機那一側。VM 裡根本沒有連接埠 11434 可以外露。Fusion 的裝置端那條 腿走的也是同一條路。

真闖進來的探測只會撿到假貨

做依框架而異的憑證暴力破解的人都知道要去哪裡找:環境變數裡的 OPENAI_API_KEY~/.aws/credentials~/.docker/config.json、一份 kubeconfig、~/.ssh。Bromure 把這些全放進 VM,也把這些全做成假的。你會 拿到 brm_…xai-brm-… 權杖、一份帶著用完即丟用戶端憑證的合成 kubeconfig、一組假的 base64 登錄檔驗證,以及一旦有什麼繞過代理伺服器就會 回傳 InvalidSignatureException 的 AWS 憑材。Bromure 把真值留在主機上, 只在傳輸時針對它們該去的目的地替換回去。

破壞性動詞在主機上裁決

Wiz 發現約 42% 的外露伺服器會回傳真實資料,旁邊還有一整類寫入與刪除。 Guardrails 是主機代理伺服器裡的一具政策引擎,涵蓋 Kubernetes、AWS、 DigitalOcean、容器登錄檔、GitHub、GitLab、Bitbucket 以及 HTTPS 的資料庫 端點。針對每項資源設定阻擋破壞性操作或唯讀,被擋下的呼叫就會以一個硬邦邦 的 403 回來,代理則把它當成尋常的 API 失敗回報。Bromure 是在 macOS 裡下 這個判斷的,所以 VM 裡沒有東西可以被關掉。

在開發者的筆電上OLLAMA_HOST=0.0.0.0好讓另一台筆電也能用模型連接埠 11434,什麼介面都聽MCP 伺服器也是一樣綁法tools/list 誰問都答目錄本身就是偵察結果而且環境變數是真的48 小時 344 次金鑰探測知道路徑誰路由到你,誰說了算研討會 Wi-Fi、UPnP、太寬的安全群組在 Bromure 設定檔裡VM 預設就在 NAT 之後出站可行;沒有東西進得來0.0.0.0 綁到 VM 內部的介面走 stdio 的 MCP 是條管線一個子行程,沒有通訊端可列舉HTTP 伺服器是你指向的 URL本機推論跑在 Mac 上VM 裡沒有 11434 可以掃而且環境變數本來就只有 brm_…真值留在主機,傳輸時才換上
同樣兩項方便,放在兩台機器上。在筆電上,各一個旗標就把服務放上你此刻所在的任何網路。在 Bromure 的設定檔裡,VM 沒有入站路由,MCP 伺服器是一條管線,模型跑在 Mac 上,而探測會掃過的環境變數裡只有假貨。

陌生人給的任務,依然是文字

假設你接上一台別人外露出來的遠端 MCP 伺服器,而它回給你的不只是資料。一旦 掃描器能夠列舉這些服務,找到其中一台的人也就能用它,從正門以內容的形式抵達 你的代理。

Bromure 會在內容進來時替它評分。一個本機的提示注入模型,會讀取代理吃進去的 檔案內容、網頁與 tool_result 區塊,尋找那些對著「正在讀的人」下達的祈使句。 記錄但繼續 會把每一次命中寫進安全日誌。問我該怎麼辦 會暫停外送的 請求,把標記出來的片段擺到你面前。逕行阻擋 會在模型看到之前就攔下來, 並丟給代理一個硬邦邦的 451。第二個偵測器,是一個微調過的 ModernBERT 分類器, 加上一個針對零寬度、雙向與 Unicode 標籤酬載的確定性掃描器,涵蓋 CLAUDE.mdAGENTS.mdGROK.md 及其巢狀與全域變體。

兩個模型都跑在你的 Mac 上,只需從 bromure.io 下載一次。替第三方 MCP 伺服器的 輸出評分,並不牽涉把那份輸出送到任何地方。

那聲敲門,就是日誌上的一列

VM 發出的每一個請求都會穿過主機代理伺服器,而在 活動 這個追蹤層級上, Bromure 會逐一記下主機、狀態、延遲、替換報告,以及任何外洩警告。注入偵測會 連同被標記的文字一起落在安全日誌裡。把層級再往上調,Bromure 連 AI 請求的內文 也會保留,並以與你設定檔機密相同的鑰匙圈金鑰加密。

一個開始接受外部指令的代理,總得抵達某個地方才對誰有用,而抵達某個地方,就是 你可以在那場工作階段所在的機器上讀到的一列紀錄。

而當你希望這台機器消失時,它就會消失。清除家目錄 會抹掉 /home/ubuntu, 也就是點檔案、.sshnpm-global.cargo 與 shell 歷程,回到剛複製完的 狀態。重設為基準 則丟棄每一項系統層級的變更,並從基礎映像重新複製工作 磁碟。

MCP 終究會長出更好的預設值,Ollama 也會長出自己的驗證機制,而 Woodward 蜜罐 上的那些連接埠,到明年八月會換成別的連接埠。形狀不會變。今天要把代理跑好, 就意味著在它旁邊跑一個閘道與一小把工具伺服器,而每一個都是在一台會旅行的 筆電上綁住通訊端的程式。

這裡的其他文章要你別輕信代理讀到的東西。這一篇問的問題更短:陌生人敲門時是 什麼在回應,還有,你會不會寧願什麼都不要回應。

安裝 Bromure Agentic Coding,給你的代理一台掃描器看不見的 機器。