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