论文部分内容阅读
近年来,区块链技术受到了越来越多的关注与重视,而基于区块链技术的智能合约的设计与开发也成为了热门的研究方向。一段优秀的智能合约能够提供安全可靠的服务,从而高效地解决现实生活中的问题。然而由于开发人员的技术水平参差不齐,其编写的智能合约也可能会出现安全问题,不安全的智能合约的发布使用可能会对用户造成巨大损失。因此,在正式发布智能合约之前,对其进行安全检测是尤为重要的。本文设计并实现了一个针对以太坊平台的智能合约安全检测系统,通过对智能合约的检测来查找并修复其潜在的安全问题,提高其安全性。本论文主要设计并实现了针对以太坊智能合约代码的安全检测系统,首先对目前已经发现的智能合约的安全问题进行讨论和研究,然后使用多种技术手段来对不同形式的智能合约进行全方位地审计。针对拥有项目源代码的智能合约,系统将已知的漏洞特征抽象为语法树形式,然后利用ANTLR语法分析器,按照自定义的语法规约规则,对项目源码进行词法和语法分析,从而将代码转换为抽象语法树的形式,最后将其与漏洞语法树进行匹配,检查是否存在安全漏洞;此外,系统通过构建私有链,将该智能合约模拟发布,然后利用模糊测试技术对合约进行动态检测。动态检测主要针对智能合约中的函数部分,系统首先根据不同函数的输入参数和返回值的类型对函数进行分类,然后利用机器学习技术对不同类型的函数进行建模和评估,选择出最佳的算法来辅助测试,从而提高模糊测试的效率。针对只有二进制文件的智能合约,系统首先将二进制代码反汇编成EVM汇编码,然后根据智能合约的语法规则和内存结构将其反编译成简单的高级语言形式,供安全人员进一步检查;此外,系统将二进制代码转化成中间语言LLVM-IR的形式,并利用KLEE符号执行引擎对其进行漏洞挖掘。最终,系统将测试得到的智能合约的审计结果汇总并以报告形式展示。本论文的主要成果在于设计并实现了一个全面且可靠的针对以太坊平台上智能合约的安全检测系统。在系统中完成了漏洞的抽象建模;实现了对智能合约Solidity代码文件的语法树规约;研究了在进行模糊测试时,引入机器学习技术的有效性;完成了对智能合约的符号执行工作。最后,通过对真实场景下的上千个智能合约的测试,证明了系统的实用性和可靠性。