CN115033896A - 以太坊智能合约漏洞检测方法、装置、系统与介质 - Google Patents

以太坊智能合约漏洞检测方法、装置、系统与介质 Download PDF

Info

Publication number
CN115033896A
CN115033896A CN202210971647.3A CN202210971647A CN115033896A CN 115033896 A CN115033896 A CN 115033896A CN 202210971647 A CN202210971647 A CN 202210971647A CN 115033896 A CN115033896 A CN 115033896A
Authority
CN
China
Prior art keywords
intelligent contract
vulnerability
sequence
code
source code
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.)
Granted
Application number
CN202210971647.3A
Other languages
English (en)
Other versions
CN115033896B (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.)
Peng Cheng Laboratory
Original Assignee
Peng Cheng Laboratory
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 Peng Cheng Laboratory filed Critical Peng Cheng Laboratory
Priority to CN202210971647.3A priority Critical patent/CN115033896B/zh
Publication of CN115033896A publication Critical patent/CN115033896A/zh
Application granted granted Critical
Publication of CN115033896B publication Critical patent/CN115033896B/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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/35Clustering; Classification
    • G06F16/353Clustering; Classification into predefined classes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及信息安全技术领域,公开了一种以太坊智能合约漏洞检测方法、装置、系统与介质。本发明通过采集智能合约代码数据,并对智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;对智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从智能合约源代码中提取对应的抽象语法树节点序列,并根据预设多头注意力机制进行特征提取,获得对应的局部语义特征;根据全局语义特征和局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果;从而提高以太坊智能合约漏洞检测精确度以及漏洞检测效率。

Description

以太坊智能合约漏洞检测方法、装置、系统与介质
技术领域
本发明涉及信息安全技术领域,尤其涉及一种以太坊智能合约漏洞检测方法、装置、系统与介质。
背景技术
随着区块链技术的迅速发展,现阶段已经进入了以以太坊等平台为主导的新时代。智能合约作为一种新型数字化协议,智能合约被广泛运用到各种领域,特别是金融和保险领域。尽管智能合约的快速发展带来了种种好处,但它的安全问题也令众多研究员倍加关注;因此,智能合约漏洞检测成为学术界研究的重点问题。
目前,针对以太坊智能合约漏洞检测技术的研究主要采用传统软件工程领域中常用的方法,例如基于符号执行的漏洞检测方法、基于模糊测试的漏洞检测方法和基于形式化验证的漏洞检测方法等。这些漏洞检测方法主要依赖于专家知识的介入,往往需要大量的人力投入,而且检测效果并不理想,经常发生漏洞的漏检和误检。为了提高检测准确度,基于符号执行的方法需要探索尽可能多的程序执行路径,基于模糊测试的方法需要生成大量不同的测试用例,基于形式化验证的方法需要对程序代码进行尽可能完备的建模,这些检测操作都会消耗很多时间,因此上述传统方法还存在着检测效率低下的缺陷。
发明内容
本发明的主要目的在于提出一种以太坊智能合约漏洞检测方法、装置、系统与介质,旨在提高漏洞检测精确度以及漏洞检测效率。
为实现上述目的,本发明提供一种以太坊智能合约漏洞检测方法,所述以太坊智能合约漏洞检测方法包括如下步骤:
采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
优选地,所述对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码的步骤包括:
根据预设编译顺序,通过不同版本编译器对所述智能合约代码数据进行编译,同时删除编译失败的智能合约代码数据,得到可编译智能合约文件;
通过逐行对比所述可编译智能合约文件中的源代码,并删除所述可编译智能合约文件中相似度高于预设阈值的源代码,得到清洗后的源代码;
通过漏洞检测工具对所述清洗后的源代码进行漏洞检测分析,并根据检测分析后的漏洞类型对所述清洗后的源代码进行标记标签,生成携带有标签的智能合约源代码,其中,所述漏洞类型包括重入漏洞、整数溢出漏洞、时间戳依赖漏洞、异常处理不当、交易序列依赖、区块信息依赖以及无漏洞。
优选地,所述对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征的步骤包括:
对所述智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码;
根据漏洞定位点对所述标准智能合约源代码进行划分,获得漏洞片段;
根据预设分割符对所述漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列;
对所述token序列进行词向量嵌入,将所述token序列转换为固定维度的第一嵌入向量,并根据所述token序列的token顺序对所述第一嵌入向量进行排序,生成对应的顺序代码序列;
根据预设知识蒸馏模型对所述顺序代码序列进行词向量提取和全连接加权处理,获得对应的全局语义特征。
优选地,所述根据预设知识蒸馏模型对所述顺序代码序列进行词向量提取和全连接加权处理,获得对应的全局语义特征的步骤之前,还包括:
根据预训练模型,对预先建立的知识库进行训练得到语义知识,并通过知识蒸馏方式对所述语义知识进行蒸馏,提取得到预设知识蒸馏模型。
优选地,所述从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征的步骤包括:
查找所述智能合约源代码中的漏洞定位点,并根据所述智能合约源代码提取出漏洞定位点所在的函数,以及将所述函数转化为抽象语法树子数,构建对应的抽象语法树;
根据预设遍历顺序对所述抽象语法树进行递归遍历,生成所述抽象语法树的节点序列;
对所述节点序列进行词向量嵌入,将所述节点序列转换为固定维度的第二嵌入向量,并根据遍历过程中的节点顺序对所述第二嵌入向量进行拼接,生成对应的抽象语法树节点序列;
根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征。
优选地,所述根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征的步骤包括:
根据节点顺序对所述抽象语法树节点序列进行位置编码,生成对应的带有位置信息的嵌入向量;
根据预设多头注意力机制对所述带有位置信息的嵌入向量进行特征提取,获得对应的局部语义特征。
优选地,所述基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行漏洞检测,并输出漏洞检测结果的步骤包括:
对所述全局语义特征和所述局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征;
通过所述文本分类模型对所述组合特征进行卷积和池化处理,获得对应的新特征,并将所述新特征输入至分类器进行多标签分类检测,输出漏洞检测结果。
此外,为实现上述目的,本发明还提供一种以太坊智能合约漏洞检测装置,所述以太坊智能合约漏洞检测装置包括:
采集模块,用于采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
处理模块,用于对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
提取模块,用于从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
检测模块,用于基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
此外,为实现上述目的,本发明还提供一种系统,所述系统为以太坊智能合约漏洞检测系统,所述以太坊智能合约漏洞检测系统包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的以太坊智能合约漏洞检测程序,所述以太坊智能合约漏洞检测程序被所述处理器执行时实现如上所述的以太坊智能合约漏洞检测方法的步骤。
此外,为实现上述目的,本发明还提供一种介质,所述介质为计算机可读存储介质,所述计算机可读存储介质上存储有以太坊智能合约漏洞检测程序,所述以太坊智能合约漏洞检测程序被处理器执行时实现如上所述的以太坊智能合约漏洞检测方法的步骤。
本发明提出的以太坊智能合约漏洞检测方法、装置、系统与介质;所述以太坊智能合约漏洞检测方法包括:采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。本发明通过采集智能合约代码数据,并对智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;对智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从智能合约源代码中提取对应的抽象语法树节点序列,并根据预设多头注意力机制进行特征提取,获得对应的局部语义特征;根据全局语义特征和局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果;从而提高以太坊智能合约漏洞检测精确度以及漏洞检测效率。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图;
图2为本发明以太坊智能合约漏洞检测方法第一实施例的流程示意图;
图3为本发明以太坊智能合约漏洞检测方法第一实施例的一子流程示意图;
图4为本发明以太坊智能合约漏洞检测方法第一实施例的漏洞检测整体流程示意图;
图5为本发明以太坊智能合约漏洞检测方法第二实施例的流程示意图;
图6为本发明以太坊智能合约漏洞检测方法第二实施例的一子流程示意图;
图7为本发明以太坊智能合约漏洞检测方法第三实施例的流程示意图;
图8为本发明以太坊智能合约漏洞检测方法第三实施例的一子流程示意图;
图9为本发明以太坊智能合约漏洞检测方法第四实施例的流程示意图;
图10为本发明以太坊智能合约漏洞检测方法第四实施例的漏洞检测阶段流程示意图;
图11为本发明以太坊智能合约漏洞检测装置第一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。
本发明实施例设备可以是移动终端或服务器设备。
如图1所示,该设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及以太坊智能合约漏洞检测程序。
其中,操作系统是管理和控制以太坊智能合约漏洞检测设备与软件资源的程序,支持网络通信模块、用户接口模块、以太坊智能合约漏洞检测程序以及其他程序或软件的运行;网络通信模块用于管理和控制网络接口1002;用户接口模块用于管理和控制用户接口1003。
在图1所示的以太坊智能合约漏洞检测设备中,所述以太坊智能合约漏洞检测设备通过处理器1001调用存储器1005中存储的以太坊智能合约漏洞检测程序,并执行下述以太坊智能合约漏洞检测方法各个实施例中的操作。
基于上述硬件结构,提出本发明以太坊智能合约漏洞检测方法实施例。
参照图2,图2为本发明以太坊智能合约漏洞检测方法第一实施例的流程示意图,所述以太坊智能合约漏洞检测方法包括:
步骤S10,采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
步骤S20,对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
步骤S30,从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
步骤S40,基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
本实施例通过采集智能合约代码数据,并对智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;对智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从智能合约源代码中提取对应的抽象语法树节点序列,并根据预设多头注意力机制进行特征提取,获得对应的局部语义特征;根据全局语义特征和局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果;从而提高以太坊智能合约漏洞检测精确度以及漏洞检测效率。
以下将对各个步骤进行详细说明:
步骤S10,对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型进行特征提取,获得对应的全局语义特征。
在本实施例中,通过应用网络爬虫技术从多个智能合约代码平台及数据源进行智能合约代码数据采集;为了实现漏洞检测任务的定制化需求,提出一个可配置的智能合约代码数据爬虫方法。相比于普通的爬虫,可配置爬虫可以通过定制不同的爬虫参数实现不同的爬虫结果。
本发明以太坊智能合约漏洞检测方法支持智能合约代码平台及数据源的配置,包括Github、Etherscan、SmartBugs等,用户可以自行选择需要爬取的平台。同时,该配置支持动态扩展,根据用户需要可以扩充更多的数据源。
此外,还支持爬虫并发数、单个爬虫持续时间、爬取速度等配置。根据任务不同的紧急程度,用户可自行设置上述配置。如果任务需要大量的智能合约代码数据,可以增加爬虫并发数量,加快爬取速度,延长每个爬虫的持续时间。
对采集到的智能合约代码数据进行清洗和标记标签。
由于采集到的智能合约代码数据有相当一部分是无法直接使用,需要对智能合约代码数据进行清洗,智能合约代码数据清洗工作包括对智能合约代码数据进行编译和去重。在对智能合约代码数据清洗后,生成对应的清洗后的源代码。
对清洗后的源代码标记正确的标签,其中,标签包括有漏洞(标签为1-6,每个漏洞类型具有唯一的标签)和没有漏洞(标签为0);漏洞类型和标签的关系如下:
漏洞类型 标签
重入漏洞 1
整数溢出漏洞 2
时间戳依赖 3
异常处理不当 4
交易序列依赖 5
区块信息依赖 6
无漏洞 0
通过对智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码。
进一步地,在一实施例中,参照图3,所述步骤S10包括:
步骤S11,根据预设编译顺序,通过不同版本编译器对所述智能合约代码数据进行编译,同时删除编译失败的智能合约代码数据,得到可编译智能合约文件。
在本实施例中,在采集到智能合约代码数据之后,由于采集到的智能合约代码数据有相当一部分是无法直接使用,需要对智能合约代码数据进行清洗,智能合约代码数据清洗工作包括对智能合约代码数据进行编译和去重。
使用不同版本的solidity编译器(如0.4.25、0.4.26、0.6等不同的版本)尝试对每个智能合约代码数据进行编译。这些不同的编译器数量是一个可配置的参数,根据不同版本编辑器的使用量进行倒序排序,即优先采用使用数量最多的编译器进行编译。其中,预设编译顺序为根据不同版本编辑器的使用量的倒序。在本实施例中,优选采用使用数量最多的K个编译器进行编译。当K个编译器都无法对智能合约代码数据进行编译时,证明该智能合约代码数据不可用,则丢弃该智能合约代码数据。
经过上述编译环节后,删除编译失败的智能合约代码数据,得到可编译智能合约文件。
步骤S12,通过逐行对比所述可编译智能合约文件中的源代码,并删除所述可编译智能合约文件中相似度高于预设阈值的源代码,得到清洗后的源代码。
在本实施例中,对可编译智能合约文件进行去重,删除重复的智能合约代码。具体是通过逐行对比每个可编译智能合约文件的源代码,若可编译智能合约文件的源代码相似度超过Q%,则认为存在可编译智能合约文件相似度过高的问题,需要删除该源代码;其中,预设阈值为源代码相似度阈值,优选使用Q来表示,且Q是一个可配置的参数,用户可以通过调整参数Q来确定想要的代码相似度阈值。
在可编译智能合约文件中的源代码相似度高于Q%时,删除可编译智能合约文件中相似度高于Q%的源代码,生成对应的清洗后的源代码。
步骤S13,通过漏洞检测工具对所述清洗后的源代码进行漏洞检测分析,并根据检测分析后的漏洞类型对所述清洗后的源代码进行标记标签,生成携带有标签的智能合约源代码,其中,所述漏洞类型包括重入漏洞、整数溢出漏洞、时间戳依赖漏洞、异常处理不当、交易序列依赖、区块信息依赖以及无漏洞。
在本实施例中,对清洗后的源代码指定正确的标签,生成携带有标签的智能合约源代码;其中,标签包括有漏洞(标签为1-6,每个漏洞类型具有唯一的标签)和没有漏洞(标签为0);具体的,漏洞标签类型包括重入漏洞(标签为1)、整数溢出漏洞(标签为2)、时间戳依赖漏洞(标签为3)、异常处理不当(标签为4)、交易序列依赖(标签为5)、区块信息依赖(标签为6)以及没有漏洞(标签为0);指定对应的标签通过两个阶段完成。
第一阶段,首先使用多个已有的智能合约的漏洞检测工具对清洗后的源代码进行检测分析,并根据检测分析后的漏洞类型对所述清洗后的源代码进行标记标签,也即将检测结果作为标签结果,这些智能合约检测工具包括但不限于oyente、securify、slither、smartcheck等。智能合约检测工具的数量M可根据实际需要进行设置。如果有超过M/2个智能合约检测工具同时认为被检测的清洗后的源代码存在某个特定的漏洞,则对该清洗后的源代码指定对应的漏洞标签。
例如:输出标签结果为3时,则认为该清洗后的源代码的标签即为3。
为了进一步确定标签的真实性,在第二阶段可以通过专家人工审核完成,通过多个有经验的智能合约安全专家对清洗后的源代码进行详尽的代码审计,最终确定清洗后的源代码是否存在漏洞,若存在漏洞则指出具体的漏洞类型。
从而通过对智能合约代码数据进行清洗和标记标签的预处理,提高以太坊智能合约漏洞检测的效率。
步骤S20,对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征。
在本实施例中,参照图4,图4为漏洞检测整体流程示意图;通过根据漏洞定位点和分隔符对智能合约源代码进行分割,得到对应的token序列;采用Glove算法对每一个token序列进行词向量嵌入,并对词向量嵌入后的token序列进行拼接,生成顺序代码序列;顺序代码序列是一种包含合约语义的、高度浓缩的合约片段,它能够促进更精确的特征提取。其中,不同类型的智能合约漏洞具有不同的漏洞定位点;其中,分隔符优选为空白符。根据该漏洞定位点和空白符对智能合约源代码进行分割,从分割后生成的高危漏洞片段中所学习得到的语义信息要比从全部的智能合约源代码中所学到的语义信息更为精确,也更有助于后续的漏洞检测。
通过预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征Gf;其中,预设知识蒸馏模型优选为TinyBert模型,TinyBERT模型相比于基于变换器的双向编码器表示技术BERT(Bidirectional Encoder Representation from Transformers)属于字级别的轻量级模型,体量小,运行速率更快。TinyBERT是一种基于变换器transformer的模型专门设计的知识蒸馏方法,模型大小不到BERT模型的1/7,但速度提高了9倍,而且性能没有出现明显下降。
步骤S30,从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征。
在一实施例中,参照图4,图4为漏洞检测整体流程示意图;为了获得抽象语法树节点序列,首先根据Solidity的语法结构从智能合约源代码中提取抽象语法树(AbstractSyntax Tree,AST)。AST是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
在获取智能合约源代码的AST后,通过全局遍历 AST,将 AST 转换为特殊格式的序列。具体来说,从AST根节点开始,依次递归遍历每个子节点,最后遍历整个AST,在遍历过程中输出节点序列,生成对应的抽象语法树节点序列。
采用多头注意力机制来提取抽象语法树节点序列的局部语义特征,具体是通过叠加多个注意力函数,能够从抽象语法树序列中提取更全面的局部结构语义信息,并对局部结构语义信息进行处理,获得对应的局部语义特征Sf
步骤S40,基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
在本实施例中,参照图4,图4为漏洞检测整体流程示意图;对全局语义特征Gf和局部语义特征Sf进行维度统一处理,并对维度统一处理后的结果进行线性变化处理,生成对应的组合特征Cf;通过TextRCNN模型对组合特征Cf进行多分类漏洞检测,输出对应的漏洞检测结果;优选使用TextRCNN模型作为最终漏洞检测阶段的分类器,该TextRCNN模型可以从组合特征Cf中进一步提取智能合约源代码上下文特征,这些信息对漏洞检测具有重要作用,进而完成多分类的智能合约漏洞检测任务,使用该TextRCNN模型分类器根据输入的智能合约预测结果标签
Figure 265677DEST_PATH_IMAGE001
,该标签
Figure 153999DEST_PATH_IMAGE002
即为漏洞检测结果。
从而通过使用TextRCNN模型作为分类器进一步提高漏洞检测准确性,以及加快漏洞检测效率。
本实施例通过采集智能合约代码数据,并对智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;对智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从智能合约源代码中提取对应的抽象语法树节点序列,并根据预设多头注意力机制进行特征提取,获得对应的局部语义特征;根据全局语义特征和局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果;从而提高以太坊智能合约漏洞检测精确度以及漏洞检测效率。
进一步地,基于本发明以太坊智能合约漏洞检测方法第一实施例,提出本发明以太坊智能合约漏洞检测方法第二实施例。
以太坊智能合约漏洞检测方法的第二实施例与以太坊智能合约漏洞检测方法的第一实施例的区别在于本实施例是对步骤S20,对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征的细化,参照图5,该步骤具体包括:
步骤S21,对所述智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码;
步骤S22,根据漏洞定位点对所述标准智能合约源代码进行划分,获得漏洞片段;
步骤S23,根据预设分割符对所述漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列;
步骤S24,对所述token序列进行词向量嵌入,将所述token序列转换为固定维度的第一嵌入向量,并根据所述token序列的token顺序对所述第一嵌入向量进行排序,生成对应的顺序代码序列;
步骤S25,根据预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征。
在本实施例中,通过对智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码;根据漏洞定位点对标准智能合约源代码进行划分,获得漏洞片段;根据预设分割符对漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列;对token序列进行词向量嵌入,将token序列转换为固定维度的第一嵌入向量,并根据token序列的token顺序对第一嵌入向量进行排序,生成对应的顺序代码序列;根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从而获得更全面的全局语义特征,进而提高漏洞检测准确率。
以下将对各个步骤进行详细说明:
步骤S21,对所述智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码。
在本实施例中,智能合约源代码是由高级语言 Solidity 编写的程序,实际上由多行代码组成。但是,智能合约源代码中的某些代码行可能与漏洞信息无关。例如,智能合约源代码中可能存在代码解释性注释和不相关的功能,这些信息对检测智能合约漏洞是没有任何帮助的。因此,需要将智能合约源代码中存在的无用信息进行删除,并从中提取顺序代码序列,顺序代码序列是一种包含合约语义的、高度浓缩的合约片段,它能够促进更精确的特征提取。
对智能合约源代码进行清洗,其中,清洗工作具体是删除智能合约源代码中非法字符、注释信息以及其它无用信息;再对清洗后的智能合约源代码进行格式化处理,格式化处理目的是获得统一的表示形式的智能合约源代码;
具体的清洗和格式化处理包括:
(Ⅰ) 将用户定义的数值型变量映射到符号名称(例如,``NUM1'',``NUM2'');
(Ⅱ) 将用户定义的字符串型变量映射到符号名称(例如,``STR1'',``STR2'');
(Ⅲ) 将用户定义的地址型变量映射到符号名称(例如,``ADDR1'',``ADDR2'');
(Ⅳ) 将用户定义的函数映射到符号名称(例如,“FUN1”、“FUN2”);
(Ⅴ) 删除智能合约源代码中所有的非法字符和注释信息,以及智能合约源代码的编译器信息;
(Ⅵ) 删除智能合约源代码中所有多余的空行和空格,保持代码紧凑。
经过上述清洗和格式化处理后,生成一个较为完整的标准智能合约源代码;从而促进更精确的全局语义特征提取。
步骤S22,根据漏洞定位点对所述标准智能合约源代码进行划分,获得漏洞片段。
在本实施例中,通常情况下,智能合约漏洞只出现在几行高危代码中。针对这一现象进行特殊处理,对于智能合约源代码中高危调用代码、以及对于关键变量的调用(即漏洞定位点),将该行且和该行代码相关的代码组成高危漏洞片段,从这些高危漏洞片段中所学习得到的语义信息要比从全部的智能合约源代码中所学到的语义信息更为精确,也更有助于后续的漏洞检测。
其中,不同类型的智能合约漏洞具有不同的漏洞定位点,具体的漏洞定位点如下:
对于重入漏洞,以源代码中send()、call.value()、transfer()等转账函数的调用为漏洞定位点,构成重入漏洞片段;
对于整数溢出漏洞,以源代码中涉及到整数的+、-、*、/四则运算为漏洞定位点,构成整数溢出漏洞片段;
对于时间戳依赖漏洞,以源代码中block.timestamp调用为漏洞定位点,构成时间戳依赖漏洞片段;
对于异常处理不当,以源代码中内部函数调用和外部函数调用为漏洞定位点,构成异常处理不当漏洞片段;
对于交易序列依赖,以源代码中执行交易的关键函数为漏洞定位点,构成交易序列依赖漏洞片段;
对于区块信息依赖漏洞,以源代码中block.number、block.blockhash等调用为漏洞定位点,构成区块信息依赖漏洞片段。
通过漏洞定位点对标准智能合约源代码进行划分,获得漏洞片段;从而可以获得更精确的语义信息,也更有助于后续的漏洞检测。
步骤S23,根据预设分割符对所述漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列。
在本实施例中,通过以空白符为分隔符,将上述得到的漏洞片段每一行进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token系列;其中,预设顺序为token系列在原漏洞片段中的排列顺序。
步骤S24,对所述token序列进行词向量嵌入,将所述token序列转换为固定维度的第一嵌入向量,并根据所述token序列的token顺序对所述第一嵌入向量进行排序,生成对应的顺序代码序列。
在本实施例中,在获得token序列后,采用Glove词向量嵌入技术将token序列中的每一个token转换为向量;具体是将一个token映射到一个整数,然后通过神经网络训练,将其转换为一个固定维度的第一嵌入向量。
由于漏洞片段中可能具有不同数量的token,因此转换后的相应向量序列可能具有不同的维度。为了防止上述各种漏洞片段之间的代码向量序列维度差距过大,通过设置漏洞片段维度L,其中,当token向量维度小于固定维度L时,将零向量填充到该向量序列的末尾;当token向量维度超过固定维度L时,截断向量序列的末尾部分。
此外,对于不存在漏洞的标准智能合约源代码,同样将标准智能合约源代码切割成若干个L维度的合约片段,对于那些维度小于固定维度L的片段进行舍弃;通过将维度远大于L的合约源代码转换为若干个维度为L的合约片段,便于后续预设知识蒸馏模型更容易从短代码序列中学习到更有用的语义和特征信息,有助于提高漏洞检测的准确度。
在获得第一密集嵌入向量后,根据漏洞片段的token顺序对第一密集嵌入向量进行排序,生成具有一定长度的向量序列,也即为顺序代码序列。
步骤S25,根据预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征。
在本实施例中,根据预设知识蒸馏模型对所述顺序代码序列进行词向量嵌入和全连接加权处理,获得对应的全局语义特征;其中,优选采用TinyBert模型对顺序代码序列进行全局语义特征提取;TinyBert模型在能保证和Bert模型同样性能表现的同时,还将模型缩小数倍,且大大提升推理速度。TinyBert模型主要是利用知识蒸馏的方式,让TinyBert去学习到Bert的知识跟能力,在保证模型效果的基础上去实现预训练模型的推理加速和减少模型规模。
具体的全局语义特征Gf提取过程如下:
Figure 36504DEST_PATH_IMAGE003
其中,Gf即为提取到的全局语义信息,X是顺序代码序列,Embedding表示用Glove词向量嵌入技术来获得顺序代码序列的词向量,F是一个由全连接层构成的前馈神经网络。
通过采用TinyBert模型对顺序代码序列进行全局语义提取,获得对应的全局语义特征Gf;从而通过TinyBert模型提取到更全面的全局语义特征,能够促进更精确的漏洞检测。
进一步地,在一实施例中,参照图6,步骤S25之前,还包括:
步骤A10,根据预训练模型,对预先建立的知识库进行训练得到语义知识,并通过知识蒸馏方式对所述语义知识进行蒸馏,提取得到预设知识蒸馏模型。
在本实施例中,为了进一步从顺序代码序列中提取全局语义,采用预训练模型对顺序代码序列进行处理,其中,预训练模型优选为Bert(Bidirectional EncoderRepresentation from Transformers)模型,是一个预训练的语言表征模型,其主要构成单元是基于Transformer的 Encoder,Bert模型结构就是 Transformer 的堆叠。在 Bert 模型中,只要把对应的token输入到Bert中,每一层 Transformer 层输出相应数量的hiddenvector,一层层传递下去,直到最后输出。虽然Bert模型显著地提升了很多自然语言处理任务的表现,但是他们普遍存在参数过多、模型庞大、推理时间过长、计算昂贵等问题,因此很难落地到实际的产业应用中。预训练模型是一个通过在大量数据上进行训练并被保存下来的模型。
在TinyBert模型训练过程中,存在student 模型和teacher 模型,其中student模型是我们需要的模型,teacher 模型是经过海量数据训练过的Bert模型,尤其是经过漏洞检测训练,该Bert模型能够准确检测智能合约漏洞。我们的目的就是让student模型能够学习teacher模型的检测能力,并且做到检测速度更快。
假定 student 模型有 M 个 Transformer 层,teacher 模型有 N 个Transformer 层,从 teacher 模型中选择 M 个 Transformer 层用于 Transformer 层蒸馏。
Figure 825206DEST_PATH_IMAGE004
是 student 层到 teacher 层的映射函数,这意味着 student 模型的第 m层从 teacher 模型的第 n 层开始学习信息。嵌入层蒸馏和预测层蒸馏也考虑进来,将嵌入层的指数设为 0,预测层的指数设为M+1 ,并且对应的层映射分别定义为
Figure 767755DEST_PATH_IMAGE005
Figure 143372DEST_PATH_IMAGE006
。在形式上,通过最小化以下目标函数,student 模型可以获取teacher 模型的知识:
Figure 501673DEST_PATH_IMAGE007
其中,Llayer是给定模型层(如 Transformer 层或嵌入层)的损失函数,
Figure 974242DEST_PATH_IMAGE008
是表征第m层蒸馏重要度的超参数。Llayer的定义如下:
Figure 87692DEST_PATH_IMAGE009
由此,根据Bert模型对建立的知识库进行训练,得到语义知识;并通过知识蒸馏方式对语义知识进行蒸馏,提取得到TinyBert模型,也即预设知识蒸馏模型。
在本实施例中,通过对智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码;根据漏洞定位点对标准智能合约源代码进行划分,获得漏洞片段;根据预设分割符对漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列;对token序列进行词向量嵌入,将token序列转换为固定维度的第一嵌入向量,并根据token序列的token顺序对第一嵌入向量进行排序,生成对应的顺序代码序列;根据预设知识蒸馏模型对顺序代码序列进行特征提取,获得对应的全局语义特征;从而获得更全面的全局语义特征,进而提高漏洞检测准确率。
进一步地,基于本发明以太坊智能合约漏洞检测方法第一、二实施例,提出本发明以太坊智能合约漏洞检测方法第三实施例。
以太坊智能合约漏洞检测方法的第三实施例与以太坊智能合约漏洞检测方法的第一、二实施例的区别在于本实施例是对步骤S30,从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征的细化,参照图7,该步骤具体包括:
步骤S31,查找所述智能合约源代码中的漏洞定位点,并根据所述智能合约源代码提取出漏洞定位点所在的函数,以及将所述函数转化为抽象语法树子数,构建对应的抽象语法树;
步骤S32,根据预设遍历顺序对所述抽象语法树进行递归遍历,生成所述抽象语法树的节点序列;
步骤S33,对所述节点序列进行词向量嵌入,将所述节点序列转换为固定维度的第二嵌入向量,并根据遍历过程中的节点顺序对所述第二嵌入向量进行拼接,生成对应的抽象语法树节点序列;
步骤S34,根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征。
在本实施例中,通过根据智能合约源代码构建对应的抽象语法树;并通过全局遍历抽象语法树以及进行词向量嵌入,生成对应的抽象语法树节点序列;根据预设多头注意力机制对抽象语法树节点序列进行特征提取,获得对应的局部语义特征;从而通过多头注意力机制提取更全面的局部语义特征,进而提高漏洞检测准确率。
以下将对各个步骤进行详细说明:
步骤S31,查找所述智能合约源代码中的漏洞定位点,并根据所述智能合约源代码提取出漏洞定位点所在的函数,以及将所述函数转化为抽象语法树子数,构建对应的抽象语法树。
在本实施例中,为了获得抽象语法树节点序列,首先根据Solidity的语法结构从智能合约源代码中提取抽象语法树(Abstract Syntax Tree,AST);AST是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
由于智能合约源代码基本上是由函数构成的,并且在抽取AST时,每个函数也被当做是一个独立的AST子树,因此从构成AST的基本元素,即函数,入手。依据在顺序代码序列中定义的漏洞定位点,在智能合约源代码中查找合适的漏洞定位点,并提取出漏洞定位点所在的函数,如果有多个漏洞定位点,则保留对应的所有函数。最后,将所有保留的函数转化成AST子树,并最终合成为完整的AST。
步骤S32,根据预设遍历顺序对所述抽象语法树进行递归遍历,生成所述抽象语法树的节点序列。
在本实施例中,在获取到智能合约源代码的AST后,通过全局遍历 AST ,将 AST转换为特殊格式的序列。具体来说,从AST根节点开始,依次递归遍历每个子节点,最后遍历整个AST,在遍历过程中输出AST的节点序列。其中,应用节点的“类型”和“值”分别表示智能合约源代码的结构和词法信息,并采用一系列括号来保持AST结构,以确保生成的序列可恢复为原始AST。
步骤S33,对所述节点序列进行词向量嵌入,将所述节点序列转换为固定维度的第二嵌入向量,并根据遍历过程中的节点顺序对所述第二嵌入向量进行拼接,生成对应的抽象语法树节点序列。
在本实施例中,在获取到抽象语法树节点序列后,采用Glove词向量嵌入技术将这些抽象语法树节点序列转换为向量表示。具体是将每一个节点映射到一个整数,然后通过神经网络训练、最后将其转换为一个固定维度L的第二嵌入向量。最后,根据遍历过程中的节点顺序对第二嵌入向量进行拼接,得到对应的抽象语法树节点序列。其中,这里的固定维度与第二实施例中的固定维度含义相同。
步骤S34,根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征。
在本实施例中,在获取到抽象语法树节点序列后,采用多头注意力机制来提取抽象语法树节点序列的局部语义。首先,采用Glove词向量嵌入技术将抽象语法树节点序列转换成向量序列,并通过位置编码的方式将抽象语法树节点序列之间的顺序位置关系引入到向量序列中,生成对应的带有位置信息的嵌入向量;然后,通过预设多头注意力机制对带有位置信息的嵌入向量进行特征提取,获得对应的局部语义特征。
进一步地,在一实施例中,参照图8,步骤S34包括:
步骤B10,根据节点顺序对所述抽象语法树节点序列进行位置编码,生成对应的带有位置信息的嵌入向量。
在本实施例中,在获取到抽象语法树节点序列后,首先,采用Glove词向量嵌入技术将抽象语法树节点序列转换成向量序列,并通过位置编码的方式将抽象语法树节点序列之间的顺序位置关系引入到向量序列中,具体编码方式如下所示:
Figure 950605DEST_PATH_IMAGE010
其中,ord是序列中的token的位置,i是位置向量的维度索引,d是token嵌入向量的总维度。
在获得位置编码信息后,最终带有位置信息的嵌入向量等于位置编码向量和token词嵌入向量之和,其中X是抽象语法树节点序列。
Figure 174913DEST_PATH_IMAGE011
其中,
Figure 672629DEST_PATH_IMAGE012
为带有位置信息的嵌入向量,
Figure 956979DEST_PATH_IMAGE013
为位置编码向量,
Figure 307189DEST_PATH_IMAGE014
为token词嵌入向量。
步骤B20,根据预设多头注意力机制对所述带有位置信息的嵌入向量进行特征提取,获得对应的局部语义特征。
在本实施例中,在得到带有位置信息的嵌入向量
Figure 335188DEST_PATH_IMAGE012
后,注意力机制会根据带有位置信息的嵌入向量
Figure 516771DEST_PATH_IMAGE012
生成对应的键、查询和值矩阵,它们分别表示为
Figure 644127DEST_PATH_IMAGE015
Figure 543950DEST_PATH_IMAGE016
,以及
Figure 47743DEST_PATH_IMAGE017
。注意力函数的计算方式如下所示:
Figure 349412DEST_PATH_IMAGE018
其中,
Figure 146204DEST_PATH_IMAGE019
为键矩阵的维度数,
Figure 533323DEST_PATH_IMAGE020
为Softmax函数,该函数可以计算参数对值矩阵的注意力系数。这些系数反映了抽象语法树节点序列之间的重要依赖关系,这些信息有助于检测智能合约漏洞。
通过叠加多个注意力函数,能够从抽象语法树节点序列中提取更全面的局部结构语义信息,即采用了多头注意力机制:
Figure 840808DEST_PATH_IMAGE021
其中,HO i,HK i,HQ i,和HV i都是多头注意力机制模型中的参数矩阵。不同的hi可以从抽象语法树节点序列中捕获不同的局部语义信息。多头注意力机制连接所有的hi得到一个整体输出。
最后,局部语义特征Sf的计算公式如下所示:
Figure 731403DEST_PATH_IMAGE022
其中,Sf为局部语义特征,
Figure 466141DEST_PATH_IMAGE023
为多头注意力函数,
Figure 74977DEST_PATH_IMAGE024
为一系列全连接层、Dropout层和激活层的组合。
在本实施例中,通过根据智能合约源代码构建对应的抽象语法树;并通过全局遍历抽象语法树以及进行词向量嵌入,生成对应的抽象语法树节点序列;根据预设多头注意力机制对抽象语法树节点序列进行特征提取,获得对应的局部语义特征;从而通过多头注意力机制提取更全面的局部语义特征,进而提高漏洞检测准确率。
进一步地,基于本发明以太坊智能合约漏洞检测方法第一、二、三实施例,提出本发明以太坊智能合约漏洞检测方法第四实施例。
以太坊智能合约漏洞检测方法的第四实施例与以太坊智能合约漏洞检测方法的第一、二、三实施例的区别在于本实施例是对步骤S40,基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行漏洞检测,并输出漏洞检测结果的细化,参照图9,该步骤具体包括:
步骤S41,对所述全局语义特征和所述局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征;
步骤S42,通过所述文本分类模型对所述组合特征进行卷积和池化处理,获得对应的新特征,并将所述新特征输入至分类器进行多标签分类检测,输出漏洞检测结果。
本实施例通过对全局语义特征和局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征;通过文本分类模型对组合特征进行卷积和池化处理,获得对应的新特征,并将新特征输入至分类器进行多标签分类检测,输出漏洞检测结果;从而提高以太坊智能合约漏洞检测准确率,以及加快漏洞检测的速度。
以下将对各个步骤进行详细说明:
步骤S41,对所述全局语义特征和所述局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征。
在本实施例中,参照图10,图10为漏洞检测阶段流程示意图;由于上述提取到的全局语义特征Gf和局部语义特征Sf可能存在维度不一致,因此需要将全局语义特征Gf和局部语义特征Sf统一到相同的维度,当全局语义特征Gf的维度小于局部语义特征Sf,则扩展全局语义特征Gf的维度直到和局部语义特征Sf相同,其中扩展的维度用0补充;当全局语义特征Gf的维度大于局部语义特征Sf,则扩展局部语义特征Sf的维度直到和全局语义特征Gf相同,其中扩展的维度用0补充。
由此,在全局语义特征Gf和局部语义特征Sf进行维度融合统一后,并将全局语义特征Gf和局部语义特征Sf进行线性变化结合处理,生成对应的组合特征Cf,具体线性变化结合处理过程如下:
Figure 248469DEST_PATH_IMAGE025
其中,组合特征Cf的表达式如下:
Figure 196834DEST_PATH_IMAGE026
其中,W是线性变化矩阵,是可配置的参数,通过调整该参数可以得到不同的全局语义特征Gf和局部语义特征Sf线性组合。
步骤S42,通过所述文本分类模型对所述组合特征进行卷积和池化处理,获得对应的新特征,并将所述新特征输入至分类器进行多标签分类检测,输出漏洞检测结果。
在本实施例中,通过TextRCNN模型对组合特征Cf进行卷积和池化处理,获得对应的新特征,并将新特征输入至分类器进行多标签分类检测,输出漏洞检测结果,其中,文本分类模型优选为TextRCNN模型。
具体检测过程为:将组合特征Cf作为词向量e(Wi)输入到TextRCNN模型中得到cl(Wi)和cr(Wi),得到新的语义向量后经过池化和Softmax函数最后输出漏洞检测结果。整个检测过程可以被表述为:
Figure 164790DEST_PATH_IMAGE027
其中,在上述公式中,Xi是Wi的潜在语义向量,
Figure 697140DEST_PATH_IMAGE028
是最大池化层。
Figure 408744DEST_PATH_IMAGE001
是最后的输出标签,也即漏洞检测结果。
优选使用TextRCNN模型作为多标签分类漏洞检测阶段的分类器,该分类器或i根据输入的智能合约预测结果标签
Figure 211615DEST_PATH_IMAGE002
;其中,若代码存在重入漏洞,输出1;若代码存在整数溢出漏洞,输出2;若代码存在时间戳依赖漏洞,输出3;若代码存在异常处理不当,输出4;若代码存在交易序列依赖,输出5;若代码存在区块信息依赖,输出6;若代码不存在漏洞,输出0。
在本实施例中,对全局语义特征和局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征;通过文本分类模型对组合特征进行卷积和池化处理,获得对应的新特征,并将新特征输入至分类器进行多标签分类检测,输出漏洞检测结果;从而提高以太坊智能合约漏洞检测准确率,以及加快漏洞检测的速度。
本发明还提供一种以太坊智能合约漏洞检测装置。参照图11,本发明以太坊智能合约漏洞检测装置包括:
采集模块10,用于采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
处理模块20,用于对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
提取模块30,用于从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
检测模块40,用于基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
此外,本发明还提供一种介质,所述介质为计算机可读存储介质,其上存储有以太坊智能合约漏洞检测程序,以太坊智能合约漏洞检测程序被处理器执行时实现如上所述的以太坊智能合约漏洞检测方法的步骤。
其中,在所述处理器上运行的以太坊智能合约漏洞检测程序被执行时所实现的方法可参照本发明以太坊智能合约漏洞检测方法各个实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书与附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种以太坊智能合约漏洞检测方法,其特征在于,所述以太坊智能合约漏洞检测方法包括如下步骤:
采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
2.如权利要求1所述的以太坊智能合约漏洞检测方法,其特征在于,所述对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码的步骤包括:
根据预设编译顺序,通过不同版本编译器对所述智能合约代码数据进行编译,同时删除编译失败的智能合约代码数据,得到可编译智能合约文件;
通过逐行对比所述可编译智能合约文件中的源代码,并删除所述可编译智能合约文件中相似度高于预设阈值的源代码,得到清洗后的源代码;
通过漏洞检测工具对所述清洗后的源代码进行漏洞检测分析,并根据检测分析后的漏洞类型对所述清洗后的源代码进行标记标签,生成携带有标签的智能合约源代码,其中,所述漏洞类型包括重入漏洞、整数溢出漏洞、时间戳依赖漏洞、异常处理不当、交易序列依赖、区块信息依赖以及无漏洞。
3.如权利要求1所述的以太坊智能合约漏洞检测方法,其特征在于,所述对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征的步骤包括:
对所述智能合约源代码进行清洗和格式化处理,生成标准智能合约源代码;
根据漏洞定位点对所述标准智能合约源代码进行划分,获得漏洞片段;
根据预设分割符对所述漏洞片段进行分割,并将分割结果按照预设顺序进行拼接,获得对应的token序列;
对所述token序列进行词向量嵌入,将所述token序列转换为固定维度的第一嵌入向量,并根据所述token序列的token顺序对所述第一嵌入向量进行排序,生成对应的顺序代码序列;
根据预设知识蒸馏模型对所述顺序代码序列进行词向量提取和全连接加权处理,获得对应的全局语义特征。
4.如权利要求3所述的以太坊智能合约漏洞检测方法,其特征在于,所述根据预设知识蒸馏模型对所述顺序代码序列进行词向量提取和全连接加权处理,获得对应的全局语义特征的步骤之前,还包括:
根据预训练模型,对预先建立的知识库进行训练得到语义知识,并通过知识蒸馏方式对所述语义知识进行蒸馏,提取得到预设知识蒸馏模型。
5.如权利要求1所述的以太坊智能合约漏洞检测方法,其特征在于,所述从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征的步骤包括:
查找所述智能合约源代码中的漏洞定位点,并根据所述智能合约源代码提取出漏洞定位点所在的函数,以及将所述函数转化为抽象语法树子数,构建对应的抽象语法树;
根据预设遍历顺序对所述抽象语法树进行递归遍历,生成所述抽象语法树的节点序列;
对所述节点序列进行词向量嵌入,将所述节点序列转换为固定维度的第二嵌入向量,并根据遍历过程中的节点顺序对所述第二嵌入向量进行拼接,生成对应的抽象语法树节点序列;
根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征。
6.如权利要求5所述的以太坊智能合约漏洞检测方法,其特征在于,所述根据预设多头注意力机制对所述抽象语法树节点序列进行特征提取,获得对应的局部语义特征的步骤包括:
根据节点顺序对所述抽象语法树节点序列进行位置编码,生成对应的带有位置信息的嵌入向量;
根据预设多头注意力机制对所述带有位置信息的嵌入向量进行特征提取,获得对应的局部语义特征。
7.如权利要求1所述的以太坊智能合约漏洞检测方法,其特征在于,所述基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行漏洞检测,并输出漏洞检测结果的步骤包括:
对所述全局语义特征和所述局部语义特征进行维度融合统一和线性变换处理,获得对应的组合特征;
通过所述文本分类模型对所述组合特征进行卷积和池化处理,获得对应的新特征,并将所述新特征输入至分类器进行多标签分类检测,输出漏洞检测结果。
8.一种以太坊智能合约漏洞检测装置,其特征在于,所述以太坊智能合约漏洞检测装置包括:
采集模块,用于采集智能合约代码数据,并对所述智能合约代码数据进行清洗和标记标签,生成对应的智能合约源代码;
处理模块,用于对所述智能合约源代码进行分割和词向量嵌入,生成顺序代码序列,并基于预设知识蒸馏模型对所述顺序代码序列进行特征提取,获得对应的全局语义特征;
提取模块,用于从所述智能合约源代码中提取对应的抽象语法树节点序列,并基于预设多头注意力机制进行特征提取,获得对应的局部语义特征;
检测模块,用于基于所述全局语义特征和所述局部语义特征,通过文本分类模型进行多分类漏洞检测,并输出漏洞检测结果。
9.一种系统,所述系统为以太坊智能合约漏洞检测系统,其特征在于,所述以太坊智能合约漏洞检测系统包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的以太坊智能合约漏洞检测程序,所述以太坊智能合约漏洞检测程序被所述处理器执行时实现如权利要求1至7中任一项所述的以太坊智能合约漏洞检测方法的步骤。
10.一种介质,所述介质为计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有以太坊智能合约漏洞检测程序,所述以太坊智能合约漏洞检测程序被处理器执行时实现如权利要求1至7中任一项所述的以太坊智能合约漏洞检测方法的步骤。
CN202210971647.3A 2022-08-15 2022-08-15 以太坊智能合约漏洞检测方法、装置、系统与介质 Active CN115033896B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210971647.3A CN115033896B (zh) 2022-08-15 2022-08-15 以太坊智能合约漏洞检测方法、装置、系统与介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210971647.3A CN115033896B (zh) 2022-08-15 2022-08-15 以太坊智能合约漏洞检测方法、装置、系统与介质

Publications (2)

Publication Number Publication Date
CN115033896A true CN115033896A (zh) 2022-09-09
CN115033896B CN115033896B (zh) 2022-11-08

Family

ID=83129933

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210971647.3A Active CN115033896B (zh) 2022-08-15 2022-08-15 以太坊智能合约漏洞检测方法、装置、系统与介质

Country Status (1)

Country Link
CN (1) CN115033896B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115310100A (zh) * 2022-10-12 2022-11-08 鹏城实验室 智能合约漏洞修复方法、设备以及介质
CN116484384A (zh) * 2023-04-19 2023-07-25 北京交通大学 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法
CN116578988A (zh) * 2023-05-23 2023-08-11 海南大学 一种智能合约的漏洞检测方法和装置、存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110609897A (zh) * 2019-08-12 2019-12-24 北京化工大学 一种融合全局和局部特征的多类别中文文本分类方法
CN113449303A (zh) * 2021-06-28 2021-09-28 杭州云象网络技术有限公司 基于教师-学生网络模型的智能合约漏洞检测方法和系统
CN113486357A (zh) * 2021-07-07 2021-10-08 东北大学 一种基于静态分析和深度学习的智能合约安全检测方法
US20210334543A1 (en) * 2020-04-28 2021-10-28 Ajou University Industry-Academic Cooperation Foundation Method for semantic segmentation based on knowledge distillation
CN113904844A (zh) * 2021-10-08 2022-01-07 浙江工商大学 基于跨模态教师-学生网络的智能合约漏洞检测方法
CN113961933A (zh) * 2021-10-21 2022-01-21 南通大学 一种基于改进Bert模型的信息安全漏洞分类方法
CN114297654A (zh) * 2021-12-31 2022-04-08 北京工业大学 一种源代码层级的智能合约漏洞检测方法及系统
WO2022078632A1 (en) * 2020-10-13 2022-04-21 NEC Laboratories Europe GmbH Method and system for supporting smart contracts in a blockchain network
CN114841318A (zh) * 2022-04-29 2022-08-02 哈尔滨工程大学 基于跨模态知识蒸馏的智能合约漏洞检测方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110609897A (zh) * 2019-08-12 2019-12-24 北京化工大学 一种融合全局和局部特征的多类别中文文本分类方法
US20210334543A1 (en) * 2020-04-28 2021-10-28 Ajou University Industry-Academic Cooperation Foundation Method for semantic segmentation based on knowledge distillation
WO2022078632A1 (en) * 2020-10-13 2022-04-21 NEC Laboratories Europe GmbH Method and system for supporting smart contracts in a blockchain network
CN113449303A (zh) * 2021-06-28 2021-09-28 杭州云象网络技术有限公司 基于教师-学生网络模型的智能合约漏洞检测方法和系统
CN113486357A (zh) * 2021-07-07 2021-10-08 东北大学 一种基于静态分析和深度学习的智能合约安全检测方法
CN113904844A (zh) * 2021-10-08 2022-01-07 浙江工商大学 基于跨模态教师-学生网络的智能合约漏洞检测方法
CN113961933A (zh) * 2021-10-21 2022-01-21 南通大学 一种基于改进Bert模型的信息安全漏洞分类方法
CN114297654A (zh) * 2021-12-31 2022-04-08 北京工业大学 一种源代码层级的智能合约漏洞检测方法及系统
CN114841318A (zh) * 2022-04-29 2022-08-02 哈尔滨工程大学 基于跨模态知识蒸馏的智能合约漏洞检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张潆藜 等: "以太坊Solidity智能合约漏洞检测方法综述", 《计算机科学》 *
沈晨凯: "基于深度学习的智能合约漏洞检测方法研究", 《中国优秀硕士学位论文全文数据库信息科技辑(月刊)》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115310100A (zh) * 2022-10-12 2022-11-08 鹏城实验室 智能合约漏洞修复方法、设备以及介质
CN116484384A (zh) * 2023-04-19 2023-07-25 北京交通大学 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法
CN116484384B (zh) * 2023-04-19 2024-01-19 北京交通大学 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法
CN116578988A (zh) * 2023-05-23 2023-08-11 海南大学 一种智能合约的漏洞检测方法和装置、存储介质
CN116578988B (zh) * 2023-05-23 2024-01-23 海南大学 一种智能合约的漏洞检测方法和装置、存储介质
US12093399B1 (en) 2023-05-23 2024-09-17 Hainan University Vulnerability detection method and device for smart contract, and storage medium

Also Published As

Publication number Publication date
CN115033896B (zh) 2022-11-08

Similar Documents

Publication Publication Date Title
CN115033896B (zh) 以太坊智能合约漏洞检测方法、装置、系统与介质
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
CN112733137B (zh) 一种面向漏洞检测的二进制代码相似性分析方法
CN113064586B (zh) 一种基于抽象语法树增广图模型的代码补全方法
CN113508385B (zh) 使用子例程图谱进行形式语言处理的方法和系统
CN112733156A (zh) 基于代码属性图的软件脆弱性智能检测方法、系统及介质
CN111857660B (zh) 一种基于查询语句的情境感知api推荐方法及终端
CN112162775A (zh) 一种基于Transformer和混合代码表示的Java代码注释自动生成方法
CN116661852B (zh) 一种基于程序依赖图的代码搜索方法
CN117573096B (zh) 一种融合抽象语法树结构信息的智能代码补全方法
CN115033890A (zh) 一种基于对比学习的源代码漏洞检测方法及系统
CN113065322A (zh) 一种代码段注释生成方法、系统及可读存储介质
CN114625748A (zh) Sql查询语句的生成方法、装置、电子设备及可读存储介质
CN112784580A (zh) 基于事件抽取的金融数据分析方法及装置
CN113076089A (zh) 一种基于对象类型的api补全方法
CN112148879B (zh) 一种自动给代码打数据结构标签的计算机可读存储介质
EP4049141A1 (en) Automated exception featurization and search
CN116383832A (zh) 一种基于图神经网络的智能合约漏洞检测方法
CN117289938A (zh) 一种软件开发用智能辅助系统
KR102610431B1 (ko) 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법
CN114661616A (zh) 目标代码的生成方法及装置
CN102681830B (zh) 一种比较程序文本的方法和设备
CN111611498A (zh) 一种基于领域内部语义的网络表示学习方法及系统
Phan et al. Sibstcnn and tbcnn+ knn-ted: New models over tree structures for source code classification
Sutcliffe The Expansion, Modernisation, and Future of the TPTP World.

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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Feng Yuming

Inventor after: Zhang Weizhe

Inventor after: Zhang Heng

Inventor after: Zhang Yu

Inventor after: Liang Li

Inventor before: Feng Yuming

Inventor before: Zhang Weizhe

Inventor before: Zhang Heng

Inventor before: Zhang Yu

Inventor before: Liang Li