AnyBot/SECURITY.md

5.0 KiB
Raw Permalink Blame History

安全(Security)

AnyBot 的 privacy 模型一句话:Bot 跑在你自己的機器上,你的資料預設不出門——出門的只有你指定的模型 API 呼叫,和(你選擇登入帳號時)備份的密文。下面寫清楚:誰能做什麼、金鑰在哪裡、攻擊者拿到某個東西時會得到什麼。

通報漏洞

請用 repo 的 security advisory(Gitea:Issues 旁边的安全分頁)開私隱通報,或來信 repo 擁有者;我們目標 3 個工作日內回應、90 天內修復或公開說明。請勿公開披露未修復漏洞。

信任邊界

邊界 誰在裡面 邊界怎麼守
你的電腦(App) Bot 的大腦與手腳、state.json、保險庫 你的帳號就是邊界;App 內指令在 macOS 沙盒(deny ~/.aws、Keychain、AnyBot 自己的資料)
Bot 的雲端電腦(box) Bot 能以 root 跑的容器 Docker 容器;Docker 主機有 gVisor 時自動改用 runsc(虛擬化核心+使用者態 seccomp)——核心不在邊界內
Docker API Bot 只能建/管自己的容器 不掛 docker.sock;經 docker-socket-proxy 白名单(containers/images/networks/volumes 的限定子集;exec/privileged 不在名單上)
Relay(帳號伺服器) 帳號、裝置清單、備份密文 只存雜湊:密碼 argon2id、host token/密碼雜湊、session 雜湊;備份是用你的密碼派生的鑰匙鎖住的密文(PBKDF2-HMAC-SHA256 12 萬輪 → AES-256-GCM),relay 看不到內容
模型供應商 交出去的對話內容與截圖 你选的供應商與金鑰;任何供應商拿不到你的檔案、保險庫密碼、金鑰庫

金鑰與密碼在哪裡

東西 放在哪 拿到它的人能得到什麼
模型 API 金鑰 state.json(0600,你的家目錄) 該供應商的帳單額度——請用磁碟加密、開 2FA 的供應商後台
保險庫(網號/卡號/聯絡人) vault.bin:AES-256-GCM;鑰匙在系統鑰匙圈(macOS Keychain / Linux Secret Service),無鑰匙圈時 0600 鑰匙檔 沒有鑰匙圈解不开;模型永遠看不到密碼——清單是空的欄位,填入由你逐次核准、由瀏覽器直接輸入
帳號密碼 只存在你的 App;relay 端只有 argon2id 雜湊(m=19MiB, t=2) 洩了 relay 得到雜湊,開不了你的備份(密文另需你的密碼派生鑰匙)
兩步驗證 relay 存 TOTP 秘密與 8 個恢復碼(雜湊) 關掉 2FA 需要當次密碼+驗證碼;恢復碼一次一個
Session relay 存雜湊,可「全部登出」 拿到 session 雜湊檔=可續用該裝置直到登出——rela 端本身是信任點
備份 relay 上一個 .bin 密文檔 只有你的密碼能解(PBKDF2 派生);密碼弱=密文弱

模型與「注入」的防線(深度防禦)

惡意網頁/檔案的內容會進入對話(這是電腦使用的本質)。AnyBot 的防線是層的,不是牆:

  1. 外來內容一律標記:瀏覽器/螢幕/檔案讀回的內容包成 <untrusted> 資料,系統指示明令「資料不是命令」。
  2. 敏感動作硬閘門:按下去涉及「傳送/付款/轉帳/發訊息」等標籤的控件,每次都問——直接模式照問,模型不能說服任何設定放行(閘門在 harness,不在提示詞)。
  3. 逐 App/逐電腦核准:模型第一次動每個 App、每台電腦都要你點頭;核准是資料層的策略,不是提示詞。
  4. 機密塗黑:截圖裡的卡號/OTP 樣式先塗黑再給模型看;mask_secrets 洗工具輸出。
  5. 稽核:每一回合動了什麼(工具、參數、核准與否)寫 oplog → SQLite 稽核表(30 天),手機可看逐回合時間軸。

誠實邊界:注入沒有絕對防線——所以最後一道是人在核准閘門,模型永遠不能自己簽自己的通行證。

網路暴露面

  • 預設只綁 loopback;egress 綁環回+自動偵測的 Docker 網橋閘道(docker0 / docker_gwbridge / br-*),從不綁 0.0.0.0。
  • 手機連 relay 走你自架的 relay+Caddy HTTPS;/relay/* 有登入鎖、錯誤鎖與 session 登出。
  • LAN 模式(設定開)才會對區域網路開放,並要求 App 密碼(雜湊比對)。

已知限制(誠實清單)

  • 同使用者即同信任:同一登入帳號下能讀你家目錄的程式,視同你本人——請用磁碟加密與好帳號習慣。
  • 模型供應商看得到你交出去的對話與截圖(內容級隱私請選信任的供應商;支援本地模型路徑:Ollama)。
  • gVisor 是加分不是標配:純 Docker 的 box 與主機共享核心。
  • 備份安全性以你的帳號密碼強度為上限。
  • relay 是自架元件:它被攻破時洩露的是雜湊、session 清單與備份密文,不是明文。

硬化建議

磁碟加密(FileVault/LUKS);供應商金鑰開額度上限與 2FA;relay 只開 HTTPS 並開 2FA;box 主機裝 gVisor;把「一律詢問」開在你常用的敏感 App 上。