作者:RevanZhang 來源:Medium
近年來,硬件錢包在Blockchain行業中,被視為相對安全的私鑰存儲方式之一。私鑰生成后,會存儲在硬件錢包的安全芯片(SecureElement)中,僅用于對外部傳入的信息進行簽名。這種無法聯網的封閉式硬件設計,配合禁止導出私鑰的軟件機制,構建起了強大的保護屏障。
然而,這種安全架構也有其“軟肋”—— 硬件錢包高度依賴外部客戶端軟件和通信通道。一旦這些外圍環節被篡改,攻擊者便可實施“中間人攻擊”(MITM),在用戶毫無察覺的情況下替換信息,造成資產損失。什么是中間人攻擊
中間人攻擊是指攻擊者秘密地介入通信雙方之間,攔截、篡改或偽造雙方的通信內容,而通信雙方誤以為他們在直接交互。
這種攻擊常見于網絡監聽、數據偽造、身份盜用和地址替換等場景。在加密資產領域尤其危險,因為攻擊者只需替換一個地址,就可能造成巨大的資產損失。
舉個生活中的例子:你寄給朋友一封重要信件。一個“壞郵差”在途中截獲,將信件內容進行替換,然后重新封好寄出。朋友收到信件后,此時獲取的信息因為被郵差替換,已經不再準確了。
在這個例子中,郵差扮演了中間人的角色,通過替換信件內容實施了中間人攻擊。
在Blockchain系統中,由于大多數公鏈轉賬只需要收款地址,而不需要額外的諸如姓名的驗證。這種場景的中間人攻擊更容易得手,且造成的損失往往更大,更難追回。
硬件錢包通信流程:看不見的郵差
市面上主流的硬件錢包大致采用四種通信方式:
USB:最常見且穩定,通過數據線實現雙向傳輸
藍牙:低功耗藍牙BLE,常用于移動端
二維碼:airgap,較為新型的方式,物理隔離,通過互相掃碼達到通信的目的
NFC:近場通信,暫時較少使用
其中,USB與藍牙最為常見。無論采用哪種方式,通信流程大致相同:
“錢包端”發起連接,例如瀏覽器插件錢包或者手機APP錢包
向“硬件錢包”發送請求,例如獲取硬件內部的地址,發起簽名等等
請求經上述“通信通道”送達硬件設備
設備完成處理并返回響應
“錢包端”接收并顯示結果
盡管硬件錢包自身是安全的“保險庫”,但通信過程卻依賴客戶端、通信通道這一“郵差鏈條”。一旦“郵差”遭到劫持或者作惡,傳遞的數據信息就可能早已被調包。
這正是“達摩克利斯之劍”懸于硬件錢包之上的隱秘威脅——中間人攻擊。
所有代碼和操作均發生在 2023年9月,距本文發布時間(2025年6月)已超過20個月。
所有演示基于當時公開版本的官方軟件,具體版本信息已在文中注明。
所涉及的攻擊方式,已于當時向相關團隊披露并確認。
本文所有內容僅供學習與安全研究之用,觀點僅代表作者本人。
本文不對由此引發的任何行為或后果承擔責任。Trezor通信的基本流程
Trezor通過USB連接Metamask瀏覽器錢包時可選擇通過TrezorBridge進行通信,TrezorBridge的基本流程
安裝軟件之后,會在用戶的電腦中,在本地21325端口啟動HTTP服務器
Metamask連接Trezor硬件錢包時,會通過彈出 https://connect.trezor.io 網頁來加載JSSDK
Trezor的SDK會嘗試的將基于protobuf的序列化數據,發送向這個本地服務器
TrezorBridge接收到數據后,通過lib-usb庫查找本地滿足條件的PIDVIDTrezor設備并傳輸數據
當檢測到本地已安裝TrezorBridge時,所有通過 https://connect.trezor.io 網頁,也就是TrezorSDK的序列化數據都會經由本地TrezorBridge服務器轉發給設備,而不使用WebUSB。TrezorBridge的基本信息
TrezorBridge使用 Golang 開發,當前用戶版本為v2.0.27。
從GitHub開源倉庫可見,v2.0.27使用 xgo 進行跨平臺編譯,從而生成MacOS,Windows和linux的安裝包。
以MacOS為例,安裝時會在 /Applications/Utilities/TREZOR\Bridge/trezord 目錄創建 trezord 服務器二進制文件,并在用戶本地創建 com.bitcointrezor.trezorBridge.trezord.plist 文件,通過 KeepAlive 實現開機自啟和進程守護。
SDK讀取公鑰階段的 hexbodyStr 和 hexres 在多次調用時,對同一設備的不同時間操作參數和返回結果完全相同。通過日志篩選,發現Metamask讀取ETH地址時的 call 函數調用數據如下:
根據日志比對,
003700000000 和 000b0000001f08ac8080800808bc80808008088080808008080008002207426974636f696e 等數據,均為發送、接收報文的序列化結果。
經過重放測試,在信息構建過程中并沒有時間戳等參數,可以非常簡單輕易的模擬攻擊手法,即針對部分發送報文,硬編碼返回的結果,進行結果替換:
在這個例子中,我們針對性的將數據進行了替換,當接收到SDK獲取ETH公鑰的請求時,不再使用硬件返回的結果,而是直接使用上述代碼中硬編碼的結果。重新通過文檔編譯后制作二進制文件,同時制作守護進程等攻擊必要組件。
準備工作完成后,當用戶不慎安裝和運行惡意軟件后。每當用戶使用Metamask連接Trezor并且發送數據時,通過bridge通信的數據不再是硬件讀取出來的信息,而是上述代碼中硬編碼的序列化數據,再基于業務SDK的反序列化,讀取地址的信息即替換成功。完整的攻擊如上述視頻所示。與團隊的溝通
整理好問題及操作之后,我第一時間已與Metamask和Trezor團隊進行了溝通,以下是所有溝通信息及郵件信息
Metamask溝通記錄:https://hackerone.com/reports/2166893
Trezor郵件溝通信息:
盲簽的威脅,可能比我們想象中的更大
按照這種攻擊手段和攻擊方式,我們可以得出結論:所有硬件非確定性的信息,都是理論上不安全的。
所有的盲簽同理,雖然盲簽硬件上有確認,但是這個確認的信息對于用戶來說并不可讀,所以他也滿足硬件非確定性的信息,無法確保不被中間人攻擊。
safe多簽錢包的案件就是一個典型,錢包構造的簽名信息被服務器惡意javascript代碼替換,同時因為ledger錢包是盲簽,導致這一次攻擊的發生。通信通道的中間人攻擊,方式眾多
除了用戶本地有惡意軟件以外,一些錢包的通信和構建流程可能涉及到服務器(例如一些錢包encodeTx需要通過服務端進行構建)。這些都是潛在的攻擊對象和被攻擊點。
通信通道當然還包括硬件層面,例如不安全的電腦攝像頭外設,不安全的USB數據線等等。從物理層到應用層,在通信層面,所有環節都有被攻擊的可能。主動提升安全意識,任重而道遠
客戶端到硬件錢包的完整通信,核心流程理論上是不需要聯網的。所以即使有端到端的加密通信,也無法100%確保流程安全。
增加端到端的加密之后,對于真正的黑客來說,增加的只是逆向客戶端,對通信信道的破解成本。而對于攻擊本身,從來都不是難度的較量,而是黑客付出的成本和法律后果的考量。
同時,大部分Blockchain的產品團隊,一般在面對這類中間人攻擊的威脅時,會將這部分的優化放在整個迭代中處于低優先級,變相等于允許一部分中間人攻擊的風險出現。如上面的團隊溝通郵件,如Metamask的bugbounty界面,就將MITM中間人攻擊排除在外:https://hackerone.com/metamask。
所以對于用戶來說,更需要主動我們自身提高防范意識。對于重要資產,即使是使用硬件錢包,也最好隔離電腦,不連接不可信的網絡,不訪問不可信的網頁等等等等。寫在最后
硬件錢包的“安全神話”并非來自單一設備本身,而是建立在整個生態系統的協作安全。
當我們忽視客戶端的可信性、放松對通信通道的防護,那把“達摩克利斯之劍”便悄然懸于我們的資產之上。
真正的安全,從不止于硬件,而在于每一個你以為“無關緊要”的細節。
免責聲明:硬件錢包上的達摩克利斯之劍:隱秘的中間人威脅文章轉發自互聯網,版權歸其所有。
文章內容不代表本站立場和任何投資暗示。加密貨幣市場極其波動,風險很高,可能不適合所有投資者。在投資加密貨幣之前,請確保自己充分了解市場和投資的風險,并考慮自己的財務狀況和風險承受能力。此外,請遵循您所在國家的法律法規,以及遵守交易所和錢包提供商的規定。對于任何因使用加密貨幣所造成的投資損失或其他損失,本站不承擔任何責任。
Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM