[发明专利]一种基于代码插桩的以太坊智能合约重入漏洞检测方法有效
申请号: | 201910125985.3 | 申请日: | 2019-02-20 |
公开(公告)号: | CN109800175B | 公开(公告)日: | 2020-08-11 |
发明(设计)人: | 张鹏程;肖锋;于佳男 | 申请(专利权)人: | 河海大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06Q40/04 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 孟红梅 |
地址: | 210024 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于代码插桩的以太坊智能合约重入漏洞检测方法,属于信息技术领域。该方法通过分析以太坊智能合约源代码,根据特定转账函数语句的位置并结合函数间的相互调用关系,找到所有可能成为重入攻击靶函数的函数,并向被测合约源代码中插入用以收集被测合约运行时的数据流信息的探针代码;然后根据靶函数的函数可见性,通过向被测合约中添加函数的方式,在添加的函数中调用所有可以被外部调用的靶函数,用以触发靶函数运行,使得插入的探针代码能够获取到被测合约内的数据流信息,最终通过数据流信息判断被测合约是否具有可重入漏洞。与现有检测方法相比,本发明方法具有生成测试合约效率快、重入漏洞识别率高等优点。 | ||
搜索关键词: | 一种 基于 代码 以太 智能 合约 漏洞 检测 方法 | ||
【主权项】:
1.一种基于代码插桩的以太坊智能合约重入漏洞检测方法,其特征在于,包括如下步骤:(1)判断被测合约内是否存在通过继承相互关联的合约,若存在,则导入继承相关的代码;否则进入下一步;(2)判断被测合约内有无函数使用指定转账函数方式进行以太币转账,若有,则进入下一步;否则报告被测合约无可重入漏洞,检测结束;(3)收集所有函数体内调用了指定转账函数的函数名,记为直接调用函数;并基于直接调用函数进行递归查找,获得所有在执行过程中可能执行到指定转账函数语句的函数名,记为间接调用函数;(4)在直接调用函数的函数声明/定义后的第一条语句的位置处插入A类探针代码,在直接调用函数中的指定转账函数语句的前一句的位置处插入B类探针代码,在在直接调用函数中的指定转账函数语句的后一句的位置处插入C类探针代码;在调用链首的间接调用函数的函数声明/定义后的第一条语句的位置处插入A类探针代码,在被测合约的第一条语句位置插入D类探针代码;其中A类探针代码用于获取转帐流程开始前账户代币数量,B类探针代码用于获取调用转账前账户代币数量以及用于判定被测合约内是否存在重入漏洞,C类探针代码用于重置变量值;D类探针代码用于声明变量;探针代码中的账本名和地址名分别根据合约内声明的用于发挥账本作用的映射型变量的变量名及接收指定转账函数的地址名设定;(5)向被测合约内插入模拟重入攻击的测试函数,所述测试函数执行语句包括:接收外部的以太币转账并且在账本中增加相应记录;调用直接调用函数和间接调用函数中的所有外部可见的函数作为重入攻击靶函数;(6)生成被测合约的部署文件,编译、部署被测合约于私有链上;(7)运行被测合约中的模拟重入攻击的测试函数,插入的探针代码获取到程序运行时的数据流信息,通过分析数据流信息,给出被测合约是否具有重入漏洞的检测结果。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河海大学,未经河海大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201910125985.3/,转载请声明来源钻瓜专利网。