欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于跨合約重入語義圖的重入漏洞智能檢測方法

文檔序號(hào):40454204發(fā)布日期:2024-12-27 09:19閱讀:20來源:國知局
一種基于跨合約重入語義圖的重入漏洞智能檢測方法

本發(fā)明屬于軟件測試中的漏洞檢測領(lǐng)域,尤其適用于智能合約軟件測試中的重入漏洞檢測領(lǐng)域,其目的在于通過生成語義信息更加豐富的跨合約重入語義圖來提高智能合約重入漏洞的檢測效率,保障智能合約測試的充分性。


背景技術(shù):

1、智能合約是一種具有自我驗(yàn)證、自我執(zhí)行、抗篡改屬性的計(jì)算機(jī)程序。它以自動(dòng)和透明的方式驗(yàn)證和執(zhí)行買賣雙方之間的交易,而不涉及第三方。當(dāng)前已有數(shù)以萬計(jì)的智能合約被部署,控制著價(jià)值數(shù)百億美元資產(chǎn),正因?yàn)槿绱?,智能合約安全性一直備受關(guān)注。重入漏洞也被稱為dao攻擊,是指在程序執(zhí)行期間能夠中斷,并在上一次調(diào)用完成之前再次被調(diào)用,導(dǎo)致余額和狀態(tài)被不當(dāng)修改的漏洞。當(dāng)智能合約中存在重入漏洞時(shí),攻擊者可以利用以太坊智能合約中的回退函數(shù)來重復(fù)支付,從而耗盡受害者的余額。據(jù)bcsec和slowmist統(tǒng)計(jì),重入漏洞已經(jīng)給區(qū)塊鏈平臺(tái)和用戶造成了大約1.5億美元的毀滅性財(cái)務(wù)損失。因此,重入漏洞檢測是十分必要的。

2、重入智能檢測通過訓(xùn)練深度學(xué)習(xí)模型來理解和識(shí)別智能合約代碼中的模式,以此檢測可能存在的重入漏洞。它是一種將智能合約代碼表示為序列、樹或者圖,并將其轉(zhuǎn)換成矢量作為輸入,進(jìn)而構(gòu)建深度學(xué)習(xí)模型實(shí)現(xiàn)重入漏洞檢測的方法。語義圖是表示合約代碼的圖形數(shù)據(jù)結(jié)構(gòu),它不僅提供了合約的上下文信息,還提供了數(shù)據(jù)流和語句執(zhí)行順序的語義信息,這有助于深度學(xué)習(xí)模型在特征提取過程中捕獲更加豐富的語義信息。然而,語義圖只關(guān)注合約內(nèi)部邏輯,沒有考慮多個(gè)合約之間復(fù)雜的交互語義信息,并且包含了大量與重入漏洞無關(guān)的冗余信息,這給重入檢測模型的質(zhì)量以及重入檢測效果帶來了威脅。因此,如何構(gòu)建面向重入漏洞且語義豐富的跨合約重入語義圖,成為提高重入漏洞檢測效率的關(guān)鍵問題。

3、對此,本發(fā)明提出一種基于跨合約重入語義圖的重入漏洞智能檢測方法。該方法首先對智能合約代碼進(jìn)行程序分析,得到每個(gè)合約的語義圖;在此基礎(chǔ)上,分析調(diào)用合約與被調(diào)用合約之間的調(diào)用關(guān)系,通過添加合約之間的函數(shù)調(diào)用控制流、函數(shù)參數(shù)傳遞的數(shù)據(jù)流、函數(shù)返回值數(shù)據(jù)流和基于fallback機(jī)制的控制流,得到包含全局上下文信息的跨合約語義圖;然后,針對引發(fā)重入漏洞的fallback機(jī)制,對跨合約語義圖中面向重入漏洞的關(guān)鍵節(jié)點(diǎn)進(jìn)行雙向約簡,通過去除與重入漏洞無關(guān)的節(jié)點(diǎn)得到跨合約重入語義圖;最后,以跨合約重入語義圖的矢量化結(jié)果作為輸入,應(yīng)用序列模型學(xué)習(xí)跨合約重入語義圖的語義特征,實(shí)現(xiàn)重入漏洞智能檢測。通過分析語義圖中合約之間調(diào)用的控制流和數(shù)據(jù)流依賴關(guān)系和基于fallback機(jī)制對跨合約語義圖雙向約簡,并且使用序列模型能夠?qū)W習(xí)跨合約重入語義圖中更豐富的語義特征,從而有效提高了重入漏洞的檢測效率。


技術(shù)實(shí)現(xiàn)思路

1、本發(fā)明通過提供一種基于跨合約重入語義圖的重入漏洞智能檢測方法,來有效解決語義圖目前存在的不完整且存在大量與重入漏洞無關(guān)冗余信息的問題,進(jìn)而生成跨合約重入語義圖,提高重入漏洞檢測有效性,最終實(shí)現(xiàn)暴露合約缺陷,保障合約安全的目標(biāo)。

2、為達(dá)成上述目標(biāo),本方法首先分析合約語義圖之間的調(diào)用關(guān)系,通過添加合約之間的函數(shù)調(diào)用控制流、函數(shù)參數(shù)傳遞數(shù)據(jù)流、函數(shù)返回值數(shù)據(jù)流和基于fallback機(jī)制的控制流,生成跨合約語義圖;然后,針對引發(fā)重入漏洞的fallback機(jī)制,對跨合約語義圖中面向重入漏洞的關(guān)鍵節(jié)點(diǎn)進(jìn)行雙向約簡,通過去除與重入漏洞無關(guān)的節(jié)點(diǎn),得到跨合約重入語義圖;最后,以跨合約重入語義圖的矢量化結(jié)果作為輸入,應(yīng)用序列模型學(xué)習(xí)跨合約重入語義圖的語義信息,最終實(shí)現(xiàn)重入漏洞智能檢測。具體而言,該方法包括下列步驟。

3、1)跨合約語義圖csg生成。給定調(diào)用合約cont_call與被調(diào)用合約cont_called。首先,我們構(gòu)建了每個(gè)合約的語義圖sg并通過合并將其初始化為csg,對于csg中的每個(gè)函數(shù)調(diào)用節(jié)點(diǎn)node_fc,找到csg中被調(diào)用函數(shù)的定義節(jié)點(diǎn)node_fd,添加控制流邊edge_fc=<node_fc,node_fd>到csg的控制流邊集合中。其次,對于每個(gè)函數(shù)調(diào)用節(jié)點(diǎn)node_fc中的實(shí)參節(jié)點(diǎn)node_arg,找到被調(diào)用函數(shù)定義節(jié)點(diǎn)node_fd中的形參節(jié)點(diǎn)node_par,添加數(shù)據(jù)流邊edge_fp=<node_arg,node_par>到csg的數(shù)據(jù)流邊集合中。然后,對于每個(gè)調(diào)用節(jié)點(diǎn)node_fc中的返回值數(shù)組節(jié)點(diǎn)node_fd.tup,該數(shù)組中的參數(shù)用于接收被調(diào)用函數(shù)返回的參數(shù),找到被調(diào)用函數(shù)定義節(jié)點(diǎn)node_fd中的返回值數(shù)組節(jié)點(diǎn)node_fd.tup,添加返回值數(shù)據(jù)流邊edge_fr=<node_fd.id,node_fc.id>到csg的數(shù)據(jù)流邊集合中。接著,對于每個(gè)包含payable節(jié)點(diǎn)的調(diào)用節(jié)點(diǎn)node_fc,找到合約內(nèi)fallback節(jié)點(diǎn),添加控制流邊edge_fb1=<node_fc,node_fb>和執(zhí)行結(jié)束的控制流邊edge_fb2=<node_fb,node_fc>到csg的控制流邊集合中。最后,輸出csg。

4、2)跨合約重入語義圖crsg生成。給定跨合約語義圖csg。首先,我們初始化關(guān)鍵節(jié)點(diǎn)集合nodes_cri為空。其次,在csg中遍歷調(diào)用節(jié)點(diǎn)node_fc,如果調(diào)用節(jié)點(diǎn)中存在payable標(biāo)識(shí),表示該調(diào)用節(jié)點(diǎn)存在轉(zhuǎn)賬操作,我們將其添加到關(guān)鍵節(jié)點(diǎn)集合nodes_cri中。然后,我們遍歷該合約定義節(jié)點(diǎn)node_contd的子節(jié)點(diǎn)找到fallback節(jié)點(diǎn)node_fb,我們將其添加到關(guān)鍵節(jié)點(diǎn)集合nodes_cri中。接著,我們將關(guān)鍵節(jié)點(diǎn)集合nodes_cri初始化為crsg中節(jié)點(diǎn)集合,在csg中遍歷關(guān)鍵節(jié)點(diǎn)集合nodes_cri,通過前向分析csg中所有以關(guān)鍵節(jié)點(diǎn)為起始節(jié)點(diǎn)的路徑,并將每條路徑中節(jié)點(diǎn)和邊添加到crsg中;再通過后向分析csg中所有以關(guān)鍵節(jié)點(diǎn)為結(jié)束節(jié)點(diǎn)的路徑,并將每條路徑中節(jié)點(diǎn)和邊添加到crsg中。最后,輸出crsg。

5、3)重入漏洞智能檢測。給定跨合約重入語義圖crsg。首先,將crsg輸入到word2vec模型獲得crsg矢量化結(jié)果。其次,將矢量化結(jié)果輸入到嵌入層中,每個(gè)矢量對應(yīng)crsg中的某個(gè)節(jié)點(diǎn)或邊,這些矢量堆疊一起形成一個(gè)嵌入矩陣,如公式(1)所示,其中v表示節(jié)點(diǎn),n表示跨合約重入語義圖個(gè)數(shù)。然后,將嵌入矩陣輸入到序列模型中學(xué)習(xí)跨合約重入語義圖的語義特征得到權(quán)重矩陣。最后,將得到的權(quán)重輸入到輸出層中,我們使用softmax函數(shù)進(jìn)行歸一化處理并且輸出一個(gè)概率分布,如公式(2)所示,再將得到的概率分布作為輸入,模型選擇最高概率的類別作為最終的預(yù)測結(jié)果y*,如公式(3)所示。

6、

7、進(jìn)一步,其中上述步驟1)的具體步驟如下:

8、步驟1)-1:起始狀態(tài);

9、步驟1)-2:輸入調(diào)用合約cont_call和被調(diào)用合約cont_called;

10、步驟1)-3:構(gòu)建每個(gè)合約語義圖sg并將其合并初始化為csg;

11、步驟1)-4:遍歷csg中每個(gè)節(jié)點(diǎn)node;

12、步驟1)-5:判斷node是否為調(diào)用節(jié)點(diǎn)node_fc,若是則執(zhí)行下一步,若不是則執(zhí)行步驟1)-7;

13、步驟1)-6:找到調(diào)用節(jié)點(diǎn)node_fc和被調(diào)用函數(shù)定義節(jié)點(diǎn)node_fd,添加控制流邊edge_fc=<node_fc,node_fd>到csg控制流集合中;

14、步驟1)-7:判斷node是否為node_fc中實(shí)參節(jié)點(diǎn)node_arg,若是則執(zhí)行下一步,若不是則執(zhí)行步驟1)-9;

15、步驟1)-8:找到實(shí)參節(jié)點(diǎn)node_arg對應(yīng)的node_fd中形參節(jié)點(diǎn)node_par,添加數(shù)據(jù)流邊edge_fp=<node_arg,node_par>添加到csg數(shù)據(jù)流集合中;

16、步驟1)-9:判斷node是否為node_fc中返回值參數(shù)節(jié)點(diǎn)node_fc.id,若是則執(zhí)行下一步,若不是則執(zhí)行步驟1)-11;

17、步驟1)-10:找到返回值參數(shù)節(jié)點(diǎn)node_fc.id對應(yīng)的被調(diào)用函數(shù)定義節(jié)點(diǎn)node_fd中返回值參數(shù)節(jié)點(diǎn)node_fd.id,添加數(shù)據(jù)流邊edge_fr=<node_fd.id,node_fc.id>到csg數(shù)據(jù)流集合中;

18、步驟1)-11:判斷node是否為包含payable節(jié)點(diǎn)的node_fc,若是則執(zhí)行下一步,若不是則執(zhí)行步驟1)-13;

19、步驟1)-12:找到node_fc對應(yīng)的合約內(nèi)節(jié)點(diǎn)node_fb,添加控制流邊edge_fb1=<node_fc,node_fb>和edge_fb2=<node_fb,node_fc>到csg控制流集合中;

20、步驟1)-13:判斷csg是否全部遍歷完成,若是則執(zhí)行下一步,若不是則執(zhí)行步驟1)-4;

21、步驟1)-14:輸出csg;

22、步驟1)-15:結(jié)束狀態(tài)。

23、進(jìn)一步,其中上述步驟2)的具體步驟如下:

24、步驟2)-1:起始狀態(tài);

25、步驟2)-2:輸入csg;

26、步驟2)-3:初始化關(guān)鍵節(jié)點(diǎn)集合nodes_cri為空;

27、步驟2)-4:遍歷csg中每個(gè)節(jié)點(diǎn)node;

28、步驟2)-5:判斷node是否為node_fc并且node_fc中包含payable,若是則執(zhí)行下一步,若不是則執(zhí)行步驟2)-7;

29、步驟2)-6:添加node_fc到nodes_cri集合中;

30、步驟2)-7:判斷node是否為fallback節(jié)點(diǎn)node_fb,若是則執(zhí)行下一步,若不是則執(zhí)行步驟2)-9;

31、步驟2)-8:添加node_fb到nodes_cri集合中;

32、步驟2)-9:判斷csg是否全部遍歷完成,若是則執(zhí)行下一步,若不是則執(zhí)行步驟2)-4;

33、步驟2)-10:將nodes_cri節(jié)點(diǎn)集合初始化為crsg中節(jié)點(diǎn)集合;

34、步驟2)-11:遍歷csg找到以node_cri中節(jié)點(diǎn)為起始節(jié)點(diǎn)的路徑;

35、步驟2)-12:將其路徑所有邊和節(jié)點(diǎn)添加至crsg;

36、步驟2)-13:遍歷csg找到以node_cri中節(jié)點(diǎn)為結(jié)束節(jié)點(diǎn)的路徑;

37、步驟2)-14:將其路徑所有邊和節(jié)點(diǎn)添加至crsg;

38、步驟2)-15:輸出crsg;

39、步驟2)-16:結(jié)束狀態(tài)。

40、進(jìn)一步,其中上述步驟3)的具體步驟如下:

41、步驟3)-1:起始狀態(tài);

42、步驟3)-2:輸入crsg;

43、步驟3)-3:通過word2vec將crsg矢量化;

44、步驟3)-4:將crsg矢量化結(jié)果輸入到嵌入層獲得嵌入矩陣r;

45、步驟3)-5:將r輸入到序列模型獲得權(quán)重矩陣w;

46、步驟3)-6:將w輸入到輸出層進(jìn)行歸一化處理獲得概率分布p;

47、步驟3)-7:選擇最高概率類別作為預(yù)測結(jié)果y;

48、步驟3)-8:輸出重入檢測結(jié)果;

49、步驟3)-9:結(jié)束狀態(tài)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
鄂尔多斯市| 乐都县| 阆中市| 临武县| 南雄市| 弥渡县| 林口县| 阿克陶县| 偏关县| 重庆市| 太湖县| 恩平市| 武宣县| 莒南县| 沂水县| 公主岭市| 获嘉县| 监利县| 内乡县| 徐水县| 吴川市| 千阳县| 南宫市| 中方县| 边坝县| 宽城| 左权县| 金堂县| 南开区| 嘉鱼县| 陵川县| 高邑县| 通渭县| 潜江市| 宜兴市| 华宁县| 沙洋县| 禄丰县| 葵青区| 星子县| 黔西县|