Bybit加密貨幣交易所資安事件

這起發生在 2025 年 2 月 21 日 的 Bybit 加密貨幣交易所資安事件,被視為加密貨幣歷史上規模最大的單筆盜竊案。駭客成功從 Bybit 的以太坊(Ethereum)多重簽名冷錢包中,捲走了超過 401,347 顆 ETH(以及 stETH),總價值高達約 14.6 億至 15 億美元。


攻擊者分析

美國聯邦調查局(FBI)及區塊鏈鑑識機構 TRM Labs、Elliptic 隨後證實,這起襲擊是由北韓國家級駭客組織 Lazarus Group 所發動。

該組織在此次事件中,展現了極其迂迴且精密的技術欺騙:他們並沒有正面強攻 Bybit 交易所,而是利用社交工程(在 LinkedIn 偽裝成招聘人員),成功入侵了 Bybit 的第三方多簽服務商 —— Safe{Wallet} 的前端開發人員電腦。駭客藉此竊取憑證並滲透了 Safe{Wallet} 託管在 AWS S3 上的雲端基礎設施(前端程式碼庫),在軟體供應鏈的最上游成功下毒,為後續定向狙擊 Bybit 奠定了致命的基礎。


攻擊流程

Bybit 當時使用的是區塊鏈業界非常知名的機構級多簽錢包方案 Safe{Wallet}(舊稱 Gnosis Safe)。該錢包至少需要 3 名授權簽署人(Signers)共同簽章才能動用資金,安全級別極高。然而,駭客並非正面破解區塊鏈的加密算法,而是採取迂迴的第三方供應鏈入侵。他們先攻破多簽服務商 Safe{Wallet} 的雲端防線,再以此為跳板,對 Bybit 管理員發動『定向的前端 UI 操縱攻擊』,巧妙地繞過了區塊鏈底層的安全防禦:

  1. 社交工程(破口):北韓 Lazarus 駭客組織在 LinkedIn 等社交平台上,偽裝成區塊鏈項目的獵頭或合作方,對 Safe{Wallet} 的前端開發工程師進行定向滲透。駭客誘導工程師點擊惡意連結或下載帶有惡意檔案,成功在工程師的個人電腦植入木馬,並竊取了該工程師的內部開發與發布憑證(Credentials)。
  2. 軟體供應鏈攻擊(潛入Safe{Wallet}生產線):駭客利用偷來的 Safe 公司憑證,直接登入 Safe{Wallet} 官方託管在 AWS S3 上的雲端儲存桶(此處存放著全球用戶訪問 Safe 多簽網頁時,瀏覽器會自動下載的前端核心 JavaScript 檔案)。駭客在合法的生產線源頭中開始植入毒藥,嘗試對軟體供應鏈上游污染。
  3. 惡意 JavaScript 注入(前端 UI 操縱): 駭客將一段高度客製化的惡意 JavaScript 注入到 Safe{Wallet} 的前端檔案中。這段程式碼非常狡猾,平時完全不作惡以躲避 Safe 官方的偵測,只有當它檢測到當前打開網頁的用戶是「Bybit 的冷錢包地址」且準備執行交易時,才會啟動篡改功能。這導致 Bybit 的管理員在打開瀏覽器登入 Safe 管理後台時,自動下載並執行了這個被下毒的網頁。
  4. 盲簽欺騙(管理員上當):當 Bybit 的管理人員(簽署人)在網頁畫面上看到一筆「看似完全正確、轉往內部熱錢包」的例行轉帳提案時,背後的惡意 JavaScript 其實已經暗中修改了智慧合約的交易數據(Payload),所以管理員在電腦上核對無誤後,點擊發送簽名申請。而且硬體錢包(如 Ledger 錢包)的小螢幕上也無法直觀解讀合約內部的實際代碼,因此進行了「盲簽」(Blind Signing)。
  5. 奪取多簽控制權(取得權限):管理員實際上簽署的,是一筆利用 Safe 錢包 execTransaction 機制所發起的惡意提案。駭客將合約的邏輯修改為指向駭客控制的惡意智慧合約,迫使多簽錢包執行了 delegatecall(委託呼叫),從而直接將該多簽錢包合約的控制權雙手奉送給了駭客。隨後,駭客便在短時間內將冷錢包內的 15 億美元以太幣洗劫一空。

Blind Signing(盲簽)

管理員實際上是在對一串「自己根本看不懂、也無法驗證真偽的二進位代碼」進行了數位簽章。這種因為「看不懂、看不到完整內容,但因為信任流程而簽名」的行為,叫做「盲簽(Blind Signing)」。

當我們平常只是轉帳比特幣(BTC)或以太幣(ETH)給別人時,交易內容非常單純,只有:「轉出地址、接收地址、金額」。這種簡單的交易,硬體錢包(如 Ledger)的小螢幕可以清清楚楚地顯示出來,人類一眼就能核對。

但是,Bybit 當時使用的是 Safe{Wallet} 智能合約多簽錢包。當管理員要執行一筆交易時,他們不是在做簡單的轉帳,而是在對智能合約發送一串極其複雜的指令(十六進位代碼,俗稱 Payload 或 Data)。這串代碼可能長得像這樣: 0xac9650d80000000000000000000000008542...

這串代碼包含了:要呼叫哪一個合約、執行什麼函數、背後要帶入什麼邏輯、委託給誰處理(Delegatecall)等。這不是人類用肉眼能直接翻譯並看懂的代碼。

硬體錢包(Ledger 等)為了安全,它的螢幕通常非常小。當它面對上述那串極其複雜的智能合約代碼時,它無法在小螢幕上將這串代碼「翻譯」成白話文(例如它沒辦法顯示:「注意!這筆交易將會把你的錢包管理權轉讓給駭客」)。

delegatecall(委託呼叫)

在以太坊 Solidity 智能合約的開發中,delegatecall(委託呼叫)是一個非常強大、但也極度危險的低階呼叫(Low-level call)機制。

這個功能用在可升級合約,因為在區塊鏈上,智能合約一旦部署就無法修改。但如果透過 delegatecall,我們可以部署一個「代理合約(Proxy)」,用戶永遠只跟 Proxy 互動,Proxy 內部再透過 delegatecall 去呼叫後台的「邏輯合約(Implementation)」。 當需要升級功能或修復 Bug 時,只需要部署一個新的邏輯合約,並把 Proxy 指向它即可,用戶的資產與資料(儲存空間)全都安全地留在 Proxy 裡面。

在 Bybit 的案例中,Bybit 的多簽錢包(合約 A)原本只是想執行常態操作。然而,駭客透過前端盲簽欺騙,誘使管理員簽署了一筆 delegatecall 到駭客控制的惡意合約(合約 B)的交易,流程如下:

  1. 合約 A 原本要執行正常的轉帳合約或操作,但因為駭客攻擊,結果去執行了合約 B(駭客攻擊合約)。
  2. 駭客攻擊合約在執行時,修改的是錢包(合約 A)內部的儲存空間。
  3. 駭客代碼直接寫入錢包的 Storage,把多簽錢包的「管理員白名單」全部改成駭客自己的地址。

洗錢手段

Chainalysis 及資安社群在案發後立即對被盜資金展開追蹤。北韓駭客展現出極高的洗錢效率:

  • 分散地址: 駭客在得手後的最初 48 小時內,迅速將首批 10,000 顆 ETH 分散轉移至數十個全新創建的獨立地址中。
  • 去中心化協議與跨鏈橋: 駭客將被盜的代幣透過 Uniswap 等去中心化交易所(DEX)換成原生 Ether,並利用 THORChaineXch 等具有高度隱私性或跨鏈性質的匿名交易平台進行清洗。
  • 跨鏈轉為比特幣: 洗錢路徑最終將資產分散混幣,並進一步轉換為比特幣(Bitcoin)等其他公鏈資產,散落於數千個地址中,企圖最終變現為法定貨幣。雖然 Bybit 與執法部門密切合作攔截,並成功救回了少部分特定資產(例如約 15,000 顆 cmETH),但仍有極大一部分資產下落不明。

後續影響

  • 償付能力與資金安全: 事件發生後,Bybit 執行長周本(Ben Zhou)隨即發表聲明安撫市場。他強調 Bybit 依然具備充足的償付能力,用戶的資產受到 1:1 的準備金支持。此事件重創了交易所的資產儲備(據估計鏈上總資產短時間內下降了約 33%),但交易所始終維持正常營運,未發生如同 FTX 般的倒閉或限制提領危機。
  • 向北韓駭客宣戰: 執行長對外強硬宣稱這是一場與北韓駭客的「戰爭」,並重金懸賞業界安全團隊與黑客專家,協助追蹤並阻斷被盜資金的變現管道。

安全建議

NCC Group 等專業資安機構在針對此案的技術複盤中,提出了幾項對整個區塊鏈產業的重大警示:

  1. 「多簽冷錢包」並非絕對無敵: 如果多簽錢包的持有者所使用的電腦、瀏覽器或前端網頁(UI)遭到篡改,人類簽署人就會被誤導去簽署被調包的惡意合約。
  2. 防範盲簽與推動 EIP-712: 機構必須減少盲簽行為。然而此案也暴露出目前的 EIP-712 簽名標準在面對過於複雜的嵌套智能合約操作時,依然無法在硬體錢包上提供足夠的人類可讀性,業界亟需開發更新的解析標準。
  3. 前端代碼鎖定(JavaScript Pinning): 企業應加強前端與供應鏈安全防護。如果當時 Bybit 有對網頁實施嚴格的 JavaScript 靜態防護與 Pinning 機制,或許能及時阻止惡意代碼的注入與執行。
  4. 獨立的合約合規審查服務: 機構在簽署多簽交易時,除了依賴前端 UI,內部應建立自動化的後端第三方稽核服務,在交易送上鏈前再次比對「簽署內容」與「預期政策」是否相符。

EIP-712(Ethereum Improvement Proposal 712)

是以太坊的一項標準,它的核心目的非常簡單:「讓以太坊的鏈下簽名(Off-chain Signing),從一串人類看不懂的十六進位亂碼,變成人類看得懂的結構化數據(Structured Data)」。例如,如果你在一個拍賣網站上網購,錢包會顯示:

  • 沒有EIP -712, 傳統錢包簽名,錢包會顯示:0x455448455245554d0a5369676e696e673a0a30786163393635306438
  • EIP-712 的錢包時,錢包螢幕不會再顯示亂碼,而是會清清楚楚地把合約的欄位、內容「翻譯」出來。錢包會顯示:
    • 域(Domain):OpenSea 交易所
    • 買家(From):0xYourAddress…
    • 賣家(To):0xSellerAddress…
    • 商品(Item):BAYC NFT #1234
    • 金額(Amount):10 ETH
    • 過期時間(Deadline):2026-12-31

JavaScript Pinning/Script Pinning

這個防禦技術是一種用於保護網頁前端供應鏈安全的指令碼固定機制 。它的核心目的非常簡單:「鎖定(Pin)網頁上執行的 JavaScript 程式碼檔案,確保這些檔案沒有被駭客偷偷篡改或注入毒藥。」

在現代網頁開發中,當你打開一個網頁(例如加密貨幣交易所、網路銀行),瀏覽器會從伺服器或第三方 CDN 下載許多 .js 檔案來執行。一般的安全機制(如 HTTPS 加密)只能保證「傳輸過程」中沒有人能竊聽或篡改檔案。但是,如果伺服器本身被駭了呢?

就像 Bybit 的案例,駭客攻破了上游供應鏈,直接把發布在Safe{Wallet} 官方AWS S3 上的 .js 檔案給改掉了。這時候,瀏覽器透過 HTTPS 下載下來的檔案,雖然傳輸過程安全,但檔案本體「在出廠時就已經被下毒了」。

JavaScript Pinning 就是為了應對這種「上游第三方伺服器或供應鏈不可信」的情況而誕生的解決方案。


參考文獻

https://www.secrss.com/articles/76959

https://www.chainalysis.com/blog/bybit-exchange-hack-february-2025-crypto-security-dprk/

nccgroup.com/research/in-depth-technical-analysis-of-the-bybit-hack/