AI 代理權限:人類在 4 萬次遊戲中漏掉 1/3 的威脅
人機協作是無效的安全屏障
來自超過 4 萬次瀏覽器模擬遊戲的數據顯示,人類在批准 AI 代理命令時,平均會漏掉 每三項威脅中的兩項(準確率 66.3%)。這項研究顯示,依賴手動使用者批准作為對抗惡意 AI 代理的最後一道防線,從根本上存在缺陷,原因在於權限疲勞、缺乏上下文,以及常見開發者命令的欺騙性。
關鍵性能指標
在 409,000 次獨立決策中,模擬產生了以下關鍵統計數據:
- 32.9% 的會話以負分結束,表示批准的威脅所帶來的懲罰,以及被阻擋的合法命令,超過了正確操作的收益。
- 35.2% 的玩家成功捕捉到所有威脅,但僅有 20.8% 在不阻擋超過 20% 合法命令的情況下做到這一點。
- 7% 的玩家無視風險,批准了所有提示,等同於處於「危險地跳過權限」模式。
威脅類別與漏失率
使用者更可能漏掉隱蔽的資料外洩嘗試,而非明顯的破壞性行為。隨著威脅變得越不顯眼,漏失率也越高:
| 類別 | 範例 | 漏失率 |
|---|---|---|
| 明顯的破壞性行為 | rm -rf /, chmod -R 777 / |
11.7% |
| 持續性變異 | crontab 注入、git config 接管 | 23.8% |
| 資料外洩 / 程式碼執行 | 向未知 API 發送 curl、拼寫錯誤的套件 | 33.4% |
| 範圍違規 | cat ~/.aws/credentials, cat ~/.kube/config |
35.0% |
npm run 的盲點
熟悉的指令名稱會成為惡意載荷的強大心理掩護。本研究中最常被漏掉的指令是 npm run analyze,其被批准的機率高達 64.7%。
儘管遊戲提供了歷史記錄,顯示實際指令內容(例如,將資料外洩至遠端伺服器的 curl 命令),使用者仍以高頻率批准這些指令。將 npm run analyze、npm run setup 和 npm run deploy 的資料合併分析後,漏失率高達 52.5%,遠高於其他類似外洩行為攻擊的 28.4%。這顯示使用者在面對熟悉指令名稱時,經常忽略歷史記錄所提供的上下文。
權限疲勞與時間壓力
隨著會話進行,準確率逐漸下降。雖然使用者通常在前幾項指令中經歷一段「暖機」期,表現逐步提升,但到了會話尾聲,漏失率又開始上升。這與 Anthropic 等 AI 實驗室的觀察一致,他們指出,使用者看到的批准請求越多,對每一項的關注度就越低。
警覺的代價:過度阻擋
高度警覺往往導致「過度阻擋」,即拒絕那些良性但看似有風險的指令,進而拖慢代理的效能。常見被阻擋的良性指令包括:
npm config set registry https://npm.internal(被阻擋 59% 的時間)rm -rf dist/(被阻擋 45% 的時間)kill $(lsof -t -i:3000)(被阻擋 43% 的時間)
社群觀點與替代方案
開發者在 Hacker News 上的討論顯示,普遍認為「點擊批准」是一種糟糕的安全模型,常被視為廠商的法律責任防護罩,而非強大的安全功能。
提出的技術緩解措施
社群成員建議,應以結構性防護取代手動批准:
- 嚴格沙箱化:使用 Docker、Podman、gVisor 或 Firecracker 來隔離代理。有人建議使用獨立的系統使用者,並限制其主目錄存取權限(
chmod 0700 $HOME)。 - 基於資源的權限:從批准 指令 轉為批准對 特定檔案或網路端點 的存取權。
- 自動化政策執行:建立一組確定性規則與基於 LLM 的監控工具(例如「Watcher」等工具),自動批准安全指令,僅對高風險異常進行警示。
- 憑證隔離:將憑證從 shell 設定檔(如
.zshrc)中移出,以防止簡單的cat指令外洩 API 金鑰。
對研究的批評
部分參與者認為,遊戲的人為時間限制以及缺乏真實世界後果(無實際資料損失)可能扭曲結果。也有人指出,缺乏專業背景(例如,無法判斷特定專案的 .zshrc 是否真的包含機密資訊)使得某些提示在客觀上具有模糊性。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch