當後臺AI代理成為安全邊界問題
本文探討了Claude Code等AI代理工具的安全隱患,特別是後臺會話功能、監控程序及CLAUDE_CONFIG_DIR環境變數可被利用來建立隱蔽的持久化C2代理,僅透過一次原生代碼執行即可實現。
現代開發環境中充斥著強大的AI代理工具,但安全團隊尚未完全理解其風險。Claude Code是其中最具能力的工具之一——它可以執行程式碼、讀取檔案、從網際網路獲取內容、執行命令,並支援持久化後臺會話,這些會話的生命週期超越終端,由監控程序管理。這些對開發者有用的功能同樣吸引攻擊者。本文展示瞭如何利用Claude Code的多種特性,在目標機器上一次性原生代碼執行後,僅透過Markdown和JSON檔案建立幾乎不可見的持久化C2代理。
Claude Code的後臺會話功能自v2.0.60引入,允許使用者設定長期執行的任務並在後臺繼續。自v2.1.139版本起,後臺會話由監控程序管理,關閉終端、結束SSH連線或啟動新shell都不會影響執行中的後臺會話。作者透過逆向工程分析了v2.1.144版本的守護程序,該程序充當小型本地控制平面,透過Unix域套接字或Windows命名管道與客戶端通訊。控制套接字管理會話列表、附加、停止等操作,而rv和pty套接字分別處理生命週期事件和終端傳輸。通訊協議使用換行分隔的JSON,包含版本號和操作名稱。例如,操作包括list、dispatch、attach等。
更關鍵的隱蔽機制來自CLAUDE_CONFIG_DIR環境變數。透過設定該變數為自定義路徑,後臺會話的資料、日誌和狀態將儲存在此路徑下,而非預設的~/.claude。當使用者執行claude agents時,只能看到~/.claude下的會話,從而完全隱藏攻擊者的會話。目前該變數存在一些不一致性,例如Claude期望在目錄中找到.claude.json檔案,但預設情況下該檔案位於~,這已被社群發現並討論。
攻擊的真正“載荷”並非惡意程式碼,而是一組用純英文編寫的指令,定義了代理的行為。示例中展示了一個偽裝成個人任務助理的C2代理,它從遠端伺服器獲取任務、執行本地操作(如搜尋檔案、提取密碼、讀取瀏覽器書籤),並將結果回傳。這種語義化的載荷使得檢測非常困難,因為沒有傳統的惡意二進位制檔案。
這一發現凸顯了AI代理工具帶來的安全邊界問題。傳統的安全措施側重於執行檔或指令碼檢測,而忽略了基於文本指令的代理行為。安全團隊需要重新評估這些工具的威脅模型,並考慮如何監控和限制代理的敏感操作。隨著AI代理工具在開發環境中的普及,此類攻擊可能成為新的常態,企業必須提前防範。