CN115828264A - 智能合约漏洞检测方法、系统及电子设备 - Google Patents
智能合约漏洞检测方法、系统及电子设备 Download PDFInfo
- Publication number
- CN115828264A CN115828264A CN202211633210.5A CN202211633210A CN115828264A CN 115828264 A CN115828264 A CN 115828264A CN 202211633210 A CN202211633210 A CN 202211633210A CN 115828264 A CN115828264 A CN 115828264A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- analysis
- test
- execution
- test case
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明公开了一种智能合约漏洞检测方法、系统及电子设备,方法包括对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测;基于改进符号执行法提取重点路径并生成测试用例,其中,所述测试用例为非预期输入;基于改进模糊测试法优化所述测试用例并进行模糊测试,得到测试结果。智能合约的安全性与可靠性非常重要,传统智能合约漏洞检测技术均存在一定的劣势,亟需一种智能合约漏洞检测技术对所述技术进行综合改进,提升智能合约漏洞检测的效率和准确性。综合上述技术可有效保证模糊测试的效率,提高漏洞检测的效率和准确性。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种基于智能合约漏洞检测方法、系统及电子设备。
背景技术
智能合约,SmartContract,是一种旨在以信息化方式传播、验证或执行合同的计算机协议,是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执行。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。提前规定好合约的内容,当在满足触发合约条件的时候,程序就会自动执行合约内容。
智能合约是区块链技术最成功的应用之一,为实现各式各样的区块链现实应用提供了基础,在区块链生态系统中处于至关重要的地位。智能合约安全事件不仅会造成巨大的经济损失,还会破坏基于区块链的信用体系,智能合约的安全性和可靠性成为国内外研究的新关注点。
近年来,智能合约漏洞检测方法主要有5种,包括形式化验证法、符号执行法、模糊检测法、中间表示法和深度学习法,其中形式化验证通过形式化语言,把合约中的概念、判断、推理转化成形式化模型,从而消除合约中的歧义性和不通用性,配合严谨的逻辑和证明,验证智能合约中函数功能的正确性和安全性。
目前,形式化验证技术已经取得较为成熟且成功的应用。深度学习技术的进步促进了各种安全检测方法的诞生,对于新颖的安全漏洞类型,深度学习方法具有良好的扩展性和适应性。
符号执行法利用符号替代具体的执行程序指令、搜集路径约束、遍历合约程序中所有可执行路径,有效地改善了符号执行的监测效果,但也显著提高了漏洞分析过程中的计算资源和时间开销,无法彻底解决状态空间爆炸与执行路径指数级增长等问题。
模糊测试法从目标应用程序中生成大量正常和异常的测试用例,尝试将生成的用例提供给目标应用程序,监视执行状态的异常结果,进而发现安全问题,由于智能合约全局状态与调用序列的特性,导致生成有效的测试用例变得困难,面向传统程序的模糊测试方案生成测试用例时仅考虑单测试用例,不适合智能合约。很大程度上依赖于精心设计的测试用例,依赖于其测试用例的健壮性,其在动态执行过程中监测合约的异常行为以发现漏洞,因此需要进一步改进现有的测试用例生成算法。
智能合约的安全性与可靠性非常重要,传统智能合约漏洞检测技术均存在一定的劣势,亟需一种智能合约漏洞检测方法对所述技术进行综合改进,提升智能合约漏洞检测的效率和准确性。
发明内容
鉴于上述,本发明提供一种智能合约漏洞检测方法,针对漏洞检测方法存在的问题,提出了改进符号执行方法与改进模糊测试法,实现智能合约漏洞检测技术的优化改进。
依据本发明的一个方面,提供一种智能合约漏洞检测方法,具体内容包括:
1)对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测;
2)基于改进符号执行法提取重点路径并生成测试用例,其中,所述测试用例为非预期输入;
3)基于改进模糊测试法优化所述测试用例并进行模糊测试,得到测试结果。
所述步骤1)的具体实现方法如下:
对智能合约程序代码进行词法分析,依次逐个字符读取源代码并进行扫描,通过正则表达式匹配方法将源代码转换为等价的符号流,生成相关符号列表;
对所述相关符号列表进行语法分析,通过使用上下文无关文法将相关符号整理为语法树,判断源代码结构上的正确性;
对智能合约程序代码进行抽象语法树分析,将程序组织成树形结构,树中相关节点代表了程序中的相关代码;
对结构上正确的源程序进行语义分析,所述语义分析包括上下文有关性质的审查;
对智能合约程序代码进行控制流分析生成有向控制流图和函数调用关系图,表示函数间的嵌套关系,并根据控制流图分析孤立的节点部分为无效代码;
对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息,生成数据流图,进行数据流分析;
基于数据流图进行污点分析,判断源代码中哪些变量可能受到攻击,验证程序输入、识别代码表达缺陷。
所述步骤2)的具体实现方法如下:
将智能合约程序的输入用符号来表征,同时将程序变量表征成符号表达式;
利用所述符号及符号表达式,构造执行路径,并将智能合约程序的所有执行路径构造为执行树;
结合现有符号执行工具的审计经验以及漏洞分析的要求,构建高危指令集,包括SUICIDE,CALL,DELEGATECALL,ORIGIN,ASSERT,高危指令集可根据需求扩充;
根据所述高危指令集对所述执行路径进行分析,找出易产生漏洞的高危指令,定义涉及这些指令的路径为重点路径。
基于重点路径生成测试用例,在后续不对所有可能的执行路径进行检查,仅对符号执行关注的重点路径进行漏洞验证,有效缩减路径空间。
所述步骤3)的具体实现方法如下:
基于多目标优化算法,构建所述测试用例的多目标优化模型;
根据所述多目标优化模型,求解,找到一组接近最优域且不同的解,记为多目标优化解集;
根据所述多目标优化解集,优化所述测试用例;
将所述优化测试用例提供给智能合约程序进行测试;
监视执行状态中的异常结果,判断是否存在安全问题。
依据本发明的一个方面,提供一种智能合约漏洞检测系统,包括:静态分析模块、符号执行模块及模糊测试模块;
所述静态分析模块,用于对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测;
所述符号执行模块,被设置为:基于改进符号执行法提取重点路径并生成测试用例,其中,所述测试用例为非预期输入;
所述模糊测试模块,被设置为:基于改进模糊测试法优化所述测试用例并进行模糊测试,得到测试结果。
具体地,静态分析模块:该模块进行基础的静态分析,对智能合约程序代码进行词法分析,依次逐个字符读入智能合约程序代码,对构成智能合约程序代码的字符流进行扫描,通过正则表达式匹配方法将智能合约程序代码转换为等价的符号流,生成相关符号列表;对所述相关符号列表进行语法分析,通过使用上下文无关文法将相关符号整理为语法树,判断智能合约程序代码结构上的正确性;对智能合约程序代码进行抽象语法树分析,将程序组织成树形结构,树中相关节点代表了程序中的相关代码;对结构上正确的智能合约程序代码进行语义分析,所述语义分析包括上下文有关性质的审查;对智能合约程序代码进行控制流分析生成有向控制流图和函数调用关系图,表示函数间的嵌套关系,并根据控制流图分析孤立的节点部分为无效代码;对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息,生成数据流图,进行数据流分析;基于数据流图进行污点分析,判断源代码中哪些变量可能受到攻击,验证程序输入、识别代码表达缺陷。
符号执行模块:该模块执行改进符号执行法,将智能合约程序的输入用符号来表征,同时将程序变量表征成符号表达式;利用所述符号及符号表达式,构造执行路径,并将智能合约程序的所有执行路径构造为执行树;结合现有符号执行工具的审计经验以及漏洞分析的要求,构建高危指令集,包括SUICIDE,CALL,DELEGATECALL,ORIGIN,ASSERT,高危指令集可根据需求扩充;根据所述高危指令集对所述执行路径进行分析,找出易产生漏洞的高危指令,定义涉及这些指令的路径为重点路径;基于重点路径生成测试用例,在后续不对所有可能的执行路径进行检查,仅对符号执行关注的重点路径进行漏洞验证,有效缩减路径空间
模糊测试模块:该模块执行改进模糊测试法,基于多目标优化算法,构建所述测试用例的多目标优化模型;根据所述多目标优化模型,求解,找到一组接近最优域且不同的解,记为多目标优化解集;根据所述多目标优化解集,优化所述测试用例;将所述优化测试用例提供给智能合约程序进行测试;监视执行状态中的异常结果,判断是否存在安全问题。
依据本发明的另一个方面,提供一种电子设备,其中,该电子设备包括:处理器;以及存储计算机可执行指令的存储器,在执行所述可执行指令时,所述处理器执行上述方法。
依据本发明的另一个方面,提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,处理器执行所述一个或多个程序时,实现上述方法。
本发明有益效果:
使用静态分析对程序进行初步分析,可在不实际执行程序的情况下对智能合约漏洞进行第一轮检测,初步排查较为明显的漏洞。通过提取符号执行重点路径这一改进符号执行法,缩减路径空间,解决状态空间爆炸和执行路径指数级增长的问题,结合基于多目标优化算法的改进模糊测试法,提高漏洞检测效率。
附图说明
附图仅用于示出优选实施方式的目的,而不是对本发明的限制,在附图中:
图1示出了智能合约漏洞检测方法流程;
图2示出了对智能合约进行静态分析的流程;
图3示出了基于改进符号执行法生成测试用例的流程。
图4示出了基于改进模糊测试法进行模糊测试的流程。
具体实施方式
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,可依照说明书的内容予以实施,并且为了更清晰的阐明本发明的上述和其他目的、特征和优点,以下结合附图及具体实施方式对本发明作进一步详细说明。
接收需要进行漏洞检测的智能合约源程序代码;
对所述智能合约源程序代码进行词法分析,从左至右一个字符一个字符的读入源代码,对构成源代码的字符流进行扫描,通过正则表达式匹配方法将源代码转换为等价的符号流,生成相关符号列表;
对所述相关符号列表进行语法分析,通过使用上下文无关文法将相关符号整理为语法树,判断源代码结构上的正确性;
对智能合约程序代码进行抽象语法树分析,将程序组织成树形结构,树中相关节点代表了程序中的相关代码;
对结构上正确的源程序进行语义分析,所述语义分析包括上下文有关性质的审查;
对智能合约程序代码进行控制流分析,数据流分析以及污点分析;
对智能合约程序代码进行控制流分析生成有向控制流图和函数调用关系图,表示函数间的嵌套关系,并根据控制流图分析孤立的节点部分为无效代码;
对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息,生成数据流图,进行数据流分析;
基于数据流图进行污点分析,判断源代码中哪些变量可能受到攻击,验证程序输入、识别代码表达缺陷;
上述静态分析流程执行完成,记录保存分析得到的漏洞结果并进入下一阶段;
将智能合约程序的输入用符号来表征,同时将程序变量表征成符号表达式;利用所述符号及符号表达式,构造执行路径,并将智能合约程序的所有执行路径构造为执行树;
结合现有符号执行工具的审计经验以及漏洞分析的要求,构建高危指令集,包括SUICIDE,CALL,DELEGATECALL,ORIGIN,ASSERT,高危指令集可根据需求扩充;
根据所述高危指令集对所述执行路径进行分析,找出易产生漏洞的高危指令,定义涉及这些指令的路径为重点路径;
基于重点路径生成测试用例,在后续不对所有可能的执行路径进行检查,仅对符号执行关注的重点路径进行漏洞验证,有效缩减路径空间;
上述改进符号执行流程执行完成
模糊测试模块:该模块执行改进模糊测试法,基于多目标优化算法,构建所述测试用例的多目标优化模型;根据所述多目标优化模型,求解,找到一组接近最优域且不同的解,记为多目标优化解集;根据所述多目标优化解集,优化所述测试用例;将所述优化测试用例提供给智能合约程序进行测试;监视执行状态中的异常结果,发现明显的或潜在的安全问题。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同、相似的部分互相参见即可。
此外,需要说明的是,本说明书中所描述的具体实施例,其零部件的形状、所取名称等可以不同。凡依本发明专利构思所述的构造、特征及原理所做的等效或简单变化,均包括于本发明专利的保护范围内。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,只要不偏离本发明的结构或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。
Claims (10)
1.一种智能合约漏洞检测方法,其特征在于,包括:
对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测;
基于改进符号执行法提取重点路径并生成测试用例,其中,所述测试用例为非预期输入;
基于改进模糊测试法优化所述测试用例并进行模糊测试,得到测试结果。
2.根据权利要求1所述的智能合约漏洞检测方法,其特征在于:所述对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测,包括以下步骤:
对智能合约程序代码进行词法分析,依次逐个字符读取源代码并进行扫描,通过正则表达式匹配方法将源代码转换为等价的符号流,生成相关符号列表;
对所述相关符号列表进行语法分析,通过使用上下文无关文法将相关符号整理为语法树,判断源代码结构上的正确性;
对智能合约程序代码进行抽象语法树分析,将程序组织成树形结构,其中,树形结构中相关节点表示程序中的相关代码;
对所述树形结构中正确的源程序进行语义分析,所述语义分析包括上下文有关性质的审查;
对智能合约程序代码进行控制流分析、数据流分析以及污点分析,以实现智能合约漏洞基础检测。
3.根据权利要求1所述的智能合约漏洞检测方法,其特征在于:所述基于改进符号执行法提取重点路径并生成测试用例,包括以下步骤:
结合现有符号执行工具的审计经验以及漏洞分析情况,确定智能合约中易产生漏洞的高危指令,并定义相关联操作码的执行路径为重点路径;
提取重点路径并生成测试用例,基于所述测试用例仅对符号执行关注的重点路径进行漏洞验证以缩减路径空间。
4.根据权利要求3所述的智能合约漏洞检测方法,其特征在于:所述提取重点路径,包括以下步骤:
将智能合约程序代码的输入用符号来表征,同时将程序变量表征成符号表达式;
利用所述符号及符号表达式构建执行路径;
结合现有符号执行工具的审计经验以及漏洞分析的要求,构建高危指令集,且所述高危指令集能根据需求进行扩充;
根据所述高危指令集对所述执行路径进行分析,找出易产生漏洞的高危指令并定义相关联的执行路径为重点路径。
5.根据权利要求1所述的智能合约漏洞检测方法,其特征在于:所述改进模糊测试法,包括以下步骤:
基于多目标优化算法,构建所述测试用例的多目标优化模型;
根据所述多目标优化模型,求解,找到一组接近最优域且不同的解,记为多目标优化解集;
根据所述多目标优化解集,优化所述测试用例。
6.根据权利要求1所述的智能合约漏洞检测方法,其特征在于:所述模糊测试,包括以下步骤:
将所述优化测试用例提供给智能合约程序进行测试;
监视执行状态中的异常结果,判断是否存在安全问题。
7.根据权利要求2所述的智能合约漏洞检测方法,其特征在于:所述对智能合约程序代码进行控制流分析、数据流分析以及污点分析,包括以下步骤:
对智能合约程序代码进行控制流分析生成有向控制流图和函数调用关系图,其中,函数调用关系图表示函数间的嵌套关系,并根据有向控制流图分析孤立的节点部分为无效代码;
对有向控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息,生成数据流图;
基于所述数据流图进行污点分析,判断智能合约程序代码中是否存在被攻击的变量,以实现识别代码缺陷。
8.一种智能合约漏洞检测系统,其特征在于,包括静态分析模块、符号执行模块及模糊测试模块;
所述静态分析模块,用于对智能合约程序代码分别进行词法分析和抽象语法树分析,生成相关符号列表和树形结构,对智能合约程序代码进行审查并执行静态分析流程,以实现智能合约漏洞基础检测;
所述符号执行模块,被设置为:基于改进符号执行法提取重点路径并生成测试用例,其中,所述测试用例为非预期输入;
所述模糊测试模块,被设置为:基于改进模糊测试法优化所述测试用例并进行模糊测试,得到测试结果。
9.一种电子设备,其中,该电子设备包括:
处理器;以及
存储计算机可执行指令的存储器,在执行所述可执行指令时,所述处理器执行根据权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,处理器执行所述一个或多个程序时,实现权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211633210.5A CN115828264A (zh) | 2022-12-19 | 2022-12-19 | 智能合约漏洞检测方法、系统及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211633210.5A CN115828264A (zh) | 2022-12-19 | 2022-12-19 | 智能合约漏洞检测方法、系统及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115828264A true CN115828264A (zh) | 2023-03-21 |
Family
ID=85516721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211633210.5A Pending CN115828264A (zh) | 2022-12-19 | 2022-12-19 | 智能合约漏洞检测方法、系统及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115828264A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
-
2022
- 2022-12-19 CN CN202211633210.5A patent/CN115828264A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN116933267B (zh) * | 2023-07-18 | 2024-01-26 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Saccente et al. | Project achilles: A prototype tool for static method-level vulnerability detection of Java source code using a recurrent neural network | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
CN114996126B (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
CN113271237B (zh) | 工控协议的解析方法、装置、存储介质及处理器 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
CN111552968B (zh) | 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置 | |
CN115828264A (zh) | 智能合约漏洞检测方法、系统及电子设备 | |
Zhang et al. | Understanding large language model based fuzz driver generation | |
CN114911711A (zh) | 一种代码缺陷分析方法、装置、电子设备及存储介质 | |
Partenza et al. | Automatic identification of vulnerable code: Investigations with an ast-based neural network | |
Mirsky et al. | {VulChecker}: Graph-based Vulnerability Localization in Source Code | |
CN113609489B (zh) | 一种工业区块链中智能合约冲突的分布式检测方法 | |
CN111309589A (zh) | 一种基于代码动态分析的代码安全扫描系统及方法 | |
CN112767155B (zh) | 智能合约安全交易序列生成方法、装置、介质和设备 | |
CN114238980A (zh) | 一种工控设备漏洞挖掘方法、系统、设备及存储介质 | |
CN113328914A (zh) | 工控协议的模糊测试方法、装置、存储介质及处理器 | |
CN113468524A (zh) | 基于rasp的机器学习模型安全检测方法 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN113419960B (zh) | 用于可信操作系统内核模糊测试的种子生成方法及系统 | |
CN112464237B (zh) | 一种静态代码安全诊断方法及装置 | |
CN114707151A (zh) | 一种基于api调用和网络行为的僵尸软件检测方法 | |
Figueiredo et al. | MERLIN: multi-language web vulnerability detection | |
US10121008B1 (en) | Method and process for automatic discovery of zero-day vulnerabilities and expoits without source code access | |
Altamimi et al. | Metamorphic relation automation: Rationale, challenges, and solution directions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |