隨著越來越的人參與到區(qū)塊鏈這個行業(yè)中來,為行業(yè)注入新活力的同時也由于相關(guān)知識的薄弱以及安全意識的匱乏,給了攻擊者更多的可乘之機。面對頻頻爆發(fā)的安全事件,慢霧特推出區(qū)塊鏈安全入門筆記系列,向大家介紹區(qū)塊鏈安全相關(guān)名詞,讓新手們更快適應(yīng)區(qū)塊鏈危機四伏的安全攻防世界。
智能合約 Smart Contract智能合約(Smart Contract)并不是一個新的概念,早在 1995 年就由跨領(lǐng)域法律學(xué)者 Nick Szabo 提出:智能合約是一套以數(shù)字形式定義的承諾(Promises),包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。在區(qū)塊鏈領(lǐng)域中,智能合約本質(zhì)可以說是一段運行在區(qū)塊鏈網(wǎng)絡(luò)中的代碼,它以計算機指令的方式實現(xiàn)了傳統(tǒng)合約的自動化處理,完成用戶所賦予的業(yè)務(wù)邏輯。
隨著區(qū)塊鏈智能合約數(shù)量的與日俱增,隨之暴露出來的安全問題也越來越多,攻擊者常能利用漏洞入侵系統(tǒng)對智能合約用戶造成巨大損失,據(jù) SlowMist Hacked 統(tǒng)計,截止目前僅 ETH、EOS、TRON 三條鏈上因智能合約被攻擊而導(dǎo)致的損失就高達(dá) $126,883,725.92,具有相同攻擊特征的手法更是呈現(xiàn)出多次得手且跨公鏈的趨勢,接下來我們將為大家介紹近年來一些常見的智能合約攻擊手法。
交易回滾攻擊 Roll Back Attack
交易回滾攻擊(Roll Back Attack),故名思義,指的是能對交易的狀態(tài)進(jìn)行回滾。回滾具體是什么意思呢?回滾具體指的是將已經(jīng)發(fā)生的狀態(tài)恢復(fù)成它未發(fā)生時候的樣子。那么,交易回滾的意思就是將已經(jīng)發(fā)生的交易變成未發(fā)生的狀態(tài)。即攻擊者本來已經(jīng)發(fā)生了支付動作,但是通過某些手段,讓轉(zhuǎn)賬流程發(fā)生錯誤,從而回滾整個交易流程,達(dá)到交易回滾的目的,這種攻擊手法多發(fā)于區(qū)塊鏈上的的智能合約游戲當(dāng)中,當(dāng)用戶的下注動作和合約的開獎動作在一個交易內(nèi)的時候,即內(nèi)聯(lián)交易。攻擊者就可以通過交易發(fā)生時檢測智能合約的某些狀態(tài),獲知開獎信息,根據(jù)開獎信息選擇是否對下注交易進(jìn)行回滾。
該攻擊手法早期常用于 EOS DApp 上,后逐步向波場等其他公鏈蔓延,截止目前,已有 12 個 DApp 遭遇攻擊,慢霧安全團(tuán)隊建議開發(fā)者們不要將用戶的下注與開獎放在同一個交易內(nèi),防止攻擊者通過檢測智能合約中的開獎狀態(tài)實現(xiàn)交易回滾攻擊。
交易排擠攻擊 Transaction CongesTIon Attack交易排擠攻擊(TransacTIon CongesTIon Attack)是針對 EOS 上的使用 defer 進(jìn)行開獎的游戲合約的一種攻擊手法,攻擊者可以通過某些手段,在游戲合約的 defer 開獎交易前發(fā)送大量的 defer 交易,惡意侵占區(qū)塊內(nèi)的 CPU 資源,使得智能合約內(nèi)本應(yīng)在指定區(qū)塊內(nèi)執(zhí)行的 defer 開獎交易因資源不足無法執(zhí)行,只能去到下一個區(qū)塊才執(zhí)行。由于很多 EOS 上的游戲智能合約使用區(qū)塊信息作為智能合約本身的隨機數(shù),同一個 defer 開獎交易在不同區(qū)塊內(nèi)的執(zhí)行結(jié)果是不一樣的。通過這樣的方式,攻擊者在獲知無法中獎的時候,就通過發(fā)送大量的 defer 交易,強行讓智能合約重新開獎,從而達(dá)到攻擊目的。
該攻擊手法最早在黑客 loveforlover 向 EOS.WIN 發(fā)起攻擊時被發(fā)現(xiàn),隨后相同的攻擊手法多次得手,據(jù) SlowMist Hacked 統(tǒng)計僅 2019 年就有 22 個競猜類 DApp 因此損失了大量資金,慢霧安全團(tuán)隊建議智能合約開發(fā)者對在不同區(qū)塊內(nèi)執(zhí)行結(jié)果不同的關(guān)鍵的操作不要采用 defer 交易的方式,降低合約被攻擊的風(fēng)險。
隨機數(shù)攻擊 Random Number Attack隨機數(shù)攻擊(Random Number Attack),就是針對智能合約的隨機數(shù)生成算法進(jìn)行攻擊,預(yù)測智能合約的隨機數(shù)。目前區(qū)塊鏈上很多游戲都是采用的鏈上信息(如區(qū)塊時間,未來區(qū)塊哈希等)作為游戲合約的隨機數(shù)源,也稱隨機數(shù)種子。使用這種隨機數(shù)種子生成的隨機數(shù)被稱為偽隨機數(shù)。偽隨機數(shù)不是真的隨機數(shù),存在被預(yù)測的可能。當(dāng)使用可被預(yù)測的隨機數(shù)種子生成隨機數(shù)的時候,一旦隨機數(shù)生成的算法被攻擊者猜測到或通過逆向等其他方式拿到,攻擊者就可以根據(jù)隨機數(shù)的生成算法預(yù)測游戲即將出現(xiàn)的隨機數(shù),實現(xiàn)隨機數(shù)預(yù)測,達(dá)到攻擊目的。2018 年 11 月 11 日,攻擊者向 EOS.WIN 發(fā)起連續(xù)隨機數(shù)攻擊,共獲利 20,000 枚 EOS,在此慢霧安全團(tuán)隊建議智能合約開發(fā)者使用安全隨機數(shù)源,如鏈下的隨機數(shù)種子方案,降低合約被攻擊的風(fēng)險。