一种针对以太坊智能合约的静态代码审计系统及方法技术方案

技术编号:20993060 阅读:35 留言:0更新日期:2019-04-29 22:54
本发明专利技术公开了一种在区块链的以太坊平台上针对智能合约的静态代码审计系统及方法,属于信息安全技术领域。本发明专利技术能够检测以太坊平台上使用Solidity语言编写的智能合约上存在的安全威胁,定位到具体位置,阐明危害并给出相应的解决方法。本发明专利技术方法:首先,用户将待检测的项目目录或者单个文件的路径输入系统,系统对输入内容进行预处理操作,将整个项目复制到临时工作目录中并删除其中的Solidity文件中的注释内容;其次,系统将通过词法分析和语法分析等操作将每一个Solidity文件都解析成语法树的形式;然后,系统将语法树结构与预先制定的逻辑匹配特征进行静态特征匹配,得到匹配结果;最后,系统将匹配后的结果分类并汇总,生成报告文件,即为检测结果。

A Static Code Audit System and Method for ETF Intelligent Contract

The invention discloses a static code auditing system and method for intelligent contracts on the Ethernet workshop platform of block chain, which belongs to the field of information security technology. The invention can detect the security threat on the intelligent contract written in Solidity language on the platform of ETF, locate the specific position, clarify the harm and provide the corresponding solution. The method of the invention includes: firstly, the user inputs the path of the project directory or a single file to the system, and the system preprocesses the input content, copies the whole project into the temporary working directory and deletes the annotated content in the Solidity file; secondly, the system parses every Solidity file into grammar through operations such as lexical analysis and grammatical analysis. Then, the system matches the grammar tree structure with the pre-determined logical matching features to get the matching results. Finally, the system classifies and summarizes the matched results, and generates a report file, that is, the test results.

【技术实现步骤摘要】
一种针对以太坊智能合约的静态代码审计系统及方法
本专利技术属于信息安全
,具体涉及一种在区块链的以太坊平台上针对智能合约的静态代码审计系统及方法。
技术介绍
区块链技术狭义来讲,是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。以太坊是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币提供去中心化的虚拟机来处理点对点合约。智能合约是执行合约条款的计算机交易协议。它本质上就是一段可以执行的代码,当用户访问到该地址上时,智能合约将会自动运行。智能合约是公开的,区块链上的所有用户都可以看到基于区块链的智能合约。目前已有不少基于区块链的以太坊平台上的智能合约应用,如社会经济平台的Backfeed、去中心化预测市场Augur和智能电网TransActiveGrid等,然而在不少应用的开发过程中,设计者只关注其功能性而未考虑其安全问题,导致应用存在有安全隐患,又由于智能合约的内容是公开的,任何人都可以分析其源码从而找到漏洞。
技术实现思路
本专利技术的目的是克服上述现有技术的缺陷,提供一种在区块链的以太坊平台上针对智能合约的静态代码审计系统及方法。本专利技术所提出的技术问题是这样解决的:一种在区块链的以太坊平台上针对智能合约的静态代码审计系统,包括预处理模块、语法树生成模块、静态特征匹配模块和报告生成模块;预处理模块:用于检测用户输入的合法性,将项目整体复制到临时工作目录,删除Solidity文件中的注释部分;语法树生成模块:用于对预处理后的文件进行词法分析和语法分析,生成语法树;静态特征匹配模块:用于将语法树与预先制定的逻辑匹配规则相匹配,检查是否命中,若命中匹配则记录对应的代码信息;报告生成模块:用于分类并汇总匹配成功的代码信息,生成报告结果文件。一种在区块链的以太坊平台上针对智能合约的静态代码审计方法,包括以下步骤:步骤1.系统预处理:系统对用户的输入进行合法性检测,然后将项目整体复制到临时工作目录中,并将其中的Solidity文件中的注释部分删除;步骤2.语法树生成:针对每一个Solidity代码文件,首先处理其引用文件,将引用的部分内容复制到当前文件中,然后进行词法分析,把每一个合法的词汇都提取出来,接着对词汇进行再处理操作,将其中的变量和常量封装成对应的结构类型,最后进行语法分析,通过下推自动机等技术将代码表达式转化成语法树的形式;步骤3.静态特征匹配:系统将对每一个代码文件对应的语法树进行特征匹配,通过遍历语法树的每一个分支,与预先制定的逻辑规则相匹配,如果匹配成功,则可以定位到具体的表达式上;步骤4.检测报告生成:系统将匹配得到的结果首先按照文件进行分类,在每个文件中再按照威胁的类型对结果再分类,对于每个发现的威胁给出具体的代码位置、危害和解决方式;最终,系统汇总所有的结果并生成一个整体的报告。本专利技术的有益效果是:本专利技术提出一种在区块链的以太坊平台上针对智能合约的静态代码审计系统与方法,利用下推自动机等技术,实现了在区块链的以太坊平台上针对Solidity语言编写的智能合约的静态代码审计系统,能够找出并分析智能合约上存在的安全威胁。本专利技术具有如下特点:使用下推自动机技术,实现了从代码文件到语法树的转换,用清晰的逻辑层次结构来表示抽象的代码内容。利用静态特征匹配技术,能够随时增加、修改或删除制定的逻辑规则,使系统更加灵活可扩展。通过匹配能够检测到智能合约存在的安全问题,降低了应用的安全风险。附图说明图1为本专利技术的系统结构示意图。具体实施方式下面结合附图和实施例对本专利技术进行进一步的说明。本实施例提供一种在区块链的以太坊平台上针对智能合约的静态代码审计系统,其结构示意图如图1所示,包括预处理模块、语法树生成模块、静态特征匹配模块和报告生成模块;预处理模块:用于检测用户输入的合法性,将项目整体复制到临时工作目录,删除Solidity文件中的注释部分;语法树生成模块:用于对预处理后的文件进行词法分析和语法分析,生成语法树;静态特征匹配模块:用于将语法树与预先制定的逻辑匹配规则相匹配,检查是否命中,若命中匹配则记录对应的代码信息;报告生成模块:用于分类并汇总匹配成功的代码信息,生成报告结果文件。一种在区块链的以太坊平台上针对智能合约的静态代码审计方法,包括以下步骤:步骤1.系统预处理:系统对用户的输入进行合法性检测,然后将项目整体复制到临时工作目录中,并将其中的Solidity文件中的注释部分删除,其具体包括以下步骤:步骤1-1.用户输入待审计的智能合约项目目录或者单个代码文件的路径PATH,系统检测首先检测PATH是否合法,如果PATH非法则警告提示,如果PATH合法则进入步骤1-2;步骤1-2.系统定位到PATH所在位置,将整个目录或文件全部复制到临时工作目录WORK中;步骤1-3.遍历工作目录WORK,找到以sol为后缀名的Solidity代码文件,把文件中的注释部分全部删除;步骤2.语法树生成:针对每一个Solidity代码文件,首先处理其引用文件,将引用的部分内容复制到当前文件中,然后进行词法分析,把每一个合法的词汇都提取出来,接着对词汇进行再处理操作,将其中的变量和常量封装成对应的结构类型,最后进行语法分析,通过下推自动机等技术将代码表达式转化成语法树的形式;具体包括以下步骤:步骤2-1.系统维护一个待解析文件列表Lista和一个已解析文件列表Listb,最初将所有的Solidity代码文件全部放入Lista中,Listb置空;步骤2-2.检查Lista中是否有文件,若有则依次将其取出并对其进行步骤2-3的操作,否则进入步骤2-8;步骤2-3.对于任一Solidity代码文件,系统首先检查Solidity代码文件是否在已解析文件列表中,若在则进入步骤2-2,否则进入步骤2-4;步骤2-4.检查文件是否存在“import”关键词,若存在则确定Solidity代码文件有引用文件,系统通过“import”关键词后的路径来定位得到引用文件的路径,将引用关系记录下来,然后针对引用文件进入步骤2-3操作;如果不存在引用文件则进入步骤2-5;步骤2-5.系统利用有限自动机技术,对代码内容进行词法分析:对于一个字符Ci,下标i为字符在代码内容中的位置,如果它是“(”、“)”、“{”、“}”等界限制词,则将其单独提取出来;如果字符Ci是双引号或者单引号,则依次判断它之后的字符,直到也为对应的双引号或者单引号,k1为正整数,然后将作为一个字符串常量单词提取出来;如果字符Ci是下划线“_”或者字母,则依次判断它之后的字符,直到构成的单词不满足Solidity的变量命名规则,然后将作为一个标识符单词提取出来,k2为正整数;如果字符Ci是数字,则依次判断它之后的字符,直到不能再表示为数字,然后将作为一个数字单词提取出来,k3为正整数;如果字符Ci是“+”、“-”、“*”等运算、赋值或比较符号,则依次判断它之后本文档来自技高网...

【技术保护点】
1.一种在区块链的以太坊平台上针对智能合约的静态代码审计系统,其特征在于,包括预处理模块、语法树生成模块、静态特征匹配模块和报告生成模块;预处理模块:用于检测用户输入的合法性,将项目整体复制到临时工作目录,删除Solidity文件中的注释部分;语法树生成模块:用于对预处理后的文件进行词法分析和语法分析,生成语法树;静态特征匹配模块:用于将语法树与预先制定的逻辑匹配规则相匹配,检查是否命中,若命中匹配则记录对应的代码信息;报告生成模块:用于分类并汇总匹配成功的代码信息,生成报告结果文件。

【技术特征摘要】
1.一种在区块链的以太坊平台上针对智能合约的静态代码审计系统,其特征在于,包括预处理模块、语法树生成模块、静态特征匹配模块和报告生成模块;预处理模块:用于检测用户输入的合法性,将项目整体复制到临时工作目录,删除Solidity文件中的注释部分;语法树生成模块:用于对预处理后的文件进行词法分析和语法分析,生成语法树;静态特征匹配模块:用于将语法树与预先制定的逻辑匹配规则相匹配,检查是否命中,若命中匹配则记录对应的代码信息;报告生成模块:用于分类并汇总匹配成功的代码信息,生成报告结果文件。2.一种在区块链的以太坊平台上针对智能合约的静态代码审计方法,其特征在于,包括以下步骤:步骤1.系统预处理:系统对用户的输入进行合法性检测,然后将项目整体复制到临时工作目录中,并将其中的Solidity文件中的注释部分删除;步骤2.语法树生成:针对每一个Solidity代码文件,首先处理其引用文件,将引用的部分内容复制到当前文件中,然后进行词法分析,把每一个合法的词汇都提取出来,接着对词汇进行再处理操作,将其中的变量和常量封装成对应的结构类型,最后进行语法分析,通过下推自动机等技术将代码表达式转化成语法树的形式;步骤3.静态特征匹配:系统将对每一个代码文件对应的语法树进行特征匹配,通过遍历语法树的每一个分支,与预先制定的逻辑规则相匹配,如果匹配成功,则可以定位到具体的表达式上;步骤4.检测报告生成:系统将匹配得到的结果首先按照文件进行分类,在每个文件中再按照威胁的类型对结果再分类,对于每个发现的威胁给出具体的代码位置、危害和解决方式;最终,系统汇总所有的结果并生成一个整体的报告。3.根据权利要求2所述的在区块链的以太坊平台上针对智能合约的静态代码审计方法,其特征在于,步骤1的具体过程为:步骤1-1.用户输入待审计的智能合约项目目录或者单个代码文件的路径PATH,系统检测首先检测PATH是否合法,如果PATH非法则警告提示,如果PATH合法则进入步骤1-2;步骤1-2.系统定位到PATH所在位置,将整个目录或文件全部复制到临时工作目录WORK中;步骤1-3.遍历工作目录WORK,找到以sol为后缀名的Solidity代码文件,把文件中的注释部分全部删除。4.根据权利要求3所述的在区块链的以太坊平台上针对智能合约的静态代码审计方法,其特征在于,步骤2的具体过程为:步骤2-1.系统维护一个待解析文件列表Lista和一个已解析文件列表Listb,最初将所有的Solidity代码文件全部放入Lista中,Listb置空;步骤2-2.检查Lista中是否有文件,若有则依次将其取出并对其进行步骤2-3的操作,否则进入步骤2-8;步骤2-3.对于任一Solidity代码文件,系统首先检查Solidity代码文件是否在已解析文件列表中,若在则进入步骤2-2,否则进入步骤2-4;步骤2-4.检查文件是否存在“import”关键词,若存在则确定Solidity代码文件有引用文件,系统通过“import”关键词后的路径来定位得到引用文件的路径,将引用关系记录下来,然后针对引用文件进入步骤2-3操作;如果不存在引用文件则进入步骤2-5;步骤2-5.系统利用有限自动机技术,对代码内容进行词法分析:对于一个字符Ci,下标i为字符在代码内容中的位置,如果它是“(”、“)”、“{”、“}”界限制词,则将其单独提取出来;如果字符Ci是双引号或者单引号,则依次判断它之后的字符,直到也为对应的双引号或者单引号,k1为正整数,然后将作为一个字符串常量单词提取出来;如果字符Ci是下划线“_”或者字母,则依次判断它之后的字符,直到构成的单词不满足Solidity的变量命名规则,然后将作为一个标识符单词提取出来,k2为正整数;如果字符Ci是数字,则依次判断它之后的字符,直到不能再表示为数字,然后将作为一个数字单词提取出来,k3为正整数;如果字符Ci是“+”、“-”、“*”等运算、赋值或比较符号,则依次判断它之后的字符,直到不能再构成一个合法的运算、赋值或比较符号,然后将作为一个符号单词提取出来,k4为正整数;系统将提取出来的单词以名称name的形式保存,系统在判断...

【专利技术属性】
技术研发人员:李洪伟谈辰刘森成艺龚丽杨浩淼任彦之
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1