CN110737899B - 一种基于机器学习的智能合约安全漏洞检测方法 - Google Patents

一种基于机器学习的智能合约安全漏洞检测方法 Download PDF

Info

Publication number
CN110737899B
CN110737899B CN201910904539.2A CN201910904539A CN110737899B CN 110737899 B CN110737899 B CN 110737899B CN 201910904539 A CN201910904539 A CN 201910904539A CN 110737899 B CN110737899 B CN 110737899B
Authority
CN
China
Prior art keywords
intelligent contract
vulnerability
code
contract
machine learning
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.)
Active
Application number
CN201910904539.2A
Other languages
English (en)
Other versions
CN110737899A (zh
Inventor
翁健
陈新凯
李明
袁浩宸
张斌
卢贺贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jinan University
Original Assignee
Jinan University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jinan University filed Critical Jinan University
Priority to CN201910904539.2A priority Critical patent/CN110737899B/zh
Publication of CN110737899A publication Critical patent/CN110737899A/zh
Application granted granted Critical
Publication of CN110737899B publication Critical patent/CN110737899B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • Technology Law (AREA)
  • Strategic Management (AREA)
  • Marketing (AREA)
  • Computing Systems (AREA)
  • Economics (AREA)
  • Development Economics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于机器学习的智能合约安全漏洞检测方法,首先收集智能合约源代码数据,并进行数据预处理,构建机器学习的样本集;然后通过公开的智能合约漏洞检测器为样本集数据确定漏洞标签,将智能合约源代码转译成XML结构化文本,在此基础上对数据集中智能合约源代码进行特征抽取,针对智能合约不同漏洞类型,考虑当前Solidity智能合约样本数据有限,因此本发明依据标签样本数量,采用两种不同的机器学习算法来进行分析。其中,针对多数据样本采用随机森林算法构建模型、针对少数据样本利用迁移学习构建检测模型,本发明可以更加高效、自动化地得到检测出Solidity智能合约漏洞。

Description

一种基于机器学习的智能合约安全漏洞检测方法
技术领域
本发明涉及网络空间安全技术领域,尤其涉及一种基于机器学习的智能合约安全漏洞检测方法。
背景技术
以太坊是除比特币之外最为成熟的公有链,随着在全球范围内不断的发展和成熟,目前已成为业界底层区块链的首选开发平台。以太坊中可以支持图灵完备的智能合约,突破了比特币对区块链应用的限制,让人们对区块链的认识不再局限于数字货币,将应用领域通过智能合约的形式进一步拓展到各行各业,比如区块链分布式应用DApp。由于区块链自身机制问题、生态安全和使用者安全所导致经济损失达到数十亿美元,而由于智能合约安全漏洞造成的损失占比最高,达到41.8%。随着区块链的经济价值不断升高,促使不法分子利用各种攻击手段获取更多敏感数据,“盗窃”、“勒索”、“挖矿”等,借着区块链概念和技术,使区块链安全形势变得更加复杂。据网络安全公司Besec的调查数据显示,近年总计有价值约数十亿美元的数字加密货币被盗,并且在全球范围内因区块链安全事件损失金额还在不断攀升。种种盗窃“丑闻”,把市值高达1万亿美元的数字加密货币市场推向了风口浪尖。
而且以太坊中的智能合约被部署以后,一旦出现漏洞,由于其不可篡改性,无法通过打补丁或更新的方式来解决漏洞问题,大多数情况只能采取合约禁用的手段来防止损失进一步被扩大。智能合约中对安全漏洞的传统分析方式对于分析预定义的漏洞属性非常有价值。但是大部分传统分析工具需要执行复杂的分析步骤,如预先确定的调用深度来搜索执行路径,并且搜索时间随着深度的增加而增加。自2015年12月以来,像Ethereum这样的区块链合同数量增加了176倍。如果这些工具不能及时分析数量越来越多的合约,那么越来越多的安全漏洞将会对智能合约社区造成不可挽回的损害。
发明内容
本发明的目的是为了解决现有技术中的上述缺陷,提供一种基于机器学习的智能合约安全漏洞检测方法,通过建立一个智能合约安全漏洞检测模型,能对智能合约代码中存在的安全风险漏洞以及区块链本身性质所致的问题进行检测,并显示具体的漏洞信息,让参与用户一目了然地知道用户所关心的合约中存在的安全漏洞;而且面对现在数量越来越多的智能合约,相比于传统分析方式能更快地得到检测结果。
本发明的目的可以通过采取如下技术方案达到:
一种基于机器学习的智能合约安全漏洞检测方法,所述的安全漏洞检测方法包括以下步骤:
S1、在网络上收集海量的Solidity智能合约代码和Java/C++代码构成机器学习的基本数据集,在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集;
S2、通过智能合约漏洞检测器为样本集数据确定漏洞标签,基于Solidity智能合约漏洞检测工具来生成漏洞标签数据,并统计样本集中各漏洞标签的Solidity智能合约样本数量;
S3、以样本集中Solidity智能合约标签样本数量为依据进行分支处理,针对大于或等于预定的比较阈值threshold的多数据标签,采用随机森林算法构建检测模型;针对小于预定的比较阈值threshold的数据标签,则通过java/C++的漏洞模型进行迁移学习构建检测模型;
S4、通过构建的检测模型对将要进行检测的智能合约进行智能合约安全漏洞检测,得到该智能合约中存在的安全漏洞信息。
进一步地,所述的步骤S1过程如下:
S11、利用爬虫脚本从以太坊智能合约平台收集Solidity智能合约代码,同时从开源社区收集Java/C++代码;
S12、将Solidity智能合约代码转化为XML文本,直接获取Solidity的编译版本,然后将转化后的XML文本进行内部代码片段比较,计算出代码片段相同的占比,得到内容重复率;
S13、在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集。
进一步地,所述的步骤S13中,选取Solidity编译版本高于4.14和代码内容重复率低于30%的合约,作为机器学习样本集
进一步地,所述的步骤S2过程如下:
S21、使用一种或多种Solidity智能合约漏洞检测工具,输入为样本集中的Solidity智能合约代码,输出结果为多个漏洞标签;
S22、将不同的检测工具的检测结果进行汇总,只有同一个漏洞标签在不同的检查结果中出现的频率等于或高于50%时,对该标签进行记录,生成该Solidity智能合约漏洞标签;
S23、统计样本集中各漏洞标签的Solidity智能合约样本数量。
进一步地,所述的随机森林算法构建检测模型过程如下:
P1、将Solidity智能合约代码转化为XML文本,XML文本中的每个节点表示合约代码的语法元素,并提供关于源代码特性的所有细节;
P2、基于XML文本并依据Solidity智能合约特征,分别从Solidity语法、合约语义、函数行为进行考虑,提取特征;
P3、采用随机森林算法将Solidity智能合约对应的特征向量和标签数据作为输入进行随机森林模型训练,同时考虑Solidity智能合约的固有特性,将代表执行路径函数调用和代码流程特征作为高权重特征来进行训练。
进一步地,所述的步骤P2过程如下:
应用dom4j包和Xpath语言遍历XML文本,进而将XML文本内包含的Solidity源代码信息封装到SolFileBean实体,其中,dom4j是一个用于解析XML文本的开源XML解析包,Xpath是XML路径语言(XML Path Language),是一种用来确定XML文档中某部分位置的计算机语言,SolFileBean是用来封装Solidity源代码信息的编程实体。该SolFileBean提供关于Solidity源代码特性的完整细节,包括合约集合、方法集合、变量合集、修饰器集合在内的源代码信息;
依据Solidity智能合约特征,分别从Solidity语法、合约语义、函数行为进行考虑,在SolFileBean上提取多种特征,这些特征分为四类:1)合约基本信息特征;2)二元操作符特征;3)代码复杂度特征;4)路径特征。
进一步地,所述的通过java/C++的漏洞模型进行迁移学习构建检测模型过程如下:
Q1、提取Solidity智能合约中与编程语言Java或C++相近的漏洞类型,包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞;
Q2、利用编程语言Java或C++的大量样本数据来训练包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞在内的检测模型;
Q3、利用迁移学习,将传统代码的漏洞检测模型对Solidity智能合约测试样本进行检测,查看结果准确率,并相应调整传统编程语言训练检测模型。
进一步地,所述的基于Solidity智能合约漏洞检测工具包括Oyente、ZEUS和Osiris。
本发明相对于现有技术具有如下的优点及效果:
1)本发明通过建立一个智能合约安全漏洞检测模型,结合Solidity代码进行多特征结合的提取分析,能对智能合约代码中存在的安全风险漏洞以及区块链本身性质所致的问题进行检测,并显示具体的漏洞信息,使参与用户一目了然地知道所关心的智能合约中存在的安全漏洞。
2)本发明基于智能合约源代码的特征和漏洞标签,采用随机森林、迁移学习进行自动化学习来获得针对不同漏洞类型的智能合约检测模型。由于智能合约源代码反映着合约本身的行为和漏洞息息相关,因此抽取智能合约源代码的特征进行机器学习,能有效学习出更好的特征,检测出智能合约存在的漏洞。本发明可以更加高效、自动化地得到检测出Solidity智能合约漏洞。
附图说明
图1是本发明实施例提供的一种基于机器学习的智能合约安全漏洞检测方法的操作流程示意图;
图2是本发明实施例提供的一种基于机器学习的智能合约安全漏洞检测方法中的XML结构化文本示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
本实施例公开了一种基于机器学习的智能合约安全漏洞检测方法,如图1所示,该检测方法包括以下步骤:
S1、在网络上收集海量的Solidity智能合约代码和Java/C++代码构成机器学习的基本数据集。在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集;
具体本实施例中,该步骤S1过程如下:
S11、利用爬虫脚本从以太坊智能合约平台收集Solidity智能合约代码,同时从开源社区收集Java/C++代码;
S12、将Solidity智能合约代码转化为结构化的XML文本,直接获取Solidity的编译版本,然后将转化后的XML文本进行内部代码片段比较,计算代码片段相同的占比,得到内容重复率;
S13、在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集。
本实施例中,从中选取Solidity编译版本高于4.14和代码内容重复率低于30%的合约,作为机器学习样本集。
上述实施例中,选取指定版本号为Solidity编译版本4.14和选取重复阈值为30%,不构成对本发明技术方案的限制,其他取值仍然属于本发明技术方案的保护范围。
S2、通过智能合约漏洞检测器为样本集数据确定漏洞标签,基于Solidity智能合约漏洞检测工具(包括Oyente、ZEUS、Osiris)来生成漏洞标签数据,并统计样本集中各漏洞标签的Solidity智能合约样本数量;
具体本实施例中,该步骤S2过程如下:
S21、使用一种或多种Solidity智能合约漏洞检测工具,输入为样本集中的Solidity智能合约代码,输出结果为多个漏洞标签;
其中,Oyente智能合约漏洞检测器是一款基于语义分析的智能合约安全检测工具,可以自动检测出以下最新的以太坊安全漏洞类型:1)整数下溢Integer Underflow;2)整数溢出Integer Overflow;3)多重钱包漏洞Parity Multisig Bug 2;4)栈调用深度攻击漏洞Callstack Depth Attack Vulnerability;5)交易顺序依赖漏洞Transaction-Ordering Dependence(TOD);6)时间戳依赖漏洞Timestamp Dependency;7)重入漏洞Re-Entrancy Vulnerability。
表1.基于机器学习的智能合约安全漏洞检测机制的漏洞种类表
Figure BDA0002212885630000071
S22、将不同的检测工具的检测结果进行汇总,只有同一个漏洞标签在不同的检查结果中出现的频率等于或高于50%时,该标签才能记录,生成该Solidity智能合约漏洞标签。
S23、统计样本集中各漏洞标签的Solidity智能合约样本数量。
S3、以样本集中Solidity智能合约标签样本数量为依据进行分支处理,针对大于或等于预定的比较阈值threshold的多数据标签,采用随机森林算法构建检测模型;针对小于预定的比较阈值threshold的数据标签,则通过java/C++的漏洞模型进行迁移学习构建检测模型。
S4、通过构建的检测模型进行智能合约安全漏洞检测。
其中,随机森林算法构建检测模型的方法具体如下:
基于XML文本智能合约源代码到格式化XML结构文本的转换,本实施例采用ANTLR这一基于LL(Left-to-right,Leftmost derivation)算法实现的语法解析器生成器,使用自上而下的递归下降LL(Left-to-right,Leftmost derivation)剖析器方法,将Solidity智能合约代码转换成XML结构文本,该过程保留了Solidity合约的所有信息以方便接下来的安全翻译。生成的XML结构化数据可以被认为是Solidity源代码的抽象语法树(Abstractsyntax tree)。XML中的每个节点表示编程语言的语法元素,如<functionDefinition>节点代表Solidity代码中的函数定义语句,能提供关于源代码特性的丰富细节,比如合约的数量、函数的数量以及函数的具体内容等。
基于XML结构文本的特征抽取。应用dom4j包和Xpath语言遍历XML文本,进而将XML文本内包含的Solidity源代码信息封装到SolFileBean实体,其中,dom4j是一个用于解析XML文本的开源XML解析包,Xpath是XML路径语言(XML Path Language),是一种用来确定XML文档中某部分位置的计算机语言,SolFileBean是用来封装Solidity源代码信息的编程实体。该SolFileBean提供关于Solidity源代码特性的完整细节,包括合约集合、方法集合、变量合集、修饰器集合等一切源代码信息。依据Solidity智能合约特征,分别从Solidity语法、合约语义、函数行为等方面进行考虑,在SolFileBean上提取多种特征,这些特征可以分为四类:1)合约基本信息特征;2)二元操作符特征;3)代码复杂度特征;4)路径特征。
1)合约基本信息特征,是指智能合约的合约(contract)、函数(function)、事件(event)和修饰器(modifier)数量和定义。所述合约定义是指合约的父合约有无;所述函数定义是指函数的访问修饰符,返回值和输入参数列表;所述事件定义是指输入事件的输入参数列表;所述修饰器定义是指修饰器的输入参数列表;
2)二元操作符特征,是指在每个合约和每个函数中的+,-,*,/,>,<,==等二元操作符的出现次数和出现频率;
3)代码复杂度特征,是指通过代码行数,代码长度,循环语句的数量和代码流程图的基本块数量来大致表征代码的复杂度;
4)路径特征,是指函数之间的调用关系,函数的修饰器修饰关系和代码流程图中的控制语句。所述函数之间的调用关系是指在函数内调用别的函数和该函数被其余函数的调用。所述函数的修饰器修饰关系是指函数被修饰器所修饰,只有满足修饰器的条件,该函数才能正常使用。代码流程图中的控制语句是指在代码流程图中的分支语句分别代表着不同的代码执行路径。
采用随机森林算法和10折交叉验证将Solidity智能合约对应的特征向量和标签数据作为输入进行模型训练,同时考虑Solidity智能合约的固有特性,将路径特征如函数调用和代码流程的等特征作为高权重特征来进行训练,通过多次修改权重并试验,得到准确率最高的检测模型。
其中,通过java/C++的漏洞模型进行迁移学习构建检测模型的方法具体如下:
提取Solidity智能合约中与传统编程语言(Java/C++)相近的漏洞类型,包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞等;
利用传统编程语言(Java/C++)的大量样本数据来训练包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞等在内的检测模型;利用VulDeePecker的机器学习步骤对传统编程语言中的整数溢出漏洞、重入漏洞、函数间调用异常漏洞进行训练,得到检测模型;
VulDeePecker是指一种已知的基于深度学习来进行Java代码漏洞检测的方法。以下为其训练过程,由4个步骤组成:
1)从训练数据(源程序代码)中提取库/API函数调用以及对应的程序片。通过对库/API函数调用的每个参数提取一个或多个程序片段,一个程序片段表示程序的代码行与库/API函数调用参数有关的一行或者多行代码;
2)生成Code gadgets以及相应的标签。一个Code gadget是由多个语义相关的代码行组成的(CFG中的Codes),然后给Code gadget打上标签,标识其为1(有漏洞的)或0(没有漏洞的);
3)将Code gadgets转换为矢量表示。通过将Code gadget表示为语义表示,保存训练数据的语义信息。然后将语义表示的Code gadget编码为向量,该向量便是BLSTM的输入;
4)训练BLSTM神经网络。按照标准训练模型,基于训练样本数据集来训练BLSTM模型。
通过迁移学习中的参数/模型迁移方式,用传统代码的漏洞检测模型对Solidity智能合约测试样本进行检测,查看结果准确率,并相应调整传统编程语言训练检测模型内的参数使之进一步拟合智能合约安全漏洞检测模型。
参数/模型迁移方式是指假设源任务(source tasks)和目标任务(target tasks)之间共享一些公共参数,或者共享模型超参数的先验分布,把原来的模型迁移到新的领域(domain),达到较好的精度。
源任务(source tasks)代表传统代码的漏洞检测任务(包括整数溢出漏洞、重入漏洞等),目标任务(target tasks)代表Solidity智能合约漏洞检测任务,让二者保持有相同标记空间,以保证更高效的迁移效果。所述相同标记空间是指整数溢出漏洞、重入漏洞等标签,在传统代码的漏洞检测任务和Solidity智能合约漏洞检测任务之间具有相同的实际意义,保持一致性。依据VulDeePecker训练方法,通过代码之间语义关系进行训练,而不用依赖于特定编程语言的语法,这也表明目标领域(target domain)Solidity智能合约漏洞检测和源领域(source domain)传统代码的漏洞检测的特征空间和概率具有高度相似性,支持迁移学习的模型构建。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (4)

1.一种基于机器学习的智能合约安全漏洞检测方法,其特征在于,所述的安全漏洞检测方法包括以下步骤:
S1、在网络上收集Solidity智能合约代码和Java/C++代码构成机器学习的基本数据集,在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集;
S2、通过智能合约漏洞检测器为样本集数据确定漏洞标签,基于Solidity智能合约漏洞检测工具来生成漏洞标签数据,并统计样本集中各漏洞标签的Solidity智能合约样本数量;所述的步骤S2过程如下:
S21、使用一种或多种Solidity智能合约漏洞检测工具,输入为样本集中的Solidity智能合约代码,输出结果为多个漏洞标签;
S22、将不同的检测工具的检测结果进行汇总,只有同一个漏洞标签在不同的检查结果中出现的频率等于或高于50%时,对该标签进行记录,生成该Solidity智能合约漏洞标签;
S23、统计样本集中各漏洞标签的Solidity智能合约样本数量;
S3、以样本集中Solidity智能合约标签样本数量为依据进行分支处理,针对大于或等于预定的比较阈值threshold的多数据标签,采用随机森林算法构建检测模型;针对小于预定的比较阈值threshold的数据标签,则通过java/C++的漏洞模型进行迁移学习构建检测模型;
S4、通过构建的检测模型对将要进行检测的智能合约进行智能合约安全漏洞检测,得到该智能合约中存在的安全漏洞信息;所述的随机森林算法构建检测模型过程如下:
P1、将Solidity智能合约代码转化为XML文本,XML文本中的每个节点表示合约代码的语法元素,并提供关于源代码特性的所有细节;
P2、基于XML文本并依据Solidity智能合约特征,分别从Solidity语法、合约语义、函数行为进行考虑,提取特征;
P3、采用随机森林算法将Solidity智能合约对应的特征向量和标签数据作为输入进行随机森林模型训练,同时考虑Solidity智能合约的固有特性,将代表执行路径作为高权重特征来进行训练;
所述的步骤P2过程如下:
应用dom4j包和Xpath语言遍历XML文本,进而将XML文本内包含的Solidity源代码信息封装到SolFileBean实体,其中,所述的dom4j是一个用于解析XML文本的开源XML解析包,所述的Xpath是XML路径语言,是一种用来确定XML文档中某部分位置的计算机语言,所述的SolFileBean是用来封装Solidity源代码信息的编程实体,该SolFileBean提供关于Solidity源代码特性的完整细节,包括合约集合、方法集合、变量合集、修饰器集合在内的源代码信息;
依据Solidity智能合约特征,分别从Solidity语法、合约语义、函数行为进行考虑,在SolFileBean上提取多种特征,这些特征分为四类:1)合约基本信息特征;2)二元操作符特征;3)代码复杂度特征;4)路径特征;
所述的通过java/C++的漏洞模型进行迁移学习构建检测模型过程如下:
Q1、提取Solidity智能合约中与编程语言Java或C++相近的漏洞类型,包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞;
Q2、利用编程语言Java或C++的大量样本数据来训练包括整数溢出漏洞、重入漏洞、函数间调用异常漏洞在内的检测模型;
Q3、利用迁移学习,将传统代码的漏洞检测模型对Solidity智能合约测试样本进行检测,查看结果准确率,并相应调整传统编程语言训练检测模型。
2.根据权利要求1所述的一种基于机器学习的智能合约安全漏洞检测方法,其特征在于,所述的步骤S1过程如下:
S11、利用爬虫脚本从以太坊智能合约平台收集Solidity智能合约代码,同时从开源社区收集Java/C++代码;
S12、将Solidity智能合约代码转化为XML文本,直接获取Solidity的编译版本,然后将转化后的XML文本进行内部代码片段比较,计算出代码片段相同的占比,得到内容重复率;
S13、在基本数据集中选取Solidity编译版本高于指定版本号和代码内容重复率低于重复阈值的合约,作为机器学习样本集。
3.根据权利要求2所述的一种基于机器学习的智能合约安全漏洞检测方法,其特征在于,所述的步骤S13中,选取Solidity编译版本高于4.14和代码内容重复率低于30%的合约,作为机器学习样本集。
4.根据权利要求1所述的一种基于机器学习的智能合约安全漏洞检测方法,其特征在于,所述的基于Solidity智能合约漏洞检测工具包括Oyente、ZEUS和Osiris。
CN201910904539.2A 2019-09-24 2019-09-24 一种基于机器学习的智能合约安全漏洞检测方法 Active CN110737899B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910904539.2A CN110737899B (zh) 2019-09-24 2019-09-24 一种基于机器学习的智能合约安全漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910904539.2A CN110737899B (zh) 2019-09-24 2019-09-24 一种基于机器学习的智能合约安全漏洞检测方法

Publications (2)

Publication Number Publication Date
CN110737899A CN110737899A (zh) 2020-01-31
CN110737899B true CN110737899B (zh) 2022-09-06

Family

ID=69269516

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910904539.2A Active CN110737899B (zh) 2019-09-24 2019-09-24 一种基于机器学习的智能合约安全漏洞检测方法

Country Status (1)

Country Link
CN (1) CN110737899B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111310191B (zh) * 2020-02-12 2022-12-23 广州大学 一种基于深度学习的区块链智能合约漏洞检测方法
CN111339535A (zh) * 2020-02-17 2020-06-26 扬州大学 面向智能合约代码的漏洞预测方法、***、计算机设备和存储介质
CN111353160B (zh) * 2020-02-25 2022-08-16 融合安全(深圳)信息科技有限公司 软件漏洞异常智能检测***及方法
CN112184432A (zh) * 2020-03-16 2021-01-05 北京天德科技有限公司 一种基于法律语言的智能合约开发方法
CN111563040B (zh) * 2020-05-08 2023-08-15 中国工商银行股份有限公司 区块链智能合约代码测试方法及装置
CN111628997B (zh) * 2020-05-26 2022-04-26 中国联合网络通信集团有限公司 一种防止攻击方法及装置
CN112115326B (zh) * 2020-08-19 2022-07-29 北京交通大学 一种以太坊智能合约的多标签分类和漏洞检测方法
CN112257076B (zh) * 2020-11-11 2023-12-15 厦门美域中央信息科技有限公司 一种基于随机探测算法和信息聚合的漏洞检测方法
CN112416358B (zh) * 2020-11-20 2022-04-29 武汉大学 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法
CN112699375B (zh) * 2020-12-30 2024-07-02 杭州趣链科技有限公司 基于网络嵌入相似性的区块链智能合约安全漏洞检测方法
CN112613043B (zh) * 2020-12-30 2024-02-27 杭州趣链科技有限公司 一种基于智能合约调用网络的智能合约漏洞检测方法
CN113268732B (zh) * 2021-04-19 2022-12-20 中国人民解放军战略支援部队信息工程大学 Solidity智能合约相似性检测方法及***
CN113221125B (zh) * 2021-05-31 2022-09-27 河海大学 基于TreeGAN的生成带有漏洞智能合约的方法及***
CN113609489B (zh) * 2021-07-21 2023-10-27 三峡大学 一种工业区块链中智能合约冲突的分布式检测方法
CN114048464B (zh) * 2022-01-12 2022-03-15 北京大学 基于深度学习的以太坊智能合约安全漏洞检测方法及***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101947760B1 (ko) * 2018-09-04 2019-02-13 김종현 스마트콘트랙트의 보안 인증 서버
CN109375899A (zh) * 2018-09-25 2019-02-22 杭州趣链科技有限公司 一种形式验证Solidity智能合约的方法
CN109933991A (zh) * 2019-03-20 2019-06-25 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、装置
CN109977682A (zh) * 2019-04-01 2019-07-05 中山大学 一种基于深度学习的区块链智能合约漏洞检测方法及装置
CN110011986A (zh) * 2019-03-20 2019-07-12 中山大学 一种基于深度学习的源代码漏洞检测方法
CN110175454A (zh) * 2019-04-19 2019-08-27 肖银皓 一种基于人工智能的智能合约安全漏洞挖掘方法及***

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101947760B1 (ko) * 2018-09-04 2019-02-13 김종현 스마트콘트랙트의 보안 인증 서버
CN109375899A (zh) * 2018-09-25 2019-02-22 杭州趣链科技有限公司 一种形式验证Solidity智能合约的方法
CN109933991A (zh) * 2019-03-20 2019-06-25 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、装置
CN110011986A (zh) * 2019-03-20 2019-07-12 中山大学 一种基于深度学习的源代码漏洞检测方法
CN109977682A (zh) * 2019-04-01 2019-07-05 中山大学 一种基于深度学习的区块链智能合约漏洞检测方法及装置
CN110175454A (zh) * 2019-04-19 2019-08-27 肖银皓 一种基于人工智能的智能合约安全漏洞挖掘方法及***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"智能合约安全漏洞挖掘技术研究";付梦琳 等;《计算机应用技术》;20190710;第39卷(第7期);1959-1966 *

Also Published As

Publication number Publication date
CN110737899A (zh) 2020-01-31

Similar Documents

Publication Publication Date Title
CN110737899B (zh) 一种基于机器学习的智能合约安全漏洞检测方法
US11568055B2 (en) System and method for automatically detecting a security vulnerability in a source code using a machine learning model
Tann et al. Towards safer smart contracts: A sequence learning approach to detecting security threats
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及***
US11403536B2 (en) System and method for anti-pattern detection for computing applications
CN102054149A (zh) 一种恶意代码行为特征提取方法
CN113360915A (zh) 基于源代码图表示学习的智能合约多漏洞检测方法及***
CN112307473A (zh) 一种基于Bi-LSTM网络和注意力机制的恶意JavaScript代码检测模型
US20230273776A1 (en) Code Processing Method and Apparatus, Device, and Medium
CN106295346B (zh) 一种应用漏洞检测方法、装置及计算设备
CN109902487B (zh) 基于应用行为的Android应用恶意性检测方法
CN111881300A (zh) 面向第三方库依赖的知识图谱构建方法及***
CN115022026A (zh) 一种区块链智能合约威胁检测装置及方法
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN112688966A (zh) webshell检测方法、装置、介质和设备
CN110750297B (zh) 一种基于程序分析和文本分析的Python代码参考信息生成方法
CN117725592A (zh) 一种基于有向图注意力网络的智能合约漏洞检测方法
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
CN116932381A (zh) 小程序安全风险自动化评估方法及相关设备
CN116821903A (zh) 检测规则确定及恶意二进制文件检测方法、设备及介质
CN116305131A (zh) 脚本静态去混淆方法及***
Tatarinova et al. Extended vulnerability feature extraction based on public resources
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取***及方法
CN108255802B (zh) 通用文本解析架构及基于所述架构解析文本的方法和装置

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
GR01 Patent grant
GR01 Patent grant