區(qū)塊鏈安全相關(guān)的一些名詞介紹
掃描二維碼
隨時(shí)隨地手機(jī)看文章
隨著越來越的人參與到區(qū)塊鏈這個(gè)行業(yè)中來,為行業(yè)注入新活力的同時(shí)也由于相關(guān)知識(shí)的薄弱以及安全意識(shí)的匱乏,給了攻擊者更多的可乘之機(jī)。面對(duì)頻頻爆發(fā)的安全事件,慢霧特推出區(qū)塊鏈安全入門筆記系列,向大家介紹區(qū)塊鏈安全相關(guān)名詞,讓新手們更快適應(yīng)區(qū)塊鏈危機(jī)四伏的安全攻防世界。
越權(quán)訪問攻擊 Exceed Authority Access Attack
和傳統(tǒng)安全的定義一樣,越權(quán)指的是訪問或執(zhí)行超出當(dāng)前賬戶權(quán)限的操作,如本來有些操作只能是合約管理員執(zhí)行的,但是由于限制做得不嚴(yán)謹(jǐn),導(dǎo)致關(guān)鍵操作也能被合約管理員以外的人執(zhí)行,導(dǎo)致不可預(yù)測(cè)的風(fēng)險(xiǎn),這種攻擊在以太坊和 EOS 上都曾出現(xiàn)過多次。
以 EOS 上著名的 BetDice 游戲?yàn)槔?,由于在游戲合約內(nèi)的路由(EOS 內(nèi)可自定義的事件轉(zhuǎn)發(fā)器)中沒有對(duì)來源賬號(hào)進(jìn)行嚴(yán)格的校驗(yàn),導(dǎo)致普通用戶能通過 push action 的方式訪問到合約中的關(guān)鍵操作 transfer 函數(shù),直接繞過轉(zhuǎn)賬流程進(jìn)行下注,從而發(fā)生了越權(quán)攻擊,事后雖然 BetDice 官方緊急修復(fù)了代碼,并嚴(yán)格限制了來源賬號(hào),但這個(gè)漏洞已經(jīng)讓攻擊者幾乎無成本薅走 BetDice 獎(jiǎng)池內(nèi)將近 5 萬 EOS。又如在以太坊使用 solidity 版本為 0.4.x 進(jìn)行合約開發(fā)的時(shí)候,很多合約開發(fā)者在對(duì)關(guān)鍵函數(shù)編寫的時(shí)候不僅沒有加上權(quán)限校驗(yàn),也沒有指定函數(shù)可見性,在這種情況下,函數(shù)的默認(rèn)可見性為 public,惡意用戶可以通過這些沒有進(jìn)行限制的關(guān)鍵函數(shù)對(duì)合約進(jìn)行攻擊。
慢霧安全團(tuán)隊(duì)建議智能合約開發(fā)者們?cè)谶M(jìn)行合約開發(fā)的時(shí)候要注意對(duì)關(guān)鍵函數(shù)進(jìn)行權(quán)限校驗(yàn),防止關(guān)鍵函數(shù)被非法調(diào)用造成合約被攻擊。
交易順序依賴攻擊 Transaction-Ordering Attack
在區(qū)塊鏈的世界當(dāng)中,一筆交易內(nèi)可能含有多個(gè)不同的交易,而這些交易執(zhí)行的順序會(huì)影響最終的交易的執(zhí)行結(jié)果,由于在挖礦機(jī)制的區(qū)塊鏈中,交易未被打包前都處于一種待打包的 pending 狀態(tài),如果能事先知道交易里面執(zhí)行了哪些其他交易,惡意用戶就能通過增加礦工費(fèi)的形式,發(fā)起一筆交易,讓交易中的其中一筆交易先行打包,擾亂交易順序,造成非預(yù)期內(nèi)的執(zhí)行結(jié)果,達(dá)成攻擊。以以太坊為例,假如存在一個(gè) Token 交易平臺(tái),這個(gè)平臺(tái)上的手續(xù)費(fèi)是通過調(diào)控合約中的參數(shù)實(shí)現(xiàn)的,假如某天平臺(tái)項(xiàng)目方通過一筆交易請(qǐng)求調(diào)高交易手續(xù)費(fèi)用,這筆交易被打包后的所有買賣 Token 的交易手續(xù)費(fèi)都要提升,正確的邏輯應(yīng)該是從這筆交易開始往后所有的 Token 買賣交易的手續(xù)費(fèi)都要提升,但是由于交易從發(fā)出到被打包存在一定的延時(shí),請(qǐng)求修改交易手續(xù)費(fèi)的交易不是立即生效的,那么這時(shí)惡意用戶就可以以更高的手續(xù)費(fèi)讓自己的交易先行打包,避免支付更高的手續(xù)費(fèi)。
慢霧安全團(tuán)隊(duì)建議智能合約開發(fā)者在進(jìn)行合約開發(fā)的時(shí)候要注意交易順序?qū)灰捉Y(jié)果產(chǎn)生的影響,避免合約因交易順序的不同遭受攻擊。
女巫攻擊 Sybil Attack
傳聞中女巫是一個(gè)會(huì)魔法的人,一個(gè)人可以幻化出多個(gè)自己,令受害人以為有多人,但其實(shí)只有一個(gè)人。在區(qū)塊鏈?zhǔn)澜缰?,女巫攻擊(Sybil Attack)是針對(duì)服務(wù)器節(jié)點(diǎn)的攻擊。攻擊發(fā)生時(shí)候,通過某種方式,某個(gè)惡意節(jié)點(diǎn)可以偽裝成多個(gè)節(jié)點(diǎn),對(duì)被攻擊節(jié)點(diǎn)發(fā)出鏈接請(qǐng)求,達(dá)到節(jié)點(diǎn)的最大鏈接請(qǐng)求,導(dǎo)致節(jié)點(diǎn)沒辦法接受其他節(jié)點(diǎn)的請(qǐng)求,造成節(jié)點(diǎn)拒絕服務(wù)攻擊。以 EOS 為例,慢霧安全團(tuán)隊(duì)曾披露過的 EOS P2P 節(jié)點(diǎn)拒絕服務(wù)攻擊實(shí)際上就是女巫攻擊的一種,攻擊者可以非常小的攻擊成本來達(dá)到癱瘓主節(jié)點(diǎn)的目的。詳情可參考:
https://github.com/slowmist/papers/blob/master/EOSIO-P2P-Sybil-Attack/zh.md
慢霧安全團(tuán)隊(duì)建議在搭建全節(jié)點(diǎn)的情況下,服務(wù)器需要在系統(tǒng)層面上對(duì)網(wǎng)絡(luò)連接情況進(jìn)行監(jiān)控,一旦發(fā)現(xiàn)某個(gè)IP連接異常就調(diào)用腳本配置 iptables 規(guī)則屏蔽異常的 IP,同時(shí)鏈開發(fā)者在進(jìn)行公鏈開發(fā)時(shí)應(yīng)該在 P2P 模塊中對(duì)單 IP 節(jié)點(diǎn)連接數(shù)量添加控制。
假錯(cuò)誤通知攻擊 Fake Onerror Notification Attack
EOS 上存在各種各樣的通知,只要在 action 中添加 require_recipient 命令,就能對(duì)指定的帳號(hào)通知該 action,在 EOS 上某些智能合約中,為了用戶體驗(yàn)或其他原因,一般會(huì)對(duì) onerror 通知進(jìn)行某些處理。如果這個(gè)時(shí)候沒有對(duì) onerror 通知的來源合約是否是 eosio 進(jìn)行檢驗(yàn)的話,就能使用和假轉(zhuǎn)賬通知同樣的手法對(duì)合約進(jìn)行攻擊,觸發(fā)合約中對(duì) onerror 的處理,從而導(dǎo)致被攻擊合約資產(chǎn)遭受損失。
慢霧安全團(tuán)隊(duì)建議智能合約開發(fā)者在進(jìn)行智能合約開發(fā)的時(shí)候需要對(duì) onerror 的來源合約進(jìn)行校驗(yàn),確保合約帳號(hào)為 eosio 帳號(hào),防止假錯(cuò)誤通知攻擊。