當前位置:
首頁 > 最新 > 安全永無止境:DAO黑客和區塊鏈安全漏洞

安全永無止境:DAO黑客和區塊鏈安全漏洞

公眾號回復「1」,拉你進區塊鏈技術討論微信群

來源:哈希演算法

本文約2800字+,閱讀(觀看)需要16分鐘

在區塊鏈領域中,安全方面的考慮壓倒了軟體中所有其他要考慮因素。如果實現不了安全, 其他任何方面做得再好也於事無補。

區塊鏈被證明分散的, 可信任的事務工作, 但許多區塊鏈的安全漏洞仍然存在。安全漏洞存在於設計階段、編碼階段和操作階段。同樣,區塊鏈有可能受到黑客的攻擊。

區塊鏈安全漏洞

智能合約的存在就像鑽石一樣是永恆存在的,只要它們被部署的區塊鏈繼續被使用。因此,所有的漏洞和區塊鏈安全漏洞也會像智能合約一樣存在。通常, 每個區塊鏈提供其自己的編程語言來實現智能合約。

智能合約的編程語言

區塊鏈會利用他們自己的語言來開發智能合約。

例如,以太坊平台包含了編寫智能合約的可靠語言。創作者設計的是一種堅固的圖靈機完整語言。

圖靈機完整的語言實質上允許程序員實現底層系統所能做到的任何事情。因此, 這就給程序員提供了代碼中實現循環的能力, 這可能會導致區塊鏈引發安全漏洞。

圖靈機完整語言

圖靈機完整語言非常的複雜, 但正是這種複雜性往往會招致 bug 和漏洞。

比特幣網路也有一種編程語言,它稱之為腳本。腳本的目的不是為了增強安全性。

給程序員的選項越少,區塊鏈安全漏洞進入系統的可能性就越小。

為了盡量減少將錯誤代碼發布到鏈外的風險, 程序員必須了解智能合約編程中固有的常見缺陷和反模式。(反模式表示錯誤的編程實踐)。

DAO黑客:可重入性問題

可重入性問題在被編寫到智能合約中的區塊鏈安全漏洞中可能排在最高的位置。可重入性通過對同一事務的多個支出來消耗一個帳戶。處理退款的用例適合這種利用,但是如果不在設計和編碼階段解決,這種缺陷就會影響到所有事務。

在迄今為止最臭名昭著的加密貨幣攻擊之一中,DAO黑客就利用了可重入性。沒有組織領導決定如何運行DAO(分散的自治組織),使他們能夠對投資的項目進行投票。

它在第一個月籌集了超過1.5億美元的資金。2016年6月17日,黑客從該組織的「重入性」漏洞中抽走了5000萬美元。從以太經典(ETC)到以太幣(ETH)的硬叉導致了解決這次黑客攻擊所產生問題的所有努力。

反模式易陷入可重入性

代碼脆弱的可重入性邏輯看起來是這樣的:

處理支付的函數

(1) 檢查交易的有效性、收款人和賬戶餘額;

(2) 處理交易;

(3) 更新系統狀態,以顯示已處理了事務;

乍一看,邏輯看起來是正確和完整的,但缺陷在於步驟3之前執行步驟2的順序。

對函數的第一次調用將繼續處理步驟2,而對同一事務的另一次調用則可以輸入該函數。由於狀態信息仍處於初始狀態,尚未在步驟3中處理,因此第二個調用將檢查為要處理的有效事務。

因此,該系統第二次為同一義務支出貨幣。黑客在狀態正確設置之前,將多個事務快速地發送到函數中。

治療可重入性

對演算法的這一修改糾正了上面的問題:

處理支付的函數

(1) 檢查交易的有效性、收款人和賬戶餘額;

(2) 更新系統狀態以顯示已處理了事務;

(3) 處理交易;

代碼必須說明所有必要的異常處理,並且它還必須說明所有邏輯依賴項。

Overflow

Overflow是程序員需要注意的另一個常見的安全缺陷。

一些編程語言提供了強類型,而其他語言提供了弱類型。例如,強類型語言不允許程序員將字元串數據分配給數值變數,弱類型語言允許執行此類操作。

強類型語言實施範圍有很大的限制。如果一個數組是十個元素,程序員就不能嘗試訪問第十一個元素。弱類型語言允許這樣的行為,但會導致崩潰。如果一個變數所允許的最大值是99,並且為它賦值100,那麼運行它時就會看到它崩潰!

因此,Overflow是黑客常使用的手段。如果黑客向智能合約提供了一個超出代碼處理範圍的參數,就會產生崩潰結果。這樣的崩潰助長了多重攻擊。崩潰可能觸發拒絕服務攻擊(DDoS攻擊),這時,關於系統內部的重要信息有時會在錯誤消息中顯示出來。

在web應用程序中,黑客經常用自己的惡意代碼填充內存,因此,當程序崩潰並進入內存中的一個隨機點時,惡意代碼就會執行。

弱類型語言提供了強大的功能和動態靈活性,但它們也需要更嚴格的設計和測試來抵抗攻擊。

大量的安全問題困擾著軟體世界。隨著新技術的出現,出現了新的威脅。除了上面提到的漏洞外,這些明顯的缺陷只是許多其他區塊鏈安全漏洞中的一些。

糟糕的密碼系統製造了很多麻煩。密碼學確保隱私,當隱私被破壞時,一切都會被破壞。IOTA團隊犯了一個錯誤,在產品的初始版本中從頭編寫自己的密碼庫。滾動自己來加密所固有的問題是,所有複雜的軟體都包含錯誤。

建立的密碼庫在經過學術界的審查後仍然存在,並且隨著時間的推移,證明它是可靠的。

在錢包的世界裡,隨機數生成必須是真正隨機的。特別是在加密貨幣出現的初期,一些錢包就不能滿足這一要求。

加密貨幣要求地址必須是唯一的。唯一性來自一個隨機數生成器,並且隨機數生成器需要一個種子來開始這個過程。如果種子不是真正隨機的,系統就會失敗。

一個壞的隨機性的結果意味著同一地址被多次創建。想像一下,錢包將地址X分配給某人A,然後稍後某個時候將地址X分配給某人B。當付款到達地址X時它只適用於一個人。那麼到底哪個人會得到錢?

當黑客找出用於創建種子的演算法時,會出現另一個隨機性不好的問題。黑客為自己重新生成種子,並擁有系統。

安全永無止境

安全是一場永無止境的戰鬥,即使程序員、架構師和測試人員從代碼中刪除了所有漏洞,操作漏洞依然存在。

在一個工作環境的證明中,如果壞的參與者控制了網路的51%,那麼完整性就會被破壞。博弈論為這種攻擊提供了緩解。但是51%的攻擊摧毀了貨幣的價值,所以攻擊者只是傷害了他們自己。

區塊鏈生活在互聯網上,和互聯網一樣,也和黑客有同樣的接觸。例如,假設您從一個網站上的交換器中購買代幣。注射式攻擊、跨站點編寫腳本、網路釣魚攻擊以及所有其他傳統網站攻擊都佔上風。

結語

正如程序員要防範錯誤一樣,程序員也必須在開發中考慮到安全性。雖然存在一些幫助程序員完成任務的工具,但是程序員必須首先了解他們自己的漏洞以防止它們。

分散式應用安全項目(DASP)希望成為區塊鏈安全性信息和資源的存儲庫。他們在開放的Web應用安全項目(OWASP)上對自己進行了一些建模。年度OWASP前10名明確列出了目前存在的主要網頁應用程序漏洞。DASP前10名希望為區塊鏈提供同等的資源。

並非所有的攻擊都是事先知道的。零日攻擊定義了黑客在其他人之前就知道的漏洞。所以程序員在設計和實現軟體時必須像攻擊者一樣去思考。如果您沒有在代碼中找到漏洞,那麼希望尋找利潤的黑客來替你找到它們。

文章發布只為分享區塊鏈技術內容,版權歸原作者所有,觀點僅代表作者本人,絕不代表區塊鏈兄弟贊同其觀點或證實其描述。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 區塊鏈兄弟 的精彩文章:

淺談區塊鏈的 Layer2 擴展

TAG:區塊鏈兄弟 |