59 lines
5.0 KiB
Markdown
59 lines
5.0 KiB
Markdown
# 安全(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 上。
|