4 月 14 日,巴比特在廈門舉辦了第七期【Chainge】技術沙龍,邀請到了火幣 CTO 程顯峯、比特派合夥人王超、慢霧安全團隊海賊王、Keywolf、
imToken 首席安全官 Blue、幣派 CEO 胡園泉,以“區塊鏈技術的安全隱患”爲話題,對區塊鏈技術中存在的風險和安全隱患進行了深入討論。
這是慢霧科技安全團隊首次公開對外展示,提出了
“區塊鏈生態的安全就是一切”。慢霧科技專注於區塊鏈生態安全,3 月 20 日披露的以太坊生態缺陷導致的一起億級代幣盜竊大案在行業引起高度關注。區塊鏈生態安全防護,刻不容緩。在活動現場,慢霧科技以視頻的方式,復現了
The DAO 事件整個過程。同時展示了其自主研發的墨子(MOOZ)系統對以當前太坊網絡安全的實時監測情況。針對以太坊生態安全缺陷,慢霧科技提出了
6 大安全防禦建議。
以下爲嘉賓演講內容,巴比特做了不改變原意的整理:
非常榮幸能夠代表慢霧科技,我的分享主題是《生態安全缺陷之以太坊黑色情人節》。今天是 4 月 14 號,也是黑色情人節,感謝活動主辦方巴比特的用心。
我們 3 月 20 號對外公佈了“以太坊黑色情人節”,相信大家都有聽說,但是對於慢霧科技,大家始終是有一個很大的問號。我今天在這裏就正式的對外介紹一下慢霧科技。
慢霧科技立志於做區塊鏈生態安全的專家,我們的主營業務有安全審計,包括礦池、交易所、錢包以及智能合約的審計。其次是安全顧問,針對各種區塊鏈產品的實際情況,提供相應的服務。再次是防禦部署,因地制宜,爲大家的安全保駕護航。
最後是地下黑客風向標追蹤,對惡意盜幣地址的實時追蹤和收集。針對這塊,我們做了一個惡意地址庫。
在這裏介紹一下我的小夥伴——啓富。他會配合我做相關視頻以及我們內部監控平臺的的展示。我是海賊王,我們是慢霧科技的安全研究員,針對區塊鏈生態安全研究,我們也是以太坊黑色情人節的披露者。
今天要講的主題是以太坊黑色情人節,這個話題繞不開“The DAO”事件,今天在這裏我們會通過視頻演示,復現 The DAO 事件的整個盜幣過程。The
DAO 事件是以太坊歷史上第一個重大安全事件,價值 6000 多萬美金的以太坊在這次事件中丟失,這個事件還導致了一個非常惡劣的後果,就是以太坊分叉。
分叉包括硬分叉和軟分叉。軟分叉用一句話概括就是不管礦工是否願意升級,始終是在一條鏈上,需要考慮舊節點接受新節點產生的交易和區塊,新節點產生的交易和區塊不兼容舊版本。硬分叉是所有節點都必須升級(不升級就形成兩條鏈),不需要考慮舊節點是否接受新節點產生的交易和區塊。
“Show me the code,no code no BB”,我是程序員出身,這段代碼來源於網絡,是模擬 The DAO 事件的第一個智能合約。
代碼有很多問題,第一個問題是沒有加以太坊版本的限制。還有一個問題出現在合約的判斷語句“if(msg.sender.call.value……”以及“userBalances[msg.sender]=0”這兩部分。
第二個合約是攻擊合約,這個合約裏有一個亮點就是 while 循環,attackCount 的初始化是 2,會循環兩次。
下面由我的小夥伴啓富給大家演示一下 The DAO 攻擊事件。(視頻展示)
我舉個簡單例子解釋一下攻擊過程。通過剛纔的演示我們發現,銀行賬戶裏面原來有 100 塊錢,這個人又往銀行賬戶存了 10 塊錢,賬戶總資金變成了 110 塊錢。接着他用 ATM 機取款,連續按了兩次“取款”鍵,竟然神奇地取出來 200 塊錢。在現實中,肯定不會發生這種現象。但是在智能合約裏面會出現這種問題,怎麼造成的呢?
這個是 The DAO 的源碼,這兩個箭頭的位置大家留意一下,後續會講到。
The DAO 事件出現以後,The
DAO 官方在 GitHub 提供了修復方案。在這裏,他把 paidout 這部分移動到了上面,也就是在你提款之前先判斷餘額,從而不會出現提款額多於餘額的情況。
針對 The DAO 事件背後所隱藏的智能合約漏洞問題,我們在提出三點建議:
第一,儘量避免不可信的外部調用。
第二,轉賬
。轉賬有三種方法可以實現:someAddress.transfer()、someAddress.send()、someAddress.call.value()()
。前兩種是安全的,第三種方法是不安全的。
舉個例子,比如一對夫妻去超市買瓶礦泉水,需要支付兩塊錢。男士身上只有 1 塊 9,掃碼的時候餘額不足扣款失敗。女士掃了一下,錢包 1 萬塊錢的餘額被全部轉走。這是因爲前兩種方法會有 gas 限制,第三種方法在調用的時候,合約裏面的所有的餘額都可以被攻擊者轉走。
第三,回退函數(Fallback)
。回退函數是合約裏的特殊函數:沒有名字、不能有參數、沒有返回值、有且僅有一個。回退函數被觸發的條件是:沒有匹配到函數簽名、調用沒有帶任何數據時被自動調用、send()
成功後。
通過以上的 The DAO 案例,我們可以總結出來:區塊鏈生態的安全就是一切
。爲什麼這樣說?其實不管是交易所還是項目方,大家在網上操作的都是真金白銀。
下面進入以太坊黑色情人節環節,這次事件發生於 2016 年 2 月 14 號。
上圖顯示的是以太坊的節點。總數有 15000 多個,分佈在世界各個國家。當我們掃描全球所有的 IPV4 的網絡,發現有那麼多問題節點,我們是怎樣判斷的?接下來我們會把整個發現的過程,以及安全防禦建議分享給大家。
其實在一年前,慢霧科技就已經在接觸和研究區塊鏈安全,我們在全球各個洲都會有自己的蜜罐服務器,監測對以太坊的攻擊行爲。通過分析攻擊代碼,我們發現這些行爲都是一些代碼自動化的攻擊和調用,時間和頻率是非常高的,可見攻擊者已經用了最新的技術自動化從互聯網上“撿錢”。
從蜜罐監控看,有 3 個命令的調用頻率是非常高的:net_version、eth_accounts、eth_getBalance。
net_version 是判斷這個網絡到底是主網還是測試網。因爲主網節點錢包節點的資產纔是真的錢。
我們掃描出來的結果是,有 3000 多個以太坊主網節點存在問題,這是相當可怕的,裏面有多少錢不得而知。
eth_accounts 是查看當前該區塊鏈中共有幾個賬號,以及每個賬號的公鑰地址。我們掃描全球的以太坊網絡,統計到大概有 1000 萬個錢包地址是直接暴露在公網上的。也就是說我只要等待到合適的時機,這些錢包裏的錢,就可以隨時轉走。
eth_getBalance 是查看錢包餘額。
通過盜幣的地址以及結合其他方面的數據,我們統計出,到目前爲止有 46000 多個以太坊被盜,按照最新價格約合 2000 萬美金。
儘管以太坊黑色情人節事件被披露出來後,我們團隊面臨諸多質疑,我們還是覺得必須要披露出來,否則後續問題會越來越嚴重,對整個生態來說都是非常大的損失。
爲什麼會發生?其實問題主要點就是 unlockAccount (解鎖錢包)這個方法,在這種情況的時候,其實我們會把自己的私鑰,導入到錢包裏面來。但是以太坊在設計的時候,默認是 300 秒,也就是說五分鐘的時間內,你只要轉賬過一次,其他人也可以隨時從你的賬戶轉賬。其他敏感的細節這裏就不展開了。
這是我們公開爆料以太坊網黑色情人節之後,用全球掃描引擎墨子(MOOZ)對以太坊問題節點的統計。我們也做了一個頁面,展示了以太坊黑色情人節被盜幣的實時情況。
這裏有請我的小夥伴,爲我們展示一下慢霧科技的監控平臺對被盜以太坊數量及地址的實時監控。
大家好,我是啓富。我們在披露以太坊黑色情人節之後,我們覺得有必要持續追蹤這起盜幣事件,所以我們開發了一個程序對關注的幾個攻擊者賬戶實時採集。
這是我們內部的監控平臺,它會實時統計有多少幣被盜,涉及的市值以及被盜錢包數。我們對盜幣攻擊行爲分析,發現攻擊者不管你的錢包有多少資產,只要有餘額,都會把你的資產轉走。排名第一的攻擊者地址是 0×95 開頭,總共發起了 4000 餘次攻擊,43000 個以太坊的 80% 都是由這個攻擊者賬號盜取……
再次感謝我的小夥伴。
我們繼續,在這裏做一個思考,爲什麼以太坊會有這個問題,而比特幣到目前爲止還沒有發現類似問題?其實,這主要跟以太坊和比特幣的生態相關。
因爲以太坊支持礦池、錢包、web3、 Smart
Contract、Dapp,爲了整個生態的方便,減少了認證和鑑權環節,可以直接調用智能合約。BTC 生態包含礦池、錢包、Lightning
Network,有認證環節,所以在這方面相對安全。
不過,BTC 同樣存在安全問題,這是 BTC 開發文檔上的一串代碼:
h = BitcoinRPC.new
(‘http://user:[email protected]:8332′)
在這裏,HTTP 並不安全,因爲我只要抓包獲得這個地址,就可以進行下一步的操作。
針對以太坊安全漏洞事件,我們提出了以下防禦建議:
1. 更改默認的 RPC API 端口,配置方法如:–rpcport 8377 或 –wsport 8378
2. 更改 RPC API 監聽地址爲內網,配置方法如:–rpcaddr 192.168.0.100 或 –wsaddr
192.168.0.100
3. 配置 iptables 限制對 RPC API 端口的訪問,舉例:只允許 192.168.0.101 訪問 8545 端口:
iptables -A INPUT -s 192.168.0.101 -p TCP –dport 8545 -j ACCEPT
iptables -A INPUT -p TCP –dport 8545 -j DROP
4. 賬戶信息(keystore)不要存放在節點上
**
5. 任何轉賬均用 web3 的 sendTransaction 和 sendRawTransaction 發送私鑰簽名過的 transaction**
6. 私鑰物理隔離(如冷錢包、手工抄寫)或者高強度加密存儲並保障密鑰的安全
我們有自己的蜜罐服務器,也有通過其他生態合作伙伴給我們提供的 IP,上圖是一部分 top50 攻擊者的 IP。
最後,特別感謝我們的生態合作伙伴,他們對於我們披露這次事件做了非常大的幫助,我們也希望更多夥伴加入我們的安全生態。
謝謝大家。
發文時比特幣價格 ¥50906.49
稿源:巴比特資訊(http://www.8btc.com/chainge-7-slow-mist) 版權聲明:
作者保留權利。文章爲作者獨立觀點,不代表巴比特立場。
來源鏈接:www.8btc.com