产学研创新服务平台(全国)
专利申请类型:发明专利;专利名称:一种基于符号抽象分析的智能合约安全审计方法
专利类型:发明专利
专利申请号:CN202111475260.0
专利申请(专利权)人:海南师范大学
权利人地址:海南省海口市龙昆南路99号海南师范大学
专利发明(设计)人:文斌,王泽旭
专利摘要:本发明公开了一种基于符号抽象分析的智能合约安全审计方法,包括如下步骤:S1:输入待检测的合约源码,通过合约编译器生成静态检测文件;S2:遍历所述静态检测文件生成控制流程图文件CFG和搜集合约信息;S3:所述流程图文件CFG利用所述合约信息转换为单赋值语句文本SSA,对所述单赋值语句文本SSA进行建模分析,遍历搜集合约属性信息;S4:整合所述合约属性信息作为输入,执行漏洞检测策略搜索,生成漏洞类型和漏洞位置;S5:将所述漏洞类型和所述漏洞位置作为符号分析引擎的输入,查询漏洞所在基本块,符号分析引擎对所述漏洞类型和所述漏洞位置进行分析,对所述漏洞的执行路径进行溯源遍历,完成对生成的所述漏洞类型和所述漏洞位置的验证筛选工作。
主权利要求:
1.一种基于符号抽象分析的智能合约安全审计方法,其特征在于,包括如下步骤:
S1:输入待检测的合约源码,通过合约编译器生成静态检测文件;
S2:遍历所述静态检测文件生成控制流程图文件CFG和搜集合约信息;
S3:所述流程图文件CFG利用所述合约信息转换为单赋值语句文本SSA,对所述单赋值语句文本SSA进行建模分析,遍历搜集合约属性信息,所述合约属性信息包括所述流程图文件CFG、函数跳转关系、合约存储状态、数据依赖关系、是否继承和权限界定;
S4:整合所述合约属性信息作为输入,执行漏洞检测策略搜索,生成漏洞类型和漏洞位置,所述漏洞检测策略包括开发者需结合针对某一具体漏洞原理或合约语言更新的现状,实现检测模式的设计,完成所述漏洞检测的编写及更新工作,根据检测模式的设计以及代码的实现情况对所述合约属性信息进行检测,生成所述漏洞类型和所述漏洞位置;
S5:将所述漏洞类型和所述漏洞位置作为符号分析引擎的输入,查询漏洞所在基本块,符号分析引擎对所述漏洞类型和所述漏洞位置进行分析,对所述漏洞的执行路径进行溯源遍历,将所述漏洞位置作为问题路径的终点,直到找到所述问题路径的结果,结束对所述问题路径的分析,完成对生成的所述漏洞类型和所述漏洞位置的验证筛选工作,输入值是指根据代码设定的类型分析设定的输入参数,如果代码需要一个整型的参数,那么符号分析的输入值是一个整型的数字,如果代码需要一个字符串,那么符号分析的输入值是一个字符串。
2.根据权利要求1所述的一种基于符号抽象分析的智能合约安全审计方法,其特征在于,所述S1中,所述静态检测文件包括Json格式的抽象语法树文件AST。
3.根据权利要求1所述的一种基于符号抽象分析的智能合约安全审计方法,其特征在于,所述S2中,所述合约信息包括合约存储状态、数据依赖关系、是否继承和权限界定。
4.根据权利要求1所述的一种基于符号抽象分析的智能合约安全审计方法,其特征在于,所述S5中,所述结果为约束求解得到的输入值或超过预定时间。 说明书 : 一种基于符号抽象分析的智能合约安全审计方法技术领域[0001] 本发明属于智能合约领域,具体涉及一种基于符号抽象分析的智能合约安全审计方法。背景技术[0002] 在智能合约的自动化安全工具领域,已有符号执行检测漏洞方案不多,其中比较典型的是Oyente,WANA等。当前的自动化检测工具往往过于依赖于单一的技术,而且自动化程度不高,真正的使用于实践中,还需要很多工作要做。虽然在某些情况下很有用,但是仍有一些缺点与不足,随着合约语言的更新与迭代以及漏洞类型的增多,由于检测模式或逻辑设计的缺陷,导致会对许多关键性漏洞验证的缺失;由于对漏洞的建模不够精确,会造成大量的假阳性误报;合约的覆盖率不高,对于某些特定的合约可以满足基本的要求,但是真正的生产中的合约覆盖率较低。发明内容[0003] 针对现有技术存在的不足,本发明提出了能够提高漏洞的检测效果与准确度,降低误报率,提高合约的扩展性及覆盖率的一种基于符号抽象分析的智能合约安全审计方法。[0004] 本发明提供一种基于符号抽象分析的智能合约安全审计方法,包括如下步骤:[0005] S1:输入待检测的合约源码,通过合约编译器生成静态检测文件;[0006] S2:遍历所述静态检测文件生成控制流程图文件CFG和搜集合约信息;[0007] S3:所述流程图文件CFG利用所述合约信息转换为单赋值语句文本SSA,对所述单赋值语句文本SSA进行建模分析,遍历搜集合约属性信息;[0008] S4:整合所述合约属性信息作为输入,执行漏洞检测策略搜索,生成漏洞类型和漏洞位置;[0009] S5:将所述漏洞类型和所述漏洞位置作为符号分析引擎的输入,查询漏洞所在基本块,符号分析引擎对所述漏洞类型和所述漏洞位置进行分析,对所述漏洞的执行路径进行溯源遍历,将所述漏洞位置作为问题路径的终点,直到找到所述问题路径的结果,结束对所述问题路径的分析,完成对生成的所述漏洞类型和所述漏洞位置的验证筛选工作。[0010] 优选的,所述S1中,所述静态检测文件包括Json格式的抽象语法树文件AST。[0011] 优选的,所述S2中,所述合约信息包括合约存储状态、数据依赖关系、是否继承和权限界定。[0012] 优选的,所述S3中,所述合约属性信息包括所述流程图文件CFG、函数跳转关系、所述合约存储状态、所述数据依赖关系、所述是否继承和所述权限界定。[0013] 优选的,所述S4中,所述漏洞检测策略包括开发者需结合针对某一具体所述漏洞原理或合约语言更新的现状,实现检测模式的设计,完成所述漏洞检测的编写及更新工作,根据检测模式的设计以及代码的实现情况对所述合约属性信息进行检测,生成所述漏洞类型和所述漏洞位置。[0014] 优选的,所述S5中,所述结果为约束求解得到的输入值或超过预定时间。[0015] 本发明的有益效果在于:[0016] 本发明一种基于符号抽象分析的智能合约安全审计方法,通过静态分析与符号分析相结合进行所述漏洞检测工作,相比较传统的使用单一静态分析或符号分析,具有以下有益效果:[0017] 1.具有较高的扩展性及覆盖率。为解决合约语言的快速迭代及新的所述漏洞的产生导致所述漏洞检测效率降低等问题,通过模块化设计,可以在原有的基础框架上针对性的升级迭代,而不影响原本的功能,增强合约检测的覆盖率。[0018] 2.在静态分析合约源码的多次转换中,会收集反映所述漏洞的关键信息,结合所述合约属性信息的特点,对合约进行建模分析,最大化近似合约真实的结构及属性,实现更细粒度的检测精度,同时集成各所述漏洞检测模式的检测策略,实现准确的所述漏洞扫描。[0019] 3.静态分析在所述漏洞检测方面有着速度快、检测范围广等优势,但传统的静态分析在合约检测时假阳性的所述漏洞误报比较高,该发明将静态分析与符号分析相结合,在静态分析的结果的基础上进一步进行符号分析,完成所述漏洞的验证及筛选工作,极大的发挥各自技术的特点及优势,提高所述漏洞的检测效果与准确度。附图说明[0020] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的优选实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0021] 图1为本发明一种基于符号抽象分析的智能合约安全审计方法的流程图;[0022] 图2为本发明一种基于符号抽象分析的智能合约安全审计方法的静态分析的流程图;[0023] 图3为本发明一种基于符号抽象分析的智能合约安全审计方法的符号分析的流程图。具体实施方式[0024] 为了更好理解本发明技术内容,下面提供具体实施例,并结合附图对本发明做进一步的说明。[0025] 参见图1至图3,本发明一种基于符号抽象分析的智能合约安全审计方法,包括如下步骤:[0026] S1:输入待检测的合约源码,通过合约编译器生成静态检测文件;[0027] S2:遍历所述静态检测文件生成控制流程图文件CFG和搜集合约信息;[0028] S3:所述流程图文件CFG利用所述合约信息转换为单赋值语句文本SSA,对所述单赋值语句文本SSA进行建模分析,遍历搜集合约属性信息;[0029] S4:整合所述合约属性信息作为输入,执行漏洞检测策略搜索,生成漏洞类型和漏洞位置;[0030] S5:将所述漏洞类型和所述漏洞位置作为符号分析引擎的输入,查询漏洞所在基本块,符号分析引擎对所述漏洞类型和所述漏洞位置进行分析,对所述漏洞的执行路径进行溯源遍历,将所述漏洞位置作为问题路径的终点,直到找到所述问题路径的结果,结束对所述问题路径的分析,完成对生成的所述漏洞类型和所述漏洞位置的验证筛选工作。输入值是指根据代码设定的类型分析设定的输入参数,如果代码需要一个整型的参数,那么符号分析的输入值是一个整型的数字,如果代码需要一个字符串,那么符号分析的输入值是一个字符串。如果找到所述结果则认定漏洞存在,若没有找到所述结果,则认定该漏洞属于误报,并将所述漏洞位置剔除。通过静态分析与符号分析相结合进行所述漏洞检测工作,相比较传统的使用单一静态分析或符号分析,具有较高的扩展性及覆盖率,为解决合约语言的快速迭代及新的所述漏洞的产生导致所述漏洞检测效率降低等问题,通过模块化设计,可以在原有的基础框架上针对性的升级迭代,而不影响原本的功能,增强合约检测的覆盖率。在静态分析合约源码的多次转换中,会收集反映所述漏洞的关键信息,结合所述合约属性信息的特点,对合约进行建模分析,最大化近似合约真实的结构及属性,实现更细粒度的检测精度,同时集成各所述漏洞检测模式的检测策略,实现准确的所述漏洞扫描。静态分析在所述漏洞检测方面有着速度快、检测范围广等优势,但传统的静态分析在合约检测时假阳性的所述漏洞误报比较高,该发明将静态分析与符号分析相结合,在静态分析的结果的基础上进一步进行符号分析,完成所述漏洞的验证及筛选工作,极大的发挥各自技术的特点及优势,提高所述漏洞的检测效果与准确度。[0031] 具体的,所述S1中,所述静态检测文件包括Json格式的抽象语法树文件AST。[0032] 具体的,所述S2中,所述合约信息包括合约存储状态、数据依赖关系、是否继承和权限界定。所述流程图文件CFG利用所述合约存储状态、所述数据依赖关系、所述是否继承和所述权限界定转换为单赋值语句文本SSA。[0033] 具体的,所述S3中,所述合约属性信息包括所述流程图文件CFG、函数跳转关系、所述合约存储状态、所述数据依赖关系、所述是否继承和所述权限界定。在静态分析合约源码的多次转换中,会收集反映所述漏洞的关键信息,结合所述流程图文件CFG、函数跳转关系、所述合约存储状态、所述数据依赖关系、所述是否继承和所述权限界定的特点,对合约进行建模分析,最大化近似合约真实的结构及属性,实现更细粒度的检测精度。[0034] 具体的,所述S4中,所述漏洞检测策略包括开发者需结合针对某一具体所述漏洞原理或合约语言更新的现状,实现检测模式的设计,完成所述漏洞检测的编写及更新工作,根据检测模式的设计以及代码的实现情况对所述合约属性信息进行检测,生成所述漏洞类型和所述漏洞位置。所述漏洞可以为整数溢出、重入攻击或短地址攻击。[0035] 具体的,所述S5中,所述结果为约束求解得到的输入值或超过预定时间。如果找到所述输入值则认定所述漏洞存在,若没有找到所述输入值,也就是超过预定时间,则认定所述智能合约属于误报,并将所述漏洞位置剔除。[0036] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
专利地区:海南
专利申请日期:2021-12-06
专利公开日期:2024-11-12
专利公告号:CN114201754B