【技术实现步骤摘要】
一种以太坊智能合约问题检测和预防方法与装置
本专利技术涉及一种代码问题检测和预防方法,尤其涉及一种针对以太坊智能合约的基于正则表达式和程序插桩的问题检测和预防方法,属于区块链安全领域。
技术介绍
以太坊是最大的支持智能合约的区块链,市值超过160亿美元。智能合约是在区块链平台上运行的自主程序。它们通常用几种高级语言开发,然后编译成字节码。一旦将智能合约的字节码部署到区块链,任何人可以调用它的函数,但是不能更改字节码。不幸的是,不可避免的,许多智能合约包含错误,但这些错误不能被修补,因为区块链上数据的不可更改性。因此,拥有能够帮助开发人员在将他们的字节码部署到区块链之前彻底检测智能合约存在的问题的自动化工具是特别重要的。静态代码分析是当前检测以太坊智能合约安全的主流方法,现在已经提出了一些工具来检测智能合约中存在的问题。然而,它们中的大多数只能处理智能合约的字节码。虽然直接分析智能合约字节码能够带来比较优秀的准确率,但检测效率低下,并且不能够覆盖当下绝大部分种类的以太坊智能合约问题。因此,需要一个自动化工具,能够快速地检测以太坊智能合约问题,并且能够覆盖当下绝大部分种类的以太坊智能合约问题,在此基础下,还要拥有不错的准确率。虽然最近Tikhomirov等人提出了一种基于词法分析、语法分析和XPath、处理以太坊智能合约源代码的以太坊智能合约问题检测和预防方法,但他们的方法仍然存在着一些缺陷:他们不能够准确地描述智能合约问题语句的特征;他们无法检测一些对于以太坊智能合约安全有严重威胁的问题,诸如重入漏洞和整数溢出 ...
【技术保护点】
1.一种以太坊智能合约问题检测和预防方法,其特征在于,包括如下步骤:/n步骤1:获取待检测的以太坊智能合约,并将源代码进行格式化;/n步骤2:根据不同问题的特征,确定对应的正则表达式及检测规则,以及确定预防重入漏洞和整数溢出漏洞的代码语句的构造方法;/n步骤3:将格式化后的代码发送到不同的问题检测程序中,问题检测程序根据步骤2定义的正则表达式和检测规则,检测不同种类的智能合约问题;/n步骤4:对于重入漏洞,将格式化后的代码发送到预防重入漏洞程序中,预防重入漏洞程序根据步骤2定义的正则表达式定位可能引入重入漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;/n步骤5:对于整数溢出漏洞,将格式化后的代码发送到预防整数溢出漏洞程序中,预防整数溢出漏洞程序根据步骤2定义的正则表达式定位可能引入整数溢出漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;/n步骤6:根据用户的选择的功能,将步骤3-步骤5中至少一个步骤的检测或预防结果输出给用户。/n
【技术特征摘要】
1.一种以太坊智能合约问题检测和预防方法,其特征在于,包括如下步骤:
步骤1:获取待检测的以太坊智能合约,并将源代码进行格式化;
步骤2:根据不同问题的特征,确定对应的正则表达式及检测规则,以及确定预防重入漏洞和整数溢出漏洞的代码语句的构造方法;
步骤3:将格式化后的代码发送到不同的问题检测程序中,问题检测程序根据步骤2定义的正则表达式和检测规则,检测不同种类的智能合约问题;
步骤4:对于重入漏洞,将格式化后的代码发送到预防重入漏洞程序中,预防重入漏洞程序根据步骤2定义的正则表达式定位可能引入重入漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;
步骤5:对于整数溢出漏洞,将格式化后的代码发送到预防整数溢出漏洞程序中,预防整数溢出漏洞程序根据步骤2定义的正则表达式定位可能引入整数溢出漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;
步骤6:根据用户的选择的功能,将步骤3-步骤5中至少一个步骤的检测或预防结果输出给用户。
2.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤1中作为输入的以太坊智能合约源代码是使用以太坊智能合约编程语言Solidity编写的。
3.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤2中智能合约问题的种类包括严格地比较合约存款、未处理的异常、被外部地址拒绝服务、使用tx.origin进行身份验证、缺失构造函数、锁定的钱、不安全的类型推断、使用Byte[]、昂贵的循环、时间戳依赖、不标准的代币接口、使用浮点数、私有可见性、冗余的拒绝支付、编译器版本问题、不标准的编程风格、整数除法、未显式指明地可见性中的至少一种;每种问题至少使用一个正则表达式描述其特征。
4.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤3包括如下步骤:
步骤31:读取保存着格式化代码的智能合约文件;
步骤32:将格式化的代码发送到不同种类的问题检测程序中;
步骤33:每个问题检测程序将格式化代码保存为一个字符串数组,逐行遍历,使用为这一个问题定义的正则表达式和检测规则匹配这一行代码;如果匹配成功,则认定这一行代码含有这一种问题;如匹配失败,则认定这一行代...
【专利技术属性】
技术研发人员:张鹏程,肖锋,于佳男,张勐,吉顺慧,戴启印,曹文南,
申请(专利权)人:河海大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。