CN114297654A - 一种源代码层级的智能合约漏洞检测方法及系统 - Google Patents
一种源代码层级的智能合约漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN114297654A CN114297654A CN202111669478.XA CN202111669478A CN114297654A CN 114297654 A CN114297654 A CN 114297654A CN 202111669478 A CN202111669478 A CN 202111669478A CN 114297654 A CN114297654 A CN 114297654A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- intelligent contract
- sample data
- source code
- vulnerability detection
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种源代码层级的智能合约漏洞检测方法及系统,方法包括:获取智能合约样本数据并进行预处理,检测和分析是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;针对样本集合生成抽象语法树,生成词法单元序列文本并进行向量化,经打包填充形成样本数据集;结合注意力机制,构建基于深度神经网络的漏洞检测模型;针对每种漏洞类型持续训练及优化对应的二元分类器,选取分类效果最好的作为多标签分类器;将需要检测的智能合约源代码的向量化数据输入多标签分类器,得到漏洞检测结果。通过本发明的技术方案,提高了漏洞检测的准确率和效率,降低了漏报率和误报率,以尽早发现漏洞并及时采取补救措施。
Description
技术领域
本发明涉及代码漏洞检测技术领域,尤其涉及一种源代码层级的智能合约漏洞检测方法以及一种源代码层级的智能合约漏洞检测系统。
背景技术
区块链作为一种新兴技术,引起了国内外专家学者的广泛关注。智能合约作为区块链技术的重要组成部分,具有重塑常规业务流程的巨大潜力,其可编程特性使得区块链的业务场景扩展到供应链、医疗、保险及行政执法等多个领域。由于智能合约的研究与应用尚处于初级阶段,开发人员往往没有经过严格的训练和指导,同时也缺乏标准的智能合约开发语言参考规范,在编写和部署智能合约的过程中不可避免地会引入一些漏洞。由于区块链具有不可篡改的特性,智能合约一旦成功部署上链,便不能对合约代码本身及其生成的数据进行任何修改或升级,合约代码若存在漏洞会留下巨大的隐患。为此,在智能合约部署到区块链网络之前对其代码进行安全审计具有十分重要的意义。
随着智能合约数量及规模的不断扩大、功能的日益复杂、漏洞挖掘难度的逐步提升,传统的软件测试和专家审查等方法已不能满足智能合约安全性的需要,研究人员开始关注自动化漏洞检测方法的研究。常用的智能合约漏洞检测方法包括符号执行、模糊测试和形式化验证等。符号执行借助于约束收集和求解,可以精确地探索程序的执行路径,但需要花费大量时间,甚至可能出现状态空间爆炸和约束求解难题,不适合大批量的合约漏洞检测。模糊测试是一种广泛应用于传统应用程序的测试技术,通过将非预期数据输入到目标程序中监测程序的异常结果来发现其中存在的漏洞。智能合约相较于传统应用程序,存在很多不同的特征,这些特征导致针对智能合约的模糊测试效果大打折扣。形式化验证技术能在更高的语义层面上理解代码,适用于规模相对较小而设计复杂的智能合约,但其自动化程度相对较低,大多需要人工二次核验,增加了检测成本。
目前已有一系列针对智能合约漏洞检测问题的解决方案,但仍存在以下问题:
1)由于半数以上的以太坊智能合约不公开源代码,很多研究从字节码层面进行,但字节码是由0和1组成的数字序列,难以直接从中提取到代码的语法结构和语义信息,且处理过程中将智能合约源代码看作纯文本,直接通过自然语言处理技术对其进行处理,忽略了代码中蕴含的语法结构和语义信息,会导致部分漏洞特征的丢失,进而产生较高的漏报和误报率;
2)大多数方案只是简单的对代码的安全性进行判断,给出一个简单的类似于0或1的二元分类值作为漏洞检测结果,而且无法一次性将其中隐含的所有漏洞类型一次性检测出来。
发明内容
针对上述问题,本发明提供了一种源代码层级的智能合约漏洞检测方法及系统,通过承载语法和语义等结构化信息的抽象语法树进行源代码的中间表示,能够尽量减少冗余并保留完整的漏洞特征,通过遍历抽象语法树获得词法单元序列并进行向量化,最后采用结合注意力机制的深度神经网络模型实现从大量代码中自动提取漏洞特征,通过多个二元分类分别检测每种漏洞类型,可以一次性输出源代码中存在的多种漏洞类型,显著提高漏洞检测的效率,在一定程度上提高了漏洞检测的准确率,降低了漏报率和误报率,并能够指出漏洞在源代码中存在的具体形式以及漏洞的产生位置,以尽早发现漏洞并及时采取补救措施,来确保智能合约能安全、正确的运行。
为实现上述目的,本发明提供了一种源代码层级的智能合约漏洞检测方法,包括:
通过爬虫方式获取智能合约样本数据,并对所述智能合约样本数据进行预处理;
检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
针对所述样本集合进行词法分析和语法分析生成抽象语法树,并对所述抽象语法树进行深度优先遍历生成词法单元序列文本;
采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
结合注意力机制,构建基于深度神经网络的漏洞检测模型;
针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入所述多标签分类器,输出得到所述智能合约源代码的漏洞检测结果。
在上述技术方案中,优选地,若经爬虫等方式获取到的所述智能合约样本数据的类型为字节码形式,则通过反汇编和反编译的逆向分析操作将字节码形式的数据还原为源代码,若获取到的所述智能合约样本数据为源代码形式,则无需进行逆向分析操作。
在上述技术方案中,优选地,所述检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型的具体过程包括:
基于预设的漏洞库,采用多种检测和分析方式判断预处理后的所述智能合约样本数据中是否存在所述漏洞库中的漏洞,生成是否存在漏洞的标签,并对存在漏洞的样本数据细化得到漏洞类型;
将不同方式得到的样本数据的检测和分析结果进行汇总,针对同一样本数据的所有检测结果中是否存在同一种漏洞类型的标签的比例达到预设比例时,以该标签作为当前样本数据是否存在该种类型漏洞的标签。
在上述技术方案中,优选地,所述针对所述样本集合进行词法分析和语法分析生成抽象语法树的具体过程包括:
利用语法解析工具,根据自定义的文法规则生成词法分析器和语法分析器;
利用所述词法分析器将所述样本集合中的智能合约源代码转化为对应的Token流;
利用所述语法分析器分析所述Token流中语法单元的关系,生成所述抽象语法树。
在上述技术方案中,优选地,所述采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集的具体过程包括:
采用Word2vec算法的CBOW模型作为词嵌入模型,获取所述词法单元序列文本的词向量特征文本,将每个特征文本转换为词向量;
采用打包填充方式对所述词向量进行统一长度处理,以完整保留特征数据,形成样本数据集。
在上述技术方案中,优选地,源代码层级的智能合约漏洞检测方法还包括:
针对打包填充得到的所述样本数据集,采用SMOTETomek方式对存在漏洞的合约和不存在漏洞的合约进行组合采样,并利用组合采样后的数据对所述漏洞检测模型进行训练。
在上述技术方案中,优选地,所述漏洞检测模型的神经网络结构包括循环神经网络、长短期记忆网络、双向长短期记忆网络、门控循环单元、双向门控循环单元以及Wide&Deep。
在上述技术方案中,优选地,所述针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器的具体过程包括:
在所述样本数据集中随机选取80%的样本数据作为训练数据集,剩余20%的样本数据作为测试数据集;
利用所述训练数据集以及相应样本数据标记的标签,对所述漏洞检测模型中针对每种漏洞类型的二元分类器进行训练;
利用所述测试数据集对二元分类器组合形成的漏洞检测模型进行评估,根据评估结果反馈调整与优化所述漏洞检测模型的参数。
在上述技术方案中,优选地,根据多标签分类器的输出结果,确定需要检测的智能合约源代码中是否存在漏洞以及具体的漏洞类型;
基于注意力机制,确定该智能合约源代码中漏洞存在的位置。
本发明还提出一种源代码层级的智能合约漏洞检测系统,应用如上述技术方案中任一项公开的源代码层级的智能合约漏洞检测方法,包括:
样本数据获取模块,用于通过爬虫等方式获取智能合约样本数据,并对所述智能合约样本数据进行预处理;
样本集合标记模块,用于检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
代码中间表示模块,用于针对所述样本集合进行词法分析和语法分析生成抽象语法树,并对所述抽象语法树进行深度优先遍历生成词法单元序列文本;
样本数据向量化模块,用于采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
检测模型构建模块,用于结合注意力机制,构建基于深度神经网络的漏洞检测模型;
模型训练优化模块,用于针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
代码漏洞检测模块,用于将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入所述多标签分类器,输出得到所述智能合约源代码的漏洞检测结果。
与现有技术相比,本发明的有益效果为:
1)通过承载语法和语义等结构化信息的抽象语法树进行源代码的中间表示,能够尽量减少冗余并保留完整的漏洞特征;
2)通过多个二元分类分别检测每种漏洞类型,可以一次性输出源代码中存在的多种漏洞类型,显著提高漏洞检测的效率;
3)通过在神经网络模型中加入注意力机制,能够对神经网络提取的重要特征进行加权,能在一定程度上提升漏洞检测的准确率,同时可以对注意力网络层的权重进行可视化,并标记出造成漏洞的主要元素,便于后续对代码的分析或修复,以尽早发现漏洞并及时采取补救措施,来确保智能合约能安全、正确的运行;
4)考虑到智能合约数据集中有漏洞的合约远少于无漏洞的合约,存在数据不平衡的问题,如果直接拿这样的数据集进行训练,可能会对模型的学习过程造成干扰。因此,本发明采用SMOTETomek方法,通过组合采样的方式使样本数据均衡化,减少了由于类间样本数据差距大对学习效果产生的影响。
附图说明
图1为本发明一种实施例公开的源代码层级的智能合约漏洞检测方法的流程示意图;
图2为本发明一种实施例公开的源代码层级的智能合约漏洞检测方法的整体框架示意图;
图3为本发明一种实施例公开的源代码层级的智能合约漏洞检测系统的模块示意图。
图中,各组件与附图标记之间的对应关系为:
11.样本数据获取模块,12.样本集合标记模块,13.代码中间表示模块,14.样本数据向量化模块,15.检测模型构建模块,16.模型训练优化模块,17.代码漏洞检测模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图对本发明做进一步的详细描述:
如图1和图2所示,根据本发明提供的一种源代码层级的智能合约漏洞检测方法,包括:
通过爬虫等方式获取智能合约样本数据,并对智能合约样本数据进行预处理;
检测和分析预处理后的智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
针对样本集合进行词法分析和语法分析生成抽象语法树,并对抽象语法树进行深度优先遍历生成词法单元序列文本;
采用词嵌入模型对词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
结合注意力机制,构建基于深度神经网络的漏洞检测模型;
针对每种漏洞类型在漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入多标签分类器,输出得到智能合约源代码的漏洞检测结果。
在该实施例中,通过承载语法和语义等结构化信息的抽象语法树进行源代码的中间表示,能够尽量减少冗余并保留完整的漏洞特征,通过遍历抽象语法树获得词法单元序列并进行向量化,最后采用结合注意力机制的深度神经网络模型实现从大量代码中自动提取漏洞特征,通过多个二元分类分别检测每种漏洞类型,可以一次性输出源代码中存在的多种漏洞类型,显著提高漏洞检测的效率,在一定程度上提高了漏洞检测的准确率,降低了漏报率和误报率,并能够指出漏洞在源代码中存在的具体形式以及漏洞的产生位置,以尽早发现漏洞并及时采取补救措施,来确保智能合约能安全、正确的运行。
具体地,本发明旨在提出一种普适性强的、源代码层级的智能合约漏洞检测方案,以以太坊智能合约为研究对象,通过爬虫和反编译工具得到智能合约源代码,首先对获取到的源代码进行预处理,并对预处理过的数据集进行多标签标记。通过对真实世界中存在漏洞的具体合约实例从源代码层面进行研究与分析,针对不同漏洞类型的智能合约提取相应的语法结构和语义信息,并使用词嵌入模型将这些特征信息转化成向量形式,将其与标签一起输入到结合注意力机制的深度学习模型中进行自动学习。通过对模型的持续训练和优化,找到每种漏洞效果最好的网络结构和最优的参数组合。将待检测的智能合约采用同样的处理方式转换成向量形式,输入到训练好的模型中,模型会根据计算结果给出包含该智能合约是否带有漏洞、具体的漏洞类型以及漏洞在代码中所在的具体位置等详细信息的检测结果。
在上述实施例中,优选地,根据输入的智能合约的形式来确定后续操作,具体地,若爬虫等方式获取的智能合约样本数据的类型为字节码形式,则通过反汇编和反编译的逆向分析操作将字节码形式的数据还原为源代码,再进行后续操作;如果输入的是智能合约为源代码形式,则无需进行逆向。换句话说,对字节码形式的智能合约进行检测比直接对源代码形式的智能合约检测多了一项逆向分析的步骤。
具体地,首先,利用爬虫技术从以太坊浏览器上爬取一定数量的智能合约源代码,考虑到以太坊中有超过一半的智能合约是不开源的,又通过web3.eth.getCode接口基于已知合约地址获取其对应的字节码形式的智能合约。在从源代码层面进行漏洞检测之前,需要对获取到的字节码经反汇编和反编译操作还原为源代码,以便于特征提取和分析。接着,对获取到的数据集进行预处理,删除注释等与漏洞无关的语句。
在上述实施例中,优选地,检测和分析预处理后的智能合约样本数据中是否存在漏洞以及漏洞类型的具体过程包括:
基于预设的漏洞库,采用多种检测和分析方式判断预处理后的智能合约样本数据中是否存在漏洞库中的漏洞,生成是否存在漏洞的标签,并对存在漏洞的样本数据细化得到漏洞类型;
将不同方式得到的样本数据的检测和分析结果进行汇总,针对同一样本数据的所有检测结果中是否存在同一种漏洞类型的标签的比例达到预设比例时,以该标签作为当前样本数据是否存在该种类型漏洞的标签。
具体地,结合Awesome-Buggy-ERC20-Tokens等漏洞库,通过公开的、效果较好的漏洞检测工具以及人工分析等方式,为预处理过的样本数据生成有无漏洞的标签,并对有漏洞的样本细化得到具体的漏洞类型。然后,将不同方式获得的检测结果进行汇总,为了尽量保证标签的准确率,对于同一漏洞,只有满足
才认为该标签有效。其中,Li=1代表第i种方式标记为有漏洞,m代表不同检测方式的总数。
具体地,标签为Y=[Y1,Y2,...,YN],其中N表示需要检测的N种漏洞类型。Yn=0表示该智能合约样本不存在第n种漏洞,Yn=1表示该智能合约样本存在第n种漏洞。例如,向量[1,0,1,0,0]表示该样本同时具有第一和第三种类型的漏洞,而向量[0,0,0,0,0]则代表该样本中没有五种漏洞类型中的任何一种漏洞。
在上述实施例中,优选地,本发明从源代码层级出发,综合考虑智能合约源代码中蕴含的语法结构和语义信息,选择使用抽象语法树作为结构化信息的载体构建结构化数据集,具体过程包括:
首先,利用Antrl4等语法解析工具,根据自定义的文法规则生成词法分析器和语法分析器,然后使用它们分别对智能合约源代码进行词法分析和语法分析;
利用词法分析器将样本集合中的智能合约源代码转化为对应的Token流;
利用语法分析器分析Token流中语法单元的关系,生成抽象语法树。接着对生成的抽象语法树进行深度优先遍历,将其转化为词法单元序列文本。
在上述实施例中,优选地,对于所有的深度神经网络或分类器而言,其输入只能是数值向量格式的样本数据。为了将提取出来的特征输入到深度学习模型中,需要采取合适的编码方式将前面获得的词法单元序列文本映射到数值空间。
本发明采用Word2vec算法的CBOW模型作为词嵌入模型,获取词法单元序列文本的词向量特征文本,将每个特征文本转换为词向量;
神经网络需要固定长度的向量矩阵作为模型的输入,通常采用截断或补零的方法对向量进行统一长度处理,这会导致部分特征数据的丢失。为了能够完整保留源代码的向量化数据,本发明采用打包填充方式对词向量进行统一长度处理,以完整保留特征数据,形成样本数据集。
在上述实施例中,优选地,考虑到智能合约数据集中有漏洞的合约远少于无漏洞的合约,存在类间样本数据不平衡的问题,因此,针对打包填充得到的样本数据集,采用SMOTETomek方式对存在漏洞的合约和不存在漏洞的合约进行组合采样,并利用组合采样后的数据对漏洞检测模型进行训练,使样本数据均衡化,减少由于类间样本数据差距大对学习效果产生的影响。
在上述实施例中,优选地,针对每种漏洞类型在漏洞检测模型中持续训练及优化对应的二元分类器的具体过程包括:
随机选取80%的样本作为训练数据集,用于模型训练,剩余的20%样本作为测试数据集,用于评估在训练数据集上学习参数后的模型的性能;
利用训练数据集以及相应样本数据标记的标签,对漏洞检测模型中针对每种漏洞类型的二元分类器进行训练;
利用测试数据集对二元分类器组合形成的漏洞检测模型进行评估,根据评估结果反馈调整与优化漏洞检测模型的参数。
在上述实施例中,优选地,通过对以太坊区块链平台中的智能合约进行深入分析,并结合现有漏洞检测中常用的程序分析技术和深度学习算法,设计并构建漏洞检测模型。不同的漏洞类型具有不同的漏洞特征,在神经网络中不同网络结构的模型对数据的表征学习能力是不同的,使用单一的网络模型可能不能对所有漏洞类型都有很好的学习和训练效果。为了实现多种漏洞的检测,本发明将多标签分类转化为对每种漏洞类型的二元分类,针对N种漏洞类型训练N个二元分类器,每个二元分类器对N种漏洞中的一种有良好的检测效果,多个模型的输出组合即为对多种漏洞类型的最终检测结果。
在上述实施例中,本发明将不同漏洞类型的样本数据集连同标记的标签一起,分别输入到漏洞检测模型的不同神经网络结构进行训练,包括但不限于循环神经网络、长短期记忆网络、双向长短期记忆网络、门控循环单元、双向门控循环单元以及Wide&Deep等。
在此基础上,分别就准确率、精确度、召回率、F1值、马修相关系数和汉明损失等多项评估指标进行对比评估。同时,在构建的神经网络模型中加入注意力机制,以对神经网络提取的重要特征进行加权,提升漏洞检测的准确率。通过对多种深度神经网络模型在相同的实验环境和相同的智能合约样本数据集的条件下进行持续训练和优化,最终选取分类效果最好的多标签分类模型生成多标签分类器。
在上述实施例中,优选地,根据多标签分类器的输出结果,确定需要检测的智能合约源代码中是否存在漏洞以及具体的漏洞类型;
基于注意力机制,确定该智能合约源代码中漏洞存在的位置。
本发明还提出一种源代码层级的智能合约漏洞检测系统,应用如上述实施例中任一项公开的源代码层级的智能合约漏洞检测方法,包括:
样本数据获取模块11,用于通过爬虫等方式获取智能合约样本数据,并对智能合约样本数据进行预处理;
样本集合标记模块12,用于检测和分析预处理后的智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
代码中间表示模块13,用于针对样本集合进行词法分析和语法分析生成抽象语法树,并对抽象语法树进行深度优先遍历生成词法单元序列文本;
样本数据向量化模块14,用于采用词嵌入模型对词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
检测模型构建模块15,用于结合注意力机制,构建基于深度神经网络的漏洞检测模型;
模型训练优化模块16,用于针对每种漏洞类型在漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
代码漏洞检测模块17,用于将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入多标签分类器,输出得到智能合约源代码的漏洞检测结果。
在该实施例中,通过承载语法和语义等结构化信息的抽象语法树进行源代码的中间表示,能够尽量减少冗余并保留完整的漏洞特征,通过遍历抽象语法树获得词法单元序列并进行向量化,最后采用结合注意力机制的深度神经网络模型实现从大量代码中自动提取漏洞特征,通过多个二元分类分别检测每种漏洞类型,可以一次性输出源代码中存在的多种漏洞类型,显著提高漏洞检测的效率,在一定程度上提高了漏洞检测的准确率,降低了漏报率和误报率,并能够指出漏洞在源代码中存在的具体形式以及漏洞的产生位置,以尽早发现漏洞并及时采取补救措施,来确保智能合约能安全、正确的运行。
根据上述实施例公开的源代码层级的智能合约漏洞检测系统,其各模块所能实现的功能与上述实施例公开的源代码层级的智能合约漏洞检测方法中各步骤所能实现的功能分别对应,依据上述实施例所公开的具体实现方法,各模块的实施方式在此不再赘述。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种源代码层级的智能合约漏洞检测方法,其特征在于,包括:
通过爬虫方式获取智能合约样本数据,并对所述智能合约样本数据进行预处理;
检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
针对所述样本集合进行词法分析和语法分析生成抽象语法树,并对所述抽象语法树进行深度优先遍历生成词法单元序列文本;
采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
结合注意力机制,构建基于深度神经网络的漏洞检测模型;
针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入所述多标签分类器,输出得到所述智能合约源代码的漏洞检测结果。
2.根据权利要求1所述的源代码层级的智能合约漏洞检测方法,其特征在于,若获取到的所述智能合约样本数据为字节码形式,则通过反汇编和反编译的逆向分析操作将字节码形式的数据还原为源代码,若获取到的所述智能合约样本数据为源代码形式,则无需进行逆向分析操作。
3.根据权利要求1所述的源代码层级的智能合约漏洞检测方法,其特征在于,所述检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型的具体过程包括:
基于预设的漏洞库,采用多种检测和分析方式判断预处理后的所述智能合约样本数据中是否存在所述漏洞库中的漏洞,生成是否存在漏洞的标签,并对存在漏洞的样本数据细化得到漏洞类型;
将不同方式得到的样本数据的检测和分析结果进行汇总,针对同一样本数据的所有检测结果中是否存在同一种漏洞类型的标签的比例达到预设比例时,以该标签作为当前样本数据是否存在该种类型漏洞的标签。
4.根据权利要求1所述的源代码层级的智能合约漏洞检测方法,其特征在于,所述针对所述样本集合进行词法分析和语法分析生成抽象语法树的具体过程包括:
利用语法解析工具,根据自定义的文法规则生成词法分析器和语法分析器;
利用所述词法分析器将所述样本集合中的智能合约源代码转化为对应的Token流;
利用所述语法分析器分析所述Token流中语法单元的关系,生成所述抽象语法树。
5.根据权利要求1所述的源代码层级的智能合约漏洞检测方法,其特征在于,所述采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集的具体过程包括:
采用Word2vec算法的CBOW模型作为词嵌入模型,获取所述词法单元序列文本的词向量特征文本,将每个特征文本转换为词向量;
采用打包填充方式对所述词向量进行统一长度处理,以完整保留特征数据,形成样本数据集。
6.根据权利要求1或5所述的源代码层级的智能合约漏洞检测方法,其特征在于,还包括:
针对打包填充得到的所述样本数据集,采用SMOTETomek方式对存在漏洞的合约和不存在漏洞的合约进行组合采样,并利用组合采样后的样本数据对所述漏洞检测模型进行训练。
7.根据权利要求6所述的源代码层级的智能合约漏洞检测方法,其特征在于,所述漏洞检测模型的神经网络结构包括循环神经网络、长短期记忆网络、双向长短期记忆网络、门控循环单元、双向门控循环单元以及Wide&Deep。
8.根据权利要求6所述的源代码层级的智能合约漏洞检测方法,其特征在于,所述针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器的具体过程包括:
在所述样本数据集中随机选取80%的样本数据作为训练数据集,剩余20%的样本数据作为测试数据集;
利用所述训练数据集以及相应样本数据标记的标签,对所述漏洞检测模型中针对每种漏洞类型的二元分类器进行训练;
利用所述测试数据集对二元分类器组合形成的漏洞检测模型进行评估,根据评估结果反馈调整与优化所述漏洞检测模型的参数。
9.根据权利要求8所述的源代码层级的智能合约漏洞检测方法,其特征在于,根据多标签分类器的输出结果,确定需要检测的智能合约源代码中是否存在漏洞以及具体的漏洞类型;
基于注意力机制,确定该智能合约源代码中漏洞存在的位置。
10.一种源代码层级的智能合约漏洞检测系统,应用如权利要求1至9中任一项所述的源代码层级的智能合约漏洞检测方法,其特征在于,包括:
样本数据获取模块,用于通过爬虫方式获取智能合约样本数据,并对所述智能合约样本数据进行预处理;
样本集合标记模块,用于检测和分析预处理后的所述智能合约样本数据中是否存在漏洞以及漏洞类型,并进行多标签标记,作为样本集合;
代码中间表示模块,用于针对所述样本集合进行词法分析和语法分析生成抽象语法树,并对所述抽象语法树进行深度优先遍历生成词法单元序列文本;
样本数据向量化模块,用于采用词嵌入模型对所述词法单元序列文本进行向量化,并对向量化数据打包填充,形成样本数据集;
检测模型构建模块,用于结合注意力机制,构建基于深度神经网络的漏洞检测模型;
模型训练优化模块,用于针对每种漏洞类型在所述漏洞检测模型中持续训练及优化对应的二元分类器,选取分类效果最好的漏洞检测模型作为多标签分类器;
代码漏洞检测模块,用于将需要进行漏洞检测的智能合约源代码进行上述预处理和向量化操作,并将向量化数据输入所述多标签分类器,输出得到所述智能合约源代码的漏洞检测结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111669478.XA CN114297654A (zh) | 2021-12-31 | 2021-12-31 | 一种源代码层级的智能合约漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111669478.XA CN114297654A (zh) | 2021-12-31 | 2021-12-31 | 一种源代码层级的智能合约漏洞检测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114297654A true CN114297654A (zh) | 2022-04-08 |
Family
ID=80973557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111669478.XA Pending CN114297654A (zh) | 2021-12-31 | 2021-12-31 | 一种源代码层级的智能合约漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297654A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115033896A (zh) * | 2022-08-15 | 2022-09-09 | 鹏城实验室 | 以太坊智能合约漏洞检测方法、装置、系统与介质 |
CN115130110A (zh) * | 2022-07-08 | 2022-09-30 | 国网浙江省电力有限公司电力科学研究院 | 基于并行集成学习的漏洞挖掘方法、装置、设备及介质 |
CN115225348A (zh) * | 2022-06-29 | 2022-10-21 | 北京天融信网络安全技术有限公司 | 一种获取网络威胁情报的方法、装置、介质及设备 |
CN115412335A (zh) * | 2022-08-26 | 2022-11-29 | 国网江苏省电力有限公司电力科学研究院 | 5g电力物联网边缘设备漏洞检测方法、装置及系统 |
CN115412354A (zh) * | 2022-09-01 | 2022-11-29 | 北京赛博易安科技有限公司 | 一种基于大数据分析的网络安全漏洞检测方法及系统 |
CN115525900A (zh) * | 2022-09-23 | 2022-12-27 | 国网山西省电力公司 | 一种代码安全漏洞检查方法、装置、设备及介质 |
CN115544876A (zh) * | 2022-09-28 | 2022-12-30 | 北京能科瑞元数字技术有限公司 | 生产力中台智能制造软件设计方法 |
CN115658542A (zh) * | 2022-11-11 | 2023-01-31 | 南京掌御信息科技有限公司 | 一种代码密码算法类型识别与参数误用检测方法与系统 |
CN116361815A (zh) * | 2023-06-01 | 2023-06-30 | 北京比瓴科技有限公司 | 基于机器学习的代码敏感信息及硬编码检测方法及装置 |
CN117235744A (zh) * | 2023-11-14 | 2023-12-15 | 中关村科学城城市大脑股份有限公司 | 源文件上线方法、装置、电子设备和计算机可读介质 |
-
2021
- 2021-12-31 CN CN202111669478.XA patent/CN114297654A/zh active Pending
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115225348A (zh) * | 2022-06-29 | 2022-10-21 | 北京天融信网络安全技术有限公司 | 一种获取网络威胁情报的方法、装置、介质及设备 |
CN115130110A (zh) * | 2022-07-08 | 2022-09-30 | 国网浙江省电力有限公司电力科学研究院 | 基于并行集成学习的漏洞挖掘方法、装置、设备及介质 |
CN115130110B (zh) * | 2022-07-08 | 2024-03-19 | 国网浙江省电力有限公司电力科学研究院 | 基于并行集成学习的漏洞挖掘方法、装置、设备及介质 |
CN115033896B (zh) * | 2022-08-15 | 2022-11-08 | 鹏城实验室 | 以太坊智能合约漏洞检测方法、装置、系统与介质 |
CN115033896A (zh) * | 2022-08-15 | 2022-09-09 | 鹏城实验室 | 以太坊智能合约漏洞检测方法、装置、系统与介质 |
CN115412335A (zh) * | 2022-08-26 | 2022-11-29 | 国网江苏省电力有限公司电力科学研究院 | 5g电力物联网边缘设备漏洞检测方法、装置及系统 |
CN115412335B (zh) * | 2022-08-26 | 2024-03-05 | 国网江苏省电力有限公司电力科学研究院 | 5g电力物联网边缘设备漏洞检测方法、装置及系统 |
CN115412354A (zh) * | 2022-09-01 | 2022-11-29 | 北京赛博易安科技有限公司 | 一种基于大数据分析的网络安全漏洞检测方法及系统 |
CN115525900A (zh) * | 2022-09-23 | 2022-12-27 | 国网山西省电力公司 | 一种代码安全漏洞检查方法、装置、设备及介质 |
CN115544876B (zh) * | 2022-09-28 | 2024-02-27 | 北京能科瑞元数字技术有限公司 | 生产力中台智能制造软件设计方法 |
CN115544876A (zh) * | 2022-09-28 | 2022-12-30 | 北京能科瑞元数字技术有限公司 | 生产力中台智能制造软件设计方法 |
CN115658542A (zh) * | 2022-11-11 | 2023-01-31 | 南京掌御信息科技有限公司 | 一种代码密码算法类型识别与参数误用检测方法与系统 |
CN115658542B (zh) * | 2022-11-11 | 2023-09-19 | 南京掌御信息科技有限公司 | 一种代码密码算法类型识别与参数误用检测方法与系统 |
CN116361815B (zh) * | 2023-06-01 | 2023-08-15 | 北京比瓴科技有限公司 | 基于机器学习的代码敏感信息及硬编码检测方法及装置 |
CN116361815A (zh) * | 2023-06-01 | 2023-06-30 | 北京比瓴科技有限公司 | 基于机器学习的代码敏感信息及硬编码检测方法及装置 |
CN117235744A (zh) * | 2023-11-14 | 2023-12-15 | 中关村科学城城市大脑股份有限公司 | 源文件上线方法、装置、电子设备和计算机可读介质 |
CN117235744B (zh) * | 2023-11-14 | 2024-02-02 | 中关村科学城城市大脑股份有限公司 | 源文件上线方法、装置、电子设备和计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114297654A (zh) | 一种源代码层级的智能合约漏洞检测方法及系统 | |
CN111259394B (zh) | 一种基于图神经网络的细粒度源代码漏洞检测方法 | |
Russell et al. | Automated vulnerability detection in source code using deep representation learning | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN107967208B (zh) | 一种基于深度神经网络的Python资源敏感缺陷代码检测方法 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN110737899B (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN110232280B (zh) | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 | |
CN117951701A (zh) | 用于确定软件代码中的缺陷和漏洞的方法 | |
CN112307473A (zh) | 一种基于Bi-LSTM网络和注意力机制的恶意JavaScript代码检测模型 | |
CN112733156B (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN112364352B (zh) | 可解释性的软件漏洞检测与推荐方法及系统 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN115168856B (zh) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 | |
CN115033895B (zh) | 一种二进制程序供应链安全检测方法及装置 | |
CN114942879A (zh) | 一种基于图神经网络的源代码漏洞检测与定位方法 | |
CN110162972A (zh) | 一种基于语句联合编码深度神经网络的uaf漏洞检测方法 | |
CN116305158A (zh) | 一种基于切片代码依赖图语义学习的漏洞识别方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN114969755A (zh) | 一种跨语言的未知可执行程序二进制漏洞分析方法 | |
Mao et al. | Explainable software vulnerability detection based on attention-based bidirectional recurrent neural networks | |
CN115935369A (zh) | 使用源代码元素的数值数组表示来评估源代码的方法 | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN111898134B (zh) | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
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 |