OWASP 區塊鏈安全 Top10

分析、整理2011年至2019年之間160個典型的區塊鏈安全事件。

目錄

一、高級可持續威脅

1、描述

2、危害

3、修復

二、失控的幣值膨脹

1、描述

2、危害

3、修復

三、失效的權限控制

1、描述

2、利用方式

3、修復

四、不安全的共識協議

1、描述

2、利用方式

3、修復

五、考慮不充分的程序邏輯

1、描述

2、利用方式

3、修復

六、不嚴謹的業務策略

1、描述

2、利用方式

3、修復

七、校驗不嚴格的交易邏輯

1、描述

2、利用方式

3、修復

八、脆弱的隨機數機制

1、描述

2、利用方式

3、修復

九、存在缺陷的激勵機制

1、描述

2、利用方式

3、修復

十、日誌記錄和監控不足

1、描述

2、利用方式

3、修復


一、高級可持續威脅

1、描述

高級可持續威脅問題往往出現在區塊鏈領域的中心化團隊中,如:交易所、錢包、礦池等。主要是因爲區塊鏈團隊在基礎安全建設和安全運行上的欠缺,導致基礎設施出現安全漏洞,被攻擊者利用,實施數字貨幣的盜竊和破壞。

2、危害

該漏洞會導致區塊鏈系統被入侵,權限被控制,最終導致資金被竊取,敏感數據泄露等問題。

3、修復

重視基礎設施、辦公安全、內部風險管理等安全方面的建設。遊戲開發者應該持續分析數據,評估存在的風險,及時作出防護。

 

二、失控的幣值膨脹

1、描述

比特幣等虛擬貨幣吸引人的一個主要原因是限定了鑄幣總數,從而使這些幣有價值。但是如果鑄幣的程序設計和實現有漏洞,就可能導致鑄幣總數失控,導致幣值失控膨脹。

2、危害

該漏洞佔整個區塊鏈安全事件損失的29.55%。其中智能合約層案件最爲突出。主要是由於幣值控制代碼出現了整數溢出的漏洞,導致出現無限鑄幣的可能性。

3、修復

對於整數溢出漏洞,應該使用安全的的算術函數做加減乘除處理。

https://ethereumdev.io/safemath-protect-overflows/

 

三、失效的權限控制

1、描述

主要是由於在設計或編碼的過程中,導致本該限制使用範圍的重要函數或權限沒有控制好範圍,被攻擊者利用,從而實施攻擊。如以太坊錢包Parity的庫權限沒有控制好,被越權調用初始化函數,重置了錢包的所有者。

2、利用方式

(1)開發者將初始化函數設置爲public,讓其他合約可以調用,但這也導致攻擊者可以利用這個漏洞進行修改;

(2)編譯器漏洞,因爲如果在編寫構造函數時不注意也會導致越權調用。如小於0.4.22版本中,合約構造函數必須和合約名字相同,而在之後的版本中,需要constructor關鍵字作爲構造函數的聲明,如果沒按照要求,構造函數就會被編譯成一個普通函數,被任意調用。

(3)Call是最常用的調用方式,調用後內置變量 msg 的值會修改爲調用者,但執行環境爲被調用者的運行環境。,如果合約中有函數以 msg.sender爲關鍵變量的代碼邏輯(如向msg.sender轉賬),那麼就有可能導致越權操作,引發安全問題。

3、修復

(1)對初始化等重要函數不要設置爲pubic權限,以致可以被外部調用。

(2)要注意構造函數編寫方式,以免被編譯成普通函數,可以被任意調用。

(3)注意call等的調用對msg的改變,以免導致繞過驗證環節,被越權執行函數。

 

四、不安全的共識協議

1、描述

主要是由於存在共識協議在設計之初未考慮的漏洞,被攻擊者識別和利用,從而損害鏈上參與者的利益。

在共識類案例中,以51%攻擊最爲常見。而不同類型的共識協議在面對51%攻擊的抵抗力又有所差別,雖然POW和POS兩種共識協議在規模較小時都容易被攻擊,但是POW類共識協議比POS類更容易被攻擊。

2、利用方式

利用51%攻擊導致出現雙花交易。

51%算力攻擊中還有一個重要概念:網絡重組(block reorganization)

網絡重組:網絡中六到八個塊甚至更長的塊都已經被礦工挖出來了,但是這些塊突然全部被移除,產生了一些新的塊去代替這些已經被確認過的塊。

3、修復

51%的攻擊會讓交易所等參與交易的機構損失慘重。針對交易所,建議提升提款前的確認次數。對於小規模的數字貨幣,根據具體業務謹慎選擇共識協議。

 

五、考慮不充分的程序邏輯

1、描述

主要由於軟件設計和編碼的錯誤原因,存在沒有考慮到的異常分支,導致程序邏輯被攻擊者利用,陷入設計者未預期的流程,造成損失。如The Dao事件。

2、利用方式

以The Dao事件爲例。

ETH智能合約中發送以太幣,常見的兩種方式:一是調用send函數,比如:msg.sender.send(100);二是使用message call,msg.sender.call.value(100)。兩個方式不同的是發送的gas數量。當調用send方法時,只會發送一部分gas,一般是2300gas,一旦gas耗盡就可能拋出異常。而使用message call的時候,則是發送全部的gas,執行完之後剩餘的gas會退還給發起調用的合約。

fallback函數,智能合約中可以有唯一的一個未命名函數,稱爲fallback函數。該函數不能有實參,不能返回任何值。如果其他函數都不能匹配給定的函數標識符,則執行fallback函數。當合約接收到以太幣但是不調用任何函數的時候,就會執行fallback函數。

存在漏洞的合約Bank和攻擊合約Attack

 

 

攻擊實施流程:

(1)假設Bank合約中有100wei,攻擊者Attack合約中有10wei;

(2)Attack合約先調用deposit方法向Bank合約發送10wei;

(3)之後Attack合約調用withdraw方法,從而調用Bank的withdrawBalance;

(4)Bank的withdrawBalance方法發送給了Attack合約10wei;

(5)Attack收到10wei之後,又會觸發調用fallback函數;

(6)這時,fallback函數又調用了兩次Bank的withdrawBalance,從而轉走了20wei;

(7)之後Bank合約才修改Attack合約的balance,將其置爲0。

出問題的地方在4-7這幾個步驟,開發者原本預期步驟4完成後就會到步驟7,沒有預料到中間還有5-6的fallback處理這個流程,以至於攻擊者可以構造編寫fallback代碼,讓處理流程走入異常分支,實現遞歸調用,直到gas耗盡。

3、修復

注意代碼中向fallback一類的隱形函數,避免出現邏輯異常錯誤。在編寫智能合約進行以太幣發送時,使用send或transfer,不要使用message call方式。

 

六、不嚴謹的業務策略

1、描述

該威脅主要是利用高額的以太費用和技術手段讓以太坊堵塞,從而獲得遊戲中的大獎。這根據場景不一樣,也會有不一樣的業務問題。

2、利用方式

目前區塊鏈遊戲比較火,因爲去中心化特性,確保了遊戲公平,但如果業務策略設計存在漏洞,就會導致遊戲獎勵被特定的人利用漏洞來獲得。

以FOMO3D遊戲爲例,遊戲規則如下:

(1)規則1:最後一個購買KEY的人獲得獎池中的大獎;

(2)規則2:每有人購買一個KEY,倒計時時間會增加30秒;

(3)規則3:遊戲啓動後從24小時開始倒計時。

曾經,大部分都認爲這是一個不可能結束的遊戲,因爲一旦快到倒計時就會很多人去購買KEY。

最終這個遊戲結束是因爲有一個黑客在自己購買KEY後,使用高額的以太費用和技術手段讓以太坊堵塞了3分鐘,進而使得其他玩家無法打包購買KEY的交易,最終等到倒計時結束,獲得了最後的大獎。

這就是業務策略沒有考慮到以太坊網絡是有可能被人爲堵塞的後果。

3、修復

目前的幾個公鏈性能都較差,使用很少的成本就能讓交易網絡堵塞,因此在設計業務策略時要考慮這個因素,攻擊可以讓交易出現阻塞和回滾。

 

七、校驗不嚴格的交易邏輯

1、描述

交易校驗不嚴格,攻擊者僞造假的交易行爲,但被校驗方驗證通過,誤認爲真的交易;或者提交了真交易,但是通過時間差、黑名單等,讓交易發生回滾,實際交易並沒有發生,而商家只驗證是否有交易行爲的話,就會發生損失。

2、利用方式

主要是假轉賬類問題和回滾類問題。主要是因爲校驗方的校驗邏輯存在問題,從而被攻擊者繞過,以假的充值行爲卻獲得真實的數字貨幣入賬;;或者通過時間差,黑名單等因素讓之前的交易操作回滾,從而欺騙商戶獲得商品。

3、修復

(1)關鍵邏輯不僅要校驗是否真實的轉賬消息,還需要校驗轉賬的目標賬戶是否正確。

(2)不僅要確認支付是否成功提交,還需要等待一定時間,看支付是否回滾,再確認支付是否成功。

(3)遊戲的獎勵機制應該同下注機制緊密相關。一旦發現下注交易產生問題發生回滾,則獎勵交易也應該一起回滾。

 

八、脆弱的隨機數機制

1、描述

這裏不僅僅指僞隨機函數的問題,而是整個僞隨機數生成機制不夠安全,導致可以被攻擊者提前獲取或猜測到隨機數的結果,以實施攻擊。

2、利用方式

隨機數威脅一般出現在智能合約類遊戲中,隨機數保證了遊戲的公平

隨機數seed由timestamp、difficulty、coinbase、gaslimit、msg、sender、number構成。因此,只要知道這幾個數據,我們就可以預測出是否可以獲得空投獎勵。其中msg.sender是可以由用戶或攻擊者控制,因此攻擊者可以不斷嘗試構造出滿足空投獎勵條件的msg.sender以獲得比正常用戶高很多的空投獎勵。

3、修復

1) 一般來說隨機數的構成元素不應該可以被用戶控制;

2) 不應該在開獎前讓用戶可以預測到開獎結果。

 

九、存在缺陷的激勵機制

1、描述

激勵機制是區塊鏈的重要環節,但若開發者設計的激勵機制存在可以被利用的漏洞,就可能會給開發者或用戶帶來損失。

2、利用方式

攻擊方利用了礦池激勵機制的漏洞,參與分紅,但是不做貢獻,挖到了礦就自己藏起來,給一起挖礦的礦工和礦池都帶來了損害。

3、修復

在設計激勵機制時千萬不要假設所有的參與者都是誠實的,一定要防範惡意者的攻擊,以保護大家的利益。

 

十、日誌記錄和監控不足

1、描述

日誌記錄和監控的問題對區塊鏈團隊和公司來說非常很重要。如果沒有足夠的日誌記錄和監控,被攻擊的過程中,你會不知道。當發生安全事件後,你沒有辦法調查,也沒有辦法改進以避免再犯同樣的錯誤。所以日誌記錄和監控不足的問題也很嚴重。

2、利用方式

缺少日誌和監控會讓黑客攻擊變得更肆無忌憚,因爲你無法發現攻擊行爲,無法知道是哪裏存在安全漏洞,也就沒有辦法找到修復的方案,整體的安全風險處於失控的狀態。

3、修復

要確保所有登錄、訪問控制失敗、輸入驗證失敗都能夠被記錄到日誌中去,並保留足夠的用戶上下文信息,以識別可疑或惡意帳戶,併爲後期取證預留足夠時間;

確保高額交易有完整性控制的審計信息,以防止篡改或刪除,例如審計信息保存在只能進行記錄增加的數據庫表中;

建立有效的監控和告警機制,使可疑活動在可接受的時間內被發現和應對,或採取一個應急響應機制和恢復計劃。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章