沈傳年
(國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心上海分中心 上海 201315)
智能合約由Szabo[1]于1994年首次提出,由于當(dāng)時(shí)缺乏可信執(zhí)行環(huán)境等技術(shù)發(fā)展的限制,智能合約一直沒(méi)有被很好地應(yīng)用和發(fā)展,直到以以太坊[2]為代表的區(qū)塊鏈[3]2.0時(shí)代通過(guò)引入可編程性[4]的智能合約,將區(qū)塊鏈的應(yīng)用范圍從單一數(shù)字貨幣領(lǐng)域擴(kuò)展至涉及合約功能的其他泛金融領(lǐng)域.在以太坊中,智能合約由參與交易的且互不信任的各方用戶共同協(xié)商制定,交易各方的權(quán)利及義務(wù)在合約中會(huì)被明確規(guī)定且對(duì)其進(jìn)行編程,合約條款的響應(yīng)規(guī)則和觸發(fā)條件通過(guò)代碼實(shí)現(xiàn),交易各方在簽署私鑰后將合約隨同交易一并提交,并經(jīng)P2P網(wǎng)絡(luò)在全鏈進(jìn)行傳播,區(qū)塊鏈全網(wǎng)節(jié)點(diǎn)收到合約并驗(yàn)證通過(guò)后將合約進(jìn)行存儲(chǔ),智能合約會(huì)定期檢查每個(gè)合約的狀態(tài),并將滿足條件的事件進(jìn)行排隊(duì)等待共識(shí)驗(yàn)證.當(dāng)大多數(shù)節(jié)點(diǎn)的驗(yàn)證達(dá)成共識(shí)后,智能合約將自動(dòng)執(zhí)行并將執(zhí)行結(jié)果進(jìn)行保存.
隨著智能合約在區(qū)塊鏈中的應(yīng)用不斷發(fā)展,其面臨的安全問(wèn)題也正日益突出:一是智能合約通常由于掌管著區(qū)塊鏈平臺(tái)上巨額的數(shù)字資產(chǎn),極易成為攻擊者的重要攻擊目標(biāo);二是智能合約的開(kāi)發(fā)人員由于無(wú)法預(yù)見(jiàn)合約可能面臨的特殊環(huán)境狀態(tài),導(dǎo)致編寫(xiě)的合約存在潛在的安全漏洞[5];三是使用Solidity語(yǔ)言編寫(xiě)的智能合約更難以測(cè)試其安全性;四是區(qū)塊鏈的不可篡改、不可逆等特性,使得智能合約一旦遭到攻擊,無(wú)法中斷或終止合約的執(zhí)行.近年來(lái),一系列智能合約應(yīng)用領(lǐng)域的安全漏洞事件頻發(fā),區(qū)塊鏈發(fā)展史上智能合約安全漏洞事件如表1所示,可以看出安全問(wèn)題已成為制約智能合約和區(qū)塊鏈發(fā)展的重要因素,因此,加強(qiáng)對(duì)智能合約安全漏洞的研究已成為業(yè)界當(dāng)前關(guān)注的重點(diǎn).
表1 智能合約安全漏洞事件
與傳統(tǒng)合約相比,智能合約一方面具有合約內(nèi)容公開(kāi)透明、不可偽造,合約執(zhí)行經(jīng)濟(jì)、高效等優(yōu)點(diǎn),另一方面,由于智能合約編程語(yǔ)言本身的特點(diǎn)以及其運(yùn)行過(guò)程無(wú)法更改等特性,導(dǎo)致智能合約面臨的安全問(wèn)題日趨嚴(yán)重,因智能合約安全漏洞所引發(fā)的資產(chǎn)損失已躍居區(qū)塊鏈所有安全問(wèn)題損失之首.本文通過(guò)分析過(guò)往智能合約安全漏洞事件,詳細(xì)介紹以下11種較為常見(jiàn)的智能合約安全漏洞問(wèn)題,相關(guān)分析如表2所示.
表2 智能合約安全漏洞問(wèn)題分析
整數(shù)溢出漏洞主要是由編寫(xiě)智能合約的Solidity語(yǔ)言的整數(shù)類(lèi)型所導(dǎo)致,同其他編程語(yǔ)言一樣,Solidity語(yǔ)言對(duì)不同類(lèi)型的整數(shù)定義了不同長(zhǎng)度的存儲(chǔ)空間,從uint8類(lèi)型到uint256類(lèi)型,其整數(shù)型變量均存在一定的表示范圍,如果所存儲(chǔ)的數(shù)值超出了整數(shù)變量類(lèi)型可以表示的最大值或最小值,將會(huì)出現(xiàn)溢出現(xiàn)象.整數(shù)溢出通常包括上溢和下溢2種情況,上溢是指數(shù)值的增加超出可以存儲(chǔ)的最大值,下溢是指數(shù)值的減小超出可以存儲(chǔ)的最小值,無(wú)論是上溢還是下溢都會(huì)使其相應(yīng)的判斷機(jī)制出現(xiàn)異常,從而導(dǎo)致智能合約可能出現(xiàn)安全威脅.
拒絕服務(wù)漏洞是指攻擊者通過(guò)破壞智能合約中代碼的執(zhí)行邏輯,使得調(diào)用合約所需要的以太幣和gas等資源被不斷消耗,從而使得智能合約在短時(shí)間內(nèi)無(wú)法被用戶使用,甚至某些情況下永久性地?zé)o法被用戶使用,這就意味著智能合約中的以太幣將會(huì)永遠(yuǎn)無(wú)法被用戶提取出來(lái).針對(duì)拒絕服務(wù)漏洞的攻擊方式主要有3種[7]:一是通過(guò)(unexpected)Revert發(fā)動(dòng)的攻擊,當(dāng)智能合約的狀態(tài)由外部函數(shù)執(zhí)行結(jié)果來(lái)決定,且該執(zhí)行一直失敗時(shí),如果未對(duì)該執(zhí)行失敗的情況進(jìn)行處置,將可能面臨拒絕服務(wù)漏洞攻擊;二是通過(guò)gas限制發(fā)動(dòng)攻擊,以太坊中區(qū)塊能消耗的gas都設(shè)定了上限,如果攻擊者惡意操控gas消耗至上限,將會(huì)導(dǎo)致合約交易失敗;三是通過(guò)owner賬戶發(fā)動(dòng)攻擊,很多合約都擁有能夠開(kāi)啟和暫停交易權(quán)限的owner賬戶,如果owner賬戶被攻擊者所操控,將可能導(dǎo)致合約交易被永久凍結(jié).
以太坊智能合約在執(zhí)行過(guò)程中通常都需要調(diào)用外部合約,因此能否返回被調(diào)用合約的異常狀態(tài)直接影響智能合約的正常執(zhí)行.如果智能合約執(zhí)行過(guò)程中遇到gas耗盡、調(diào)用棧溢出等情況,被調(diào)用合約正常情況下會(huì)終止合約的執(zhí)行并且返回false,由于Solidity語(yǔ)言對(duì)send(),delegatecall(),call()等低級(jí)別函數(shù)調(diào)用異常時(shí),只能返回false,并不會(huì)拋出異常[8].因此,如果對(duì)函數(shù)的返回值未進(jìn)行檢查,即便被調(diào)用合約執(zhí)行異常,交易也將繼續(xù)執(zhí)行,最終影響智能合約的順利執(zhí)行.
智能合約的權(quán)限控制漏洞主要是由于智能合約編寫(xiě)者未能明確合約中函數(shù)的可訪問(wèn)性,或者未能對(duì)函數(shù)的訪問(wèn)權(quán)限進(jìn)行仔細(xì)檢查,從而導(dǎo)致攻擊者能夠訪問(wèn)原本不該被訪問(wèn)的函數(shù)或變量.Solidity語(yǔ)言對(duì)函數(shù)和狀態(tài)變量的可見(jiàn)性設(shè)置了4種說(shuō)明符,分別為external,internal,public,private,如果合約在編寫(xiě)時(shí)沒(méi)有聲明其可訪問(wèn)性,則函數(shù)的訪問(wèn)權(quán)限默認(rèn)為public,即函數(shù)既可以被合約內(nèi)部調(diào)用,也可以被外部合約調(diào)用,因此,函數(shù)也極易被攻擊者惡意調(diào)用.此外,合約中的owner賬戶通常具有超級(jí)權(quán)限功能,如果其超級(jí)權(quán)限被攻擊者竊取,將會(huì)嚴(yán)重破壞智能合約的執(zhí)行邏輯.
智能合約一般通過(guò)函數(shù)調(diào)用或者向外部用戶賬戶發(fā)送以太幣執(zhí)行對(duì)外部合約的調(diào)用,如果這些外部調(diào)用操作不當(dāng),則可能被攻擊者所利用,通過(guò)回調(diào)合約自身或者回退函數(shù)達(dá)到攻擊者所希望的目的.例如,智能合約在跨合約交易轉(zhuǎn)賬時(shí),通常在轉(zhuǎn)賬后會(huì)更新接收方的賬戶余額,若接收方在接收轉(zhuǎn)賬的同時(shí)不斷回調(diào)轉(zhuǎn)賬函數(shù),可能會(huì)導(dǎo)致接收方的賬戶余額在保持不變的同時(shí),不斷獲得轉(zhuǎn)賬發(fā)起方的資產(chǎn),直到轉(zhuǎn)賬發(fā)起方的賬戶余額不足,這就是重入攻擊漏洞[9].其代表案例就是2016年6月發(fā)生的The DAO攻擊,該攻擊直接使得以太坊出現(xiàn)了硬分叉[10].
代碼注入漏洞主要是由以太坊智能合約中的委托調(diào)用機(jī)制導(dǎo)致,委托調(diào)用機(jī)制所使用的delegatecall()能夠在自己合約的上下文環(huán)境中從其他地址動(dòng)態(tài)加載代碼,以實(shí)現(xiàn)對(duì)其他合約中代碼的復(fù)用,如果智能合約被攻擊者注入一段可以修改合約中重要狀態(tài)變量或者竊取賬戶資產(chǎn)功能的惡意代碼并執(zhí)行,將會(huì)引發(fā)一系列安全問(wèn)題.2017年7月,多重簽名錢(qián)包服務(wù)商Parity出現(xiàn)重大安全漏洞,攻擊者通過(guò)delegatecall()調(diào)用公開(kāi)函數(shù)initWallet(),然后通過(guò)重新初始化錢(qián)包覆蓋之前錢(qián)包的所有者,從而使自己成為錢(qián)包的所有者.
短地址攻擊漏洞[11]通常出現(xiàn)在ERC-20(代幣標(biāo)準(zhǔn)協(xié)定)的代幣合約中.當(dāng)智能合約在調(diào)用transfer()進(jìn)行轉(zhuǎn)賬時(shí),若攻擊者故意選擇以0結(jié)尾的地址,并在傳入地址參數(shù)時(shí)省略結(jié)尾的0,以太坊虛擬機(jī)(Ethereum virtual machine, EVM)在解析應(yīng)用二進(jìn)制接口(application binary interface, ABI)字符時(shí)會(huì)發(fā)現(xiàn)傳入的地址長(zhǎng)度未達(dá)到所要求的20B,EVM為了補(bǔ)齊地址長(zhǎng)度,會(huì)借用表示轉(zhuǎn)賬金額的數(shù)據(jù)段的0補(bǔ)齊地址段的0,此時(shí),數(shù)據(jù)段的長(zhǎng)度也會(huì)相應(yīng)變短,EVM同樣會(huì)在數(shù)據(jù)段末尾對(duì)缺失的字節(jié)位用0補(bǔ)齊,從而導(dǎo)致代幣金額暴增,攻擊者通過(guò)該漏洞實(shí)施攻擊能夠極易竊取巨額賬戶資產(chǎn).
智能合約在對(duì)外部合約每進(jìn)行1次調(diào)用時(shí),EVM的調(diào)用棧深度都將增加1次,而在EVM中,調(diào)用棧有確定的最大深度即1024.若攻擊者惡意重復(fù)調(diào)用合約1023次之后,再通過(guò)發(fā)起交易觸發(fā)調(diào)用被攻擊目標(biāo)的智能合約,使其因超出調(diào)用棧最大深度而溢出,從而導(dǎo)致合約執(zhí)行異常,假如被攻擊目標(biāo)的智能合約無(wú)法進(jìn)行異常處理,攻擊者將會(huì)通過(guò)調(diào)用棧溢出漏洞達(dá)成攻擊目的.
智能合約通常使用區(qū)塊的時(shí)間戳作為執(zhí)行合約,諸如發(fā)送以太幣等關(guān)鍵操作的觸發(fā)條件,不同的時(shí)間戳所產(chǎn)生的智能合約執(zhí)行結(jié)果一般也不相同.區(qū)塊鏈節(jié)點(diǎn)在處理新區(qū)塊時(shí),通常會(huì)為新區(qū)塊設(shè)置1個(gè)時(shí)間戳,在以太坊中,新區(qū)塊的時(shí)間戳只有當(dāng)大于上一區(qū)塊的時(shí)間戳且其變化范圍小于900s才是合規(guī)的,攻擊者可以通過(guò)惡意設(shè)置時(shí)間戳使得智能合約的執(zhí)行結(jié)果對(duì)自己有利,這就是時(shí)間戳依賴(lài)漏洞[12].
根據(jù)區(qū)塊鏈的共識(shí)機(jī)制[13],在以太坊中必須全網(wǎng)所有節(jié)點(diǎn)對(duì)交易驗(yàn)證一致才能達(dá)成共識(shí),因此以太坊智能合約中并不能直接生成隨機(jī)數(shù),合約開(kāi)發(fā)人員一般通過(guò)block.number,block.timestamp,block.gaslimit,block.blockhash等區(qū)塊變量作為生成隨機(jī)數(shù)的隨機(jī)種子.由于區(qū)塊鏈數(shù)據(jù)的公開(kāi)透明性,生成隨機(jī)數(shù)所依賴(lài)的區(qū)塊變量很容易被礦工獲取,礦工通過(guò)操控這些區(qū)塊變量能夠使得所生成的隨機(jī)數(shù)變得可預(yù)測(cè),這在一定程度上增加了智能合約的安全風(fēng)險(xiǎn).
在區(qū)塊鏈中,1個(gè)區(qū)塊通常包含多個(gè)交易,區(qū)塊中交易的打包順序與最終執(zhí)行順序可能并不相關(guān),如果區(qū)塊中的2個(gè)不同交易調(diào)用了同一個(gè)智能合約,交易用戶在執(zhí)行各自的合約調(diào)用時(shí)并不清楚合約當(dāng)前處于什么狀態(tài),交易用戶想要調(diào)用的合約狀態(tài)與合約執(zhí)行時(shí)的實(shí)際狀態(tài)之間可能存在差別,而合約的最終執(zhí)行狀態(tài)取決于礦工所選擇的交易順序,這就是交易順序依賴(lài).如果攻擊者通過(guò)懸賞合約或者減少合約回報(bào)等方式惡意擾亂交易順序,將會(huì)改變當(dāng)前合約的執(zhí)行狀態(tài),造成嚴(yán)重的安全漏洞[14].
由于區(qū)塊鏈具有不可篡改性,智能合約一旦被部署上鏈,即使發(fā)現(xiàn)有代碼漏洞其執(zhí)行操作也無(wú)法更改,因此需要在智能合約正式部署之前對(duì)其可能存在的安全漏洞進(jìn)行檢測(cè).傳統(tǒng)的漏洞檢測(cè)方法主要依靠檢測(cè)人員的知識(shí)經(jīng)驗(yàn)和主觀判斷,其不僅效率低、漏檢率高,而且適用范圍也有限,因此本文將重點(diǎn)介紹以下4種針對(duì)智能合約的漏洞檢測(cè)方法,包括形式化驗(yàn)證、符號(hào)執(zhí)行、模糊測(cè)試、污點(diǎn)分析.
形式化驗(yàn)證[15]方法通過(guò)基于語(yǔ)義、判斷、推理等邏輯語(yǔ)言對(duì)智能合約中的文檔內(nèi)容和程序代碼進(jìn)行形式化建模,再通過(guò)嚴(yán)謹(jǐn)?shù)臄?shù)學(xué)推理邏輯和證明檢測(cè)智能合約函數(shù)功能的正確性及合約執(zhí)行的安全性[16].ZEUS[17]作為一款基于形式化驗(yàn)證方法的漏洞檢測(cè)工具,能夠?qū)olidity語(yǔ)言翻譯為L(zhǎng)LVM(low level virtual machine)中間語(yǔ)言,再通過(guò)形式化驗(yàn)證其安全性,其支持包括重入攻擊漏洞、整數(shù)溢出漏洞在內(nèi)的多種合約漏洞的檢測(cè);Securify[18]工具首先將智能合約的程序代碼編譯為字節(jié)碼,從字節(jié)碼中推理出精準(zhǔn)的語(yǔ)義事實(shí),并用Datalog語(yǔ)法對(duì)語(yǔ)義事實(shí)進(jìn)行描述,然后通過(guò)將語(yǔ)義事實(shí)與服從和違反2種模式進(jìn)行匹配來(lái)檢測(cè)智能合約的安全性;VaaS[19]是首個(gè)基于形式化驗(yàn)證且同時(shí)支持多平臺(tái)的漏洞檢測(cè)工具,其能夠精確定位出風(fēng)險(xiǎn)的代碼位置,有效檢測(cè)出智能合約的常見(jiàn)安全漏洞.
符號(hào)執(zhí)行的主要思想是將程序的輸入變量值表示為符號(hào)值,然后逐步分析程序在不同符號(hào)值輸入情況下的執(zhí)行路徑,以發(fā)現(xiàn)相應(yīng)的漏洞問(wèn)題.符號(hào)執(zhí)行包括靜態(tài)分析和動(dòng)態(tài)分析,靜態(tài)分析不需要執(zhí)行程序.Oyente[20]是最早用于以太坊智能合約漏洞檢測(cè)的工具之一,其以EVM字節(jié)碼和以太坊全局狀態(tài)作為輸入,探索合約的不同執(zhí)行路徑,由于只支持針對(duì)單個(gè)交易觸發(fā)的漏洞檢測(cè),因此其檢測(cè)功能并不完善;Manticore[21]是一款基于動(dòng)態(tài)符號(hào)執(zhí)行的漏洞檢測(cè)工具,不僅支持多合約分析,還支持對(duì)其他二進(jìn)制程序的分析;Mythril[22]作為一款基于符號(hào)執(zhí)行的靜態(tài)分析工具,通過(guò)對(duì)EVM字節(jié)碼的分析支持包括重入攻擊漏洞、整數(shù)溢出漏洞在內(nèi)的多種常見(jiàn)漏洞的檢測(cè);Maian[23]則是一款針對(duì)長(zhǎng)序列合約調(diào)用的漏洞檢測(cè)工具,其只支持少數(shù)類(lèi)型的合約漏洞檢測(cè).
模糊測(cè)試通過(guò)在目標(biāo)應(yīng)用程序中構(gòu)造大量正常和非正常的非預(yù)期測(cè)試用例,并監(jiān)視目標(biāo)應(yīng)用程序在執(zhí)行過(guò)程中的異常情況來(lái)發(fā)現(xiàn)漏洞問(wèn)題,其中測(cè)試用例通過(guò)基于生成和基于變異2種方式進(jìn)行構(gòu)造.ContractFuzzer[24]是首個(gè)基于模糊測(cè)試對(duì)智能合約進(jìn)行漏洞檢測(cè)的工具,其使用智能合約ABI生成的隨機(jī)測(cè)試用例調(diào)用合約,然后通過(guò)監(jiān)聽(tīng)EVM獲得合約的執(zhí)行日志,并分析日志檢測(cè)當(dāng)前執(zhí)行的合約是否存在安全漏洞;Regurad[25]使用不斷迭代生成的隨機(jī)測(cè)試用例對(duì)合約進(jìn)行模糊測(cè)試,并通過(guò)跟蹤合約執(zhí)行過(guò)程識(shí)別重入攻擊漏洞.
污點(diǎn)分析通常把智能合約中不受信任的節(jié)點(diǎn)或者由程序外部輸入的數(shù)據(jù)標(biāo)記為污點(diǎn),然后在程序運(yùn)行過(guò)程中通過(guò)數(shù)據(jù)流或者控制流分析的方法持續(xù)監(jiān)控與污點(diǎn)數(shù)據(jù)相關(guān)的信息傳播路徑,進(jìn)而對(duì)其進(jìn)行漏洞檢測(cè),污點(diǎn)分析一般不會(huì)單獨(dú)用于漏洞檢測(cè),通常需要與其他技術(shù)結(jié)合使用.EasyFlow[26]是一款基于動(dòng)態(tài)污點(diǎn)分析檢測(cè)智能合約中是否存在溢出漏洞的工具,其不僅能夠?qū)⒅悄芎霞s劃分為安全合約和存在溢出漏洞的不安全合約,還能夠自動(dòng)生成交易以觸發(fā)潛在的溢出漏洞.
為了更加直觀地展現(xiàn)上述4種智能合約漏洞檢測(cè)方法及其所對(duì)應(yīng)的10種檢測(cè)工具的差異,本文將從每種檢測(cè)方法對(duì)應(yīng)的檢測(cè)工具所能夠檢測(cè)的漏洞類(lèi)型、存在的不足之處等方面對(duì)上述4種漏洞檢測(cè)方法及所對(duì)應(yīng)的10種檢測(cè)工具進(jìn)行簡(jiǎn)要比較,如表3所示:
表3 智能合約漏洞檢測(cè)方法及工具概覽
當(dāng)前,智能合約安全漏洞檢測(cè)技術(shù)已取得突破性的進(jìn)展和較好的成果,其中上述介紹的形式化驗(yàn)證、符號(hào)執(zhí)行、模糊測(cè)試、污點(diǎn)分析等仍為漏洞檢測(cè)的主要方法.因此,如何進(jìn)一步改進(jìn)和優(yōu)化漏洞檢測(cè)方法的不足將是未來(lái)研究的重要方向,未來(lái)漏洞檢測(cè)方法需要深入研究的方向包括以下4個(gè)方面:
1) 針對(duì)形式化驗(yàn)證,未來(lái)研究方向應(yīng)根據(jù)不同的漏洞目標(biāo)制定相對(duì)應(yīng)的驗(yàn)證規(guī)范,以滿足大多數(shù)合約及多種漏洞類(lèi)型的檢測(cè)需求,并不斷擴(kuò)展形式化驗(yàn)證的應(yīng)用范疇,逐步實(shí)現(xiàn)從檢測(cè)常見(jiàn)安全漏洞到復(fù)雜安全漏洞的進(jìn)階.
2) 針對(duì)符號(hào)執(zhí)行,需要重點(diǎn)解決路徑爆炸等問(wèn)題,一方面,可以通過(guò)諸如將深度優(yōu)先遍歷和寬度優(yōu)先遍歷算法相結(jié)合[27],提高符號(hào)執(zhí)行的路徑覆蓋率;另一方面,可以通過(guò)尋找智能合約中諸如call(),delegatecall()等容易產(chǎn)生漏洞的高危指令,并將與其相關(guān)的路徑定義為重點(diǎn)路徑,實(shí)際檢測(cè)中可以?xún)H關(guān)注重點(diǎn)路徑,以有效縮減路徑空間,提高執(zhí)行效率.
3) 針對(duì)模糊測(cè)試,需要重點(diǎn)考慮對(duì)現(xiàn)有測(cè)試用例的生成算法進(jìn)行改進(jìn)優(yōu)化,同時(shí)需要進(jìn)一步研究模糊測(cè)試與其他檢測(cè)方法的結(jié)合使用.例如模糊測(cè)試與符號(hào)執(zhí)行相結(jié)合的混合測(cè)試方法[28],可以在測(cè)試前判定適合模糊測(cè)試的路徑,從而制導(dǎo)模糊測(cè)試到達(dá)適合自己的代碼區(qū)域.
4) 智能合約的漏洞檢測(cè)當(dāng)前尚未形成標(biāo)準(zhǔn)的測(cè)試案例集,現(xiàn)有漏洞檢測(cè)工具所使用的案例集大多相互獨(dú)立,嚴(yán)重影響漏洞檢測(cè)工具的評(píng)價(jià)效果,為了有效驗(yàn)證漏洞檢測(cè)工具需要建立更加完善的智能合約漏洞庫(kù).同時(shí),綜合考慮漏洞檢測(cè)工具的檢測(cè)效率、檢測(cè)準(zhǔn)確率、檢測(cè)漏洞類(lèi)型及數(shù)量等指標(biāo)因素,需要建立一套統(tǒng)一的漏洞檢測(cè)工具評(píng)價(jià)標(biāo)準(zhǔn).
智能合約的引入極大地拓展了區(qū)塊鏈的應(yīng)用場(chǎng)景,但隨著智能合約在區(qū)塊鏈中應(yīng)用的不斷發(fā)展,其面臨的安全問(wèn)題也正受到廣泛關(guān)注.本文梳理了整數(shù)溢出漏洞、重入攻擊漏洞等11種智能合約安全漏洞問(wèn)題,并提出了相應(yīng)的防范策略,討論了形式化驗(yàn)證、符號(hào)執(zhí)行、模糊測(cè)試、污點(diǎn)分析4種漏洞檢測(cè)方法,并引入了各漏洞檢測(cè)方法對(duì)應(yīng)的檢測(cè)工具,通過(guò)對(duì)各漏洞檢測(cè)方法和工具的分析,給出了現(xiàn)階段漏洞檢測(cè)工作中存在的不足,在此基礎(chǔ)上對(duì)未來(lái)的研究方向進(jìn)行了展望.