本發(fā)明涉及智能合約,具體是涉及一種基于黎曼圖卷積的端到端智能合約漏洞檢測(cè)方法。
背景技術(shù):
1、當(dāng)前,已經(jīng)有數(shù)百萬的智能合約運(yùn)行在各大區(qū)塊鏈平臺(tái)上,例如以太坊、eos、維特鏈等。智能合約已經(jīng)在數(shù)字身份、物聯(lián)網(wǎng)、供應(yīng)鏈等多個(gè)領(lǐng)域得到應(yīng)用,并且催生出廣泛的去中心化應(yīng)用程序,如錢包、預(yù)測(cè)市場(chǎng)、即時(shí)消息、博客、眾籌等等。但是,智能合約的安全問題也隨之顯現(xiàn),根據(jù)slowmist的統(tǒng)計(jì),智能合約安全漏洞導(dǎo)致的經(jīng)濟(jì)損失已經(jīng)超過320億美元。智能合約安全漏洞不僅造成了巨大的經(jīng)濟(jì)損失,也破壞了人們對(duì)區(qū)塊鏈與智能合約的信任基礎(chǔ)。
2、當(dāng)前,智能合約漏洞檢測(cè)技術(shù)已成為產(chǎn)業(yè)和學(xué)術(shù)領(lǐng)域的焦點(diǎn)研究課題。在當(dāng)前的研究環(huán)境中,研究者們已經(jīng)采用多種策略對(duì)智能合約進(jìn)行深入的分析。傳統(tǒng)的程序分析技術(shù),如符號(hào)執(zhí)行、形式化驗(yàn)證和污點(diǎn)分析等,雖然在軟件安全性驗(yàn)證方面取得了一定的成就,但這些方法在實(shí)踐中表現(xiàn)出對(duì)專家知識(shí)的過度依賴性。它們通常要求詳細(xì)預(yù)設(shè)模式或規(guī)則,這一特性在很大程度上限制了這些技術(shù)在適應(yīng)性、擴(kuò)展性和精確性方面的表現(xiàn)。近年來,基于深度學(xué)習(xí)的方法逐漸被應(yīng)用于智能合約漏洞檢測(cè),取得不錯(cuò)的效果。它使用神經(jīng)網(wǎng)絡(luò)對(duì)大量的智能合約樣本進(jìn)行學(xué)習(xí),自動(dòng)化地提取其中的漏洞特征,因此擁有更高的靈活性和擴(kuò)展性,表現(xiàn)出更優(yōu)越的漏洞檢測(cè)準(zhǔn)確性。其中將智能合約轉(zhuǎn)換成圖,用圖卷積神經(jīng)網(wǎng)絡(luò)等進(jìn)行處理的方法表現(xiàn)最為優(yōu)異。
3、盡管圖卷積神經(jīng)網(wǎng)絡(luò)在智能合約分析領(lǐng)域展現(xiàn)出了巨大的潛力,但是該方法仍面臨一系列復(fù)雜的挑戰(zhàn)。智能合約圖結(jié)構(gòu)擁有深層次性和無尺度特性,難以在歐幾里得空間中自然而精確地表示。即智能合約圖節(jié)點(diǎn)的度遵循冪律分布,并且節(jié)點(diǎn)被組織成多個(gè)不同的層級(jí)。然而當(dāng)前的研究中特征表示大都嵌入在歐幾里得空間中,不能充分學(xué)習(xí)智能合約圖結(jié)構(gòu)的深層次和無尺度性。此外,當(dāng)前的研究往往是簡(jiǎn)單將語義信息進(jìn)行圖結(jié)構(gòu)的聚合提取,并不能充分地將智能合約語義信息和結(jié)構(gòu)信息進(jìn)行深層次的融合學(xué)習(xí)。同時(shí),智能合約數(shù)據(jù)集普遍存在的標(biāo)簽噪聲問題,導(dǎo)致模型學(xué)習(xí)到錯(cuò)誤的模式,對(duì)模型的泛化能力和性能造成了顯著影響。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于針對(duì)智能合約漏洞檢測(cè)中存在的上述技術(shù)問題,提供一種基于黎曼圖卷積的端到端智能合約漏洞檢測(cè)方法。通過構(gòu)建智能合約圖、提取節(jié)點(diǎn)語義特征、利用黎曼圖卷積網(wǎng)絡(luò)進(jìn)行結(jié)構(gòu)特征提取和鄰域聚合、以及引入退火混淆圖對(duì)比學(xué)習(xí)模塊降低噪聲干擾,實(shí)現(xiàn)對(duì)智能合約中潛在漏洞的高效、準(zhǔn)確檢測(cè)。
2、本發(fā)明包括以下步驟:
3、1)將智能合約sol文件構(gòu)建成智能合約圖:包括智能合約圖抽象語法樹的構(gòu)建、抽象語法樹的簡(jiǎn)化以及數(shù)據(jù)流邊和執(zhí)行順序的增加;
4、2)利用詞嵌入模塊(word2vec)將合約圖節(jié)點(diǎn)轉(zhuǎn)為向量:利用word2vec的skip-gram模型,將合約圖節(jié)點(diǎn)及其相鄰節(jié)點(diǎn)作為輸入,訓(xùn)練得到每個(gè)節(jié)點(diǎn)的向量表示,形成節(jié)點(diǎn)表示矩陣;
5、3)使用黎曼圖卷積網(wǎng)絡(luò)學(xué)習(xí)圖節(jié)點(diǎn)向量和鄰接矩陣的特征:采用黎曼圖卷積網(wǎng)絡(luò),將節(jié)點(diǎn)向量映射至黎曼流形,執(zhí)行圖卷積操作,包括鄰域聚合、特征變換與非線性激活,通過殘差連接穩(wěn)定訓(xùn)練,最終將特征映射回歐幾里得空間,提取智能合約圖的深層特征。
6、4)利用退火混淆圖對(duì)比學(xué)習(xí)方法降低標(biāo)簽噪聲對(duì)整體網(wǎng)絡(luò)的影響:采用退火混淆圖對(duì)比學(xué)習(xí),通過混合樣本和標(biāo)簽、平滑標(biāo)簽處理及權(quán)重指數(shù)量化,降低標(biāo)簽噪聲影響,增強(qiáng)模型魯棒性;通過最大化正樣本相似度、最小化負(fù)樣本相似度優(yōu)化對(duì)比損失,提升模型性能;
7、5)將詞嵌入模塊、黎曼圖卷積網(wǎng)絡(luò)和退火混淆圖對(duì)比學(xué)習(xí)網(wǎng)絡(luò)構(gòu)建成一個(gè)端到端學(xué)習(xí)網(wǎng)絡(luò),各模塊相互促進(jìn)學(xué)習(xí),協(xié)同工作,共同優(yōu)化;通過計(jì)算詞嵌入損失、分類損失及對(duì)比學(xué)習(xí)損失,并加權(quán)聯(lián)合,形成最終損失函數(shù);
8、6)使用現(xiàn)實(shí)世界的智能合約文件,對(duì)多種不同的漏洞進(jìn)行識(shí)別測(cè)試,并利用多個(gè)評(píng)測(cè)標(biāo)準(zhǔn)對(duì)系統(tǒng)進(jìn)行評(píng)估。
9、在步驟1)中,所述將智能合約sol文件構(gòu)建成智能合約圖,使用的智能合約圖構(gòu)建方法包括智能合約圖抽象語法樹的構(gòu)建、抽象語法樹的簡(jiǎn)化以及數(shù)據(jù)流邊和執(zhí)行順序的增加。
10、具體步驟如下:
11、首先采用尖端的抽象語法樹構(gòu)建工具python-solidity-parser將輸入的智能合約轉(zhuǎn)為抽象語法樹。抽象語法樹詳細(xì)記錄了智能合約中的結(jié)構(gòu)細(xì)節(jié),如變量聲明、數(shù)據(jù)類型、控制流元素等,提供代碼邏輯的完整圖景。
12、然后通過對(duì)無關(guān)節(jié)點(diǎn)的剔除,僅保留鍵為“name”和“type”的節(jié)點(diǎn)。
13、對(duì)于給定的簡(jiǎn)化抽象語法樹輸入,首先執(zhí)行深度優(yōu)先遍歷,提取每個(gè)節(jié)點(diǎn)和邊,它們分別作為語義圖的節(jié)點(diǎn)和邊。將在變量首次出現(xiàn)的節(jié)點(diǎn)和隨后的節(jié)點(diǎn)之間建立數(shù)據(jù)流邊,并將其添加到邊集中。然后將有序節(jié)點(diǎn)的序號(hào)添加到節(jié)點(diǎn)以表示語句執(zhí)行順序。
14、在步驟2)中,將每個(gè)語義合約圖節(jié)點(diǎn)表示為一個(gè)向量。首先獲取每個(gè)節(jié)點(diǎn)的相鄰節(jié)點(diǎn)列表作為輸入。對(duì)于每個(gè)節(jié)點(diǎn)v,將其相鄰節(jié)點(diǎn)列表表示為集合n(v),然后將其輸入到連續(xù)跳躍元語法skip-gram詞向量模型中。具體而言,對(duì)于一個(gè)節(jié)點(diǎn)v,其相鄰節(jié)點(diǎn)集合為n(v),希望最大化給定v的情況下,其相鄰節(jié)點(diǎn)在窗口內(nèi)出現(xiàn)的概率。這個(gè)過程可以用以下公式表示:
15、
16、其中,θ表示word2vec模型的參數(shù),v表示圖中所有節(jié)點(diǎn)的集合,p(u|v;θ)表示給定節(jié)點(diǎn)v后,節(jié)點(diǎn)u出現(xiàn)在窗口內(nèi)的概率。通過訓(xùn)練詞向量模型,得到一個(gè)節(jié)點(diǎn)表示矩陣其中n是語義合約圖中節(jié)點(diǎn)的數(shù)量,c是節(jié)點(diǎn)表示的維度。
17、在步驟3)中,將歐幾里得空間中的向量v映射為黎曼流形上的點(diǎn)q。將這種映射定義為指數(shù)映射:其逆映射定義為對(duì)數(shù)映射:具體為以下公式:
18、
19、其中c是流形中的曲率,tanh是雙曲正切函數(shù),cosh是雙曲余弦函數(shù),arcosh是反雙曲余弦函數(shù)。
20、在基于詞向量的詞匯特征向量表示方法中,提取到每一個(gè)合約圖的節(jié)點(diǎn)特征,即獲取智能合約的合約圖的特征矩陣其中n是合約圖中的節(jié)點(diǎn)個(gè)數(shù),c是節(jié)點(diǎn)特征維度。接著將特征矩陣x映射到黎曼流形上,可以表示為:
21、
22、定義黎曼流形圖卷積的每一層操作,包括鄰域聚合、特征變化和非線性激活,以實(shí)現(xiàn)黎曼流形上的圖卷積操作。
23、對(duì)于節(jié)點(diǎn)i及其鄰居節(jié)點(diǎn)j,第l層的注意力權(quán)重矩陣的計(jì)算如下:
24、
25、其中,n(i)是節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)集合,可通過n(i)={j|aij≠0,j≠i}獲得。
26、然后使用權(quán)重矩陣的度矩陣d的平方根的逆來進(jìn)行歸一化:
27、
28、wl,e是第l層的權(quán)重矩陣,pij是為每一個(gè)權(quán)重從均勻分布u(0,1)中生成的隨機(jī)數(shù)。
29、得到正則化權(quán)重矩陣后,對(duì)特征進(jìn)行變換,可以表示為以下公式:
30、
31、其中⊙表示黎曼流形上的矩陣乘法,具體計(jì)算方式為:
32、
33、之后,利用歸一化權(quán)重矩陣進(jìn)行鄰域聚合,即通過圖結(jié)構(gòu)來聚合鄰居節(jié)點(diǎn)的特征。第l層經(jīng)過鄰域聚合后的特征可表示為:
34、
35、接著進(jìn)行非線性激活,得到的特征矩陣可表示為:
36、
37、在這里,σ是非線性激活函數(shù),使獲得每一層之后節(jié)點(diǎn)的新特征表示。
38、為了避免訓(xùn)練時(shí)損失的大幅波動(dòng),在兩個(gè)圖卷積層的輸出之間添加殘差連接。具體而言,圖卷積層中第l-1層的輸出xl-1,m使用黎曼流形加法操作,與第l層的原始輸出xl′,m相加,可表示為:
39、
40、其中,px→y(·)表示黎曼流形的參考點(diǎn)從x平行傳輸?shù)統(tǒng)。具體計(jì)算公式為:
41、
42、這樣得到黎曼流形圖卷積每一層輸出xl,m。對(duì)于在最后一個(gè)圖卷積層l的特征xl,m,其映射回歐幾里得空間的表示可表示為:
43、
44、最終獲得經(jīng)過黎曼流形圖卷積神經(jīng)網(wǎng)絡(luò)處理的圖特征
45、在步驟4)中,所述利用退火混淆圖對(duì)比學(xué)習(xí)方法降低標(biāo)簽噪聲對(duì)整體網(wǎng)絡(luò)的影響,提供一種結(jié)合退火技術(shù)和混淆技術(shù)的圖對(duì)比學(xué)習(xí)創(chuàng)新方法,對(duì)比學(xué)習(xí)主要側(cè)重于區(qū)分正負(fù)樣本對(duì);具體步驟如下:
46、對(duì)兩個(gè)圖g和g′進(jìn)行獨(dú)立的圖嵌入,生成嵌入向量x與x′。從beta(α,β)中隨機(jī)提取一個(gè)混合系數(shù)μ,生成混淆樣本x+和標(biāo)簽t+的過程可以表示為:
47、
48、其中,是平滑標(biāo)簽處理,減少模型對(duì)硬標(biāo)簽的依賴,從而提高對(duì)噪聲的魯棒性。令∈為一個(gè)小常數(shù),則的具體公式為:
49、
50、其中g(shù)(epoch)是一個(gè)漸進(jìn)函數(shù),具體如下:
51、g(epoch)=tanh(γ·epoch)
52、這里,tanh函數(shù)將學(xué)習(xí)輪次epoch的值映射到(0,1)之間,γ是控制著映射的速率。這種策略可以避免訓(xùn)練初期標(biāo)簽軟化過度,幫助模型在初期穩(wěn)定訓(xùn)練。
53、形式上,對(duì)于查詢樣本混合的負(fù)樣本可以寫成:
54、
55、其中,由于一個(gè)具有區(qū)分意義的負(fù)樣本應(yīng)該更加強(qiáng)調(diào)接近查詢的樣本,即當(dāng)與查詢樣本的相似度高于與的相似度時(shí),應(yīng)當(dāng)滿足的關(guān)系。可以表示為以下不等式約束:
56、
57、其中,n是不同于m的樣本索引。權(quán)重通過指數(shù)形式來量化,計(jì)算方法如下所示:
58、
59、其中,m是小批量樣本總數(shù)。
60、通過最大化查詢樣本與正樣本的相似度以及最小化查詢樣本與負(fù)樣本的相似性來定義損失目標(biāo),形式化如下:
61、正樣本損失:
62、
63、負(fù)樣本損失:
64、
65、對(duì)比損失:
66、lcl=lpositive-lnegative
67、在步驟5)中,將各個(gè)模塊進(jìn)行異構(gòu)連接,形成一個(gè)端到端學(xué)習(xí)網(wǎng)絡(luò)。
68、對(duì)于詞向量特征嵌入模塊,對(duì)預(yù)測(cè)值pred和真實(shí)標(biāo)簽label進(jìn)行損失計(jì)算。計(jì)算公式如下:
69、
70、其中,w為預(yù)測(cè)值,為真實(shí)標(biāo)簽值,σ(·)為s型函數(shù),將實(shí)數(shù)映射到區(qū)間[0,1]。
71、在黎曼流形圖卷積特征提取模塊中,將一連串的分類處理步驟抽象為函數(shù)f,通過它得出最終的預(yù)測(cè)結(jié)果,即:
72、
73、隨后,采用交叉熵?fù)p失函數(shù)來計(jì)算模型在二分類任務(wù)上的損失lcf:
74、
75、其中,n表示樣本總數(shù),yi是樣本i的真實(shí)標(biāo)簽。
76、最終模型的損失函數(shù)由上面三個(gè)損失共同組成,包括詞嵌入的損失有監(jiān)督學(xué)習(xí)二分類損失以及耦合混淆對(duì)比學(xué)習(xí)的損失最終通過權(quán)重進(jìn)行聯(lián)合,表示為:
77、
78、優(yōu)化問題為最小化總損失即
79、在步驟6)中,利用現(xiàn)實(shí)世界的智能合約文件作為測(cè)試數(shù)據(jù)集對(duì)本系統(tǒng)進(jìn)行準(zhǔn)確率等指標(biāo)的測(cè)試,分別在重入漏洞、算術(shù)漏洞以及時(shí)間戳依賴漏洞上進(jìn)行實(shí)驗(yàn);性能指標(biāo)包括準(zhǔn)確率、精確率、召回率以及f1分?jǐn)?shù)。
80、與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
81、本發(fā)明采用了端到端的學(xué)習(xí)方法,將整個(gè)網(wǎng)絡(luò)進(jìn)行聯(lián)合學(xué)習(xí),實(shí)現(xiàn)各個(gè)模塊的促進(jìn)學(xué)習(xí)。將智能合約的語義特征和結(jié)構(gòu)特征進(jìn)行融合學(xué)習(xí),以挖掘潛在的漏洞特征,從而提高漏洞檢測(cè)的效果和準(zhǔn)確性。本發(fā)明針對(duì)合約圖在傳統(tǒng)圖嵌入方法難以有效捕捉其豐富的結(jié)構(gòu)信息這一問題,采用基于黎曼流形殘差圖卷積神經(jīng)網(wǎng)絡(luò)的特征學(xué)習(xí)方法。這種網(wǎng)絡(luò)特別適合處理那些內(nèi)在層次性和復(fù)雜關(guān)系密切交織的數(shù)據(jù)結(jié)構(gòu),為理解和挖掘智能合約中潛在的復(fù)雜性與漏洞特征開辟了新的途徑。本發(fā)明采用退火混淆圖對(duì)比學(xué)習(xí)方法來解決模型泛化能力受噪聲標(biāo)簽影響的問題,提高模型的魯棒性和泛化能力,為模型的穩(wěn)健性和可靠性提供可靠的保障。