[發(fā)明專利]一種針對EOSIO智能合約的漏洞檢測方法及系統(tǒng)在審
| 申請?zhí)枺?/td> | 202210539547.3 | 申請日: | 2022-05-17 |
| 公開(公告)號: | CN114996126A | 公開(公告)日: | 2022-09-02 |
| 發(fā)明(設(shè)計)人: | 劉洋洋;周健飛;陳廳;蔣天星;宋書瑋;程曦;吳昊 | 申請(專利權(quán))人: | 電子科技大學(xué) |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F21/57 |
| 代理公司: | 電子科技大學(xué)專利中心 51203 | 代理人: | 陳一鑫 |
| 地址: | 611731 四川省成*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 針對 eosio 智能 合約 漏洞 檢測 方法 系統(tǒng) | ||
1.一種針對EOSIO智能合約的漏洞檢測方法,該方法包括:
步驟1:對EOSIO區(qū)塊鏈平臺的鏈API與WebAssembly虛擬機(jī)進(jìn)行插樁,插樁代碼在智能合約運(yùn)行期間記錄其鏈API調(diào)用信息、代碼覆蓋率信息;
步驟2:對有源代碼的智能合約,將智能合約源代碼進(jìn)行編譯,生成智能合約ABI文件和WebAssembly字節(jié)碼文件,對于無源代碼的智能合約,直接讀取其ABI文件和WebAssembly字節(jié)碼文件;
步驟3:對智能合約WebAssembly字節(jié)碼文件進(jìn)行插樁,插樁代碼在智能合約運(yùn)行期間記錄其執(zhí)行路徑;
步驟4:將智能合約字節(jié)碼文件部署到本地區(qū)塊鏈節(jié)點(diǎn),解析智能合約ABI文件,獲取智能合約的函數(shù)列表;
步驟5:根據(jù)步驟4獲得的智能合約函數(shù)列表生成測試用例,并在區(qū)塊鏈上執(zhí)行;所述測試用例包括智能合約中函數(shù)列表的方法或函數(shù),以及調(diào)用該方法或函數(shù)所需的參數(shù);
步驟6:記錄智能合約執(zhí)行路徑和代碼覆蓋率,判斷執(zhí)行路徑是否符合測試預(yù)言,從而判斷報告智能合約中的安全漏洞;所述代碼覆蓋率即代碼執(zhí)行率,所述測試預(yù)言指存在漏洞的智能合約可能的執(zhí)行路徑;
步驟7:根據(jù)代碼覆蓋率對測試用例進(jìn)行變異,返回步驟5進(jìn)行重復(fù)操作。
2.如權(quán)利要求1所述的一種針對EOSIO智能合約的漏洞檢測方法,其特征在于,所述步驟1中的具體插樁方法為:
步驟A1:對EOSIO區(qū)塊鏈平臺的每個鏈API,在其實(shí)現(xiàn)函數(shù)入口處,插入代碼記錄鏈API調(diào)用信息,并將調(diào)用信息寫入到日志文件;調(diào)用信息具體包括,鏈API的調(diào)用者、鏈API的調(diào)用時間以及調(diào)用鏈API使用的參數(shù);
步驟A2:對WebAssembly虛擬機(jī)尋址和跳轉(zhuǎn)邏輯進(jìn)行插樁,其插樁方式為:搜索WebAssembly虛擬機(jī)源代碼中處理跳轉(zhuǎn)和函數(shù)調(diào)用的代碼位置,即修改程序計數(shù)器PC的代碼位置,并在這些位置處插入計算程序計數(shù)器PC的當(dāng)前地址和跳轉(zhuǎn)后的地址的代碼,記錄程序計數(shù)器PC的當(dāng)前地址和跳轉(zhuǎn)后的地址;
步驟A3:在步驟A2搜索到的插樁位置,插入代碼對WebAssembly虛擬機(jī)的程序計數(shù)器PC的當(dāng)前位置P1和跳轉(zhuǎn)位置P2先進(jìn)行一次異或運(yùn)算,再對P1和P2進(jìn)行一次移位運(yùn)算,生成一個整數(shù)用于標(biāo)識被測試智能合約的一條執(zhí)行路徑;
步驟A4:在步驟A2搜索到的插樁位置,插入統(tǒng)計被測試智能合約執(zhí)行路徑的代碼,插入的代碼將步驟A3生成的被測試合約的執(zhí)行路徑記錄到智能合約代碼覆蓋率信息文件。
3.如權(quán)利要求1所述的一種針對EOSIO智能合約的漏洞檢測方法,其特征在于,所述步驟3中的插樁方法為:
步驟B1:對智能合約WebAssembly字節(jié)碼文件進(jìn)行反匯編獲得WAST文件,然后提取智能合約導(dǎo)入的函數(shù)簽名;
步驟B2.在WAST文件中搜索插樁位置,搜索插樁位置的具體確定方式為:搜索每個WAST文件中的函數(shù)定義區(qū),對每個函數(shù),定位該函數(shù)棧分配的指令序列;其中,棧分配指令序列的特征:首先是一條將棧指針變量讀取到棧上的全局變量讀取指令,再是一條將棧長度讀取到棧上的32位整數(shù)入棧指令,最后是一條將棧指針變量減去棧長度變量生成新的棧指針變量的32位整數(shù)減法指令,這條32位整數(shù)減法指令結(jié)束的位置即為插樁位置;
步驟B3:在WAST文件函數(shù)導(dǎo)入段插入智能合約導(dǎo)入的函數(shù)簽名;
步驟B4:在WAST文件中的步驟B2搜索到的每個插入位置,插入智能合約導(dǎo)入的函數(shù)調(diào)用的堆棧分配代碼、函數(shù)調(diào)用代碼和堆棧清理代碼;
步驟B5:將WAST文件重新編譯為WebAssembly文件,完成插樁。
4.如權(quán)利要求1所述的一種針對EOSIO智能合約的漏洞檢測方法,其特征在于,所述步驟6中獲取智能合約的執(zhí)行路徑的方法為:讀取步驟1所述的對EOSIO區(qū)塊鏈平臺的鏈API的插樁代碼產(chǎn)生的鏈API調(diào)用信息日志文件,并讀取步驟3所述的對對智能合約WebAssembly字節(jié)碼的插樁代碼產(chǎn)生的智能合約執(zhí)行路徑日志文件,兩者共同組成智能合約的執(zhí)行路徑。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于電子科技大學(xué),未經(jīng)電子科技大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210539547.3/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 合約轉(zhuǎn)賬方法、設(shè)備和存儲介質(zhì)
- 區(qū)塊鏈合約升級方法、裝置、計算機(jī)設(shè)備及可讀存儲介質(zhì)
- 智能合約測試方法、裝置、計算機(jī)設(shè)備和存儲介質(zhì)
- 智能合約生成方法、裝置、計算機(jī)設(shè)備和存儲介質(zhì)
- 實(shí)現(xiàn)可更新智能合約的系統(tǒng)和方法
- 一種管理區(qū)塊鏈系統(tǒng)合約的方法和裝置
- 合約簽署方法、裝置、電子設(shè)備及可讀存儲介質(zhì)
- 基于加密貨幣的智能合約生成方法、相關(guān)設(shè)備及存儲介質(zhì)
- 智能合約的自動測試方法、裝置、計算機(jī)設(shè)備和存儲介質(zhì)
- 智能合約執(zhí)行方法、裝置、系統(tǒng)、存儲介質(zhì)及電子設(shè)備





