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