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