張小松 牛偉納 黃世平 孫裕儼 賀哲遠



智能合約是區塊鏈三大特點之一,也是區塊鏈具有應用價值和靈活性的領域.本質上,智能合約是一段用特定腳本語言實現的代碼,不可避免地存在安全漏洞風險.如何及時準確地檢查出各種智能合約的漏洞,就成為區塊鏈安全研究的重點和熱點.為了檢測智能合約漏洞,研究者提出了各種分析方法,包括符號執行、形式化驗證和模糊測試等.隨著人工智能技術的快速發展,越來越多基于深度學習的方法被提出,并且在多個研究領域取得了很好的效果.目前,針對基于深度學習的智能合約漏洞檢測方法并沒有被詳細地調查和分析.本文首先簡要介紹了智能合約的概念以及智能合約漏洞相關的安全事件;然后對基于深度學習的方法中常用的智能合約特征進行分析;同時對智能合約漏洞檢測中常用的深度學習模型進行描述.此外,為了進一步推動基于深度學習的智能合約漏洞檢測方法的研究,本文將近年來基于深度學習的智能合約漏洞檢測方法根據其特征提取形式進行了總結分類,從文本處理、靜態分析和圖像處理3個角度進行了分析介紹;最后,總結了該領域面臨的挑戰和未來的研究方向.
區塊鏈; 以太坊; 智能合約; 漏洞檢測; 深度學習
TP311A2023.020001
收稿日期: 2022-12-09
基金項目: 國家自然科學基金聯合基金(U19A2066); 四川省自然科學基金(2022NSFSC0871); 深圳市杰出人才培養經費資助
通訊作者: 張小松.E-mail: johnsonzxs@uestc.edu.cn
A survey of smart contract vulnerability detection methods based on deep learning
ZHANG Xiao-Song1,2,3, NIU Wei-Na1, HUANG Shi-Ping1, SUN Yu-Yan1, HE Zhe-Yuan1
(1. School of Computer Science and Engineering, University of Electronic Science and Technology of China, Chengdu 611731, China; 2. Jiaozi Fintech Center, Chengdu 610095, China;? 3. Engineering Research Center of Blockchain Security and Platform Technology, Ministry of Education, Chengdu 611731, China)
Smart contract is one of the three major characteristics of blockchain and an area where blockchain has application value and flexibility. In essence, a smart contract is a piece of code implemented in a specific scripting language, which inevitably has the risk of security vulnerabilities. How to accurately and timely detect the vulnerabilities of various smart contracts has become the focus and hotspot of blockchain security research. To detect vulnerabilities in smart contracts, researchers have proposed various analysis methods, including symbolic execution, formal verification and fuzzing. With the rapid development of artificial intelligence technology, more and more deep learning-based methods have been proposed and have achieved good results in several research areas. Currently, deep learning-based smart contract vulnerability detection methods have not been investigated and analyzed in detail. This paper introduces the concept of smart contracts and security events related to smart contract vulnerabilities, then outlines commonly used smart contract features and describes the deep learning models commonly used in smart contract vulnerability detection. To promote the research of deep learning-based smart contract vulnerability detection methods, this paper summarizes and classifies recent deep learning-based smart contract vulnerability detection methods according to their feature extraction forms and analyzes them from three perspectives: text processing, static analysis, and image processing. Finally, the paper summarizes the challenges and future research directions in this field.
Blockchain; Ethereum; Smart contract; Vulnerability detection; Deep learning
1 引 言區塊鏈技術[1]最早可以追溯到2008年中本聰比特幣白皮書[2]的出版.緊接著2009年比特幣正式發行,使區塊鏈技術展現出廣闊的應用前景,吸引了學術界和業界的廣泛關注,拉開了區塊鏈1.0的序幕.隨著對區塊鏈技術的不斷深入研究,區塊鏈技術不再局限于單純的去中心化貨幣交易.智能合約在區塊鏈上的實現,加速了區塊鏈技術在加密貨幣之外其他領域的應用.而第一個支持開發智能合約的區塊鏈即以太坊[3]的發布,標志著區塊鏈2.0時代的開始.通過區塊鏈的去中心化共識機制,智能合約允許相互不信任的用戶在不需要任何第三方可信機構的情況下完成數據交換或交易,是區塊鏈最具有應用價值的領域.隨后出現了越來越多支持智能合約的區塊鏈平臺.截至目前,僅以太坊上就存在超過5000萬份智能合約,而以太坊本身的市值也超過1500億美元,是最廣泛使用的支持智能合約的區塊鏈平臺.作為在區塊鏈中運行的程序,控制著區塊鏈上大量資金的智能合約不可避免地存在由程序缺陷導致的安全漏洞[4,5].因此,如何準確及時地檢查出各種智能合約的漏洞,成為區塊鏈安全研究的重點和熱點.
為了確保智能合約的安全性,越來越多的研究人員開始研究智能合約的漏洞檢測技術,開發了各種工具來檢測和預防現有的智能合約漏洞[6].采用的技術主要有符號執行[7-10]、形式化驗證[11,12]和模糊測試[13,14].符號執行是應用最廣泛的方法.它是指在程序執行過程中將不確定的輸入轉化為符號值,通常結合約束求解器對程序執行路徑進行求解.符號執行可以實現更準確、更全面的程序分析,但由于程序分支和循環的影響,通常會面臨路徑爆炸等問題.形式化驗證主要是采用嚴格的可演繹的描述語言或邏輯來描述程序的屬性和特征,并使用數學邏輯證明和推理來構建形式化規范,以確定安全屬性設置是否符合預期.但是形式化驗證方法需要較強的邏輯推理能力,且自動化程度較低.模糊測試使用隨機生成的測試樣本作為智能合約的輸入,通過監控智能合約的執行過程判斷是否觸發程序漏洞或其他異常行為.模糊測試方法能夠有效檢測合約漏洞,但需要事先獲取智能合約的源碼和ABI接口信息.
近年來,基于深度學習的程序分析方法在安全檢測領域逐漸流行[15].深度學習方法自動化程度高,可以從大量的數據中提取出程序的隱藏特征,突破了基于規則的傳統漏洞檢測方法的局限.本文通過調研近幾年基于深度學習的智能合約漏洞檢測方法,總結深度學習在智能合約漏洞檢測領域的應用現狀,討論目前工作中存在的問題和挑戰,并針對不足之處探討未來的研究方向和思路.
2 智能合約
2.1 智能合約概述
智能合約的概念在1997年由Szabo首次提出[16].Szabo將智能合約定義為一套以數字形式定義的承諾,以及合約參與方可以在上面執行這些承諾的協議.直到2015年以太坊的出現,智能合約這一概念才得以付諸實踐.
Solidity[17]是專門用來編寫智能合約的圖靈完備的編程語言.以太坊智能合約主要通過Solidity編寫,由函數、事件和狀態變量等組成.編譯完成后,智能合約代碼被轉換為以太坊虛擬機EVM字節碼,然后通過合約創建交易部署在以太坊區塊鏈上.智能合約成功創建后,會有一個唯一的地址標識,生成一個智能合約賬戶.
以太坊智能合約賬戶由可執行代碼、合約地址、私有狀態變量和以太幣余額組成.一個包含目標智能合約地址和調用參數的交易可以實現對智能合約的調用.以太坊虛擬機(Ethereum Virtual Machine, EVM)是一個基于堆棧的虛擬機,提供了一個與網絡隔離的運行時環境來執行智能合約代碼.
以太坊的蓬勃發展讓更多人意識到智能合約的重要價值,因此出現了越來越多的支持智能合約運行的區塊鏈,基于智能合約實現的區塊鏈應用數量也井噴式增加[18].
2.2 智能合約應用
區塊鏈技術和智能合約催化了去中心化應用(Decentralized Application,DApp)市場的發展.DApp是可以自主運行的應用程序,通過使用智能合約,在區塊鏈系統上執行.與傳統應用程序一樣,DApp為用戶提供一些功能,前端可以由已有的技術構建.但是與傳統應用程序不同的是,由于后端基于區塊鏈系統實現,DApp無需人工干預即可執行,也不屬于任何一個組織或者實體,具有去中心化屬性.DApp無需信任和透明的性質推動了去中心化金融(Decentralized Finance, DeFi)的發展,越來越多的組織和開發者開始在區塊鏈上開發自己的DApp.根據Dune網站上的數據統計[19],區塊鏈上智能合約的數量逐年持續增長.如圖1所示,目前以太坊上部署的智能合約已經超過了5000萬份.CoinMarketCap的數據顯示,以智能合約為技術支持的DeFi市場的市值超過430億美元[20].這表明智能合約具有巨大的市場潛力.與此同時,在醫療保健[21,22]、供應鏈[23,24]和物聯網[25,26]等非金融領域也出現了大量基于區塊鏈的應用.
2.3 智能合約安全
近年來智能合約攻擊事件層出不窮.2016年6月,黑客利用去中心化自治組織(Decentralized Autonomous Organization)合約的重入漏洞竊取了價值約6000萬美元的以太幣[27].2017年7月,由于Parity Multi-Sig Wallet合約的delegatecall漏洞[28],近3億美元的以太幣被凍結.2018年4月,惡意攻擊者借助Beauty Chain合約的整數溢出漏洞[29],發布了無限數量的BEC令牌,使得BEC市值蒸發為零.2019年5月,Binance Exchange被黑客入侵,導致7000多個比特幣被盜[30].2022年10月7日,由加密貨幣交易所幣安孵化,全球最活躍的公鏈之一的BNB Chain被黑客攻擊,黑客利用跨鏈橋(可以幫助實現不同區塊鏈之間的資產流動)漏洞分兩次共獲取200萬枚BNB,價值約5.66億美元[31].如圖2所示,根據成都鏈安安全團隊歷年數據統計,區塊鏈上因安全事件導致的經濟損失呈逐年上升趨勢.相關分析表明,超過80%的安全事件都是由智能合約漏洞引起的[32].區塊鏈安全形勢愈發嚴峻.
3 深度學習概述
深度學習屬于人工智能領域,被廣泛應用于計算機視覺、語音識別和自然語言處理等領域.將深度學習應用于智能合約漏洞檢測已經成為一個趨勢.
典型的深度學習是一個包含多個隱藏層的神經網絡,每一層包含不同的神經元,每個神經元具有不同的權重和激活函數.深度學習最顯著的價值在于能夠自動提取和抽象數據的高階特征,避免了繁瑣的人工特征提取過程.
3.1 深度學習模型
通過總結智能合約漏洞檢測中使用的深度學習模型發現,目前的檢測模型主要有卷積神經網絡( Convolutional Neural Network,CNN)、循環神經網絡( Recurrent Neural Network, RNN)和圖卷積神經網絡( Graph Convolutional Network, GCN).
(1) 卷積神經網絡.卷積神經網絡是一種用于處理圖像數據等具有網格結構數據的神經網絡.其一般結構包括卷積層、池化層、全連接層和輸出層.與其他深度學習模型相比,卷積神經網絡在圖像和語音識別方面可以給出更好的結果.卷積神經網絡使用卷積核來共享參數,顯著減少了參數數量并使用了局部數據信息.
(2) 循環神經網絡.循環神經網絡是一種用于處理序列數據的神經網絡.循環神經網絡已成功應用于許多時間序列問題,例如自然語言處理、語音識別和機器翻譯.RNN對序列中的每個元素和之前計算的輸出執行相同的操作.因此,RNN由兩個輸入(當前狀態和前一個狀態)結合起來確定網絡的最終輸出.
(3) 圖卷積神經網絡.圖卷積神經網絡是一種用于圖結構數據的神經網絡.GCN廣泛應用于許多與圖結構數據相關的問題,如蛋白質結構預測、化合物穩定性預測和社交網絡分析等.GCN可以看作一種消息傳遞網絡,圖中每個節點根據自己的特征生成消息向量,消息通過邊傳遞給鄰居節點,然后每個節點通過聚合鄰居節點的消息更新自身的特征向量.
3.2 用于深度學習的智能合約特征
基于深度學習的智能合約漏洞檢測方法需要從智能合約中提取漏洞相關特征,智能合約特征的結構決定了深度學習模型可以從中學習到的漏洞相關信息.下面以圖3所示的智能合約代碼為例,分別介紹深度學習方法中常用的智能合約特征.
(1) 字節碼和操作碼.智能合約最終被編譯為字節碼才能被EVM執行,字節碼以十六進制表示.操作碼是人類可讀的字節碼表示,圖3所示智能合約對應的操作碼如圖4所示.
(2) 控制流圖.控制流圖(Control Flow Graph, CFG)是一種用于表示程序可以處理的所有可能的執行路徑的圖.一般使用智能合約的操作碼構建CFG.CFG中,每個節點代表一個基本塊,每個基本塊只有一個入口和一個出口,基本塊之間通過程序跳轉連接.圖3智能合約生成的控制流圖如圖5所示.
(3) 抽象語法樹.抽象語法樹(Abstract Syntax Tree, AST)是一種用于推理書面語言的數據結構.使用編譯器將源代碼轉換為數據結構樹,其中每個節點代表源代碼的一個句法元素,樹形圖顯示程序中每個元素的流向.在不破壞結構化信息的情況下,AST可以提供源代碼的詳細信息.圖3所示智能合約的抽象語法樹如圖6所示.
4 基于深度學習的智能合約漏洞檢測
如表1所示,根據其特征提取方法,將基于深度學習的智能合約漏洞檢測模型分為三類,分別是基于文本處理、基于靜態分析和基于圖像處理的漏洞檢測.
基于文本處理的方法將智能合約源代碼、字節碼和操作碼當作連續的文本序列,使用自然語言處理方法,提取智能合約漏洞的語義信息和特征.基于靜態分析的方法在使用靜態分析的基礎上,利用分析結果如AST、CFG等進一步提取智能合約的結構特征,豐富漏洞相關信息.基于圖像處理的方法,通過將智能合約字節碼或操作碼序列進行切片組合,構建灰度圖矩陣,然后應用圖像處理的方法提取特征并構建模型.
4.1 基于文本處理的漏洞檢測
文獻[33]使用序列學習的方法檢測智能合約漏洞.將操作碼序列中的操作碼轉換為one-hot向量表示,通過嵌入算法轉換為更低維度的向量,同時捕獲操作碼之間的序列關系,然后將得到的向量序列輸入到LSTM[34]模型中.在包含62萬份以太坊智能合約的數據集上對模型進行訓練,實驗結果表明,序列學習的方法優于基于符號執行的分析工具.訓練的模型準確率和F1分數分別為99.57%和86.04%.文獻[35]將預訓練方法與AWD-LSTM[36]模型相結合,提出了一種基于預訓練編碼器的智能合約漏洞檢測方法.該方法首先使用相同長度的輸入輸出向量訓練常規架構的AWD-LSTM模型,得到包含操作碼語義信息的預訓練編碼器,然后將常規架構中的解碼器替換成用于多分類的全連接層網絡,實現智能合約多漏洞檢測.
文獻[37]提出了一個智能合約漏洞檢測框架ESCORT.該框架分為兩個部分.第一個部分是一個通用的特征提取器,應用GRU[38]模型提取智能合約字節碼序列的特征;第二個部分是一個多分支結構,每一個分支針對一個漏洞類型進行檢測.該框架通過遷移學習快速支持新漏洞的檢測,當一個新的漏洞被識別時,構建一個該漏洞的數據集,然后在模型上增加一個新的分支,凍結通用特征提取器和其他分支的參數,利用構建的新數據集對新分支進行訓練,從而克服了傳統模型的可擴展性和泛化性限制.
文獻[39]提出了一種基于多任務學習的智能合約漏洞檢測模型,由共享層和特定任務層組成.該模型構建了基于注意力機制的共享層網絡,用于學習智能合約操作碼序列的關鍵特征.特定任務層分為檢測和識別兩部分,檢測任務用于檢測智能合約是否存在漏洞,使用CNN構建二元分類網絡;識別任務用于識別漏洞類別,使用CNN構建多標簽分類網絡.特定任務層接收共享層提取的特征作為輸入,然后針對自身的特定任務進行訓練.為了緩解智能合約數據集的類不平衡問題,采取了對有漏洞樣本進行過采樣、對無漏洞樣本進行欠采樣的方法.實驗表明,多任務學習可以在多個任務之間共享特征,提高執行速度.
CBGRU[40]是一種混合深度學習模型.混合模型結合了不同深度學習模型的優點,更有利于分類任務.CBGRU模型由嵌入層、特征提取層和分類層組成.嵌入層主要將字符級的智能合約源碼處理成符合神經網絡輸入的矩陣表示.該模型分別使用Word2Vec[41]和FastText[42]進行詞嵌入,作為特征提取層的兩個輸入分支.其中,Word2Vec的嵌入結果作為CNN模型的輸入;FastText的嵌入結果作為BiGRU模型的輸入.最后在分類層將兩個分支提取的特征通過連接層進行特征融合,使用Softmax層進行分類.該模型在包含47 587個真實且唯一的智能合約數據集SmartBugs Dataset-wild[43]上進行訓練.實驗結果表明,CBGRU模型在針對智能合約漏洞的檢測任務中具有更高的準確性,對重入漏洞、時間戳依賴漏洞和無限循環漏洞的檢測準確率分別為93.30%、93.02%和93.16%.
當智能合約代碼被重寫后,漏洞檢測將會變得困難.針對這一問題,文獻[44]擴展了自然語言處理的PV-DM[45]模型,實現智能合約代碼的向量化.提出了一個智能合約漏洞檢測靜態分析工具Eth2Vec.Eth2Vec由EVM提取器和PV-DM模型兩個模塊組成.EVM提取器對EVM字節碼進行語法分析,為每一個合約創建指令級、塊級、函數級和合約級的多級結構數據;PV-DM模型將該數據作為輸入,為每個智能合約生成對應的向量,然后通過計算與已知漏洞合約的向量相似性來識別測試合約中的漏洞.實驗表明,Eth2Vec的檢測能力高于基于SVM的方法,且對于代碼重寫具有很好的魯棒性.
SCVDIE[46]是一個基于信息圖和集成學習的智能合約漏洞檢測方法.該方法從收集的智能合約操作碼中計算操作碼共現頻率,構建操作碼共現矩陣.通過預定義規則識別智能合約的關鍵操作碼序列,基于共現關系構建信息圖來表示智能合約的漏洞模式信息.信息圖中節點由操作碼組成,操作碼之間根據共現頻率和出現順序進行連接.為了將節點轉換為向量矩陣表示,提取每個智能合約信息圖的所有路徑,構建操作碼序列集合,使用該集合訓練Word2Vec等嵌入模型.得到操作碼序列的向量表示后,將其輸入到集成學習模型中進行模型訓練.集成學習模型由兩部分組成.第一部分包括CNN、RNN、RCNN、DNN、GRU和BiGRU,用于提取操作碼序列的局部特征;第二部分是Transformer[47]模型,用于提取全局特征,最后基于權重值將兩種特征進行集成輸出智能合約漏洞的預測概率.實驗結果表明,該方法明顯優于靜態分析工具,且集成學習模型能夠有效地整合全局和局部知識,進而提高檢測精度.
上述智能合約漏洞檢測方法,將智能合約源碼以及字節碼、操作碼序列看作自然語言進行處理,可以很方便地將自然語言處理領域的模型遷移到智能合約漏洞檢測中,并且取得不錯的效果.但是編程語言與自然語言不同,編程語言是結構化的,信息之間具有明確的結構關系.例如函數調用、數據之間的依賴等.基于文本處理的方法僅僅關注代碼中的序列關系,忽略了最重要的結構信息,無法學習到代碼的結構特征.
4.2 基于靜態分析的漏洞檢測
文獻[48]中提出了一種結合靜態分析的智能合約漏洞檢測方法.由于智能合約的源碼大部分無法獲取,該方法收集智能合約的字節碼序列,并將其反編譯為EVM操作碼序列.然后利用靜態分析方法通過操作碼序列構建控制流圖CFG,在CFG上進行深度優先遍歷得到一個新的具有智能合約執行順序信息的操作碼序列.最后,應用N-gram和TFIDF模型將操作碼序列轉換為向量表示,將向量輸入到神經網絡中進行訓練和分類.
文獻[49]首次提出了基于圖神經網絡的智能合約漏洞檢測方法.該方法包括圖生成、圖歸一化和圖神經網絡訓練三個部分.在圖生成階段,將智能合約源碼轉換為智能合約圖,智能合約圖包含三類節點和四類邊.三類節點包括主節點、次級節點和回調函數節點.主節點表示合約自定義函數或內置函數.這些函數是與特定漏洞相關的.如針對重入漏洞,主節點表示call.value()函數以及調用call.value()的函數;次級節點表示主要節點函數調用中涉及到的關鍵變量;回調函數節點表示外部智能合約的回調函數.四類邊分別是控制流邊、數據流邊、順序執行邊和回調函數調用邊,用于表示不同節點間的執行和調用關系.在圖歸一化階段,為了降低計算復雜度,只保留智能合約圖中的主節點,然后將與主節點相關聯的次級節點和回調函數節點的特征融合到主節點特征中.圖神經網絡訓練階段,區別于傳統的消息傳播機制,提出了一種按照時間順序沿著邊更新傳遞信息的新型消息傳播機制TMP.TMP更加符合智能合約執行的順序特征.實驗表明,新型消息傳播機制比傳統消息傳播機制具有更好的檢測效果.
文獻[50,51]對文獻[49]的工作進行了擴展,提出了一個結合專家模式的自動漏洞檢測系統.該系統分別為重入、時間戳依賴和無限循環三種漏洞設計了相應的專家模式.它使用多層感知機將提取的專家模式編碼為特征向量,然后使用注意力編碼器網絡將專家模式特征和TMP圖神經網絡提取的圖特征進行融合.注意力編碼器使用注意力機制計算出智能合約圖特征和每個專家模式特征之間的權重,突出特征的重要性,使專家模式特征的融合具有可解釋性.實驗表明,融合專家模式的方法與最先進的技術相比有顯著的改進.
文獻[52]提出了一種雙注意力圖卷積神經網絡(DA-GCN)來檢測智能合約的漏洞.該模型利用智能合約的CFG提取特征,考慮到CFG的基本塊級別無法獲取某些細粒度的信息,進一步按照基本塊出現的順序構建操作碼序列.DA-GCN由圖卷積模塊、雙注意力模塊和分類模塊組成.圖卷積模塊將CFG作為輸入,提取CFG級別的特征;雙注意力模塊分別提取CFG級別和操作碼級別的注意力系數,賦予與漏洞最相關的部分更大的權重;最后在分類模塊中將圖卷積模塊和雙注意力模塊中提取的特征進行拼接,送入分類器中進行漏洞檢測.實驗表明,DA-GCN在重入和時間戳依賴兩種漏洞的檢測上具有很好的檢測性能.
文獻[53]提出了一種用于智能合約漏洞檢測的基于圖嵌入的字節碼匹配方法.該方法將與漏洞相關的數據分為四類.第一類是CALLDATALOAD、CALLER、CALLVALUE等指令調用的交易數據,第二類是BLOCKHASH、TIMESTAMP等指令調用的區塊數據,第三類是SLOAD指令調用的存儲數據,第四類是CALL等指令的調用返回值.該方法模擬執行操作碼構造控制流圖,同時跟蹤上述四類數據的數據流和控制流,結合REVERT、INVALID等異常終止指令,對操作碼序列進行切分,得到操作碼序列切片.由于Solidity編譯器版本的不同,相同的源代碼可以轉換為具有不同的DUP/SWAP指令的操作碼序列.為了減少這種差異,在切片中忽略了這些指令.根據上述的切分方法,得到每一個目標智能合約的切片和已知漏洞的切片.針對每一個切片,將每一個操作碼看作一個圖節點,利用圖嵌入方法Graph2Vec[54]將切片轉換成向量表示,然后計算候選切片與已知漏洞切片的余弦距離來測量切片間的相似性,值越高.說明候選切片有漏洞的可能性越大.
文獻[55]提出了一種基于關鍵數據流圖和預訓練模型的智能合約漏洞檢測框架Peculiar.該框架利用修改后的tree-sitter工具將智能合約源代碼解析為AST,在AST中識別變量序列,然后根據變量之間的數據流向關系構數據流圖DFG,從DFG提取與關鍵變量相關的數據節點構成的子圖即CDFG,最后將CDFG作為輸入對GraphCodeBert[56]模型進行預訓練,結合下游分類模型進行漏洞檢測.
文獻[57]開發了第一個系統的、模塊化的基于深度學習的智能合約漏洞檢測框架DeeSCVHunter.該框架包含了8個主流的深度學習模型和3個嵌入方案.該框架提出了漏洞候選切片(VCS)的概念,首先在智能合約源代碼中匹配與漏洞相關的候選語句(CS),如call.value()、block.timestamp等,然后根據控制流和數據流匹配與候選語句相關的語句構成漏洞候選切片,使用嵌入方案將其轉換為向量,作為深度學習模型的輸入進行訓練.
EtherGIS[58]是一種利用圖神經網絡和專家知識從智能合約控制流圖CFG中提取圖特征的漏洞檢測框架.EtherGIS結合專家知識,通過分析多種漏洞觸發機制,構建敏感EVM指令語料庫.根據語料庫確定CFG中節點的特征,同時根據控制流的觸發類型確定邊的特征,最終生成相應的屬性圖.使用GNN聚合整個圖的屬性和結構特征,作為分類模型的輸入進行漏洞檢測.此外,采用AutoML來自動化整個深度學習的優化過程.實驗結果表明,EtherGIS可以有效地檢測智能合約中的漏洞.
上述智能合約漏洞檢測方法將靜態分析與深度學習相結合,使用靜態分析方法提取智能合約代碼的結構信息,包括控制流圖CFG、抽象語法樹AST和數據流圖DFG等,通過深度學習方法特別是圖神經網絡將結構特征映射到向量空間,進一步提高了智能合約漏洞的檢測效果.
4.3 基于圖像處理的漏洞檢測
智能合約的一些漏洞只出現在一個函數中.基于這一發現,文獻[59]提出了切片矩陣的概念.將“RETURN”操作碼作為函數的分割點,對合約操作碼進行分割.然后提取每個片段的操作碼特征,并將其組合成一個切片矩陣,每個矩陣的大小為82*75.為了進行比較分析,創建了三個模型,分別是基于操作碼特征的神經網絡(Neural Network Based on Opcode Feature,NNBOOF)、基于切片矩陣的卷積神經網絡(Convolution Neural Network Based on Slice Matrix,CNNBOSM)和基于操作碼特征的隨機森林模型(Random Forest Based on Opcode Feature,RFBOOF).實驗表明,在RFBOOF的表現最好,但CNNBOSM的表現好于NNDOOF.
文獻[60]提出了一種基于卷積神經網絡的輕量級智能合約漏洞檢測模型SC-VDM.EVM中的操作碼是用兩位的十六進制數表示的,所以將兩位字節碼分成一組來分割字節碼序列.然后用字節碼組成一個矩陣,并將每一組字節碼轉換為十進制,使每一組數據都在0~255的范圍內,從而將矩陣轉換成一個灰度圖.得到灰度圖后,將其輸入到CNN模型中進行訓練.由于不同合約的大小不同,因此得到的灰度圖大小也是不一樣的,導致CNN模型中的全連接層會得到不同大小的特征圖.SC-VDM在全連接層前加入了一個SPP層將不同特征圖轉換為統一的大小.SC-VDM在檢測重入漏洞上表現最好,且檢測時間大大縮短,每個智能合約僅需0.021 s.
CodeNet[61]是一種新的CNN體系架構,在保持智能合約語義和上下文的同時對智能合約進行漏洞檢測.為了生成CNN體系架構的輸入,預處理階段將固定的字節碼序列轉換為RGB圖像,字節碼中每三個字節被映射成RGB像素.為了保留字節碼的語義和上下文信息,CodeNet將二維的RGB圖像修改成一維的形式.由于帶有步幅的卷積操作會丟失像素級的特征,即破壞智能合約的語義和上下文信息,CodeNet使用非步幅卷積操作,同時采用深度可分離卷積緩解非步幅卷積帶來的計算量和參數增加的問題.
上述智能合約漏洞檢測方法從圖像處理的角度將智能合約進行向量化,通過將智能合約轉化為二維圖像,使用圖像處理方法學習智能合約的圖像模式.然而進行圖像轉換的方式一般都比較簡單直接,缺乏可解釋性,還需要做進一步的研究.
5 挑戰與未來研究方向
5.1 數據集
神經網絡模型的訓練主要依賴于數據集.目前提出的基于深度神經網絡的智能合約漏洞檢測模型大多數都是在自己構建的數據集上進行評估,導致不同模型之間的指標無法準確地進行比較.因此迫切需要一個統一的數據集作為智能合約漏洞檢測模型的評估基準.
現階段已經有一些公開的智能合約數據集.Ghaleb等[62]開源了包含7種不同漏洞的9369個智能合約構建的數據集.但是這些智能合約是通過對正常智能合約進行漏洞注入而得到的,可能會與區塊鏈上真實的漏洞智能合約有所不同.Durieux等[43]構建了一個名為SmartBugs的數據集.該數據集包含兩部分,一部分包含69個智能合約和115個標記的漏洞,另一部分包含以太坊上47 398份唯一的智能合約,并且使用9個靜態分析工具進行了漏洞標記.然而由于靜態分析工具存在誤報,所以無法保證智能合約的標簽真實性.此外,類不平衡的問題也會影響模型的訓練和評估.
5.2 基于動態特征
現階段的智能合約漏洞檢測模型大多基于源代碼、字節碼序列、CFG和AST等靜態特征進行學習和檢測.然而靜態分析獲得的特征是有限的,智能合約漏洞大多是在運行時發生的.如何將智能合約的運行時動態特征結合起來擴展模型的特征表示空間,應該成為未來的一個研究方向.SODA[63]是一個在線智能合約漏洞檢測框架,通過對EVM虛擬機進行代碼插樁,收集智能合約運行時的相關信息,結合預定義的規則分析智能合約是否包含漏洞.可以將此類工具收集到的智能合約運行時信息作為動態特征幫助模型更好地學習智能合約漏洞的特征表示.
此外,對區塊鏈上產生的交易信息進行分析,可以深入挖掘智能合約與用戶間的相互關系[64],并用于智能合約漏洞檢測和溯源[65].Chen等[66]設計并實現了以太坊數據收集系統DataEther,成功獲取區塊、交易、合約等信息用于進一步分析.可以利用此類工具構建智能合約相關交易信息數據集,使用深度學習方法結合智能合約交易信息提取漏洞相關行為模式進行漏洞檢測.
5.3 模型可解釋性
神經網絡模型是典型的黑盒模型,模型進行檢測的依據和原因對人們來說是未知的.現有的智能合約漏洞檢測研究,并沒有將精力放在解釋模型的檢測行為上.無法理解模型如何檢測智能合約漏洞的原因會導致模型的實用性受到質疑,無法保證模型檢測結果的可靠性.
注意力機制可以作為解釋模型的一種手段.借助注意力機制,模型可以選擇與檢測目標相關性較高的部分.如源代碼中與漏洞相關的關鍵代碼片段、CFG中與漏洞相關的節點和子圖等.結合注意力機制為可解釋的基于深度學習的智能合約漏洞檢測提供了研究方向.
6 結 論
隨著人工智能技術的興起以及在各個領域的研究應用,大量基于深度學習的智能合約漏洞檢測模型涌現.本文對近年來提出的智能合約漏洞檢測模型進行了詳細地介紹,總結了現有基于深度學習的智能合約漏洞檢測的研究進展,并提出了該領域面臨的挑戰和未來可能的研究方向.
參考文獻:
[1] Huang K, Mu Y, Rezaeibagha F, et al. Design and analysis of cryptographic algorithms in blockchain[M].Boca Raton: CRC Press, 2021.
[2] Nakamoto S. Bitcoin: A peer-to-peer electronic cash system [EB/OL]. [2022-10-11].https://www.debr.io/article/21260-bitcoin-a-peer-to-peer-electronic-cash-system, 2008.
[3] Buterin V. A next-generation smart contract and decentralized application platform[EB/OL]. [2022-10-11].https://finpedia.vn/wp-content/uploads/2022/02/Ethereum_white_paper-a_next_generation_smart_contract_and_decentralized_application_platform-vitalik-buterin.pdf, 2014.
[4] Chen J, Xia X, Lo D, et al. Defining smart contract defects on ethereum[J].IEEE T Software Eng, 2020, 48: 327.
[5] Li X, Jiang P, Chen T, et al. A survey on the security of blockchain systems [J]. Future Gener Comp Sy, 2020, 107: 841.
[6] Chen T, Li X, Wang Y, et al. An adaptive gas cost mechanism for ethereum to defend against under-priced dos attacks [C]//Proceedings of the International Conference on Information Security Practice and Experience. Cham, Switzerland:Springer, Cham, 2017.
[7] Luu L, Chu D H, Olickel H, et al. Making smart contracts smarter[C]//Proceedings of the 2016 ACM SIGSAC conference on computer and communications security. Vienna Austria:SIGSAC,2016: 254.
[8] Kalra S, Goel S, Dhawan M, et al. Zeus: analyzing safety of smart contracts [C]//Ndss. San Diego:[s. n.],2018: 1.
[9] Tsankov P, Dan A, Drachsler-Cohen D, et al. Securify: Practical security analysis of smart contracts[C]//Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. Toronto Canada: SIGSAC, 2018: 67.
[10] Chen T, Li Z, Zhang Y, et al. A large-scale empirical study on control flow identification of smart contracts [C]//Proceedings of the 2019 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). Porto de Galinhas, Brazil: IEEE, 2019: 1.
[11] Bhargavan K, Delignat-Lavaud A, Fournet C, et al. Formal verification of smart contracts: Short paper[C]//Proceedings of the 2016 ACM workshop on programming languages and analysis for security. Vienna Austria: SIGSAC, 2016: 91.
[12] Yang Z, Lei H. Fether: An extensible definitional interpreter for smart-contract verifications in coq[J]. IEEE Access, 2019, 7: 37770.
[13] Jiang B, Liu Y, Chan W K. Contractfuzzer: fuzzing smart contracts for vulnerability detection [C]//Proceedings of the 2018 33rd IEEE/ACM International Conference on Automated Software Engineering (ASE). Montpellier, France: IEEE, 2018: 259.
[14] Chen T, Zhang Y, Li Z, et al. Tokenscope: Automatically detecting inconsistent behaviors of cryptocurrency tokens in ethereum [C]//Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security. London United Kingdom: SIGSAC, 2019: 1503.
[15] Zeng P, Lin G, Pan L, et al. Software vulnerability analysis and discovery using deep learning techniques: a survey[J]. IEEE Access, 2020, 8: 197158.
[16] Szabo N. Formalizing and securing relationships on public networks [J]. First Monday, 1997, 2: 1.
[17] Dannen C. Introducing Ethereum and solidity [M]. Berkeley: Apress, 2017.
[18] 張小松. 區塊鏈安全技術與應用[M]. 北京: 科學出版社, 2021.
[19] Dune. Ethereum smart contracts creation [DB/OL].[2022-11-02]. https://dune.com/queries/1712220.
[20] Top DeFi Tokens by market capitalization[DB/OL].[2022-11-10].https://coinmarketcap.com/view/defi/.
[21] Shae Z, Tsai J J P. On the design of a blockchain platform for clinical trial and precision medicine[C]//Proceedings of the 2017 IEEE 37th International Conference on Distributed Computing Systems (ICDCS). Atlanta: IEEE, 2017: 1972.
[22] Zhang P, White J, Schmidt D C, et al. FHIRChain: applying blockchain to securely and scalably share clinical data [J]. Comput Struct Biotec, 2018, 16: 267.
[23] Kim H M, Laskowski M. Toward an ontology-driven blockchain design for supply-chain provenance [J]. Intell Syst Account, 2018, 25: 18.
[24] Figorilli S, Antonucci F, Costa C, et al. A blockchain implementation prototype for the electronic open source traceability of wood along the whole supply chain [J]. Sensors, 2018, 18: 3133.
[25] Guan Z, Si G, Zhang X, et al. Privacy-preserving and efficient aggregation based on blockchain for power grid communications in smart communities[J]. IEEE Commun Mag, 2018, 56: 82.
[26] Huang K, Zhang X, Mu Y, et al. Building redactable consortium blockchain for industrial Internet-of-Things[J]. IEEE T Ind Inform, 2019, 15: 3670.
[27] DAO. The DAO (organization)[EB/OL].[2022-10-24]. https://en.w-ikipedia.org/wiki/The_DAO_(organization).
[28] Breidenbach L, Daian P, Juels A, et al. An In-Depth look at the parity Multisig Bug[EB/OL].[2022-10-24].https://hackingdistributed.com/2017/07/22/deep-dive-parity-bug.
[29] p0n1. A disastrous vulnerability found in smart contracts of BeautyChain(BEC)[EB/OL]. [2022-10-24]. https://medium.com/secbit-media/a-disastrous-vulnerability-found-in-smart-contracts-of-beautychain-bec-dbf24ddbc30e.
[30] Allen i. 幣安遭黑客洗劫7000比特幣, 價值約4100萬美金[EB/OL]. [2022-10-24]. https://www.freebuf.com/news/203024.html.
[31] 觀網財經. 幣安旗下區塊鏈項目被盜[EB/OL]. [2022-10-24].https://www.36kr.com/p/1950114960196228.
[32] 譚粵飛. 2021年區塊鏈安全生態報告:80%DAPP安全事故緣于智能合約漏洞[EB/OL].[2022-10-24]. https://new.qq.com/rain/a/20220209A0620600.
[33] Tann W J W, Han X J, Gupta S S, et al. Towards safer smart contracts: A sequence learning approach to detecting security threats[EB/OL]. [2022-09-05]. https://arxiv.org/abs/1811.06632.
[34] Hochreiter S, Schmidhuber J. Long short-term memory [J]. Neural Comput, 1997, 9: 1735.
[35] Gogineni A K, Swayamjyoti S, Sahoo D, et al. Multi-class classification of vulnerabilities in smart contracts using AWD-LSTM, with pre-trained encoder inspired from natural language processing [J]. IOP SciNotes, 2020, 1: 035002.
[36] Merity S, Keskar N S, Socher R. Regularizing and optimizing LSTM language models [C]//Proceedings of International Conference on Learning Representations. Vancouver: [S. n.] , 2018.
[37] Lutz O, Chen H, Fereidooni H, et al. ESCORT: ethereum smart contracts vulnerability detection using deep neural network and transfer learning [EB/OL]. [2022-09-15]. https://arxiv.org/abs/2103.12607.
[38] Chung J, Gulcehre C, Cho K H, et al. Empirical evaluation of gated recurrent neural networks on sequence modeling [EB/OL]. [2022-09-15]. https://arxiv.org/abs/1412.3555.
[39] Huang J, Zhou K, Xiong A, et al. Smart contract vulnerability detection model based on multi-task learning [J]. Sensors, 2022, 22: 1829.
[40] Zhang L, Chen W, Wang W, et al. CBGRU: a detection method of smart contract vulnerability based on a hybrid model [J]. Sensors, 2022, 22: 3577.
[41] Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[EB/OL].[2022-09-16]. https://arxiv.org/abs/1301.3781.
[42] Bojanowski P, Grave E, Joulin A, et al. Enriching word vectors with subword information [J]. Trans Assoc Comput Linguist, 2017, 5: 135.
[43] Durieux T, Ferreira J F, Abreu R, et al. Empirical review of automated analysis tools on 47,587 Ethereum smart contracts[C]//Proceedings of the ACM/IEEE 42nd International conference on software engineering. Seoul South Korea:SIGSOFT, 2020: 530.
[44] Ashizawa N, Yanai N, Cruz J P, et al. Eth2Vec: learning contract-wide code representations for vulnerability detection on ethereum smart contracts[C]//Proceedings of the 3rd ACM International Symposium on Blockchain and Secure Critical Infrastructure. Hong Kong, China: SIGSAC, 2021: 47.
[45] Le Q, Mikolov T. Distributed representations of sentences and documents [C]//Proceedings of the International Conference on Machine Learning. PMLR, 2014: 1188.
[46] Zhang L, Wang J, Wang W, et al. A novel smart contract vulnerability detection method based on information graph and ensemble learning [J]. Sensors, 2022, 22: 3581.
[47] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Proceedings of Advances in Neural Information Processing Systems. [S. l.]: Curran Associates, Inc, 2017.
[48] Mi F, Wang Z, Zhao C, et al. VSCL: automating vulnerability detection in smart contracts with deep learning [C]//Proceedings of the 2021 IEEE International Conference on Blockchain and Cryptocurrency (ICBC). Sydney: IEEE, 2021: 1.
[49] Zhuang Y, Liu Z, Qian P, et al. Smart contract vulnerability detection using graph neural network[C]// Proceedings of the International Joint Conference on Artificial Intelligence. Yokohama: [s. n.], 2020: 3283.
[50] Liu Z, Qian P, Wang X, et al. Smart contract vulnerability detection: from pure neural network to interpretable graph feature and expert pattern fusion[EB/OL].[2022-09-16]. https://arxiv.org/abs/2106.09282.
[51] Liu Z, Qian P, Wang X, et al. Combining graph neural networks with expert knowledge for smart contract vulnerability detection [J]. IEEE T Knowl Data En, 2021, 2021: 1.
[52] Fan Y, Shang S, Ding X. Smart contract vulnerability detection based on dual attention graph convolutional network [C]//Proceedings of the International Conference on Collaborative Computing: Networking, Applications and Worksharing. Cham, Switzerland: Springer, Cham, 2021: 335.
[53] Huang J, Han S, You W, et al. Hunting vulnerable smart contracts via graph embedding based bytecode matching [J]. IEEE T Inf Foren Sec, 2021, 16: 2144.
[54] Narayanan A, Chandramohan M, Venkatesan R, et al. Graph2vec: learning distributed representations of graphs [C]// Proceedings of the 13th International Workshop on Mining and Learning with Graphs (MLG). Nova Scotia: [s.n.], 2017: 21.
[55] Wu H, Zhang Z, Wang S, et al. Peculiar: Smart contract vulnerability detection based on crucial data flow graph and pre-training techniques [C]//Proceedings of the 2021 IEEE 32nd International Symposium on Software Reliability Engineering (ISSRE). Wuhan, China: IEEE, 2021: 378.
[56] Guo D, Ren S, Lu S, et al. Graphcodebert: Pre-training code representations with data flow [C]// Proceedings of International Conference on Learning Representations. Vienna: [s. n.], 2020.
[57] Yu X, Zhao H, Hou B, et al. DeeSCVHunter: a deep learning-based framework for smart contract vulnerability detection [C]//Proceedings of the 2021 International Joint Conference on Neural Networks (IJCNN). Shenzhen: IEEE, 2021: 1.
[58] Zeng Q, He J, Zhao G, et al. EtherGIS: a vulnerability detection framework for ethereum smart contracts based on graph learning features[C]//Proceedings of the 2022 IEEE 46th Annual Computers, Software, and Applications Conference (COMPSAC). Los Alamitos: IEEE, 2022: 1742.
[59] Xing C, Chen Z, Chen L, et al. A new scheme of vulnerability analysis in smart contract with machine learning [J]. Wirel Netw, 2020, 2020: 1.
[60] Zhou K, Cheng J, Li H, et al. SC-VDM: a lightweight smart contract vulnerability detection model [C]//Proceedings of the International Conference on Data Mining and Big Data. Guangzhou: Springer, Singapore, 2021: 138.
[61] Hwang S J, Choi S H, Shin J, et al. CodeNet: Code-targeted convolutional neural network architecture for smart contract vulnerability detection[J]. IEEE Access, 2022, 10: 32595.
[62] Ghaleb A, Pattabiraman K. How effective are smart contract analysis tools? evaluating smart contract static analysis tools using bug injection [C]//Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis. Virtual Event USA: SIGSOFT, 2020: 415.
[63] Chen T, Cao R, Li T, et al. SODA: A generic online detection framework for smart contracts [C]//NDSS. San Diego: [s. n.],2020.
[64] Chen T, Li Z, Zhu Y, et al. Understanding ethereum via graph analysis [J]. ACM T Internet Techn, 2020, 20: 1.
[65] Zhu H, Niu W, Liao X, et al. Attacker traceability on ethereum through graph analysis [J]. Secur Commun N, 2022, 2022: 3448950.
[66] Chen T, Li Z, Zhang Y, et al. Dataether: data exploration framework for ethereum [C]//Proceedings of the 2019 IEEE 39th International Conference on Distributed Computing Systems (ICDCS). Dallas: IEEE, 2019: 1369.