加密數(shù)字貨幣偽造權(quán)益攻擊技術(shù)詳解
前言
隸屬伊利諾伊大學(xué)香檳分校的去中心化系統(tǒng)實驗室(Decentralized Systems Lab)在最新的研究中發(fā)現(xiàn),很多以權(quán)益證明(Proof-of-Stake, PoS)為基礎(chǔ)的加密數(shù)字貨幣都存在一系列的漏洞,該漏洞會耗盡系統(tǒng)資源。
該研究團(tuán)隊提出的是一種拒絕服務(wù)(DoS)攻擊,一次只能針對單個節(jié)點運行,使節(jié)點無法正常運行,因此該漏洞不存在任何資金安全上的風(fēng)險。
實驗室研究人員提出了兩種類型的攻擊:
1. 無權(quán)益的攻擊:利用節(jié)點無法單獨通過區(qū)塊頭確定有效權(quán)益的特性造成內(nèi)存或磁盤的過度占用
2. 已花費權(quán)益的攻擊:受到攻擊的加密數(shù)字貨幣會被多次轉(zhuǎn)移,但此前用于權(quán)益證明的數(shù)據(jù)仍然繼續(xù)使用 (Qtum 量子鏈不存在這種漏洞的可能)
正如英文原文所述,只有“無權(quán)益的攻擊”漏洞可能會對 Qtum 產(chǎn)生影響; 但是,在 Qtum Core 0.16.2版本(已于2018年11月16日發(fā)布)中,我們已經(jīng)實施了一系列的緩解措施,杜絕了這種攻擊向量的風(fēng)險。
“無權(quán)益的攻擊”由兩種相似但不同的攻擊向量組成。
在第一種攻擊向量下,攻擊者會導(dǎo)致受害者節(jié)點內(nèi)存耗盡;在第二種攻擊向量下,會導(dǎo)致受害者的磁盤空間耗盡,因此無論哪種攻擊都不會與資金安全風(fēng)險相關(guān)。
第一種攻擊向量的產(chǎn)生是由于將區(qū)塊頭存儲在內(nèi)存空間之前未進(jìn)行充分的驗證引起的。因此,潛在的攻擊者可以通過泛洪攻擊使用大量無效的區(qū)塊頭耗盡受害者節(jié)點的內(nèi)存資源。在 Qtum 中可能存在這種漏洞的原因是,Qtum 繼承了 Bitcoin 0.10.0版本的區(qū)塊頭優(yōu)先的特性。
在 Bitcoin 中,在將區(qū)塊頭存儲在內(nèi)存之前會對區(qū)塊頭的工作量證明(PoW)進(jìn)行驗證。但是,Qtum 的權(quán)益證明協(xié)議中并不涉及任何 PoW 的相關(guān)內(nèi)容,同時由于 coinstake 交易只存在區(qū)塊當(dāng)中,Qtum 中的 PoS 只有在接收到完整的區(qū)塊后才能完全驗證。因此,潛在的攻擊可以創(chuàng)建大量無效的區(qū)塊頭并將它們發(fā)送給已連接的其他節(jié)點,從而導(dǎo)致它們耗盡內(nèi)存資源。
這種攻擊向量的第二種變體與 Qtum 如何/何時進(jìn)行完整區(qū)塊的驗證有關(guān)。 在 Qtum 中,當(dāng)接收到新的區(qū)塊的總鏈“工作量”比上一個 tip 的“工作量”更多時,將執(zhí)行完整區(qū)塊的驗證和 coinstake 驗證。 事實上,這意味著僅當(dāng)新塊附加到當(dāng)前 TIp,或者接收到分叉鏈的 TIp,且該TIp具有比當(dāng)前 TIp 更多的總鏈“工作量”時,才會對 PoS 進(jìn)行完全驗證,并因此觸發(fā)區(qū)塊重組。 但是,在先前版本的 Qtum 中,如果節(jié)點收到一個鏈工作量大于或等于當(dāng)前 tip 的鏈工作量的區(qū)塊時,就會將這些新的區(qū)塊提交到磁盤空間。因此,攻擊者可以在所連接的節(jié)點沒有完全驗證 PoS 的情況下讓被攻擊節(jié)點將區(qū)塊提交到磁盤,從而導(dǎo)致它們耗盡磁盤空間。
Qtum 的 v0.16.2 是一個推薦的更新版本,包括改進(jìn)的網(wǎng)絡(luò)安全性和錯誤修復(fù),形式如下:
1. 實施網(wǎng)絡(luò)垃圾防護(hù)
2. 只有當(dāng)區(qū)塊的鏈工作量嚴(yán)格大于當(dāng)前 tip 工作量時,才會向 peer 節(jié)點請求區(qū)塊
3. 為 PoS 時間戳,區(qū)塊索引,簽名類型(LowS),同步和滾動檢查點添加額外的區(qū)塊頭檢測。
4. 添加最近的檢查點
5. 更新 nMinimumChainWork,defaultAssumeValid 和chainTxData
6. 更新 BLOCK_CHAIN_SIZE
7. 修復(fù)在 OSX Mojave 上進(jìn)行編譯 (make) 檢測時失敗的 Qt 測試
8. 修復(fù)用于 PoS 區(qū)塊的 getblocktemplate RPC
9. 修復(fù) walletpassphrase 和 getnetworkhashps RPC 的幫助消息
當(dāng) Qtum 將區(qū)塊提交到磁盤時,針對區(qū)塊/磁盤的攻擊只需要稍微進(jìn)行一點修改。 現(xiàn)在只有當(dāng)區(qū)塊作為鏈的一部分,鏈的 tip 工作量大于當(dāng)前 tip 的鏈工作量時,才會將區(qū)塊提交到磁盤。
區(qū)塊頭/內(nèi)存攻擊可以通過實施潛在的區(qū)塊頭垃圾檢測以及斷開和禁止任何有問題的 peer 來進(jìn)行緩解。 之前僅在收到完整區(qū)塊時才進(jìn)行的幾項檢測也被添加到了獨立的區(qū)塊頭檢測中。 例如,在將區(qū)塊頭提交到內(nèi)存之前,要確保區(qū)塊頭中包含的簽名格式的正確性,因為攻擊者可以使用大量無效的簽名來放大其表觀權(quán)益。
v0.16.2 中實施的網(wǎng)絡(luò)垃圾防護(hù)會對試圖運行此類“無權(quán)益的攻擊”的 peer 進(jìn)行檢測并禁止它們。 現(xiàn)在,只有當(dāng)區(qū)塊的鏈工作量嚴(yán)格大于當(dāng)前尖端工作量時,節(jié)點才會向 peer 請求區(qū)塊。 除了這些對策之外,我們還為 PoS 時間戳,區(qū)塊索引,簽名類型(LowS)以及同步和滾動檢查點添加了額外的區(qū)塊頭檢測。
Qtum 量子鏈開發(fā)團(tuán)隊通過去中心化系統(tǒng)實驗室關(guān)于“偽造權(quán)益”的研究成果,使得 Qtum 量子鏈開發(fā)團(tuán)隊在攻擊被公之于眾之前就已修復(fù)該漏洞,及時避免了對用戶造成的影響。
由于實現(xiàn)了額外的復(fù)雜性和安全特性,這些補丁能很大程度防御任何類似的攻擊。與此同時,Qtum 量子鏈也正在進(jìn)行一個更為全面的修復(fù),該修復(fù)已通過了我們的初始測試,但由于它是對協(xié)議的一個相對更加重大的修改,所以我們需要在正式發(fā)布前進(jìn)行更多的測試。