AI News HubLIVE
站内改写2 分鐘閱讀

AI-noleak – AI命令列工具的本地秘密代理

AI-noleak 是一個本地反向代理,可攔截AI編碼代理無意中洩露的本地秘密(如API金鑰、令牌),並用確定性佔位符替換它們,防止秘密透過提示洩露給上游AI模型。它透過三層保護(PTY包裝器、HTTP代理、檔案監視器)實現零配置、無需安裝CA證書的本地安全隔離。

來源Hacker News AI作者: ahmedxuhri

AI-noleak 是由開發者 ahmedxuhri 建立的一個開源專案,旨在解決AI編碼代理在執行任務時意外洩露敏感本地資訊的問題。該工具作為一個本地反向代理執行在使用者終端和AI API之間,透過三層獨立的保護機制攔截、替換並恢復秘密,確保只有授權的API金鑰能夠透過,而其他本地秘密在離開主機前被替換為確定性佔位符。

第一層是 PTY 包裝器,它在shell執行前從括號貼上中剝離秘密;第二層是 HTTP 代理,它掃描並編輯出站請求和AI響應中的秘密;第三層是檔案監視器,使用 inotify(Linux)或 kqueue(macOS)監控日誌和歷史檔案中的秘密並立即清理。所有三層共享一個本地保險庫守護程序(noleakd),該守護程序儲存佔位符與秘密之間的對映,既可以使用記憶體模式(無持久化),也可以使用 AES-256-GCM 加密的磁碟持久化(啟動時需提供主密碼)。

安全模型方面,AI-noleak 採用100%本地隔離,不傳送任何遙測資料。它不需要安裝自定義根CA證書,因為明文流量僅透過本地迴環介面(127.0.0.1)傳輸。保險庫守護程序透過Unix域套接字通訊,並使用核心級對等憑據檢查(Linux上的SO_PEERCRED,macOS上的LOCAL_PEERCRED)嚴格驗證UID,確保只有啟動守護程序的同一使用者ID的程序才能查詢保險庫。HTTP代理對保險庫僅具有隻讀許可權,無法修改秘密。持久化模式下,保險庫檔案使用 Argon2id 金鑰派生函式和 AES-256-GCM 加密。

為什麼這很重要?Agentic AI CLI 工具會寫入和執行命令、grep 檔案、讀取日誌。如果環境中存在活躍的環境變數、.env 檔案、.git/config 憑據或命令歷史中的原始令牌,Agent 很容易意外讀取它們,將其注入提示上下文併傳送到上游AI API。AI-noleak 確保貼上的秘密在shell執行前被清除(第一層),出站 HTTP 請求中的原始秘密在離開機器前被替換為佔位符(第二層),寫入磁碟的臨時快照、日誌或歷史檔案被立即清理(第三層)。上游AI模型只看到類似 @TOKEN_a9553f@ 的佔位符,如果模型輸出佔位符,AI-noleak 在返回CLI之前將其本地翻譯回真實秘密。

安裝支援 Linux 和 macOS,提供一行命令快速安裝或校驗安裝(推薦)。也可以從原始碼編譯,要求 Go 1.22+。快速啟動需要編輯 ~/.noleak/config.yaml 設定代理上游地址,然後執行 noleak start(或 noleak start --ephemeral 使用記憶體模式),最後將AI CLI的基礎URL配置為 http://127.0.0.1:9999/v1。專案提供健康檢查命令 noleak doctor 以及管理佔位符的命令如 list、review、rotate、delete。

互動式演示顯示,當Agent嘗試傳送包含AWS金鑰的提示時,AI-noleak 立即攔截並在控制台輸出紅色替換資訊,將金鑰替換為 @TOKEN_xxxxxx@,上游模型只看到佔位符。使用者還可以手動測試各層保護:測試第二層用 curl 傳送包含金鑰的請求;測試第三層透過向監視目錄寫入包含GitHub PAT的檔案;測試第一層透過 printf 模擬括號貼上。

需要注意的是,在 macOS 上,檔案監視器可能因 FSEvents 的延遲和合並而無法足夠快地反應,在高磁碟 I/O 下,如果 Agent 在幾毫秒內寫入並讀取秘密,第三層可能無法及時攔截。此外,如果 CLI 工具將快照寫入未監視的目錄,第三層保護也會失效。使用者應根據自己的工作流調整監視路徑。