Technical Deep Dive

為什麼 3Commas 被偷 $22M
而 TVSBot 的設計不會

2026-06-03·8 分鐘閱讀·架構 / 安全

2022 年 12 月,加密自動交易最大品牌 3Commas 發生史上最嚴重的 API key 外洩 — 100 萬把交易所 key 託管在他們資料庫,外洩 10 萬把,鏈上分析師 ZachXBT 驗證 44 名受害者損失 $14.8M,總被盜估計 $22M。

這不是「他們被駭」的故事,是「託管模型的單點失靈」的故事。本文拆解事件、 解釋為什麼這種設計遲早會出事、以及 TVSBot 怎麼避開。

第一幕:事件時間線

2022 年 10-11 月:用戶開始回報「我沒下單,但帳戶在 FTX (FTT) 自動交易」。3Commas 初始回應是「用戶自己 phishing」。

2022 年 12 月 28 日:駭客在 Twitter 公開部分 API key 檔案,附帶下載連結。經 ZachXBT 與獨立研究員交叉驗證,這些 key 對應的 帳戶確實有發生未授權交易。

12 月 29 日:3Commas CEO Yuriy Sorokin 承認事件, 並請求 Binance、OKX、KuCoin 等交易所配合「revoke 所有 3Commas 託管的 API key」。這個請求本身揭露了一個關鍵事實 — 3Commas 無法自行修復用戶資金損失,因為 key 屬於別人的平台, 他們只能請求別人撤銷。

第二幕:技術根因

託管型 bot 平台的標準架構長這樣:

用戶 → bot 平台
        ├── 加密儲存 API key + secret(資料庫)
        ├── 解密後呼叫交易所 API 下單
        └── 結果回報給用戶

這看起來合理 — key 加密了嘛。但這個設計有一個 共同失靈點(single point of failure):資料庫 + 解密金鑰,是 100 萬個用戶的單一信任端。

一旦資料庫被 dump(無論透過 SQLi、雲端配置錯誤、內部人員 leak), 加上解密金鑰也外洩(多數平台金鑰跟 DB 在同個雲環境), 所有用戶 key 同時暴露。

這就是 3Commas 發生的事:根據事件報告,金鑰管理跟 DB 在同一個雲服務內, 一次入侵全部攻陷。

更糟的是:託管的 key 通常有 Trade + Withdraw 權限

很多 bot 平台為了「方便用戶開啟更多策略類型」(自動轉倉、跨幣套利等), 建議用戶把 Withdraw 權限也勾起來。3Commas 部分受害用戶就是這種狀態 — 攻擊者直接從交易所提幣到自己錢包。

第三幕:TVSBot 的架構為什麼不同

我們從第一天就為避開這個失靈模式而設計,具體 3 條:

1. 強制 Order-only 權限(最關鍵)

系統每天掃所有 active API key,呼叫交易所 API 確認權限。任何帶有 Withdraw 旗標的 key 自動停用,並 TG 通知用戶。

這代表:即使 key 被偷,攻擊者也無法提幣。最壞情況是 wash trade 損失少量手續費,資金鎖在交易所帳戶。

2. 加密金鑰跟 DB 物理分離

DB 在 Supabase(一個雲廠商),FERNET_MASTER_KEY 存在 Fly secrets(不同雲廠商)。攻擊者要同時打穿兩個獨立的雲環境才能解密 key — 這比打穿單一服務難太多。

金鑰也不會進 git、不會進 DB backup、不會存任何 log。連我們自己 admin 直查 DB 也只能看到 base64 加密字串。

3. IP 白名單建議

各交易所 API 都支援 IP 白名單。我們文件直接列 TVSBot Fly 的 egress IP, 建議用戶設成白名單。設了之後就算 key 完全外洩,沒在白名單也呼叫不了。

4. 訊號雙重驗證

每個用戶的 webhook URL 帶獨立 token,payload 內另帶 secret 雙重驗證。 一個外洩無法繞過另一個 — 攻擊者要同時偷到 URL token secret 才能偽造訊號。

第四幕:「但你也是託管啊」— 觀念釐清

有人會說:「TVSBot 不也是託管 API key 嗎?跟 3Commas 一樣的設計?」

技術上 key 確實在我們 DB 裡。但實質上差異巨大:

面向TVSBot3Commas(事件當時)
提幣風險0(系統自動停用)有,部分用戶開了 Withdraw
加密金鑰位置不同雲廠商同雲環境
加密演算法公開✓ Fernet AES-128-CBC未公開實作細節
Bug bounty✓(見 /security)當時無
事件揭露時效承諾72 小時內事件後 2 個月才承認

第五幕:你能做的事

無論用 TVSBot 或任何 bot 平台,以下 3 件都是你的責任,沒人能代勞:

  1. 不要勾 Withdraw 權限 — 這是最重要的一條,比所有 技術設計都重要
  2. 設 IP 白名單 — TVSBot dashboard 會列出我們的 egress IP
  3. 定期輪換 key — 至少每 3 個月,更短更好

結語:信任不是免費的

3Commas 事件後,加密 bot 行業普遍意識到「託管模型」是核心問題。 有些平台轉向「pure non-custodial」(瀏覽器擴充、本地代理), 有些加強加密設計(HSM、多重簽名)。

我們的選擇是「實用主義 non-custodial」: 技術上託管但結構上保證資金安全(強制 Order-only + 加密金鑰物理分離 + 多層驗證)。

我們認為這個 trade-off 在使用體驗(用戶不用裝 extension)跟安全保證 之間取得最佳平衡。但每個人風險偏好不同 — 如果你要絕對 non-custodial, 也理解。

有任何安全建議或漏洞回報,請寄到 security@tvsbot.com。Bug bounty 詳情見 /security 頁。