喺同一波攻擊入面,另一個更早嘅階段大約喺UTC 01:31開始,用咗25分鐘從約500個單簽錢包掃走594 BTC(約3,800萬美元)。Galaxy Research、Chainalysis同Block嘅工程團隊都獨立確認呢啲盜竊同一個Coldcard漏洞有關。
Block嘅Bitcoin工程及安全團隊,由工程師Clay Garrett帶頭,發現黑客用咗一個知名區塊鏈服務商嘅付費帳戶,去有效率咁識別同查詢有漏洞嘅地址。黑客喺鏈上嘅活動模式——極快、連續噉清空有同一弱點嘅地址——引起調查人員注意。Block證實,有跡象顯示黑客嘅活動直接連接到嗰個服務商嘅基礎設施。
Garrett形容呢個係「異常精確,精確到帳戶級別」嘅線索。換句話講,呢個分析服務變咗黑客嘅「踩線工具」,畀佢快速標記出用有問題韌體生成嘅地址,然後優先對付最大戶。
呢個bug係喺2021年3月一次韌體更新(Mk3 firmware 4.0.1)引入,當時Coldcard將橢圓曲線運算遷移到Bitcoin Core嘅libsecp256k1程式庫。一個建置配置嘅宏錯誤,令韌體跳過裝置專用嘅STM32硬件亂數產生器(TRNG),改為用咗MicroPython嘅Yasmarang軟件亂數產生器,呢個係完全可預測嘅。
實際情況係:生產板嘅配置將MICROPY_HW_ENABLE_RNG呢個巨集設為零,因為Coldcard自己有另一個硬件亂數包裝器。但佢嘅輔助程式庫libngu用咗#ifndef MICROPY_HW_ENABLE_RNG嚟檢查——呢個只係睇個巨集有冇被定義,而唔係睇佢嘅值係咪非零。因為個巨集被定義咗(雖然值係零),libngu就靜靜雞當咗硬件路徑用得,結果綁咗去MicroPython嘅軟件rng_get()函數。
呢個錯誤令有效嘅亂數強度(entropy)由原本嘅128+ bits暴跌到得返約32–40 bits,即係大約40億個可能嘅種子值——用現代硬件好容易就暴力破解到。如果用戶冇自己加骰仔數字或者用BIP 39額外密碼(passphrase),啲種子就完全曝露。
Coinkite嘅CEO Rodolfo Novak(NVK)後來承認:「我以為將MICROPY_HW_ENABLE_RNG設做零就唔需要用任何版本嘅RNG,但原來唔係咁運作㗎」。
| 受影響 | 不受影響 |
|---|---|
| Coldcard Mk3,韌體4.0.1至5.0.3 | Mk4、Q、Mk5(Coinkite初步分析) |
| 冇用骰仔或BIP 39 passphrase生成嘅種子 | 有用自行加骰仔或passphrase嘅種子 |
Coinkite後來擴大警示範圍,指出某啲Mk4、Mk5同Q嘅韌體版本都有風險,並為所有受影響型號推出緊急韌體更新 。
呢次攻擊動搖咗自託管嘅核心承諾——即係硬件錢包嘅安全元件可以唔理軟件bug而保證加密安全 。