區(qū)塊鏈安全事件回顧之Parity錢包被盜事件區(qū)塊鏈
只有不忘歷史才能展望未來,在接下來這段時間里曲速區(qū)將帶你一起回顧區(qū)塊鏈安全事件總結與區(qū)塊鏈技術展望之Parity多重簽名錢包被盜事件解析
區(qū)塊鏈安全社區(qū)WF曲速區(qū):只有不忘歷史才能展望未來,在接下來這段時間里曲速區(qū)將帶你一起回顧區(qū)塊鏈安全事件總結與區(qū)塊鏈技術展望。
Parity 多重簽名錢包被盜事件詳細回顧:
Parity 多重簽名錢包被盜事件解析
時間:2017年7月
事件簡介:
Parity 是一款多重簽名錢包,是目前使用最廣泛的以太坊錢包之一,創(chuàng)始人兼 CTO 是以 太坊前 CTO 黃皮書作者 Gavin Woods。
7 月 19 日,Parity發(fā)布安全警報,警告其錢包軟件1. 5 版本及之后的版本存在一個漏洞。據該公司的報告,確認有153,000ETH(大約價值 3000 萬美元)被盜。
據Parity所說,漏洞是由一種叫做wallet.sol的多重簽名合約出現(xiàn)bug導致。后來,白帽黑客找回了大約377,000 受影響的ETH。
本次攻擊造成了以太幣價格的震蕩,Coindesk的數(shù)據顯示,事件曝光后以太幣價格一度從235美元下跌至196美元左右。此次事件主要是由于合約代碼不嚴謹導致的。我們可以從區(qū)塊瀏覽器看到黑客的資金地址:
可以看到,一共盜取了153,037 個ETH,受到影響的合約代碼均為Parity的創(chuàng)始人Gavin Wood寫的Multi-Sig庫代碼:
事件起因:
Github用戶devops199打開了#6995——“任何人都可以刪除合約。”然后該用戶聲稱他意外刪除了合約。
漏洞原因:
因為initWallet函數(shù)是公開函數(shù)( public function) , 攻擊者調用initWallet,重新初始化錢包會把之前合約錢包所有者覆蓋, 即可改變錢包所有者。
漏洞代碼:
攻擊過程技術分析還原:
第一步:成為合約的owner
通過往這個合約地址轉賬一個value = 0 ,msg.data.length > 0 的交易, 執(zhí)行到_walletLibrary.delegatecall的分支,該函數(shù)能無條件的調用合約內的任何一個函數(shù),黑客調用了一個叫做 initWallet的函數(shù):
這個函數(shù)再次調用initMultiowned函數(shù):
不幸的是,initWallet沒有檢查以防止攻擊者在合同初始化后調用到initMultiowned, 這個函數(shù)使得這個合約的所有者被改為攻擊者,相當于從unix中獲得了root權限。
第二步: 轉賬, 剩下的事情就很清晰了,通過調用execute函數(shù)轉賬到黑客的地址:
第一個參數(shù): address to= 0xb3764761e297d6f121e79c32a65829cd1ddb4d32, 轉賬額度116779808c03e4140000是為以Wei為單位的的eth,即 82189000000000000000000,可以通過如下的代碼獲得具體數(shù)值。
總結:
通過分析代碼可以確定核心問題在于越權的函數(shù)調用,合約接口必須精心設計和明確定義訪問權限,或者更進一步說,合約的設計必須符合某種成熟的模式,或者標準,合約代碼部署前最好交由專業(yè)的機構進行評審。否則,一個不起眼的代碼就會讓你丟掉所有的錢。
普通大眾誤會此事意味著區(qū)塊鏈安全有問題。
區(qū)塊鏈安全公司WF曲速未來表示:以太坊被盜并不是以太坊區(qū)塊鏈技術本身的問題,而是該項目的合約的技術安全問題。所以普通大眾誤會是區(qū)塊鏈安全有問題,這個是不客觀的。其次,安全問題是整個互聯(lián)網金融一個重要命題,智能合約的漏洞近期被曝光比較頻繁,社區(qū)和各公司一定要引起重視。智能合約目前還在發(fā)展早期,沒有像現(xiàn)有的傳統(tǒng)金融領域一樣有審核機構和環(huán)節(jié)。這個缺失的環(huán)節(jié)遲早要加入智能合約的建造過程,從制度上幫助智能合約行業(yè)提高發(fā)起門檻和安全水準、推動穩(wěn)健推廣和應用。
1.TMT觀察網遵循行業(yè)規(guī)范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創(chuàng)文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創(chuàng)的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。