CertiK:Github用戶1400枚比特幣被盜事件分析
北京時間8月31日,CertiK天網系統 (Skynet) 檢測到,Github用戶“1400BitcoinStolen”1400枚比特幣被盜事件的代幣,已開始被輸送到多個不同的地址當中。
受害者在electrum的Github issue中講述了自己丟失了1400個比特幣并貼出了自己的比特幣錢包地址.在區塊鏈瀏覽器(參考鏈接3)中可以看到8月30日一共1404枚BTC(價值1670萬美元)從他的錢包中被取出,存入了黑客的錢包中。
事件還原與分析
該用戶使用的是Electrum比特幣錢包,上次使用是在2017年。此后Electrum已經發布了安全更新,但該用戶一直沒有安裝。
用戶在使用Electrum進行交易時,錢包會向服務器廣播一筆交易,如果這筆交易出現了問題,服務器將返回錯誤信息并以彈窗的形式展現給用戶。
3.3.2版本之前的Electrum錢包不會對服務器返回的錯誤信息進行驗證,甚至還會對返回的信息進行html渲染(參考鏈接4)。
值得一提的是,任何人都可以去搭建一個Electrum節點服務器。如果一個用戶連接到了攻擊者的服務器并發起了一筆交易,服務器可以返回任何設計好的錯誤信息。比如返回一個讓用戶去更新Electrum錢包的錯誤信息,如下圖所示。
然而,圖中的鏈接指向了攻擊者自己寫的惡意軟件,一旦用戶下載安裝該軟件并把自己的錢包導入其中,錢包里所有的比特幣就會被攻擊者轉走。
這其實本質上是一種釣魚攻擊,但由于攻擊者發出的釣魚信息是通過Electrum官方錢包展示出來的,很多人都會信以為真。
在本次事件中,受害者的錢包連接上了攻擊者所控制的服務器,導致其收到了服務器發出的釣魚信息,進而被攻擊者轉走了自己的所有比特幣。
Electrum錢包存在的該問題早在2018年底就引起了廣泛討論(參考鏈接4)。
Electrum官方在2019年,錢包版本3.3.4中對該問題進行了修復,后續版本的Electrum錢包不再會將服務器返回的內容直接展示給用戶,也不會對其進行html渲染。
此外,由于舊版本的錢包仍然存在這個問題,因此所有的正常的服務器會對3.3版本之前的錢包進行拒絕服務(DoS)攻擊,以強制用戶進行更新(參考鏈接5)。
建議
- 用戶在使用錢包進行交易的時候,需確保錢包為最新版本,已防舊版本的錢包可能存在可被黑客利用的漏洞。
- 用戶在下載錢包更新的時候要注意驗證下載URL是否與官方一致,在下載完成后要對錢包的簽名進行驗證。
- 對于錢包開發團隊,需要尋找專業團隊做好測試工作,以免項目出現漏洞給用戶帶來損失。
參考鏈接:
- https://github.com/spesmilo/electrum/issues/5072
- https://zhuanlan.zhihu.com/p/53920688
- https://www.blockchain.com/btc/tx/2db616f5b4545805dc1de59bc65b21b548c0d553ab187fa1625ef73c727f1e54
- https://github.com/spesmilo/electrum/issues/4968
- http://twitter.com/electrumwallet/status/1106479573917724672