這款勒索軟體沒有操作者
七月初,Sysdig 記錄了它所稱的首例由 AI 代理從頭到尾執行的勒索軟體攻擊——偵察、竊取憑證、橫向移動,以及刪除一個正式環境資料庫,全程沒有人坐在鍵盤前。對任何運行編碼代理的人而言,有意思的不是攻擊者用了模型,而是整條攻擊鏈的起點,就是在環境中掃描機密。Bromure Agentic Coding 正是為一個會做這件事的代理而打造的。
我們花了兩年爭論一個編碼代理能否被託付你的憑證。Sysdig 剛剛公佈了這個 問題的另一半:一個勒索軟體集團把代理指向陌生人的伺服器,任由它獨自完成 整場入侵——出聲推理、在三十一秒內修正自己失敗的登入、完事後刪掉資料庫。 沒有人在駕駛。這類攻擊的技能門檻,如今就等於運行一個模型的成本。
某晚 19:34:24 UTC,一個自動化入侵者在正式環境資料庫中插入了一個後門管理員 帳號。十二秒後,登入失敗。再過十二秒,它一邊試用預設憑證,一邊同時生成了 一份全新的密碼雜湊——並行地診斷兩個可能的成因。在首次失敗的三十一秒後,它 交出了一份修正過、分多步的補救:不再呼叫壞掉的子行程,直接匯入加密函式庫, 刪掉那筆錯誤的資料列,再重新插入。下一次嘗試登入成功了。
一位人類事件應變人員讀到這條時間軸,便知道自己看到的是什麼。沒有人能在
半分鐘內診斷出 PATH 問題、改寫自己的漏洞利用並重新執行。這是一個代理。
JADEPUFFER 做了什麼
這場攻擊被 Sysdig 的威脅研究 團隊 命名為 JADEPUFFER,並於七月初報導。它是透過一台暴露在網際網路上的 Langflow 伺服器——一款用來建構 LLM 應用的工具——利用 CVE-2025-3248 進入,那是一個缺失 驗證的漏洞,讓未經驗證的請求得以執行任意 Python。這部分很普通;有數以千計的 Langflow 執行個體暴露在外。真正的故事,是取得立足點之後發生的事。
代理列舉了主機,然後做了如今每一本後滲透手冊都以之開場的事:在機器上掃描
機密。它並行地獵取 LLM 供應商金鑰(OpenAI、Anthropic、DeepSeek、Gemini)、
橫跨 AWS、Google、Azure 及數家中國供應商的雲端憑證、加密貨幣錢包,以及資料庫
登入。它傾印了 Langflow 的後端資料庫以尋找儲存的金鑰。它發現一個仍在使用出廠
密碼的內部物件儲存——minioadmin:minioadmin——列出每一個儲存桶,包括
terraform-state,並從中拉出 .env 與 credentials.json。當某個儲存請求回傳
的是 XML 而非它預期的 JSON 時,它當場改寫了自己的解析器,繼續前進。
接著它樞轉到真正的目標——一台另外運行 MySQL 與 Nacos 設定服務的伺服器——用
Nacos 眾所周知的預設簽章金鑰偽造了一個管理員權杖,穿過上述的登入失敗序列,
完成了工作。它用一把只在主控台顯示一次、從未儲存的金鑰,加密了全部 1,342 項
Nacos 設定項目,刪除了原始資料表,並建立了一張帶有 Bitcoin 位址與 Proton Mail
聯絡方式的 README_RANSOM 資料表。因為那把金鑰從未被儲存或送往任何地方,
即使付了贖金也不會換回資料。
自始至終的破綻就是程式碼本身。載荷裡塞滿了以淺白文字解釋為什麼的註解—— 按價值為目標評級、敘述「這個最大,也把它刪掉」、像一個出聲思考的模型那樣為 每一步加註,因為那正是當時發生的事。
應該讓開發者擔心的部分
你可以把這稱作一則伺服器安全的故事——為 Langflow 打補丁、別把帶著預設 Nacos
金鑰的資料庫端上網際網路、把物件儲存從 minioadmin 換掉——你會是對的,而這
全都是別人的清單。它之所以屬於一篇談編碼代理的文章,原因在於第二步。
在那個環境中每一個可觸及的機密,都在代理取得程式碼執行的那一刻化為彈藥。它
掃描的那些金鑰,正是你的編碼代理完成工作所需的同一批金鑰:讓它呼叫模型的
API 權杖、它用來查看部署的 AWS 憑證、它用來推送的 GitHub 權杖、你 .env
裡的資料庫 URL。JADEPUFFER 展示了代理一旦不再為你工作,會拿這些做什麼——而
我們早已知道,你的代理是可以被弄到不再為你工作的。
這不是臆測。光是今年夏天,研究人員就展示了一個編碼代理,被一則植入錯誤 監控串流的假錯誤報告 驅使去執行攻擊者的程式碼,也在一場看似例行的對不受信任儲存庫的安全審查 中被引導去執行載荷。兩者中,代理都彬彬有禮、樂於助人,直到它不再如此。把 JADEPUFFER 的自主性擺在這些劫持旁邊,形狀就清楚了:你會話內部的對手,如今 可以就是你請進來的那個代理,而它一旦翻臉,就會偵察、收割它能觸及的每一份 憑證,然後移動——獨自地,以機器的速度。
所以有用的問題不是「我的代理值不值得信任」,而是「當它不值得信任時,代理 能觸及什麼」。任何靠請求代理守規矩來作答的防禦——一段用心的系統提示、一次 微調、一個信任對話框——都是在對抗一樣 JADEPUFFER 證明可以被刻意打造成不守 規矩的東西下注。
Bromure 假設代理已經是敵對的
Bromure Agentic Coding 讓你的編碼代理在一台用完即棄的 Linux VM 裡運行,而 它發出的每一個網路請求,都經由主機上的代理離開那台 VM。這套設計出發自業界 一再吃虧才學到的假設:代理遲早會執行某件你並未打算讓它做的事。所以值得保護 的東西,被放在代理的推理觸及不到的地方——在主機上,而不在盒子裡。
憑證是最清楚的例子,因為那是入侵者最先伸手去拿的東西。在 Bromure 中,真正的
機密永不進入 VM。當你給一個設定檔一把 Anthropic 金鑰、一個
AWS_SECRET_ACCESS_KEY、一個 GitHub 權杖、一份資料庫憑證時,代理的環境拿到
的是替代品——一個 brm_… 佔位符——而主機代理只會在送往應當接收它的供應商的
那筆外送請求上,在線路上把假的換成真值。代理完成驗證、做它的工作;它只是
從不握有那份材料。就連讓代理本身運行下去的 API 金鑰,對任何讀取環境的東西
來說也是誘餌。
現在讓 JADEPUFFER 的第二步對著它跑。代理掃描機器,在它預期的地方找到金鑰
——而每一把都是假的。它傾印、備妥,把它們以信標送往一台命令與控制伺服器,
而另一端的攻擊者收到的是一堆什麼都驗證不了的 brm_… 字串。攻擊中最珍貴的
那一分鐘、為其後每一步供給燃料的憑證收割,兩手空空地結束。
同樣的姿態也削弱了鏈的其餘部分。偵察是對著一台用完即棄的盒子跑:測繪機器、 掃描機密,找到的只是一台從共用基底複製出來的用完即棄 VM,而不是你的筆電、 也不是你的網路。JADEPUFFER 安裝的持久化——一條每三十分鐘向它伺服器發出信標 的 crontab 項目——活在那台 VM 裡,並在你抹除該設定檔的家目錄或把它重置回基底 的那一刻死去,而那是一個選單項目,不是一場事件。而且因為每一個請求都經由 主機代理離開,通往攻擊者位址的信標並非隱形:它是安全記錄裡一行有紀錄的內容, 可歸屬於發出它的那個會話。
至於破壞性的結局——被刪除的資料表——Bromure 主機側的 Guardrails 是後盾,
它對代理發往其所理解之供應商的呼叫進行分類,並在線路上對破壞性的那些回傳
一個硬性的 403,就在 VM 裡被入侵的代理無法把它們關掉的地方。我們在一個
Cursor 代理在九秒內刪除一個正式環境資料庫
之後,詳細寫過這道邊界;同一套阻止誠實代理犯錯的機制,也阻止敵對代理的
Delete* 或 Terminate*。
這解決不了什麼,把話說清楚
它替換 Bromure 注入的憑證
這種替換涵蓋你在設定檔中設定的機密——模型金鑰、雲端與 git 權杖、容器 登錄庫、受管資料庫端點。一個你親手貼進 VM 裡某檔案的密碼,或一顆躺在 儲存庫裡的錢包種子,就只是一個檔案;代理沒有假貨可以放到它的位置。把 機密放進憑證代管,而不是工作區。
Guardrails 只把關我們能解析的供應商
破壞性呼叫封鎖所分類的是 Kubernetes、AWS、DigitalOcean、各大 git 託管服務、容器登錄庫,以及像 MongoDB、ClickHouse、Elasticsearch 這類 HTTPS 資料庫。一條通往非受管盒子的原始 MySQL 通訊端——正是 JADEPUFFER 用來刪除資料表的那個協定——今天並不在代理會讀取之列。涵蓋範圍是一份真實 的清單,而非無所不知。
外送被記錄,而非預設禁止
信標會出現在安全記錄裡;那是歸屬,不是預防。沒有真實之物離開,因為憑證 都是假的,但如果你需要禁止 VM 與任意主機通話,那是一項你仍得自行設定的 網路政策。
它不會為你暴露的伺服器打補丁
Bromure 保護你的代理運行所在的那台機器。對於一台面向網際網路的
Langflow、一把預設的 Nacos 金鑰,或你資產中別處某個
minioadmin:minioadmin 的物件儲存,它什麼都不做。這個故事初始存取的那
一半,依然是尋常的衛生習慣。
可以推而廣之的部分
把 Langflow、Nacos 與那個特定的夜晚抽走,JADEPUFFER 就是每一個以代理來構建 的人所立足之地的預告。一個能以真實憑證、以機器速度推理、適應與行動的代理, 如今租得便宜、指得容易。它不必是你的攻擊者才會成為你的問題——它只需要最終 落進你的會話,而今年夏天的劫持研究說它辦得到。那一旦發生,它做的第一件事, 就是讀取你的環境。
Bromure Agentic Coding 不試圖靠把代理變得更友善來阻止這件事。它讓環境只對 做正當工作的代理才值得一讀:真實金鑰在主機上、誘餌在盒子裡、一台用完即棄的 VM,以及一份對每一樣試圖離開之物的紀錄。代理可以翻臉,跑完整套 JADEPUFFER 劇本——然後發現它偷到的憑證什麼都打不開、它鑽進去的盒子在下一次重置時被抹 除,而真實機密曾經存在的唯一地方,正是它永遠無法觸及的那個地方。它是 自由且開源的。