揭祕以太坊中潛伏多年的“偷渡”漏洞,全球黑客正在瘋狂偷幣
作者部落格:http://www.sec-lab.io/2018/03/21/ethereum-smuggling-vulnerability/
世界上有一群人,網際網路對於他們來說就是提款機。
是的,過去是,現在更是,因為電子貨幣的出現,他們提款的速度變得更瘋狂。
在2017年,我們的蜜罐監測到一起針對以太坊的全球大規模攻擊事件,我們將其命名為以太坊“偷渡”漏洞。
通過該漏洞,黑客可以在沒有伺服器許可權、沒有keystore密碼許可權的情況下,轉走錢包中的所有餘額。
而如此嚴重的漏洞,1年前就在reddit.com被曝光有黑客在利用,並且最早可追溯到2016年的2月14號就有黑客通過此漏洞竊取到比特幣:[連結地址]
近期也有中國的慢霧安全團隊揭露了這種攻擊手法:[連結地址]
在長達2年的時間裡,並沒有多少使用者關注到,以太坊也沒有進行鍼對性的防護措施,直到今日,以太坊的最新程式碼中依然沒有能夠抵禦這種攻擊。
因此我們決定將我們所掌握的詳細資料公佈給所有人,希望能促使以太坊的開發者承認並修復該漏洞。
漏洞成因
(以下的程式碼分析基於https://github.com/ethereum/go-ethereum的當前最新提交:commit b1917ac9a3cf4716460bd53a11db40384103e5e2)
以太坊目前最流行的節點程式(Geth/Parity )都提供了RPC API,用於對接礦池、錢包等其他第三方程式。
預設情況下,節點的RPC服務是無需密碼就可以進行介面呼叫,官方實現的RPC API也並未提供設定RPC連線密碼的功能,因此,一旦將RPC埠暴露在網際網路,將會非常危險。
而我們所捕獲的以太坊“偷渡”漏洞,正是利用了以太坊預設對RPC不做鑑權的設計。
被攻擊的使用者,需要具備以下條件:
- 節點的RPC埠對外開放
- 節點的RPC埠可直接呼叫API,未做額外的鑑權保護(如通過nginx等方式進行鑑權保護)
- 節點的區塊高度已經同步到網路的最新高度,因為需要在該節點進行轉賬,如果未達到最高度,無法進行轉賬
當使用者對自己的錢包進行了解鎖(unlockAccount函式),在解鎖超時期間,無需再輸入密碼,便可呼叫RPC API的eth_sendTransaction進行轉賬操作。
漏洞的關鍵組成,由未鑑權的RPC API服務及解鎖賬戶後有一定的免密碼時間相結合,以下是解鎖賬戶的unlockAccount函式:
程式碼路徑:go-ethereum/internal/jsre/deps/api.go
通過函式的實現程式碼可見,解鎖賬戶的api允許傳入超時時間,預設超時為300秒,
真正進行解鎖的函式TimedUnlock實現如下:
程式碼路徑:go-ethereum/accounts/keystore/keystore.go
當傳入的超時大於0時,會發起一個協程進行超時處理,如果傳入的超時時間為0,則是永久不會超時,賬戶一直處於解鎖狀態,直到節點程式退出。
詳細的用法參考官方文件
攻擊手法揭祕
1.尋找對外開放以太坊RPC埠的伺服器,確認節點已經達到以太坊網路的最高區塊高度
黑客通過全球的埠服務掃描,發現RPC服務為以太坊的RPC介面時,呼叫eth_getBlockByNumber(‘last’, false),獲取最新的區塊高度。
但是由於有些以太節點是以太坊的分叉幣,高度與以太坊的不一樣,因此黑客即使發現節點高度與以太坊的高度不一樣,也不會放棄攻擊。
2.呼叫eth_accounts,獲取該節點上的所有賬戶。
eth_accounts的請求將返回一個賬戶地址列表:[0x1834axxxxxxxxxxxxxxxxxxxxxxxxxxx, 0xa13jkcxxxxxxxxxxxxxxxxxxxxxxxxxxx,…… ]
3.呼叫eth_getBalance,查詢地址餘額。
這個過程黑客可在自己的伺服器完成以太坊的餘額查詢,因為以太坊的區塊鏈賬本資料庫是隨意公開獲取的。
有部分黑客沒有搭建以太坊的全節點,沒有自行查詢餘額,因此也會在被攻擊伺服器進行eth_getBalance操作。
4.持續呼叫轉賬操作,直到剛好使用者用密碼解鎖了錢包,完成非法轉賬操作的“偷渡”
黑客會構造eth_sendTransaction的轉賬操作,並填寫餘額、固定的手續費:
{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者錢包地址1″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]} {“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者錢包地址2″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]} {“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者錢包地址3″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}
其中的value的單位是以太的最小單位:wei,計算為以太的話需要除10的18次方:
>>> 0x112345fc212345000 19758522752314920960L >>> 19758522752314920960L/1000000000000000000 19L
黑客會持續發轉賬操作,並定期監控餘額變化,更新轉賬的金額,直到使用者使用錢包,輸入密碼解鎖了錢包,此時錢包餘額會立即被轉走。
快速漏洞測試
安裝python的web3庫,然後連線RPC埠,發起請求,如果獲取到返回結果,便可能存在該漏洞。
參考[這裡]
from web3 import Web3, HTTPProvider, IPCProvider web3 = Web3(HTTPProvider(‘http://ip:port’)) web3.eth.blockNumber
黑客解密及IOCs情報
黑客錢包
目前我們掌握了3個黑客的錢包收款地址,未轉走的賬戶餘額為2220萬美金:
[連結地址],餘額為38,076 ETH(未統計erc20 token),最早進賬為2016-2-14,最新進賬為2018-3-21(當前還在持續入賬)
[連結地址],餘額為321 ETH(未統計erc20 token),最早進賬為2016-8-10,最新進賬為2017-11-28。
[連結地址],餘額為330 ETH(未統計erc20 token),最早進賬為2018-2-06,最新進賬為2018-3-20。
黑客攻擊源IP
146.0.249.87(德國黑森州法蘭克福) 162.251.61.133(加拿大) 190.2.133.114(庫拉索) 85.14.240.84(德國北萊茵)
目前大部分的黑客使用https://github.com/regcostajr/go-web3進行頻繁API請求,如果有看到大量user-agent為“Go-http-client/1.1”的POST請求時,請記錄下請求內容,確認是否為惡意行為。
緊急響應及修復建議
- 關閉對外暴露的RPC埠,如果必須暴露在網際網路,請使用鑑權:[連結地址]
- 藉助防火牆等網路防護軟體,封堵黑客攻擊源IP
- 檢查RPC日誌、web介面日誌,是否有異常大量的頻繁請求,檢查請求內容是否為eth_sendTransaction
- 等待以太坊更新最新程式碼,使用修復了該漏洞的節點程式
相關文章
- 京東正在瘋狂招人。。。
- 數字馬力正在瘋狂招人。。
- AI正在瘋狂尋找Know-HowAI
- “盤一盤”近期瘋狂作案的 Lapsus $ 黑客組織黑客
- 揭祕《荒野潛伏者》開發歷程:網易如何在泛濫的FPS遊戲中做差異化遊戲
- Visa正式支援以太坊加密貨幣!加密
- 以太坊ENS域名註冊量飆升216%!巨鯨瘋狂掃蕩?或將迎來炒作高潮!
- 以太坊代幣空投合約實現
- 野路子廠商,正在瘋狂薅著正版遊戲的羊毛遊戲
- 以太坊客戶端 Geth 出漏洞,超過 2000 萬美元的數字貨幣被盜客戶端
- 以太坊智慧合約 Hexagon 存在溢位漏洞Go
- 以太坊學習筆記————10、錢包、以太幣、Gas介紹筆記
- 什麼是以太幣——零基礎瞭解以太坊(三)
- 馬斯克:狗狗幣Doge好於比特幣和以太坊?馬斯克比特幣
- 理解 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE:以太坊和 BSC 中的原生代幣佔位符
- 瘋狂的沙王
- 揭祕微光走尺老師PUA精神控制還偷課?
- 以太坊中的全域性屬性
- 在私有以太坊上實現針對ERC20數字貨幣ProxyOverflow漏洞的攻擊
- 凌晨4小時,三個“黑客”瘋狂盜轉30多萬黑客
- 以太坊學習筆記————9、什麼是以太幣?如何獲取?筆記
- 在以太坊發行代幣Token系列教程(1)
- 沸騰2020:比特幣與以太坊明年會如何?比特幣
- golang-event在以太坊中的使用Golang
- 以太坊連載(一):以太坊是什麼?
- 以太坊是什麼?以太坊交易可靠嗎?
- 揭祕JavaScript中“神祕”的this關鍵字JavaScript
- 從比特幣和以太坊比較中發現ETH真正價值 - Justin比特幣
- ARB鏈的代幣kai發基於以太坊(ETH)網路AI
- 億和論幣:11.22以太坊回撥 志在登高山
- [譯] 以太坊:能幫我們把 Uber 換掉的非比特幣加密貨幣比特幣加密
- “新基建大潮下的漏洞安全觀”直播大揭祕
- “瘋狂”的數字孿生
- 瘋狂學習——DP!
- 瘋狂ajax講義
- 小丑路人瘋狂吧
- 如何取消以太坊智慧合約授權,防止被黑客盜取Token?黑客
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議