System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本專利技術屬于計算機學科中的信息安全,涉及一種智能合約漏洞檢測方法及系統,具體是一種基于可變異快照的智能合約漏洞自動檢測方法及系統。
技術介紹
1、智能合約作為自動化執行合同條款的計算機程序,在區塊鏈技術的支持下得到廣泛應用。然而,由于智能合約的不可變性和高價值的數字資產,合約中的漏洞可能導致嚴重的安全問題。傳統的漏洞檢測方法存在覆蓋率不足、誤報率高等問題,因此需要一種更為高效且準確的漏洞檢測技術,以確保智能合約的安全性和可靠性。
技術實現思路
1、為了解決現有技術中存在的漏洞檢測覆蓋不足和誤報率高的問題,本專利技術通過結合符號污點分析與模糊測試技術,提出了一種基于可變異快照的智能合約漏洞自動化檢測方法。
2、本專利技術的方法采用的技術方案是:一種基于可變異快照的智能合約漏洞自動檢測方法,包括以下步驟:
3、步驟1:對目標合約進行編譯,生成字節碼,并將字節碼與快照和交易一起傳遞到插樁處理的以太坊虛擬機evm中;
4、步驟2:通過符號污點分析收集合約狀態和區塊鏈環境中的變異約束條件,并在執行分支處設置快照檢查點;
5、步驟3:針對每個快照檢查點,對合約執行狀態和區塊鏈環境進行變異,生成新的變異快照;將變異快照用于啟動分叉進程,在不同的執行上下文中對合約進行測試;
6、步驟4:基于預定義的模糊測試判定方法,對主進程和分叉進程的執行軌跡進行分析,識別和報告潛在的合約漏洞。
7、作為優選,步驟2中,所述符號污點分析,是
8、作為優選,步驟3中,所述變異快照的組件由兩部分組成;第一部分是由鍵值(key,value)對組成的智能合約狀態變量,其中鍵key代表狀態變量在智能合約持久化存儲結構(storage)中存儲的槽位,值value代表了狀態變量在該槽位中的具體數值;第二部分由區塊鏈環境組成,包含智能合約執行依賴的區塊鏈環境,有時間戳、區塊號、賬戶余額、gas價格和交易傳入資金。
9、作為優選,步驟3中,將搜集到的合約狀態和區塊鏈環境中的約束條件作為快照變異的約束,并使用約束求解器solve對約束進行求解,得到的結果作為快照的變異結果,用于模糊測試階段的輸入;具體而言,對于合約狀態的變異,首先定義狀態變量x的變異約束集合其中,i表示模糊測試過程中不同的執行路徑,state[x]i表示在執行路徑i上生成的變異約束,不同的執行路徑會產生不同的變異約束,最終的變異約束集合是所有這些約束的并集;然后隨機從mc[x]中選擇一個約束,并使用約束求解器solve來求解x的一系列可行值作為變異結果x′=solve(state[x]i),state[x]i∈mc[x]。
10、作為優選,步驟3中,使用快照檢查點機制來確定快照的拍攝、恢復和變異時機;具體而言,首先,在合約執行過程中定義并設置多個檢查點,這些檢查點是程序狀態變量或區塊鏈環境變量能影響合約執行的特定位置;檢查點的選擇依據是程序遇到關鍵指令(如sstore、timestamp、number等),在這些指令處,系統會拍攝當前的快照;接著,在每個檢查點處進行快照變異,并進行分叉執行以測試合約在變異快照下的行為;在分叉執行過程中,會保留主執行路徑的一致性,直到檢查點為止,并在這些檢查點處進行快照的變異,以觸發潛在的新路徑。
11、作為優選,步驟4中,所述模糊測試分為兩個階段:主執行階段和分支執行階段;所述主執行階段,使用從快照語料庫選取的快照作為執行環境,并在此期間進行變異約束的搜集;所述分支執行階段,使用的快照為變異結果,在此期間進行變異約束的搜集;在一次模糊測試的階段,主執行只進行一次,而分支執行根據變異結果進行多次執行。
12、作為優選,進一步反饋信息回饋給種子庫和快照庫,優化模糊測試循環;
13、具體實現包括以下在步驟:
14、步驟5.1:初始化種子語料庫和快照語料庫;
15、初始化種子語料庫,包含單個事務的種子,其中包含編碼后的函數選擇器、函數參數和調用值;初始化快照語料庫,包括本地部署的區塊鏈環境和合約的初始狀態;種子通過編譯智能合約獲取abi(應用二進制接口),生成函數選擇器,并隨機選擇有效的函數參數和調用值;快照則存儲合約的初始狀態,并在執行過程中根據需要進行更新;
16、步驟5.2:種子語料庫和快照語料庫更新;
17、種子語料庫通過遺傳算法進行更新,包括選擇、交叉和突變;根據以太坊虛擬機(ethereum?virtual?machine,evm)執行的覆蓋反饋和數據依賴性計算種子的適應度分數fitness;
18、fitness=α×sbranch+(1-α)×sdep;
19、其中,sbranch是基于新覆蓋的分支邊緣計算的分支得分,sdep是基于執行過程中狀態修改的數量計算的數據依賴得分,α是小于1的常數;種子的選擇概率p高的種子被優先選擇用于交叉和突變;
20、
21、其中,n是模糊測試生成中的所有種子;在交叉操作中,選擇兩個種子作為父代,分裂其函數參數和調用值,交換這些組件生成兩個新后代;在后代中,函數參數以一定概率進行突變;通過污點分析,維護一個突變池,收集在分支謂詞中遇到的值;參數隨機突變或從突變池中選擇值進行突變;
22、快照語料庫的更新,來自主執行生成的新快照,只有經過驗證的快照才會被添加到語料庫中;
23、步驟5.3:種子和快照的調度;
24、使用遺傳算法進行模糊測試,每一代開始時,從種子語料庫中隨機選擇事務進行測試,同時按保存順序選擇快照;快照在主執行修改狀態或區塊鏈環境后被添加到語料庫中,并在下一次執行中使用;
25、步驟5.4:測試預言機;
26、通過分析主執行和分叉執行的執行軌跡,利用預定義的測試預言機檢測潛在漏洞。
27、作為優選,進一步通過api調用進行鏈上模糊測試;通過集成區塊鏈節點服務商提供的api,記錄區塊鏈上的信息作為鏈上快照。
28、本專利技術的系統采用的技術方案是:一種基于可變異快照的智能合約漏洞自動檢測系統,包括存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,所述處理器執行所述程序時實現所述基于可變異快照的智能合約漏洞自動檢測方法。
29、相對于現有技術,本專利技術的有益效果能包括:
30、(1)本專利技術提供的檢測方法通過結合符號污點分析和變異快照技術,相較于傳統的模糊測試方法,能夠更有效地覆蓋合約執行的不同狀態,提高了漏洞檢測的覆蓋率和準確性。
31、(2)本專利技術通過對檢測結果的反饋和種子優化,進一步減少了誤報率,并提高了漏洞檢測的效率。動態更新的快照和種子庫確保了測試數據的準確性和有效性。
32、(3)本專利技術支持鏈上模糊測試,使得檢測工具能夠在真實區塊鏈環境中驗證合本文檔來自技高網...
【技術保護點】
1.一種基于可變異快照的智能合約漏洞自動檢測方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟2中,所述符號污點分析,是通過對合約的執行路徑進行符號化操作,搜集得到關于合約狀態和區塊鏈環境的符號表達式和路徑約束。
3.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟3中,所述變異快照的組件由兩部分組成;第一部分是由鍵值(key,value)對組成的智能合約狀態變量,其中鍵key代表狀態變量在智能合約持久化存儲結構中存儲的槽位,值value代表了狀態變量在該槽位中的具體數值;第二部分由區塊鏈環境組成,包含智能合約執行依賴的區塊鏈環境,有時間戳、區塊號、賬戶余額、GAS價格和交易傳入資金。
4.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟3中,將搜集到的合約狀態和區塊鏈環境中的約束條件作為快照變異的約束,并使用約束求解器Solve對約束進行求解,得到的結果作為快照的變異結果,用于模糊測試階段的輸入;具體而言,對于合約狀態
5.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟3中,使用快照檢查點機制來確定快照的拍攝、恢復和變異時機;具體而言,首先,在合約執行過程中定義并設置多個檢查點,這些檢查點是程序狀態變量或區塊鏈環境變量能影響合約執行的特定位置;檢查點的選擇依據是程序遇到關鍵指令,在這些指令處,系統會拍攝當前的快照;接著,在每個檢查點處進行快照變異,并進行分叉執行以測試合約在變異快照下的行為;在分叉執行過程中,會保留主執行路徑的一致性,直到檢查點為止,并在這些檢查點處進行快照的變異,以觸發潛在的新路徑。
6.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟4中,所述模糊測試分為兩個階段:主執行階段和分支執行階段;所述主執行階段,使用從快照語料庫選取的快照作為執行環境,并在此期間進行變異約束的搜集;所述分支執行階段,使用的快照為變異結果,在此期間進行變異約束的搜集;在一次模糊測試的階段,主執行只進行一次,而分支執行根據變異結果進行多次執行。
7.根據權利要求1-6任一項所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:進一步反饋信息回饋給種子庫和快照庫,優化模糊測試循環;
8.根據權利要求1-6任一項所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:進一步通過API調用進行鏈上模糊測試;通過集成區塊鏈節點服務商提供的API,記錄區塊鏈上的信息作為鏈上快照。
9.一種基于可變異快照的智能合約漏洞自動檢測系統,包括存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,其特征在于,所述處理器執行所述程序時實現如權利要求1至8任一項所述基于可變異快照的智能合約漏洞自動檢測方法。
...【技術特征摘要】
1.一種基于可變異快照的智能合約漏洞自動檢測方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟2中,所述符號污點分析,是通過對合約的執行路徑進行符號化操作,搜集得到關于合約狀態和區塊鏈環境的符號表達式和路徑約束。
3.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟3中,所述變異快照的組件由兩部分組成;第一部分是由鍵值(key,value)對組成的智能合約狀態變量,其中鍵key代表狀態變量在智能合約持久化存儲結構中存儲的槽位,值value代表了狀態變量在該槽位中的具體數值;第二部分由區塊鏈環境組成,包含智能合約執行依賴的區塊鏈環境,有時間戳、區塊號、賬戶余額、gas價格和交易傳入資金。
4.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,其特征在于:步驟3中,將搜集到的合約狀態和區塊鏈環境中的約束條件作為快照變異的約束,并使用約束求解器solve對約束進行求解,得到的結果作為快照的變異結果,用于模糊測試階段的輸入;具體而言,對于合約狀態的變異,首先定義狀態變量x的變異約束集合其中,i表示模糊測試過程中不同的執行路徑,state[x]i表示在執行路徑i上生成的變異約束,不同的執行路徑會產生不同的變異約束,最終的變異約束集合是所有這些約束的并集;然后隨機從mc[x]中選擇一個約束,并使用約束求解器solve來求解x的一系列可行值作為變異結果x′=solve(state[x]i),state[x]i∈mc[x]。
5.根據權利要求1所述的基于可變異快照的智能合約漏洞自動檢測方法,...
【專利技術屬性】
技術研發人員:陳晶,梁瑞超,吳聰,曹若辰,杜瑞穎,熊翹楚,
申請(專利權)人:武漢大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。