智能合約漏洞與安全審計手段淺析_第1頁
智能合約漏洞與安全審計手段淺析_第2頁
智能合約漏洞與安全審計手段淺析_第3頁
智能合約漏洞與安全審計手段淺析_第4頁
智能合約漏洞與安全審計手段淺析_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

0引言中本聰提出比特幣使用的區(qū)塊鏈技術(shù)實際上是一種特殊的電子賬本,賬本中公開記錄著從區(qū)塊鏈建立之初的每一條轉(zhuǎn)帳記錄。這是一種去中心化的賬本,其完全不依賴中心監(jiān)管機構(gòu)的工作,能夠完全獨立的完成交易的發(fā)生和確認,降低了由于單一節(jié)點風險引起的安全問題。事實上,由于區(qū)塊鏈的用戶、買賣雙方實際是互相不信任的節(jié)點,交易雙方均不信任對方能夠單獨正確記錄交易,則衍生出了基于運算能力保證的確認機制,用戶、交易、礦工三者構(gòu)成了基本的加密貨幣交易。加密貨幣本質(zhì)上是區(qū)塊鏈技術(shù)的一個小的應(yīng)用方面,此外,依托于區(qū)塊鏈中記錄信息的不可更改的特性,我們可以在不依賴第三方公證機構(gòu)的前提下,永久性記錄用戶雙方發(fā)生的一切交易、操作、合同等權(quán)威性文件、信息。而傳統(tǒng)的公證技術(shù)往往依賴第三方權(quán)威機構(gòu)的參與,其中第三方機構(gòu)公信力決定了公正文件的可信度。而基于區(qū)塊鏈智能合約的新一代合同、能夠擺脫對第三方機構(gòu)權(quán)威的依賴,在增強合約、信息可信度的同時,能夠減少實際公證過程的人力物力財力的消耗。以太坊提供給開發(fā)者和用戶一套能夠構(gòu)建去中心化應(yīng)用的完整技術(shù)平臺。比特幣提供了完整的端到端加密交易系統(tǒng),使用者能夠使用其完成完整的交易。以太坊相較于比特幣來說,除了提供傳統(tǒng)的類似于比特幣的交易記錄能力——以太幣外,同時能夠用于創(chuàng)建去中心化的程序、自治組織和智能合約。至今,以太坊已經(jīng)在金融、物聯(lián)網(wǎng)、智能電網(wǎng)、游戲開發(fā)、智能合同等多領(lǐng)域被廣泛應(yīng)用。智能合約是以太坊應(yīng)用平臺的核心,本質(zhì)上是以公開的形式隨著區(qū)塊鏈一同部署在應(yīng)用網(wǎng)絡(luò)之中的一段程序代碼。能夠根據(jù)設(shè)定的規(guī)則,完成決策、資料儲存以及以太幣的傳輸。智能合約提供驗證及執(zhí)行智能合約本身所設(shè)定的條件,對整個網(wǎng)絡(luò)的公開性與透明性,允許在沒有第三方的情況下完成可信交易,同時這些交易具有高度的匿名性。盡管智能合約設(shè)計本身目的在于減少可能存在的風險問題。但是,類似于以太坊的智能合約仍存在設(shè)計上的缺陷,攻擊者能夠利用設(shè)計漏洞,對其進行攻擊,導致大量經(jīng)濟損失。例如,以太坊中最大規(guī)模的一次攻擊致使整個區(qū)塊鏈進行了版本回退,降低了人們對智能合約不可逆性質(zhì)的信任。本文針對智能合約以及區(qū)塊鏈技術(shù)的攻擊進行分類與介紹,分析至今所進行的智能合約弱點檢測技術(shù),提供合約部署之前的安全檢查手段,同時提出了智能合約安全研究的未來可能方向。1問題與挑戰(zhàn)智能合約存在的安全隱患主要可以被分為四類:惡意軟件傳播、共識機制缺陷、智能合約漏洞和用戶欺詐行為。本節(jié)針對每類安全隱患展開了具體介紹。1.1惡意軟件傳播惡意軟件為攻擊者開發(fā),通過網(wǎng)絡(luò)傳播,在用戶端運行,目的是盜取用戶信息或者進行詐騙,其可以偽裝成正常的網(wǎng)頁頁面、郵件等形式,騙取用戶下載之后,干預用于在本終端上進行的交易行為。一種常見的形式是將用戶數(shù)據(jù)劫持到剛剛產(chǎn)生的硬分支上,要求用戶與該分支進行同步,這樣攻擊者就能夠在該分之上偽造交易記錄,騙取用戶的所有貨幣。另外攻擊者還常采取加密劫持、通信攻擊等技術(shù)誘導礦工處理錯誤分支,從而對自己偽造的數(shù)據(jù)進行區(qū)塊驗證。此外還有很多惡意軟件使用區(qū)塊鏈技術(shù)幫助自身的傳播,他們不對區(qū)塊鏈本身進行攻擊,而是使用區(qū)塊鏈的廣播特性,復制、傳播自己的拷貝。K-ary惡意軟件是一種利用區(qū)塊鏈技術(shù)的惡意軟件,通過將惡意程序的指令分成單獨的區(qū)塊,每個子程序僅包括一部分代碼,偽裝成正常的軟件,進而躲避現(xiàn)存的惡意軟件檢測技術(shù)。Glupteba利用了區(qū)塊鏈進行自身的復制和更新,能夠建立分散的將是網(wǎng)絡(luò)。這些惡意軟件還能夠竊取用戶的用戶名、密碼、Cookie等信息,從而造成更大的用戶數(shù)據(jù)泄露問題。1.2共識機制缺陷比特幣與以太坊最早使用的共識機制為工作量證明(ProofofWork,PoW),依賴散列值函數(shù)來確保數(shù)據(jù)的正確性,由分散在各地的計算機,通過計算找到對應(yīng)區(qū)塊的猜測值,獲取該區(qū)塊的打包權(quán),進而獲得區(qū)塊獎勵。攻擊者可以通過對該機制的攻擊獲得區(qū)塊鏈的完整控制權(quán),可以控制交易記錄的記錄,甚至完全控制該加密貨幣的價格。常見的攻擊手段包括51%攻擊、自私挖礦以及34%攻擊。PoW假定整個區(qū)塊鏈網(wǎng)絡(luò)中至少存在50%的誠信節(jié)點,如果單一節(jié)點控制超過51%的計算能力,就能控制整個區(qū)塊鏈網(wǎng)。女巫攻擊通過在網(wǎng)絡(luò)中創(chuàng)建大量的無效節(jié)點,消除冗余備份的作用,當攻擊者創(chuàng)造足夠多的虛假身份,其可以以多數(shù)票控制整個區(qū)塊網(wǎng)絡(luò),實現(xiàn)雙重花費攻擊。日蝕攻擊通過將區(qū)塊鏈網(wǎng)絡(luò)分割,進而在子網(wǎng)路中高于51%的計算能力,分別在兩個網(wǎng)絡(luò)中進行51%攻擊。此外,BGP劫持通過英特網(wǎng)路由本身的特性,攔截比特幣流量,通過干擾關(guān)鍵的比特幣消息,減緩廣播的傳播速度,進而攻擊比特幣網(wǎng)絡(luò)。1.3智能合約漏洞區(qū)塊鏈技術(shù)普遍采用智能合約作為區(qū)塊自動化運行的機制,不同的區(qū)塊鏈擁有自行設(shè)計的智能合約,盡管每個合約提出時都不同程度的強調(diào)了自身的完備性、隱私性與安全性。其中由于合約設(shè)計的問題,常??梢酝ㄟ^對合約本身的分析進而發(fā)現(xiàn)該區(qū)塊鏈的漏洞。智能合約應(yīng)用類似于運行在區(qū)塊鏈上的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)應(yīng)用一樣,如果沒有正確處理錯誤或者完全沒有處理意外的錯誤,會導致整個網(wǎng)絡(luò)受到巨大的影響。例如,TheDAO攻擊利用了Solidity中的扣除與轉(zhuǎn)帳的順序錯誤,多次調(diào)用了轉(zhuǎn)帳函數(shù),而扣除函數(shù)始終沒有調(diào)用,導致?lián)p失了六千萬美元,以太坊應(yīng)用均因代碼設(shè)計缺陷遭受了基于智能合約漏洞的攻擊。1.4用戶欺詐行為比特幣要求至少交易在6個區(qū)塊之后才能完全被確認,但是面對快速支付,如果不能在短時間內(nèi)對交易進行確認,則交易者可以利用這一漏洞,欺騙賣家先支付貨物,同時短時間內(nèi)再次執(zhí)行相同金額的操作。對于礦工來說,只會打包其中的一條記錄,這樣,對于賣家來說在交易最終確認之前就已經(jīng)支付了雙份的貨物,但是最終只能收到第二條交易的交易費用。2研究現(xiàn)狀分析2.1常見攻擊手段本節(jié)我們對可能存在的智能合約攻擊技術(shù)進行了介紹,這些可能存在的攻擊手段會使智能合約仍然正常運行,導致錯誤檢測變得尤為困難,因此這些攻擊手段會對區(qū)塊鏈造成嚴重的損害。2.1.1重入攻擊以太坊智能合約設(shè)計時,提供了調(diào)用外部其他合約的能力。合約通常也是處理以太幣,因此會將這一部分以太幣通過外部的合約處理,以太幣發(fā)送給外部用戶地址,調(diào)用外部合約。這些外部調(diào)用可能被攻擊者劫持,迫使合約進一步執(zhí)行代碼,通過回調(diào)函數(shù)再次調(diào)用回調(diào)函數(shù)本身。這一過程實現(xiàn)了重新進入合約,在余額檢查之前重復執(zhí)行回調(diào)函數(shù)。攻擊者可以發(fā)起單次重入和多次重入攻擊,通過攻擊者設(shè)定的特殊函數(shù)完成目標任務(wù)。以太坊中著名的TheDAO事件即通過重入攻擊實現(xiàn),最終導致六千萬美元的以太幣被盜,以太坊社區(qū)最終采取硬分支以太坊區(qū)塊鏈,所有的資金被恢復到攻擊進行之前。2.1.2算法上下溢出這一漏洞主要是以太坊虛擬機(EVM)為整數(shù)制定了固定大小的整數(shù)類型。當輸入數(shù)據(jù)超過范圍且沒有進行檢查時,就會導致溢出發(fā)生。攻擊者可以利用這一漏洞,允許攻擊者濫用代碼并創(chuàng)建意外的邏輯流程,允許攻擊者無視原本的邏輯判斷,獲得用戶的以太幣、Token等私密信息。2.1.3默認可見性Solidity中的函數(shù)具有可見性說明符,決定了一個函數(shù)是否能夠由用戶或其他的派生智能合約在外部調(diào)用、只允許內(nèi)部調(diào)用或只允許外部調(diào)用。默認的函數(shù)可見默認為puliic,如果沒有正確的隱藏有關(guān)合約余額更改的函數(shù),則攻擊者可以直接調(diào)用該函數(shù)竊取合約中的貨幣。由于沒有對初始化函數(shù)制定可見性,導致攻擊者能夠在部署的合約上調(diào)用這些初始化函數(shù),并將所有權(quán)重置為攻擊者,這樣攻擊者就可以盜取錢包中的所有以太幣。在ParityMultiSigWallet受到的一次攻擊中,價值約3100萬美元的以太幣被盜。2.1.4短地址攻擊短地址攻擊遠離同樣是因為以太坊虛擬機(EVM)的設(shè)計問題。ERC20標準中,transfer函數(shù)對于短地址會從轉(zhuǎn)帳金額中取高位的0來補充,轉(zhuǎn)帳金額同時會在地位補上移走的0,等效于轉(zhuǎn)帳金額左移翻倍。攻擊者可以通過不填寫轉(zhuǎn)帳地址末尾的0完成短地址攻擊,這是一種由于未檢驗用戶輸入導致的合約漏洞。2.1.5時間戳修改區(qū)塊鏈中,時間戳存在著很多的用途,包括生成隨機數(shù)、鎖定一段時間的資金,以及各種給予時間變更的條件語句,如果區(qū)塊鏈中的礦工能夠調(diào)整時間戳,可以發(fā)起對交易者不平等的攻擊。一方面,礦工可以通過調(diào)整時間戳,產(chǎn)生特定需求的隨機數(shù),另外,礦工可以依靠時間的控制,在某些以太坊程序操縱獲勝機制,進而損害其他玩家利益。在GovernMental中,合約會在一輪內(nèi)支付給最后一個加入的玩家,這里限制玩家至少需要加入一分鐘,如果礦工能夠調(diào)整時間戳,顯示玩家已經(jīng)加入了一分鐘,則礦工可以限制快速滿足游戲要求。2.2防御手段及其局限性大部分以太坊智能合約出現(xiàn)問題的本質(zhì)是智能合約本身的編寫存在嚴重漏洞,其中包括不正確的邏輯關(guān)系、未驗證的輸入行為以及很多未處理的錯誤類型。這些都會導致智能合約在運行過程中,被攻擊者利用,進而影響智能合約的正常運行。本節(jié)介紹了多種智能合約審計手段,并對其適用點以及不足進行了分析。2.2.1SlitherSlither是一種用于智能合約的靜態(tài)分析框架,用于提供有關(guān)以太坊智能合約的有關(guān)信息。通過將Solidity智能合約轉(zhuǎn)換成一種稱為SlithIR的中間表示來工作,Slither能夠獲得智能合約的繼承圖、控制流圖,通過預定義的分析列表來對SlithIR進行漏洞分析。能夠自動的進行程序分析、數(shù)據(jù)流和污點追蹤,主要可以應(yīng)用于自動漏洞檢測、自動優(yōu)化檢測、輔助用戶理解智能合約以及協(xié)助代碼審查。但是Slither缺乏形式語義,限制了執(zhí)行更詳細的安全分析,不能準確的確定類似gas計算等低級信息。此外如果安全代碼不能夠吻合外部調(diào)用時,掃描進程會被終止。2.2.2MythriMythri是一種開源工具,利用符號執(zhí)行技術(shù)來確定智能合約中可能存在的錯誤。其安全分析方法為檢查在以太坊虛擬機中執(zhí)行的字節(jié)碼。當發(fā)現(xiàn)程序中的缺陷時,通過輸入的記錄分析確定可能存在的原因。能夠幫助推斷存在的漏洞并幫助減少利用漏洞的可能。盡管Mythri是一種啟發(fā)式檢測技術(shù),在安全性分析中具有很高的準確度,但是其仍具有一定的局限性。在執(zhí)行污點分析的時候,不能夠跨越內(nèi)存區(qū)域的限制,如果參數(shù)調(diào)用方式為引用式,這種限制會更加嚴重。2.2.3OyenteOyente是一種符號執(zhí)行工具,能夠直接與以太坊虛擬機一起使用,而無需訪問高級語言形式。其不僅可以檢測不安全的錯誤,同時能夠分析每條代碼的實際執(zhí)行路徑。Oyente對19,366個智能合約進行分析,發(fā)現(xiàn)其中8,833個智能合約均存在漏洞問題。Oyente只能夠檢測20.2%的ParityWallet攻擊,無法有效的記錄TOD漏洞,僅能夠防御諸如重入攻擊和時間戳控制的漏洞。2.2.4ManticoreManticore是一種Solidity審計手段,能夠?qū)χ悄芎霞s進行符號分析,自動產(chǎn)生用于漏洞分析的特定輸入、記錄指令級實現(xiàn)過程,并通過PythonAPI提供對其分析引擎的訪問,對二進制文件和以太坊智能合約進行分析,用戶通過API自定義分析內(nèi)容。Manticore能防御重入攻擊和TX.origin濫用,但是不能檢測時間戳控制問題。它需要針對每一種漏洞生成對應(yīng)的攻擊分析,因此它的運行速度較慢。2.2.5SecruifySecruify是一種智能合約安全分析工具。能夠自動化的分析證明給定智能合約是否是安全的。Secruity主要包括兩個步驟,首先分析智能合約的依賴關(guān)系圖,從中分析精確的語義信息,然后檢查特定的用于計算資產(chǎn)擁有者的代碼模式,據(jù)此給出智能合約的安全性分析結(jié)果。與Oyente和Mythril對比來說,Securify利用靜態(tài)分析來分析智能合約的每條路徑。Secruify不包含數(shù)值分析,無法識別智能合約中可能存在的溢出問題。2.2.6SmartCheckSmartCheck是一種能夠檢測Solidity代碼中漏洞的一種可拓展靜態(tài)分析工具。其通過將源代碼轉(zhuǎn)換成基于XML的中間表示形式,并根據(jù)XPath模式,分析元素之間的關(guān)聯(lián)關(guān)系,進而分析程序漏洞。除了能夠檢測可能存在的漏洞,SmartCheck同時能解釋漏洞造成的原因并給出修改建議。SmartCheck無法檢測到一些只能由污點分析或者手動分析處理的嚴重程序錯誤,能夠識別智能合約中低風險的問題包括錯誤編譯器版本、不正確的樣式、冗余代碼等問題。同時,也有分析指出SmartCheck無法分析重入攻擊和自殺合同等問題。3未來研究方向智能合約中存在的主要問題來源均為Solidity程序語言以及智能合約開發(fā)者未能考慮到所有的漏洞情況。早期Solidity存在著很多的安全問題,包括未經(jīng)檢查的函數(shù)回調(diào)、溢出未檢查以及時間戳修改設(shè)計等問題。實際在智能合約的設(shè)計過程中,需要設(shè)計者充分考慮可能存在于合約代碼中的執(zhí)行漏洞,對錯誤進行完善的錯誤處理,并對合約本身執(zhí)行相關(guān)的漏洞分析處理。但根本上應(yīng)該是Solidity自身進行一定的迭代,從底層對可能發(fā)生的錯誤進行處理,而不應(yīng)該將這些錯誤直接暴露給合約設(shè)計者。同時,應(yīng)該有更多針對新漏洞的分析軟件,通過靜態(tài)、動態(tài)代碼分析,捕獲出現(xiàn)的風險問題,及時給予合約開發(fā)者調(diào)整修改的建議。另外可以考慮一種事實的合約保護處理方式,對常見的、危害大的漏洞增加新一層接口,使用這層接口首先對輸入輸出數(shù)據(jù)進行過濾,之后再輸入給底層的智能合約進行合約的處理工作。這樣可以實現(xiàn)動態(tài)過濾同時能夠在不更改底層合約的情況下,完成對用戶的保護,還可以根據(jù)新風險的出現(xiàn)實時調(diào)整過濾手段。既然智能合約擁有傳統(tǒng)合約所不具有的優(yōu)點,也應(yīng)對智能合約應(yīng)用前景進行研究,提早對可能存在的應(yīng)用場景進行分析,就可以在實際部署之前,對該應(yīng)用角度進行安

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論