在區塊鏈領域中,安全方面的考慮壓倒了軟體中所有其他要考慮因素。如果實現不了安全, 其他任何方面做得再好也於事無補。
區塊鏈被證明分散的, 可信任的事務工作, 但許多的安全漏洞仍然存在。安全漏洞存在於設計階段、編碼階段和操作階段。同樣,區塊鏈有可能受到駭客的攻擊。區塊鏈安全漏洞智慧合約的存在就像鑽石一樣是永恆存在的,只要它們被部署的區塊鏈繼續被使用。因此,所有的漏洞和區塊鏈安全漏洞也會像智慧合約一樣存在。通常, 每個區塊鏈提供其自己的程式語言來實現智慧合約。智慧合約的程式語言區塊鏈會利用他們自己的語言來開發智慧合約。例如,以太坊平臺包含了編寫智慧合約的可靠語言。創作者設計的是一種堅固的圖靈機完整語言。圖靈機完整的語言實質上允許程式設計師實現底層系統所能做到的任何事情。因此, 這就給程式設計師提供了程式碼中實現迴圈的能力, 這可能會導致區塊鏈引發安全漏洞。圖靈機完整語言圖靈機完整語言非常的複雜, 但正是這種複雜性往往會招致 bug 和漏洞。比特幣網路也有一種程式語言,它稱之為指令碼。指令碼的目的不是為了增強安全性。給程式設計師的選項越少,區塊鏈安全漏洞進入系統的可能性就越小。為了儘量減少將錯誤程式碼釋出到鏈外的風險, 程式設計師必須瞭解智慧合約程式設計中固有的常見缺陷和反模式。(反模式表示錯誤的程式設計實踐)。DAO駭客:可重入性問題可重入性問題在被編寫到智慧合約中的區塊鏈安全漏洞中可能排在最高的位置。可重入性透過對同一事務的多個支出來消耗一個帳戶。處理退款的用例適合這種利用,但是如果不在設計和編碼階段解決,這種缺陷就會影響到所有事務。在迄今為止最臭名昭著的加密貨幣攻擊之一中,DAO駭客就利用了可重入性。沒有組織領導決定如何執行DAO(分散的自治組織),使他們能夠對投資的專案進行投票。它在第一個月籌集了超過1.5億美元的資金。2016年6月17日,駭客從該組織的“重入性”漏洞中抽走了5000萬美元。從以太經典(ETC)到以太幣(ETH)的硬叉導致瞭解決這次駭客攻擊所產生問題的所有努力。反模式易陷入可重入性程式碼脆弱的可重入性邏輯看起來是這樣的:處理支付()的函式(1) 檢查交易的有效性、收款人和賬戶餘額;(2) 處理交易;(3) 更新系統狀態,以顯示已處理了事務;乍一看,邏輯看起來是正確和完整的,但缺陷在於步驟3之前執行步驟2的順序。對函式的第一次呼叫將繼續處理步驟2,而對同一事務的另一次呼叫則可以輸入該函式。由於狀態資訊仍處於初始狀態,尚未在步驟3中處理,因此第二個呼叫將檢查為要處理的有效事務。因此,該系統第二次為同一義務支出貨幣。駭客在狀態正確設定之前,將多個事務快速地傳送到函式中。治療可重入性對演算法的這一修改糾正了上面的問題:處理支付()的函式(1) 檢查交易的有效性、收款人和賬戶餘額;(2) 更新系統狀態以顯示已處理了事務;(3) 處理交易;程式碼必須說明所有必要的異常處理,並且它還必須說明所有邏輯依賴項。OverflowOverflow是程式設計師需要注意的另一個常見的安全缺陷。一些程式語言提供了強型別,而其他語言提供了弱型別。例如,強型別語言不允許程式設計師將字串資料分配給數值變數,弱型別語言允許執行此類操作。強型別語言實施範圍有很大的限制。如果一個陣列是十個元素,程式設計師就不能嘗試訪問第十一個元素。弱型別語言允許這樣的行為,但會導致崩潰。如果一個變數所允許的最大值是99,並且為它賦值100,那麼執行它時就會看到它崩潰!因此,Overflow是駭客常使用的手段。如果駭客向智慧合約提供了一個超出程式碼處理範圍的引數,就會產生崩潰結果。這樣的崩潰助長了多重攻擊。崩潰可能觸發拒絕服務攻擊(DDoS攻擊),這時,關於系統內部的重要資訊有時會在錯誤訊息中顯示出來。在web應用程式中,駭客經常用自己的惡意程式碼填充記憶體,因此,當程式崩潰並進入記憶體中的一個隨機點時,惡意程式碼就會執行。弱型別語言提供了強大的功能和動態靈活性,但它們也需要更嚴格的設計和測試來抵抗攻擊。大量的安全問題困擾著軟體世界。隨著新技術的出現,出現了新的威脅。除了上面提到的漏洞外,這些明顯的缺陷只是許多其他區塊鏈安全漏洞中的一些。糟糕的密碼系統製造了很多麻煩。密碼學確保隱私,當隱私被破壞時,一切都會被破壞。IOTA團隊犯了一個錯誤,在產品的初始版本中從頭編寫自己的密碼庫。滾動自己來加密所固有的問題是,所有複雜的軟體都包含錯誤。建立的密碼庫在經過學術界的審查後仍然存在,並且隨著時間的推移,證明它是可靠的。在錢包的世界裡,隨機數生成必須是真正隨機的。特別是在加密貨幣出現的初期,一些錢包就不能滿足這一要求。加密貨幣要求地址必須是唯一的。唯一性來自一個隨機數生成器,並且隨機數生成器需要一個種子來開始這個過程。如果種子不是真正隨機的,系統就會失敗。一個壞的隨機性的結果意味著同一地址被多次建立。想象一下,錢包將地址X分配給某人A,然後稍後某個時候將地址X分配給某人B。當付款到達地址X時它只適用於一個人。那麼到底哪個人會得到錢?當駭客找出用於建立種子的演算法時,會出現另一個隨機性不好的問題。駭客為自己重新生成種子,並擁有系統。安全永無止境安全是一場永無止境的戰鬥,即使程式設計師、架構師和測試人員從程式碼中刪除了所有漏洞,操作漏洞依然存在。在一個工作環境的證明中,如果壞的參與者控制了網路的51%,那麼完整性就會被破壞。博弈論為這種攻擊提供了緩解。但是51%的攻擊摧毀了貨幣的價值,所以攻擊者只是傷害了他們自己。區塊鏈生活在網際網路上,和網際網路一樣,也和駭客有同樣的接觸。例如,假設您從一個網站上的交換器中購買代幣。注射式攻擊、跨站點編寫指令碼、網路釣魚攻擊以及所有其他傳統網站攻擊都佔上風。結語正如程式設計師要防範錯誤一樣,程式設計師也必須在開發中考慮到安全性。雖然存在一些幫助程式設計師完成任務的工具,但是程式設計師必須首先了解他們自己的漏洞以防止它們。分散式應用安全專案(DASP)希望成為區塊鏈安全性資訊和資源的儲存庫。他們在開放的Web應用安全專案(OWASP)上對自己進行了一些建模。年度OWASP前10名明確列出了目前存在的主要網頁應用程式漏洞。DASP前10名希望為區塊鏈提供同等的資源。並非所有的攻擊都是事先知道的。零日攻擊定義了駭客在其他人之前就知道的漏洞。所以程式設計師在設計和實現軟體時必須像攻擊者一樣去思考。如果您沒有在程式碼中找到漏洞,那麼希望尋找利潤的駭客來替你找到它們。
更多區塊鏈資訊:http://www.qukuaiwang.com.cn/news