AI-noleak – AI命令行工具的本地秘密代理
AI-noleak 是一個本地反向代理,可攔截AI編碼代理無意中泄露的本地秘密(如API密鑰、令牌),並用確定性佔位符替換它們,防止秘密通過提示泄露給上游AI模型。它通過三層保護(PTY包裝器、HTTP代理、文件監視器)實現零配置、無需安裝CA證書的本地安全隔離。
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 工具將快照寫入未監視的目錄,第三層保護也會失效。用户應根據自己的工作流調整監視路徑。