[发明专利]一种智能合约漏洞检测方法有效
申请号: | 201911080006.3 | 申请日: | 2019-11-07 |
公开(公告)号: | CN110866255B | 公开(公告)日: | 2022-04-12 |
发明(设计)人: | 高健博;任立峰;李青山;吴振豪;冯向军;吴奇泽;刘世克;司华友 | 申请(专利权)人: | 博雅正链(北京)科技有限公司;南京博雅区块链研究院有限公司;北京国信云服科技有限公司 |
主分类号: | G06F21/56 | 分类号: | G06F21/56;G06F21/57;G06Q40/04 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 李珉 |
地址: | 100037 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 智能 合约 漏洞 检测 方法 | ||
1.一种智能合约漏洞检测方法,其特征在于:包括以下步骤:
步骤1、将智能合约和调用智能合约的输入数据作为智能合约漏洞检测方法的输入,并判断智能合约是否为源代码,如果是则先将其编译为二进制再执行步骤2,否则直接执行步骤2;
步骤2、将调用智能合约的输入数据切片为多个数据单元,并将每个数据单元标记为一个污点;
步骤3、跟踪污点传播过程;在智能合约运行的过程中,在EVM层对标记的污点进行追踪;
步骤4、当追踪到污点参与算术运算时,如果算术运算的结果发生溢出,则执行步骤5;如果算术运算的结果未发生溢出,则判定智能合约存在潜在的算术溢出漏洞,执行步骤6;
步骤5、识别保护机制;通过SafeMath函数库的二进制代码特征匹配智能合约中未运行的代码,如果匹配到,则该处算术运算的结果溢出是受保护的;如果未匹配到,则该处算术运算的结果溢出是未受保护的;判断此时调用智能合约的输入数据是否为步骤6生成的,如果是则根据步骤6继续进行判断,如果不是则执行步骤8;
步骤6、触发潜在漏洞;对于潜在的算术溢出漏洞,将调用智能合约的输入数据的每个数据单元依次置为0和最大值,然后对于生成的每个输入数据,重新执行步骤1-5,收集检测结果;如果检测结果中至少有1个结果为未受保护的算术溢出,则判断该智能合约为可触发的潜在算术溢出,否则为未触发的潜在算术溢出;
步骤7、如果直到智能合约运行结束,没有污点参与算术运算,则智能合约是安全的;判断此时调用智能合约的输入数据是否为步骤6生成的,如果是则根据步骤6继续进行判断,如果不是则执行步骤8;
步骤8、对于未受保护的算术溢出和可触发的潜在算术溢出的智能合约,则判定该智能合约是不安全的,并给出可触发溢出的输入数据;对于没有污点参与算术运算的、受保护的算术溢出和未触发的潜在算术溢出的智能合约,则判定该智能合约是安全的;
步骤3所述在EVM层对标记的污点进行追踪的具体方法为:当EVM对标记为污点的数据进行操作时,同步对污点进行操作;当污点参与运算时,运算结果也被标记为污点。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于博雅正链(北京)科技有限公司;南京博雅区块链研究院有限公司;北京国信云服科技有限公司,未经博雅正链(北京)科技有限公司;南京博雅区块链研究院有限公司;北京国信云服科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911080006.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:聚乳酸高阻隔喷涂处理装置
- 下一篇:一种纳米金属氧化物材料的制备方法