李鑫, 杜景林, 陳子文, 王坤
(南京信息工程大學(xué)人工智能學(xué)院, 南京 210044)
作為區(qū)塊鏈中四大核心技術(shù)之一的智能合約是一種以信息化方式傳播、驗(yàn)證或執(zhí)行的計(jì)算機(jī)協(xié)議,在區(qū)塊鏈平臺(tái)上自動(dòng)運(yùn)行[1],為各類分布式應(yīng)用服務(wù)提供了基礎(chǔ)。開發(fā)人員可以專門設(shè)計(jì)智能合約來實(shí)現(xiàn)數(shù)字資產(chǎn)管理。
智能合約極大地?cái)U(kuò)展了區(qū)塊鏈的應(yīng)用場(chǎng)景與現(xiàn)實(shí)意義。到目前為止,數(shù)百萬個(gè)智能合約已經(jīng)部署在各種區(qū)塊鏈平臺(tái)上,實(shí)現(xiàn)了廣泛的應(yīng)用,包括錢包、眾籌、去中心化賭博和跨行業(yè)金融等。來自各個(gè)領(lǐng)域的智能合約現(xiàn)在持有價(jià)值超過100億美元的虛擬貨幣,并且智能合約數(shù)量仍然在不斷增多。巨大的財(cái)富使得智能合約成為網(wǎng)絡(luò)攻擊的完美目標(biāo)。
相比傳統(tǒng)程序,智能合約的安全問題更加復(fù)雜,現(xiàn)實(shí)情況也更加嚴(yán)峻。區(qū)塊鏈具有不可變特性,智能合約代碼部署后無法修改,一旦代碼存在Bug極有可能被利用。2016年,黑客利用DAO(decentralized autonomous organization)合約[2]的可重入性漏洞竊取了超過360萬的以太幣,價(jià)值約5 500萬美元。2018年,美鏈(beauty chain,BEC)的Token合約遭到攻擊,導(dǎo)致BEC的價(jià)格幾乎歸零[3]。2020年,去中性化借貸協(xié)議Lendf.Me遭遇黑客攻擊,合約內(nèi)價(jià)值2 500萬美元的資產(chǎn)被洗劫一空。這些安全問題嚴(yán)重阻礙了區(qū)塊鏈的發(fā)展,并在用戶之間造成了智能合約的信任危機(jī)。智能合約安全性問題的研究就顯得尤為關(guān)鍵,因此,高效的智能合約漏洞檢測(cè)工具是非常重要和迫切的。
傳統(tǒng)的智能合約漏洞檢測(cè)方法大多基于固定規(guī)則的檢測(cè),如Luu等[4]提出的一種基于符號(hào)執(zhí)行的漏洞檢測(cè)工具Oyente通過檢測(cè)以太坊虛擬機(jī)(ethereum virtual machine,EVM)字節(jié)碼能夠檢測(cè)7類智能合約漏洞。以太坊的官方智能合約漏洞檢測(cè)工具M(jìn)ythril同樣使用符號(hào)執(zhí)行來探索所有可能的不安全路徑[5]。Tikhomirov等[6]提出的SmartCheck能夠?qū)olidity源代碼轉(zhuǎn)換為基于xml的中間顯示,并根據(jù)XPath模式對(duì)其進(jìn)行檢查。Tsankov等[7]是一個(gè)為智能合約提供可擴(kuò)展和全自動(dòng)安全分析的靜態(tài)分析工具,用于檢測(cè)智能合約EVM字節(jié)碼的安全屬性。模糊測(cè)試工具ContractFuzzer[8]能夠根據(jù)智能合約的API(application programming interface)規(guī)范生成模糊測(cè)試輸入,通過EVM記錄智能合約的運(yùn)行狀態(tài),分析日志并報(bào)告安全漏洞。除此之外還有Echidna[9]等模糊測(cè)試工具。
這些工具主要基于形式驗(yàn)證、符號(hào)執(zhí)行、靜態(tài)分析、污染分析和模糊測(cè)試,在進(jìn)行漏洞檢測(cè)時(shí)依賴于固定的檢測(cè)規(guī)則。存在自動(dòng)化水平低、高假陽性率等缺點(diǎn)。隨著智能合約的發(fā)展,智能合約的結(jié)構(gòu)越來越復(fù)雜,漏洞的種類越來越多,基于漏洞定義的規(guī)則已經(jīng)跟不上智能合約漏洞更新的速度,攻擊者很容易繞過這些規(guī)則來執(zhí)行攻擊。
近年來,深度學(xué)習(xí)在自然語言處理、計(jì)算機(jī)視覺、語音/音頻處理等各個(gè)領(lǐng)域都取得了顯著的成功,在漏洞檢測(cè)領(lǐng)域也已大量運(yùn)用。與傳統(tǒng)方法相比,該技術(shù)具有降低人工成本和提高檢測(cè)精度的潛力。李超凡等[10]提出了一種基于注意力機(jī)制結(jié)合CNN-BiLSTM模型的病歷文本分類模型。解決了中文電子病歷文本分類的高維稀疏性、算法模型收斂速度較慢、分類效果不佳等問題。楊錦溦等[11]結(jié)合深度卷積生成對(duì)抗網(wǎng)絡(luò)與深度神經(jīng)網(wǎng)絡(luò)并改進(jìn)激活函數(shù)用于入侵檢測(cè),得到了較高檢測(cè)率。張俊等[12]使用殘差門控圖卷積網(wǎng)絡(luò)進(jìn)行源代碼漏洞檢測(cè),在CDISC數(shù)據(jù)集上得到了較好的總體結(jié)果。Li等[13]提出了一種基于深度學(xué)習(xí)的漏洞檢測(cè)系統(tǒng)VulDeePecker,將雙向長(zhǎng)記憶和短記憶神經(jīng)網(wǎng)絡(luò)應(yīng)用于漏洞檢測(cè)。
同時(shí)不少學(xué)者探索使用深度學(xué)習(xí)模型來檢測(cè)智能合約漏洞。如Yu等[14]提出了基于深度學(xué)習(xí)的智能合約漏洞自動(dòng)檢測(cè)框架DeeSCVHunter,并提出了漏洞候選切片的新概念,幫助模型捕捉漏洞的關(guān)鍵點(diǎn)。Goswami等[15]提出了一種檢測(cè)工具TokenCheck,使用單一LSTM(long short term memory)神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,在以太網(wǎng)智能合約數(shù)據(jù)集ERC-20上進(jìn)行了測(cè)試,獲得了良好的結(jié)果。Ashizawa等[16]提出了一種基于機(jī)器學(xué)習(xí)的靜態(tài)分析工具Eth2Vec。它通過自然語言處理的神經(jīng)網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)易受攻擊的智能合約字節(jié)碼的特征。Huang等[17]開發(fā)了基于多任務(wù)學(xué)習(xí)的智能合約漏洞檢測(cè)模型。通過設(shè)置輔助任務(wù),學(xué)習(xí)更多的定向漏洞特征,提高模型的檢測(cè)能力。Wang等[18]提出了一種新的方法AFS (AST fuse program slicing)來融合代碼特征信息。AFS可以將來自AST的結(jié)構(gòu)化信息與程序切片信息融合,通過學(xué)習(xí)新的漏洞簽名信息來檢測(cè)漏洞。Mi等[19]提出了一個(gè)新的框架VSCL(automating vulnerability detection in smart contracts with deep learning),該框架使用基于度量學(xué)習(xí)的DNN(deep-learning neural network)對(duì)智能合約中的漏洞進(jìn)行檢測(cè)。此外,通過CFG(control flow graph)提取生成新的特征矩陣來表示智能合約,并使用Ngram和TF-IDF(term frequency-inverse document frequency)對(duì)操作進(jìn)行編碼。Wu等[20]采用基于關(guān)鍵數(shù)據(jù)流圖信息的智能合約表示方法,在進(jìn)行智能合約漏洞檢測(cè)之前,先捕獲合約的關(guān)鍵特征,同時(shí)在訓(xùn)練過程中避免過擬合,提出了一種新的工具Peculiar。Pecialier通過利用關(guān)鍵數(shù)據(jù)流圖技術(shù)提高了檢測(cè)性能,但構(gòu)建關(guān)鍵數(shù)據(jù)流的過程很復(fù)雜。Zhuang等[21]在智能合約中使用圖神經(jīng)網(wǎng)絡(luò)進(jìn)行漏洞檢測(cè),可以檢測(cè)出時(shí)間戳依賴漏洞等3種類型漏洞。Zhang等[22]提出了一種基于信息圖和集成學(xué)習(xí)的智能合約漏洞檢測(cè)方法。張光華等[23]提出了一種基于BiLSTM(bi-directional long short-term memory)和注意力機(jī)制的漏洞檢測(cè)方法,并通過大量的實(shí)驗(yàn)證明該方法可以達(dá)到更好的精度。Liu等[24]提出了一種可解釋的方法,將深度學(xué)習(xí)與專家模式模型相結(jié)合,用于智能合約漏洞檢測(cè)。該模型可以獲得細(xì)粒度細(xì)節(jié)和權(quán)重分布的可解釋全景圖,其通過實(shí)驗(yàn)表明盲目地將源代碼視為序列并不一定適合于漏洞檢測(cè)任務(wù)。
這些方法大多是為了改進(jìn)智能合約的處理而進(jìn)行優(yōu)化的,而且它們本質(zhì)上都是使用單網(wǎng)絡(luò)結(jié)構(gòu)模型。不同類型的網(wǎng)絡(luò)結(jié)構(gòu)在提取抽象特征和語義特征時(shí)關(guān)注點(diǎn)不同,單一的網(wǎng)絡(luò)結(jié)構(gòu)可能會(huì)因?yàn)閷?duì)智能合約的語義和句法信息學(xué)習(xí)不足而存在關(guān)鍵信息提取不完全的問題,因此考慮從網(wǎng)絡(luò)結(jié)構(gòu)的角度來探討混合網(wǎng)絡(luò)結(jié)構(gòu)的特征提取是否會(huì)對(duì)智能合約的漏洞檢測(cè)性能產(chǎn)生良好的影響。
基于上述研究背景,現(xiàn)提出一種高效的雙通道模型DBTA來檢測(cè)智能合約漏洞。該模型將改進(jìn)CNN-BiGRU和圖傳遞神經(jīng)網(wǎng)絡(luò)以并行方式形成兩個(gè)通道分別提取特征,利用注意力機(jī)制將特征加強(qiáng),最后通過全連接層輸出。
該模型包含改進(jìn)DCNN-BiGRU、MPNN兩個(gè)通道模塊以及注意力模塊,其中DCNN-BiGRU模塊將源代碼視為序列,MPNN模塊將源代碼建模為圖并采用圖神經(jīng)網(wǎng)絡(luò)。整體框架如圖1所示。
Vi為關(guān)鍵函數(shù)調(diào)用或變量;ei為執(zhí)行順序圖1 基于雙通道的智能合約漏洞檢測(cè)模型框架Fig.1 Dual-channel smart contract vulnerability detection model framework
(1)DCNN-BiGRU模塊:輸入數(shù)據(jù)是經(jīng)過詞法分析和向量化的智能合約數(shù)據(jù)集。首先,使用詞嵌入模型Word2vec將預(yù)處理后的合約代碼轉(zhuǎn)換為詞向量。然后利用DCNN獲取輸入信息的局部特征。為了提取更全面的局部信息,2個(gè)卷積層采用不同大小的卷積核從而獲得不同距離詞序列之間的特征。在DCNN后融合R-Drop方法緩解模型過擬合現(xiàn)象。然后將卷積后的特征矩陣輸出,作為BiGRU神經(jīng)網(wǎng)絡(luò)的輸入。用BiGRU獲取輸入信息的全局特征。接下來是全連接層作為輸出層,并在其中再一次使用R-Drop。
(2)MPNN模塊:將圖歸一化方法得到歸一化后的圖輸入消息傳遞神經(jīng)網(wǎng)絡(luò),得到輸出向量。
(3)注意力模塊:將兩個(gè)通道的特征經(jīng)過注意力模塊處理后進(jìn)行拼接,輸入全連接層中,最后使用sigmoid函數(shù)進(jìn)行分類。
1.1.1 DCNN
DCNN[25]網(wǎng)絡(luò)層由卷積和池化構(gòu)成。該卷積結(jié)構(gòu)將寬卷積層和動(dòng)態(tài)k-max池化層交替使用。其中寬卷積相比窄卷積可以更有效提取句子的句首和句尾信息,folding折疊操作用于縮小特征圖。
受殘差網(wǎng)絡(luò)啟發(fā),本文研究對(duì)DCNN模型進(jìn)行改進(jìn),使用兩個(gè)卷積層進(jìn)行局部特征學(xué)習(xí)。第二層卷積根據(jù)第一層卷積的輸出學(xué)習(xí)一個(gè)非線性表示,然后將學(xué)習(xí)到的表示與只經(jīng)過一層卷積的輸出結(jié)果通過如殘差形式合并連接,得到輸出向量。改進(jìn)前后的具體模型結(jié)構(gòu)如圖2所示。
圖2 DCNN 改進(jìn)前后結(jié)構(gòu)圖Fig.2 DCNN structure before and after improvement
DCNN使用一維寬卷積,最大可能地保留句子中的所有信息,以提高最后分類的準(zhǔn)確性。為保持卷積后輸出序列的長(zhǎng)度不變采用zero-padding法進(jìn)行0值填充。矩陣X表示卷積層的輸入,使用卷積核K與X中每一個(gè)連續(xù)子序列做點(diǎn)積運(yùn)算,每個(gè)特征ci表示為
ci=f(KXi:i+k-1+b)
(1)
式(1)中:Xi:i+k-1為k個(gè)詞向量首尾串接矩陣;f為非線性激活函數(shù);b為偏置矩陣。
對(duì)各個(gè)窗口進(jìn)行卷積操作得到對(duì)應(yīng)特征圖C,可表示為
C={c1,c2,…,cn-k+1}
(2)
卷積后去除folding層??紤]到動(dòng)態(tài)k-max pooling層輸出向量維度不固定,因此簡(jiǎn)化為最大池化層,取池化窗口內(nèi)每個(gè)維度的最大特征值。
(3)
該層允許基于樣本的參數(shù)離散化,以降低特征維數(shù),從而減少訓(xùn)練時(shí)間和防止過擬合。在卷積計(jì)算中,使用ReLU函數(shù)作為激活函數(shù)保證神經(jīng)網(wǎng)絡(luò)的非線性。Flatten扁平化層完成從卷積層到全連接層的過渡。全連接層作用是降低輸出向量的維數(shù)。
1.1.2 BiGRU
循環(huán)神經(jīng)網(wǎng)絡(luò)具有記憶功能,在處理順序方面表現(xiàn)良好。與LSTM相比,GRU增加了一個(gè)更新門取代LSTM中的遺忘門和輸入門,大大簡(jiǎn)化了網(wǎng)絡(luò)的結(jié)果和參數(shù),從而提高了模型的訓(xùn)練速度。考慮到智能合約之間的語義結(jié)構(gòu)復(fù)雜,預(yù)測(cè)結(jié)果可能同時(shí)受到過去時(shí)刻和未來時(shí)刻輸入的影響,因此選擇雙向門控循環(huán)(BiGRU)網(wǎng)絡(luò)進(jìn)行時(shí)間建模,進(jìn)一步增強(qiáng)模型的特征提取能力。BiGRU是一個(gè)由兩個(gè)方向相反的GRU共同決定的神經(jīng)網(wǎng)絡(luò)模型。單個(gè)GRU的隱藏狀態(tài)ht計(jì)算公式為
rt=σ(Wr[ht-1,xt]+br)
(4)
zt=σ(Wz[ht-1,xt]+bz)
(5)
(6)
(7)
(8)
(9)
(10)
FBiGRU=(h1,h2,…,ht)
(11)
式中:wt和vt為隱層在t時(shí)刻不同方向間的權(quán)值;bt為t時(shí)刻可訓(xùn)練參數(shù)向量。
1.1.3 R-Drop
通常情況下,聯(lián)合使用CNN和RNN的過擬合概率較高,在測(cè)試集中表現(xiàn)較差。在訓(xùn)練過程中通常采用dropout等正則化方法來防止過擬合和提高深度模型的泛化能力。
dropout在神經(jīng)網(wǎng)絡(luò)的每一層隨機(jī)丟棄部分單元,給網(wǎng)絡(luò)帶來了一定程度的隨機(jī)性,容易造成訓(xùn)練階段和測(cè)試階段之間的不一致。因此本文研究引入R-Drop[26]進(jìn)行正則化,緩解不一致性。
18-Drop思想是控制兩次預(yù)測(cè)盡量保持一致,從而去優(yōu)化模型。在每個(gè)批訓(xùn)練中,對(duì)于同一個(gè)數(shù)據(jù)樣本前向傳播兩次,通過Dropout得到兩個(gè)不同但差異很小的概率分布。R-Drop通過最小化兩個(gè)分布之間的雙向Kullback-Leibler(KL)發(fā)散度迫使兩個(gè)子模型輸出的數(shù)據(jù)樣本分布相同,實(shí)現(xiàn)參數(shù)更新。
R-Drop具體實(shí)現(xiàn)過程如下。
(12)
(13)
(14)
與序列數(shù)據(jù)相比,圖結(jié)構(gòu)的數(shù)據(jù)能夠編碼對(duì)象之間豐富的句法或語義關(guān)系。在智能合約中體現(xiàn)在忽略了合約程序的結(jié)構(gòu)信息,如數(shù)據(jù)流和調(diào)用關(guān)系。因此使用消息傳遞神經(jīng)網(wǎng)絡(luò)進(jìn)行漏洞建模和檢測(cè)。具體過程如下。
(1)消息傳播階段:在開始傳遞信息前用節(jié)點(diǎn)的特征初始化每個(gè)節(jié)點(diǎn)的隱藏狀態(tài)。按照邊的執(zhí)行順序依次傳遞信息,每個(gè)時(shí)間步傳遞一條邊。具體公式為
xk=hsk⊕tk
(15)
mk=Wkxk+bk
(16)
式中:?表示串聯(lián)操作;矩陣Wk和偏置向量bk是網(wǎng)絡(luò)參數(shù);原始消息xk包含來自ek的起始節(jié)點(diǎn)的隱藏狀態(tài)hsk和邊ek自身的信息tk,然后使用Wk和bk將其轉(zhuǎn)換為向量表示。在接收到消息之后,ek的結(jié)束節(jié)點(diǎn)通過聚合來自傳入消息的信息mk及其先前狀態(tài)來更新其隱藏狀態(tài)hek。hek更新公式為
(17)
(18)
式中:U、Z、R為矩陣;b1和b2為偏置向量。
(19)
式(19)中:f為映射函數(shù),如神經(jīng)網(wǎng)絡(luò);|V|為主要節(jié)點(diǎn)的數(shù)量。
由于序列特征和全局圖特征存在差異,自注意機(jī)制通過計(jì)算所有特征的系數(shù)來學(xué)習(xí)不同特征并突出重要特征的權(quán)重,然后通過交叉注意力機(jī)制挖掘不同特征類別間的關(guān)系來預(yù)測(cè)最終結(jié)果。注意力模塊圖如圖3所示。
Q、K、V分別為查詢向量序列、鍵向量序列和值向量序列圖3 注意力模塊Fig.3 Attention module
(1)自注意力機(jī)制。假設(shè)注意力層輸入序列為X=[x1,x2,…,xN],首先通過線性變換得到三組向量序列,即
(20)
式(20)中:WQ、WK、WV為可以學(xué)習(xí)的參數(shù)矩陣。最終的輸出向量h為
h=softmax(QKT)V
(21)
將DCNN-BiGRU模塊的輸入向量X1和MPNN模塊的輸入向量X2兩個(gè)分別經(jīng)過自注意力機(jī)制得到輸出向量p、q。
(22)
(23)
(24)
本文研究重點(diǎn)是現(xiàn)有已知漏洞中的可重入性漏洞、時(shí)間戳依賴漏洞。使用SB-wild[27]數(shù)據(jù)集和ESC[21]數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)。其中SB-wild數(shù)據(jù)集總共包含約203 716個(gè)智能合約。ESC數(shù)據(jù)集包含以太坊中的40 932個(gè)智能合約。采用Smartcheck和Oyente兩個(gè)工具標(biāo)記所有源代碼文件并獲取標(biāo)記的數(shù)據(jù),同時(shí)進(jìn)行人工判斷,從而準(zhǔn)確判斷智能合約內(nèi)包含的漏洞類型。最終數(shù)據(jù)集包含的漏洞數(shù)量如表1所示。
表1 數(shù)據(jù)集漏洞數(shù)量統(tǒng)計(jì)Table 1 Vulnerability count statistics
本文模型基于Keras深度學(xué)習(xí)框架,所有實(shí)驗(yàn)都是在一臺(tái)Intel Core i7和32 GB內(nèi)存的計(jì)算機(jī)上進(jìn)行的。實(shí)驗(yàn)的運(yùn)行環(huán)境為Windows 10。顯卡型號(hào)為NVIDIA GeForce RTX 3090。
為了驗(yàn)證本文方法的效果,隨機(jī)將70%的數(shù)據(jù)集分割為訓(xùn)練集,剩余的30%為驗(yàn)證集。從模型參數(shù)選擇方面對(duì)模型進(jìn)行優(yōu)化。其中損失函數(shù)為二分類交叉熵?fù)p失,優(yōu)化器選擇Adam算法。學(xué)習(xí)率在[0.000 1,0.000 5,0.001,0.002,0.005]中調(diào)整選擇。為了防止過擬合,R-drop內(nèi)dropout在[0.2,0.4,0.6,0.8]內(nèi)調(diào)整選擇。此外,詞向量維度選擇區(qū)間為[200,300,400,500]。經(jīng)過對(duì)比最終模型參數(shù)設(shè)置如表2所示。
表2 模型參數(shù)設(shè)置Table 2 Setting of model parameters
數(shù)據(jù)需分別經(jīng)過詞向量轉(zhuǎn)化和圖轉(zhuǎn)化。
2.3.1 向量化
DCNN、BiGRU等深度神經(jīng)網(wǎng)絡(luò)通常以向量作為輸入,因此需要將智能合約代碼片段表示為語義上有意義的向量。首先,將定義的變量和函數(shù)轉(zhuǎn)換為符號(hào)名稱,如var1、var2、fun1、fun2。然后通過詞法分析對(duì)合約片段進(jìn)行劃分。
在進(jìn)行分詞操作后,通過word2vec轉(zhuǎn)換為向量。該工具是使用淺層神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞嵌入的最流行的技術(shù)之一,它將標(biāo)記映射到一個(gè)整數(shù),然后將該整數(shù)轉(zhuǎn)換為一個(gè)固定維數(shù)的向量。由于合約片段詞數(shù)不固定,因此轉(zhuǎn)換后的相應(yīng)向量可能具有不同的長(zhǎng)度。為了取等長(zhǎng)度的向量作為輸入,當(dāng)長(zhǎng)度小于固定維數(shù)時(shí),將零填充到向量的末尾;當(dāng)長(zhǎng)度超過固定維數(shù)時(shí),截?cái)嘞蛄康慕Y(jié)束部分。
2.3.2 圖歸一化
程序源代碼被轉(zhuǎn)換為圖表示能夠保持代碼間的語義關(guān)系。因此根據(jù)程序語句之間的數(shù)據(jù)依賴和控制依賴,將智能合約的源代碼描述為圖,其中的節(jié)點(diǎn)表示關(guān)鍵函數(shù)調(diào)用或變量,邊表示執(zhí)行順序。
節(jié)點(diǎn)可分為主要節(jié)點(diǎn)和次要節(jié)點(diǎn)。其中主要節(jié)點(diǎn)表示對(duì)自定義或內(nèi)置函數(shù)的調(diào)用,這些函數(shù)對(duì)于檢測(cè)特定漏洞非常重要。例如,對(duì)于可重入漏洞,一個(gè)主要節(jié)點(diǎn)對(duì)傳輸函數(shù)或內(nèi)置call.value函數(shù)的調(diào)用進(jìn)行建模。對(duì)于時(shí)間戳依賴漏洞,內(nèi)置函數(shù)調(diào)用block.timestamp被提取為主要節(jié)點(diǎn)。次要節(jié)點(diǎn)用于建模關(guān)鍵變量。
節(jié)點(diǎn)之間的關(guān)系通過構(gòu)造邊來建模。每個(gè)邊描述了被測(cè)試的合約函數(shù)可能經(jīng)過的路徑,并且邊的順序表征了它在函數(shù)中的執(zhí)行順序。具體為邊的特征被提取為元組(Vs,Ve,o,t),其中Vs和Ve為其起始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn),o為其時(shí)間順序,t為邊類型。為了捕獲節(jié)點(diǎn)之間豐富的語義依賴關(guān)系,構(gòu)建了4種類型的邊,即控制流、數(shù)據(jù)流、前向和后退邊。語義邊的詳細(xì)信息如表3所示。
本次實(shí)驗(yàn)的評(píng)價(jià)指標(biāo)為精確率(Accuracy)、查全率(Recall)、準(zhǔn)確率(Precision)、精度-召回率權(quán)衡(F1-score)。通過消融實(shí)驗(yàn)和對(duì)比實(shí)驗(yàn)驗(yàn)證本文方案的性能。
2.4.1 消融實(shí)驗(yàn)
為了比較各個(gè)模塊對(duì)模型檢測(cè)效果的影響,通過對(duì)比BiGRU、MPNN、DCNN、DCNN-BiGRU和DBTA等模型的漏洞檢測(cè)性能,驗(yàn)證本文模型的有效性。其中DCNN-BiGRU(dropout)模型表示使用dropout正則化方法,DCNN-BiGRU(R-Drop)表示使用R-Drop正則化方法。DBTA(FC)表示直接經(jīng)過全連接層而不經(jīng)過注意力層。實(shí)驗(yàn)結(jié)果如表4所示。
表4 消融實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果Table 4 Experimental results of ablation experiments
在可重入性漏洞檢測(cè)中,使用R-Drop正則化方法后DCNN-BiGRU模型的評(píng)價(jià)指標(biāo)提升1%至2%。DCNN-BiGRU(R-Drop)方法的準(zhǔn)確率可達(dá)79.42%,召回率可達(dá)78.99%,F1得分可達(dá)98.7%。在未引入注意力機(jī)制層時(shí),DBTA(FC)的準(zhǔn)確率可達(dá)87.96%,召回率可達(dá)87.63%,F1得分可達(dá)87.79%。DBTA的準(zhǔn)確率最高,達(dá)到79%。在時(shí)間戳依賴漏洞檢測(cè)中,DBTA較其余模型準(zhǔn)確率、F1得分同樣有所提升。實(shí)驗(yàn)結(jié)果表明,R-Drop正則化方法可以提高模型的有效性,特別是準(zhǔn)確性和F1得分的整體有效性。此外,注意力機(jī)制更有利于特征提取,能夠進(jìn)一步提高模型的有效性。
為了演示提出方法的檢測(cè)性能,繪制了如圖4和圖5所示的準(zhǔn)確率和損失函數(shù)值隨迭代次數(shù)變化圖。隨著epoch數(shù)的增加,精度和損失相應(yīng)增加或減少。在40個(gè)epoch后趨于平穩(wěn)。從結(jié)果中可以得出結(jié)論,基于本文的檢測(cè)方法在檢測(cè)中取得了較好的檢測(cè)性能。
圖4 準(zhǔn)確率曲線圖Fig.4 Accuracy graph
圖5 損失函數(shù)曲線圖Fig.5 Loss function graph
2.4.2 對(duì)比實(shí)驗(yàn)
為了客觀地評(píng)估本文提出模型的性能,將本文模型與已有的智能合約漏洞檢測(cè)方法進(jìn)行比較。包括4種傳統(tǒng)的檢測(cè)方法(Oyente、Securify、Mythril和SmartCheck)以及4種基于深度學(xué)習(xí)的方法(LSTM、TMP、AME、BLSTM-ATT)。實(shí)驗(yàn)結(jié)果如表5所示。
表5 對(duì)比實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果Table 5 Experimental results of comparative experiments
由表5可以看出,傳統(tǒng)的漏洞檢測(cè)方法各項(xiàng)指標(biāo)較低。在可重入性漏洞檢測(cè)中,DBTA方法的F1得分最高,為91.68%,Smartcheck方法的F1得分最低,為27.27%;在時(shí)間戳依賴漏洞檢測(cè)中,DBTA方法的F1得分達(dá)到87.18%,最低的Smartcheck則為36.84%。這表明在更有針對(duì)性的數(shù)據(jù)集中,本文模型DBTA具有明顯優(yōu)勢(shì)。與LSTM、GRU、TMP、AME等現(xiàn)有深度學(xué)習(xí)模型相比,DBTA同樣具有更好的性能。其中TMP考慮了數(shù)據(jù)流和控制流引起的時(shí)間信息,使得模型效果相比LSTM、GRU有了大幅提升。AME融合專家特征和圖神經(jīng)網(wǎng)絡(luò),使得準(zhǔn)確率達(dá)到了86.25%和82.07%。而本文模型DBTA結(jié)合了不同類型的網(wǎng)絡(luò)結(jié)構(gòu)使得模型在兩類漏洞檢測(cè)的準(zhǔn)確率分別達(dá)到了90.19%和86.40%。
帶有漏洞的智能合約可能出現(xiàn)嚴(yán)重的安全問題,因此提出了一種基于雙通道的智能合約漏洞檢測(cè)方法,通過融合不同深度學(xué)習(xí)方法改變網(wǎng)絡(luò)結(jié)構(gòu)來優(yōu)化模型的檢測(cè)能力。與現(xiàn)有方法相比,結(jié)合了傳統(tǒng)詞向量特征和圖特征,考慮了程序元素之間的豐富依賴關(guān)系。
通過實(shí)驗(yàn)證明,本文提出的DBTA模型結(jié)合了不同深度學(xué)習(xí)的優(yōu)點(diǎn),具有較好的檢測(cè)性能。得出如下結(jié)論。
(1)融合動(dòng)態(tài)卷積神經(jīng)網(wǎng)絡(luò)、雙向門控遞歸單元和圖神經(jīng)網(wǎng)絡(luò)并應(yīng)用于網(wǎng)絡(luò)安全中的漏洞檢測(cè)領(lǐng)域。
(2)改進(jìn)DCNN,提出改進(jìn)DCNN-BiGRU模型,提升漏洞檢測(cè)能力。
(3)引入了簡(jiǎn)單有效的正則化方法R-Drop,以防止模型過擬合,同時(shí)提升模型的泛化。
(4)運(yùn)用注意力機(jī)制對(duì)改進(jìn)DCNN-BiGRU和MPNN所提取的特征分配權(quán)重,關(guān)注關(guān)鍵特征。
(5)結(jié)合以上工作進(jìn)行多次實(shí)驗(yàn)驗(yàn)證本文方法的有效性。
大量的實(shí)驗(yàn)表明,本文方法能夠較為準(zhǔn)確地識(shí)別出可重入性漏洞和時(shí)間戳依賴漏洞。在未來,將收集更多的數(shù)據(jù)集對(duì)其余類型的智能合約漏洞進(jìn)行檢測(cè)。