當前位置:
首頁 > 科技 > 以太坊生態缺陷導致的一起億級代幣盜竊大案

以太坊生態缺陷導致的一起億級代幣盜竊大案

獵雲註:針對一起因以太坊生態缺陷導致的代幣盜竊大案,本文中慢霧團隊從攻擊過程,攻擊時間線,影響態勢與防禦建議四個方面著手進行詳實描述,對生態安全作出思考。文章來源:慢霧區(ID:SlowMist)。原文如下:

近日,慢霧安全團隊觀測到一起自動化盜幣的攻擊行為,攻擊者利用以太坊節點 Geth/Parity RPC API 鑒權缺陷,惡意調用 eth_sendTransaction 盜取代幣,持續時間長達兩年,單被盜的且還未轉出的以太幣價值就高達現價 2 千萬美金,還有代幣種類 164 種,總價值難以估計(很多代幣還未上交易所正式發行)。如下圖:

攻擊過程

慢霧安全團隊綜合受害者情報、Reddit 資訊及蜜罐日誌分析,回溯攻擊行為

可能為:

全球掃描 8545 埠(HTTP JSON RPC API)、8546 埠(WebSocket JSON RPC API)等開放的以太坊節點,發送 eth_getBlockByNumber、eth_accounts、eth_getBalance 遍歷區塊高度、錢包地址及餘額

不斷重複調用 eth_sendTransaction 嘗試將餘額轉賬到攻擊者的錢包

當正好碰上節點用戶對自己的錢包執行 unlockAccount 時,在 duration 期間內無需再次輸入密碼為交易簽名,此時攻擊者的 eth_sendTransaction 調用將被正確執行,餘額就進入攻擊者的錢包里了

備註:

unlockAccount 函數介紹

該函數將使用密碼從本地的 keystore 里提取 private key 並存儲在內存中,函數第三個參數 duration 表示解密後 private key 在內存中保存的時間,默認是 300 秒;如果設置為 0,則表示永久存留在內存,直至 Geth/Parity 退出。詳見:

https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_unlockaccount

攻擊時間線

我們在 Etherscan 上對攻擊者錢包地址進行細緻的分析,得到如下主要攻擊時間線:

2016/02/14 03:59:14 PM 第一次 IN(進賬),這天是情人節

2016/02/16 06:33:30 PM 第二次 IN,時隔 2 天,猜測自動化攻擊程序首次上線

2016/05/19 07:46:33 PM 第一次 OUT(出賬),此時共 IN 51 筆

2016/07/20 06:35:57 PM 第二次 OUT,此時共 IN 57筆

2017/05/11 06:34:35 PM Shapeshift(知名交易所) IN 7 筆,跨度 71 天

2017/06/10 02:39:53 AM OUT 最後一筆,此時共 IN 約 207 筆

2017/06/21 07:46:49 AM f2pool(知名礦池) IN 36 筆,跨度 4 小時

這種時間線的跟蹤可以側面輔助分析攻擊者的行為痕迹。

影響態勢

通過慢霧安全團隊獨有的墨子(MOOZ)系統對全球約 42 億 IPv4 空間進行掃描探測,發現暴露在公網且開啟 RPC API 的以太坊節點有 1 萬多個。這些節點都存在被直接盜幣攻擊的高風險。

防禦建議

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)不要存放在節點上 (因為賬戶不在節點上,所以就不會用到 unlockAccount 了)

5、任何轉賬均用 web3 的 sendTransaction 和 sendRawTransaction 發送私鑰簽名過的 transaction

6、私鑰物理隔離(如冷錢包、手工抄寫)或者高強度加密存儲並保障密鑰的安全

進一步思考

通過這個事件的追蹤調查及攻擊手法的完整復現,我們越發意識到網路空間遵循黑暗森林法則,這個法則參考自《三體》:「宇宙就是一座黑暗森林,每個文明都是帶槍的獵人,像幽靈般潛行於林間,輕輕撥開擋路的樹枝,竭力不讓腳步發出一點兒聲音,連呼吸都必須小心翼翼,他必須小心,因為林中到處都有與他一樣潛行的獵人,如果他發現了別的生命,能做的只有一件事,開槍消滅之。」

我們仔細復盤了這起持續兩年且現在還在活躍的攻擊的所有細節,如果我們是攻擊者,我們一個腳本工程就可以輕鬆拿下全球數以萬計,甚至百萬千萬的數字資產。

我們需要特別提下攻擊者的手法,不知道大家有沒有注意到,攻擊的第一步為什麼調用的是 eth_getBlockByNumber 來獲取區塊高度?這個調用的細節是:eth_getBlockByNumber("0x00", false),如果區塊高度不是最新的,那麼這個調用就會報錯,後續也就沒必要執行錢包地址、餘額等查詢操作,因為餘額不準確,且最後一步的轉賬操作肯定沒法完成。這種攻擊邏輯的設計,對於這個攻擊場景來說是一種非常暴力美學的設計。

我們從上面提到的「攻擊時間線」來看,攻擊者其實很不一般,這種潛伏的攻擊發生在以太坊歷史上第一個知名的黑客攻擊事件 The DAO 事件之前(2016/06/17),且當時是以太坊技術被市場正式認可的時期。可以看出,攻擊者是非常早期的以太坊技術研究者,並且很懂黑客工程化技術。攻擊者在實戰過程中不斷優化這套工程。

我們還對 RPC API 相關模塊功能進行進一步分析,發現了一些潛在的安全風險,也是需要大家注意的,比如:如果 RPC API 啟用了 personal 模塊,就可以通過 personal_unlockAccount 方法爆破賬戶密碼,假如爆破成功,就可以一次性實現解鎖 + 轉賬。如果 RPC API 啟用了 miner 模塊,就可以通過 miner_setEtherbase 方法修改挖礦的錢包地址。

在我們的墨子(MOOZ)系統的全網探測中,我們發現這些暴露在公網的以太坊節點開啟的 RPC API 模塊不盡相同。這為更複雜的攻擊提供了差異條件。

從防禦分析角度,我們還發現,Geth 等的日誌機制不完善,無法記錄 RPC API 請求的來源 IP(配置 --debug、--verbosity 5 均無效),導致直接在被攻擊的以太坊節點上取證溯源攻擊者 IP 是一件很麻煩的事。

雖然以太坊本身的健壯性已經經受住考驗,但是安全是一個整體。通過這個事件我們可以看出以太坊生態的一些安全缺陷,有的安全缺陷可能會被認為這是一種機制,需要使用者注意,但這個對使用者來說做安全的門檻太高。高門檻的安全一定是會更容易滋生這種大攻擊事件。

最後,希望我們這篇文章的披露能給這個生態帶來更多安全。

本文來自獵雲網,創業家系授權發布,略經編輯修改,版權歸作者所有,內容僅代表作者獨立觀點。[ 下載創業家APP,讀懂中國最賺錢的7000種生意 ]


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 創業家 的精彩文章:

2017年谷歌Play Store下架70萬違規應用
幣圈韭菜講述ICO騙局:就跟傳銷一樣

TAG:創業家 |