CN116578988B - 一种智能合约的漏洞检测方法和装置、存储介质 - Google Patents

一种智能合约的漏洞检测方法和装置、存储介质 Download PDF

Info

Publication number
CN116578988B
CN116578988B CN202310584937.7A CN202310584937A CN116578988B CN 116578988 B CN116578988 B CN 116578988B CN 202310584937 A CN202310584937 A CN 202310584937A CN 116578988 B CN116578988 B CN 116578988B
Authority
CN
China
Prior art keywords
function
intelligent contract
interface
features
operation 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.)
Active
Application number
CN202310584937.7A
Other languages
English (en)
Other versions
CN116578988A (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.)
Hainan University
Original Assignee
Hainan 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 Hainan University filed Critical Hainan University
Priority to CN202310584937.7A priority Critical patent/CN116578988B/zh
Publication of CN116578988A publication Critical patent/CN116578988A/zh
Application granted granted Critical
Publication of CN116578988B publication Critical patent/CN116578988B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/25Fusion techniques
    • G06F18/253Fusion techniques of extracted features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开一种智能合约的漏洞检测方法和装置、存储介质,包括以下步骤:通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;通过智能合约地址在区块链浏览器中爬取应用二进制接口;将操作码和操作数作为输入,输出函数参数;通过监督函数中是否存在指定行为以确定函数属性;通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。采用本发明的技术方案,有效地利用了字节码中语义和函数接口信息,并实现了多标签漏洞检测。

Description

一种智能合约的漏洞检测方法和装置、存储介质
技术领域
本发明属于计算机网络安全领域,尤其涉及一种智能合约的漏洞检测方法和装置、存储介质。
背景技术
在区块链系统中,智能合约是具有功能性的代码段,定义了网络中节点之间的交互规则;本发明主要关注以太网区块链上的智能合约相关漏洞;作为区块链系统中重要的一个层级,智能合约的安全问题也是区块链系统能稳定运行的重要因素。
智能合约函数接口,即调用接口,存在以下两种形式:函数签名和应用二进制接口。函数签名是函数名以及函数参数原型字符串的哈希值,用于确定函数的唯一调用入口。字节码智能合约部署上链时,应用二进制接口和合约地址可被外部节点指定特定合约中的函数方法。
现有基于深度学习技术检测智能合约漏洞方法中,从智能合约的操作码中获取语义特征并通过不同的模型检测漏洞;通过设计不同的模型来提高对漏洞的检测效果,在数据层面都过于依赖语义单特征;因此,为了达到较好的漏洞分类效果,这种方法都依赖数据的多样性和全面性。
与传统静态分析方法相比,基于深度学习的漏洞检测技术存在以下空缺:
基于深度学习的智能合约漏洞检测方法没有考虑操作数中的特征;传统静态分析方法,通过分析代码可能的执行过程以判断代码中是否存在逻辑漏洞;已有的深度学习方法通过输入代码中的操作码序列以总结漏洞的特征;虽然也有一些技术通过构建控制流程图等来获取更符合调用顺序的操作码序列,但是也没有考虑操作数中存在的原始数据。
以太网字节码智能合约中存在多维度数据,而现有检测方法只考虑操作码序列;以太坊虚拟机作为堆栈式虚拟机,是字节码智能合约的运行环境;和寄存式虚拟机不一样的是,Java代码中存在函数接口数据,而字节码智能合约中没有存储函数接口信息;通过特定的规则能够从调用数据中提取函数参数,然而现有的智能合约漏洞检测方法都没有利用过这些数据。
发明内容
本发明要解决的技术问题是,提供一种智能合约的漏洞检测方法和装置、存储介质,有效地利用了字节码中语义和函数接口信息,并实现了多标签漏洞检测。
为实现上述目的,本发明采用如下的技术方案:
一种智能合约的漏洞检测方法,包括以下步骤:
步骤S1、通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
步骤S2、通过智能合约地址在区块链浏览器中爬取应用二进制接口;
步骤S3、将操作码和操作数作为输入,输出函数参数;
步骤S4、通过监督函数中是否存在指定行为以确定函数属性;
步骤S5、通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。
作为优选,步骤S1中,对字节码智能合约翻译为操作码形式,按照操作码执行规则构建程序控制流程调用图,并在程序控制调用过程中收集每个函数的哈希值以及函数体的操作码;同时将字节码转换为SSA形式的操作码。
作为优选,步骤S2中,通过智能合约的地址在以太网浏览器Etherescan中查找到应用二进制接口,去除其中的函数名并转换为张量形式。
作为优选,步骤S3中,在收集到函数体的操作码和操作数后,利用序列到序列模型从操作码和操作数中推断函数参数,并将函数参数提供给编码器。
作为优选,步骤S3具体包括:
步骤31:独热编码化函数体中所有的操作码和操作数作为语义信息,将语义信息作为输入,通过双向的LSTM网络提取语义中的特征信息;
步骤32:通过注意力机制在当前隐层状态中寻找能为当前输出贡献最大的权重信息,并经过所有时间步后输出特征隐层状态;
步骤33:通过构建与步骤31相同结构的双向LSTM网络,解码特征隐层状态,并得到输入函数中可能出现的函数参数。
作为优选,步骤S5,包括:
步骤51:提取字节码智能合约所对应的操作码,并去除其中的栈操作指令,最后得到SSA形式的操作码作为该合约语义表达;
步骤52:通过双向GRU模型从智能合约中的语义表达中获取到智能合约的隐层语义特征;判断字节码智能合约是否公开应用二进制接口;如果不公开的话,则直接跳转到步骤53,否则从以太坊浏览器Etherscan中获取到公开的应用二进制接口,并跳转到步骤56;
步骤53:利用函数参数推断方法,获取字节码智能合约中多个函数的函数参数,并总结每个函数对应的函数属性;
步骤54:拼接智能合约中每个函数的函数参数和函数属性,作为单个函数的函数接口特征;
步骤55:按照每个函数在操作码序列的位置顺序联合所有函数的函数接口特征作为智能合约的函数接口特征,并跳转到步骤57;
步骤56:从应用二进制接口和推断的函数签名信息中获取其隐层中的函数接口特征,如果为应用二进制接口则跳转到步骤561,否则跳转到步骤562;
步骤561:使用卷积神经网络CNN从二维角度提取应用二进制接口的隐层函数接口特征,并跳转到步骤57;
步骤562:对单个智能合约中的每个函数接口特征,使用一维CNN提取其中的单个函数的局部特征;
步骤563:对单个智能合约中的所有函数接口特征,先使用全局平均池化层压缩所有的函数接口信息,再使用一维CNN提取其中的所有函数的全局特征;
步骤564:将局部特征和全局特征相加,再经过激活函数之后,将结果与单个智能合约中的函数接口特征相乘,得到隐层的函数接口特征并跳转到步骤57;
步骤57:融合步骤52中获取的合约的隐层语义特征以及步骤56中获取的隐层函数接口特征,作为智能合约隐层特征;
步骤58:利用双向的GRU模型解码步骤57中得到的智能合约隐层特征,并得到存在的漏洞分类。
本发明还提供一种智能合约的漏洞检测装置,包括:
语义提取模块,用于通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
应用二进制接口获取模块,用于通过智能合约地址在区块链浏览器中爬取应用二进制接口;
函数参数推断模块,用于将操作码和操作数作为输入,输出函数参数;
函数属性总结模块,用于通过监督函数中是否存在指定行为以确定函数属性;
漏洞检测模块,用于通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。
本发明还提供一种存储介质,所述存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现智能合约的漏洞检测方法。
与现有技术相比,本发明的有益效果为:
本发明在训练数据量较少的情况下,实现能够得到更具优势的效果;首次利用语义特征和函数接口特征检测字节码智能合约中存在的漏洞;另外,为了得到更多的函数接口数据,对于未公开应用二进制接口的字节码智能合约,首次提出利用序列到序列模型在操作码和操作数中推断其中可能存在的函数参数;进一步地,为了得到更加显性的语义表达,SSA形式的操作码被用于提取其隐层语义特征;为了优化推断的函数签名特征,操作码规则被用于推断函数属性;在同一个智能合约中,分别获取其中函数接口表达的局部特征以及全局特征并结合以得到优化的隐层函数接口特征;最后,结合隐层语义特征和隐层函数接口特征作为合约的隐层特征,并解码其隐层特征实现漏洞分类;本发明获取语义数据和函数签名数据,并分别使用SSA形式转换方式优化语义特征,局部特征和全局特征融合方式优化函数接口特征,在一定程度上提升了漏洞检测效果。
附图说明
为了更清楚地说明本发明的技术方案,下面对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的一种智能合约的漏洞检测方法的流程图;
图2为本发明实施例的另一种智能合约的漏洞检测方法的流程图;
图3为函数签名加强特征表示获取示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例1:
如图1所示,本发明实施例提供一种智能合约的漏洞检测方法,包括以下步骤:
步骤S1、通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
步骤S2、通过智能合约地址在区块链浏览器中爬取应用二进制接口;
步骤S3、将操作码和操作数作为输入,输出函数参数;
步骤S4、通过监督函数中是否存在指定行为以确定函数属性;
步骤S5、通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。
作为本发明实施例的一种实施方式,步骤S1中,对字节码智能合约翻译为操作码形式,按照操作码执行规则构建程序控制流程调用图,并在程序控制调用过程中收集每个函数的哈希值以及函数体的操作码;同时将字节码转换为SSA形式的操作码。通过定位函数入口以及函数结尾指令,得到每个函数体的操作码,当跳转到另外一个函数时,栈顶的两个元素分别作为函数偏移位置和函数哈希;通过函数偏移位置获取到函数体定位并获取其操作码,通过函数哈希在公共函数签名库中获取函数参数。
作为本发明实施例的一种实施方式,步骤S2中,通过智能合约的地址在以太网浏览器Etherescan中查找到应用二进制接口,去除其中的函数名并转换为张量形式;
作为本发明实施例的一种实施方式,步骤S3中,在收集到函数体的操作码序列和操作数后,利用序列到序列模型从操作码和操作数中推断函数参数,并将函数参数提供给编码器。具体包括:
步骤31:独热编码化函数体中所有的操作码和操作数作为语义信息,将语义信息作为输入,通过双向的LSTM网络提取语义中的特征信息;
步骤32:通过注意力机制在当前隐层状态中寻找能为当前输出贡献最大的权重信息,并经过所有时间步后输出特征隐层状态;
步骤33:通过构建与双向LSTM网络,解码特征隐层状态,并得到输入函数中可能出现的函数参数。
作为本发明实施例的一种实施方式,步骤S5中,结合操作码数据和函数接口数据检测智能合约漏洞,包括:
步骤51:提取字节码智能合约所对应的操作码,并去除其中的栈操作指令,最后得到SSA形式的操作码作为该合约语义表达;
步骤52:通过双向GRU模型从智能合约中的语义表达中获取到智能合约的隐层语义特征;判断字节码智能合约是否公开应用二进制接口;如果不公开的话,则直接跳转到步骤53,否则从以太坊浏览器Etherscan中获取到公开的应用二进制接口,并跳转到步骤56;
步骤53:利用函数参数推断方法,获取字节码智能合约中多个函数的函数参数,并总结每个函数对应的函数属性;
步骤54:拼接智能合约中每个函数的函数参数和函数属性,作为单个函数的函数接口特征;
步骤55:按照每个函数在操作码序列的位置顺序联合所有函数的函数接口特征作为智能合约的函数接口特征,并跳转到步骤57;
步骤56:从应用二进制接口和推断的函数签名信息中获取其隐层中的函数接口特征,如果为应用二进制接口则跳转到步骤561,否则跳转到步骤562;
步骤561:使用卷积神经网络CNN从二维角度提取应用二进制接口的隐层函数接口特征,并跳转到步骤57;
步骤562:对单个智能合约中的每个函数接口特征,使用一维CNN提取其中的单个函数的局部特征;
步骤563:对单个智能合约中的所有函数接口特征,先使用全局平均池化层压缩所有的函数接口信息,再使用一维CNN提取其中的所有函数的全局特征;
步骤564:将局部特征和全局特征相加,再经过激活函数之后,将结果与单个智能合约中的函数接口特征相乘,得到隐层的函数接口特征并跳转到步骤57;
步骤57:融合步骤52中获取的合约的隐层语义特征以及步骤56中获取的隐层函数接口特征,作为智能合约隐层特征;
步骤58:利用双向的GRU模型解码步骤57中得到的智能合约隐层特征,并得到存在的漏洞分类。
综上,本发明实施例利用融合语义和函数接口特征作为合约的特征,从字节码中得到操作码并将操作码转换为SSA格式的操作码,并从字节码智能合约中推断出函数参数和函数属性,将SSA格式的操作码和函数参数及属性转换为嵌入向量作为它们的特征表示,然后融合两种特征表示作为合约的特征,最后从合约特征表示中解码出漏洞类型。
实施例2:
本发明实施例提供一种智能合约的漏洞检测方法,包括以下步骤:语义提取、应用二进制接口获取、函数签名推断、函数属性总结和漏洞检测。其中,如图2所示,本发明实施例通过提取语义和函数接口推断,并得到它们对应的特征表示,再对齐两种特征表示的维度,然后融合两种特征得到最后的特征表示。
语义提取过程,包括以下步骤:
1)对字节码智能合约进行预处理:
将字节码智能合约转换为操作码序列,同时将字节码转换为SSA形式的操作码序列。
2)收集字节码智能合约中的函数体操作码序列以及函数哈希:
对于构建控制流程调用图收集每个函数的哈希值以及函数体的操作码序列,其中,收集方式伪代码如下:
1Initialization
2bc{A bytecode smart contract}
3OpSeq{global map of function context}
4Ids{global map of function hashes}
5BasicBlocks,eb←CFG.countBasicBlocks(EVMAsm(bc))
6pushValue{value of stack element}
7prePushValue{previous value of stack element}
8Function getFuncInfo(block,entry):
9 foreach i in block.ins do Ops←i;
10 if entry then
11 if end of block.ins==jumpi then
12 Assert length of block.ins>2
13 dest←block.ins.oprand[-2]
14 OpSeq[dest]←getFuncInfo(BasicBlocks[dest],false)
15 Ids[dest]←None
16 endif
17 return Ops
18 endif
19 for i in block.ins:
20 if i==pushes then
21 prePushValue,pushValue←pushValue,oprand of i22 endif
23 endfor
24 if end of block.ins==jumpi then
25 if prePushValue then
26 fnAddr,fnId←pushValue,prePushValue
27 endif
28 else
29 fnAddr,fnId←None
30 endif
31 if fnAddr in BasicBlocks then
32 Opseq[fnAddr]←getFuncInfo(BasicBlocks[fnAddr],false)
33 Ids[fnAddr]←fnId
34 if end of block.ins==jumpi then
35 dest←end of block+1
36 OpSeq[dest]←getFuncInfo(BasicBlocks[dest],false)
37 endif
38 endif
39 return Ops
40 end Function
41 foreach ebAddr in eb do
42 OpSeq[ebAddr]←getFuncInfo(BasicBlocks[ebAddr],True)
43 endforeach
上述所描述的伪代码中,运行逻辑如下
在运行之前,初始化需要的变量以及前置环境变量,例如伪代码第3和第4行全局变量以及第5行的合约基础块。
在获取到所有的基础块BasicBlocks和所有基础块的入口地址eb。
伪代码第8到41行定义了收集函数体操作序列和函数哈希的函数,并在43行以所有的基础块入口作为起点调用该函数。
在该函数中,如果为基础块入口则收集其中的操作码序列,如果有函数跳转则将跳转函数体中的操作码序列记录在OpSeq中。
在伪代码第20行,记录压栈操作的最后两位数。当存在伪代码第24行调用函数的情况时,将栈顶元素作为要跳转函数的起始基础块地址,移除栈顶元素之后的元素为该跳转函数对应的函数哈希。
当基础块无跳转时,则按照伪代码第35行所示,移动到下一个地址的指令并调用函数。
根据上述伪代码功能,函数体中的操作码序列以及对应的函数哈希分别记录在OpSeq和Ids中。
应用二进制接口获取,包括以下步骤:
根据字节码智能合约的地址,从以太网浏览器Etherscan中爬取相应的应用二进制接口。
再对每个应用二进制接口操作,包括转换为Dataframe格式、去除函数名属性、再转换为tensor格式以供模型训练及测试。
函数签名推断过程,包括以下步骤:
在语义提取过程,OpSeq中已经收集到了以函数体入口操作码地址,以及首个基础块的操作码序列。Ids中已经收集到了函数体入口操作码地址和该函数的函数哈希。
通过使用EtherSolve中的控制流程图构造器,得到准确的控制流程图。并使用深度遍历算法获取多个基础块中的所有操作码和操作数。
通过在公共的函数签名库中,寻找Ids中的函数哈希所对应的函数签名数据,并提取其中的函数参数。
训练序列到序列模型,将函数哈希对应的函数体入口的操作码和操作数作为输入,将函数参数作为输出,包括以下步骤:
利用双向的LSTM模型从操作码和操作数中提取其中的隐层语义特征;
利用注意力机制从隐层语义特征中找到对输出更有贡献的隐层特征;
再利用双向LSTM模型从隐层特征中解码出函数参数;
损失函数使用对每个函数签名类别加权的Focal loss函数。
函数属性总结,包括以下步骤:
按照Solidity函数规则总结操作码对应关系,总结函数的View属性:
1)规则1:修改Storage状态变量;
规则1对应操作码:STORE;
2)规则2:发起事件;
规则2对应操作码:LOG0,LOG1,LOG2,LOG3,LOG4;
3)规则3:创建其他合约;
规则3对应操作码:CREATE,CREATE2;
4)规则4:合约自毁;
规则4对应操作码:SELFDESTRUCT;
5)规则5:低级别调用;
规则5对应操作码:CALL,CALLCODE,DELEGATECALL;
按照Solidity函数规则总结操作码对应关系,总结函数的Payable属性;
6)规则6:资产交易;
规则6对应操作码:CALLVALUE;
按照Solidity函数规则总结操作码对应关系,总结函数的Pure属性;
7)规则7:Gas消耗;
规则7对应操作码:STOP,RETURN,REVERSE。
漏洞检测分为两种情况,包括以下步骤:
首先,利用双向LSTM层获取将语义提取过程得到的SSA格式操作码中的隐特征,作为语义特征表示。
第一种情况,当应用二进制接口存在时:
去除应用二进制接口中的function names,并转换为tensor格式。然后使用零补齐方式对齐所有的tensor格式的应用二进制接口。通过CNN获取其中的隐层特征。并使用平均池化层将CNN获取的隐层特征和语义特征表示维度对齐,作为函接口特征表示。拼接函数接口特征表示和语义特征表示,作为合约隐层特征表示。
第二种情况,当应用二进制接口不存在时:
利用函数签名推断过程推断到该合约中所有函数体中可能存在的函数参数。并总结所有函数体中的函数属性。将所有函数体的函数参数和对应的函数属性拼接为多行多列的函数数据。其中函数数据的行按照操作码地址顺序排序。使用lookup表的方式转换所有的数据为tensor格式,并通过零填充的方式对齐有的数据,得到推断的函数特征表示。
如图3所示,使用从多通道转为少通道的一维CNN获取函数特征表示中每一行数据的隐层特征,再经过归一化层,ReLu激活层,和从少通道还原回多通道的一维CNN,再经过归一化层获取函数特征表示中每一行数据的隐层特征,作为推断函数表示的局部特征。
使用平均池化层将多行推断函数特征表示转换为一行的数据,并将该一行数据经过将多通道转为少通道的一维CNN,归一化层,ReLu激活层,从少通道还原回多通道的一维CNN层和归一化层,得到总体数据的隐层特征,作为推断函数表示的全局特征。
将推断函数表示的局部特征和全局特征进行相加操作,并经过Sigmoid激活函数,得到推断函数表示的特征权重。再将推断函数表示和其特征权重相乘,得到推断函数表示的加强特征表示。通过平均池化层将推断函数表示的加强特征表示与语义特征表示维度对齐,作为推断的函数接口特征表示。拼接推断的函数接口特征表示和语义特征表示,作为合约推断的隐层特征表示。使用双向的LSTM层解码合约隐层特征或者合约推断的隐层特征表示,得到其中存在的漏洞类型。
实施例3:
一种智能合约漏洞检测方法,包括:
通过构建控制流图收集函数参数以及对应函数语义数据;
利用收集到的公开的函数参数以及函数语义数据训练序列到序列模型;
使用训练好的序列到序列模型预测未公开的函数参数;
拼接未公开的函数参数和总结操作码得到的函数属性作为推断的单个函数接口数据;
收集智能合约已公开的应用二进制接口作为原生的函数接口数据;
联接单个智能合约中的所有推断的单个函数接口数据作为推断的函数接口数据;
提取语义数据特征表示和函数接口数据特征表示,并通过编码器融合语义数据特征表示和函数接口数据特征表示为智能合约的特征表示;
解码智能合约的特征表示用于分类漏洞;
作为本发明实施例的一种实施方式,所述收集函数参数以及对应函数语义数据,具体为:将字节码智能合约转换为操作码和静态单赋值形式(Static Single Assignment,以下简称SSA)的操作码,并利用操作码构建控制流程图,将SSA形式的操作码作为智能合约的语义的特征表示;
其中,在控制流图构建过程中,根据基础块中的最后的操作码是否为条件跳转指令而判断其是否跳转到另外一个函数中;
通过获取条件跳转指令为结尾的基础块以及推断相应的栈结构,并收集栈底两位元素分别作为基础块地址和函数哈希值;
利用基础块地址定位函数对应操作码的起始位置,并根据基础块结尾指令是否为条件跳转指令,执行相应的函数操作码收集行为;
利用收集到的数据训练函数签名推断模型,其中操作码作为输入,函数哈希在公共函数签名库中对应的函数签名的函数参数作为输出。
进一步,将字节码智能合约转换为操作码和SSA形式的操作码,具体为:通过去除栈数据操作指令,并统一转换为中间语言表达,得到SSA形式操作码序列。
作为本发明实施例的一种实施方式,所述利用收集到的公开函数参数以及函数语义数据训练序列到序列模型,具体为:
所述的序列到序列模型接收操作码形式的字节码智能合约,从字节码智能合约中按照操作码形式分割函数并找到所有函数唯一对应的函数哈希;
在公共函数签名库中寻找函数哈希对应的函数签名并构建数据集,以函数入口基础块的操作码和操作数序列作为输入数据,以函数签名中的函数参数作为预测的结果;
将操作码和操作数序列独热编码化,在长短期记忆网络(Long short-termmemory,以下简称LSTM)中寻找序列的特征表示,再通过注意力机制寻找特征表示中对预测函数参数的贡献权重,形成函数的特征表示;
通过LSTM解码函数的特征表示,得到函数的对应的函数参数;
模型损失函数为Focal Loss函数,以类别数量在总数量比例为模型拟合难易参数,反向传播过程的损失为所有类别损失的平均值。
作为本发明实施例的一种实施方式,所述通过编码器融合语义数据特征表示和函数接口数据特征表示,具体为:
编码器接收SSA形式的操作码形式的字节码智能合约和智能合约的函数接口,如果智能合约的应用二进制接口可公开获取,则让应用二进制接口作为函数接口,否则通过序列到序列模型获取智能合约中所有函数的参数;
通过获取函数中的操作码,并总结是否存在指定的操作码而推断出函数属性,再拼接每个函数的函数参数和函数属性作为推断的函数接口,然后将单个智能合约中多个函数的函数接口组合为多行形式;
通过对齐所有的函数参数以及函数属性使得它们保持相同的维度,再使用填充的方式使得应用二进制接口和推断的函数接口维度保持一致;
将字节码智能合约转换为SSA形式的操作码,并将SSA形式的操作码和函数接口独热编码化,通过门控循环单元网络(Gate Recurrent Unit,以下简称GRU)获取SSA形式的操作码的语义特征表示,通过修改过的多尺度通道注意力模块获取函数接口的特征表示,再联接语义特征表示和函数接口的特征表示为语义和函数隐层的特征表示;
通过GRU解码语义和强化函数隐层的特征表示,得到智能合约中存在的漏洞。
进一步,总结是否存在指定操作码而推断出函数属性,具体为:
函数属性包括状态可变性和可支付性;通过监控以下行为:存储修改、事件发送、子合约创建、自毁和低级别调用,若存在以上行为,则函数修改了状态变量;存储修改行为对应SSTORE操作码,事件发送行为对应LOG操作码,子合约创建行为对应CREATE操作码,自毁行为对应SELFSTRUCT操作码,低级别调用对应CALL、CALLCODE和DELEGATECALL操作码;
通过监控以下行为:GAS消耗,若存在以上行为,则函数查看了状态变量;为了便于监控,操作码被转换为SSA形式操作码,去除栈操作等无关操作码,则监控STOP、RETURN和REVERSE操作码;若只存在以上操作码则表示函数无GAS消耗;
通过监控以下行为:资产交易,若存在以上行为,则函数存在可支付性;资产交易行为对应CALLVALUE操作码。
进一步,修改过的多尺度通道注意力模块具体为:卷积层、归一层、激活层、卷积层、归一层组成一个网络序列,将单个智能合约中每个函数推断的函数接口信息输入该网络序列,得到函数的局部特征;该网络序列的第一个卷积层将高维通道映射到低维通道,第二个卷积层将低维通道恢复到高维通道;将单个智能合约中所有函数接口经过一个平均池化层再经过该网络序列,得到函数的将函数局部特征和全局特征相加,再经过一个激活函数得到函数总特征,最后将单个智能合约的所有函数接口与函数总特征相乘得到函数的隐层特征。
实施例4:
本发明实施例还提供一种智能合约的漏洞检测装置,包括:
语义提取模块,用于通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
应用二进制接口获取模块,用于通过智能合约地址在区块链浏览器中爬取应用二进制接口;
函数参数推断模块,用于将操作码和操作数作为输入,输出函数参数;
函数属性总结模块,用于通过监督函数中是否存在指定行为以确定函数属性;
漏洞检测模块,用于通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。
实施例5:
本发明实施例还提供一种存储介质,所述存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现智能合约的漏洞检测方法。
以上所述的实施例仅是对本发明优选方式进行的描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。

Claims (5)

1.一种智能合约的漏洞检测方法,其特征在于,包括:
步骤S1、通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
步骤S2、通过智能合约地址在区块链浏览器中爬取应用二进制接口;
步骤S3、将操作码和操作数作为输入,输出函数参数;
步骤S4、通过监督函数中是否存在指定行为以确定函数属性;
步骤S5、通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型;
其中,步骤S3中,在收集到函数体的操作码和操作数后,利用序列到序列模型从操作码和操作数中推断函数参数,并将函数参数提供给编码器;
步骤S3具体包括:
步骤31:独热编码化函数体中所有的操作码和操作数作为语义信息,将语义信息作为输入,通过双向的LSTM网络提取语义中的特征信息;
步骤32:通过注意力机制在当前隐层状态中寻找能为当前输出贡献最大的权重信息,并经过所有时间步后输出特征隐层状态;
步骤33:通过构建与步骤31相同结构的双向LSTM网络,解码特征隐层状态,并得到输入函数中可能出现的函数参数;
步骤S5包括:
步骤51:提取字节码智能合约所对应的操作码,并去除其中的栈操作指令,最后得到SSA形式的操作码作为该合约语义表达;
步骤52:通过双向GRU模型从智能合约中的语义表达中获取到智能合约的隐层语义特征;判断字节码智能合约是否公开应用二进制接口;如果不公开的话,则直接跳转到步骤53,否则从以太坊浏览器Etherscan中获取到公开的应用二进制接口,并跳转到步骤56;
步骤53:利用函数参数推断方法,获取字节码智能合约中多个函数的函数参数,并总结每个函数对应的函数属性;
步骤54:拼接智能合约中每个函数的函数参数和函数属性,作为单个函数的函数接口特征;
步骤55:按照每个函数在操作码序列的位置顺序联合所有函数的函数接口特征作为智能合约的函数接口特征,并跳转到步骤57;
步骤56:从应用二进制接口和推断的函数签名信息中获取其隐层中的函数接口特征,如果为应用二进制接口则跳转到步骤561,否则跳转到步骤562;
步骤561:使用卷积神经网络CNN从二维角度提取应用二进制接口的隐层函数接口特征,并跳转到步骤57;
步骤562:对单个智能合约中的每个函数接口特征,使用一维CNN提取其中的单个函数的局部特征;
步骤563:对单个智能合约中的所有函数接口特征,先使用全局平均池化层压缩所有的函数接口信息,再使用一维CNN提取其中的所有函数的全局特征;
步骤564:将局部特征和全局特征相加,再经过激活函数之后,将结果与单个智能合约中的函数接口特征相乘,得到隐层的函数接口特征并跳转到步骤57;
步骤57:融合步骤52中获取的合约的隐层语义特征以及步骤56中获取的隐层函数接口特征,作为智能合约隐层特征;
步骤58:利用双向的GRU模型解码步骤57中得到的智能合约隐层特征,并得到存在的漏洞分类。
2.如权利要求1所述的智能合约的漏洞检测方法,其特征在于,步骤S1中,对字节码智能合约翻译为操作码形式,按照操作码执行规则构建程序控制流程调用图,并在程序控制调用过程中收集每个函数的哈希值以及函数体的操作码;同时将字节码转换为SSA形式的操作码。
3.如权利要求2所述的智能合约的漏洞检测方法,其特征在于,步骤S2中,通过智能合约的地址在以太网浏览器Etherescan中查找到应用二进制接口,去除其中的函数名并转换为张量形式。
4.一种实现权利要求1至3所述的智能合约的漏洞检测方法的智能合约的漏洞检测装置,其特征在于,包括:
语义提取模块,用于通过给智能合约构建控制流程图并按照其调用流程收集操作码、操作数和SSA形式的操作码;
应用二进制接口获取模块,用于通过智能合约地址在区块链浏览器中爬取应用二进制接口;
函数参数推断模块,用于将操作码和操作数作为输入,输出函数参数;
函数属性总结模块,用于通过监督函数中是否存在指定行为以确定函数属性;
漏洞检测模块,用于通过编码器融合SSA形式的操作码和应用二进制接口或函数参数与函数属性的拼接形式,并通过解码器得到存在的漏洞类型。
5.一种存储介质,其特征在于,所述存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现权利要求1至3任一项所述的智能合约的漏洞检测方法。
CN202310584937.7A 2023-05-23 2023-05-23 一种智能合约的漏洞检测方法和装置、存储介质 Active CN116578988B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310584937.7A CN116578988B (zh) 2023-05-23 2023-05-23 一种智能合约的漏洞检测方法和装置、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310584937.7A CN116578988B (zh) 2023-05-23 2023-05-23 一种智能合约的漏洞检测方法和装置、存储介质

Publications (2)

Publication Number Publication Date
CN116578988A CN116578988A (zh) 2023-08-11
CN116578988B true CN116578988B (zh) 2024-01-23

Family

ID=87541043

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310584937.7A Active CN116578988B (zh) 2023-05-23 2023-05-23 一种智能合约的漏洞检测方法和装置、存储介质

Country Status (1)

Country Link
CN (1) CN116578988B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111563742A (zh) * 2020-05-11 2020-08-21 西安邮电大学 智能合约交易顺序依赖漏洞变异模糊测试方法
CN113449303A (zh) * 2021-06-28 2021-09-28 杭州云象网络技术有限公司 基于教师-学生网络模型的智能合约漏洞检测方法和系统
CN113672515A (zh) * 2021-08-26 2021-11-19 北京航空航天大学 一种基于符号执行的wasm智能合约漏洞检测方法
CN113886832A (zh) * 2021-09-14 2022-01-04 华南理工大学 智能合约漏洞检测方法、系统、计算机设备和存储介质
CN114996126A (zh) * 2022-05-17 2022-09-02 电子科技大学 一种针对eosio智能合约的漏洞检测方法及系统
CN115017513A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种基于人工智能的智能合约漏洞检测方法
CN115022026A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种区块链智能合约威胁检测装置及方法
CN115033896A (zh) * 2022-08-15 2022-09-09 鹏城实验室 以太坊智能合约漏洞检测方法、装置、系统与介质
CN115080981A (zh) * 2022-06-22 2022-09-20 东北大学 一种基于局部与序列特征融合的智能合约漏洞检测方法
CN115758388A (zh) * 2022-11-30 2023-03-07 浙江大学 一种基于低维字节码特征的智能合约的漏洞检测方法
CN116089957A (zh) * 2022-12-29 2023-05-09 河南大学 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190303541A1 (en) * 2018-04-02 2019-10-03 Ca, Inc. Auditing smart contracts configured to manage and document software audits

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111563742A (zh) * 2020-05-11 2020-08-21 西安邮电大学 智能合约交易顺序依赖漏洞变异模糊测试方法
CN113449303A (zh) * 2021-06-28 2021-09-28 杭州云象网络技术有限公司 基于教师-学生网络模型的智能合约漏洞检测方法和系统
CN113672515A (zh) * 2021-08-26 2021-11-19 北京航空航天大学 一种基于符号执行的wasm智能合约漏洞检测方法
CN113886832A (zh) * 2021-09-14 2022-01-04 华南理工大学 智能合约漏洞检测方法、系统、计算机设备和存储介质
CN114996126A (zh) * 2022-05-17 2022-09-02 电子科技大学 一种针对eosio智能合约的漏洞检测方法及系统
CN115017513A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种基于人工智能的智能合约漏洞检测方法
CN115022026A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种区块链智能合约威胁检测装置及方法
CN115080981A (zh) * 2022-06-22 2022-09-20 东北大学 一种基于局部与序列特征融合的智能合约漏洞检测方法
CN115033896A (zh) * 2022-08-15 2022-09-09 鹏城实验室 以太坊智能合约漏洞检测方法、装置、系统与介质
CN115758388A (zh) * 2022-11-30 2023-03-07 浙江大学 一种基于低维字节码特征的智能合约的漏洞检测方法
CN116089957A (zh) * 2022-12-29 2023-05-09 河南大学 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于语义感知图神经网络的智能合约字节码漏洞检测方法;赵波 等;《工程科学与技术》;第54卷(第02期);49-55 *
面向区块链智能合约的实时漏洞检测技术研究;李婷;《中国优秀硕士学位论文全文数据库 信息科技辑》(第04期);I138-440 *

Also Published As

Publication number Publication date
CN116578988A (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
CN113190849B (zh) Webshell脚本检测方法、装置、电子设备及存储介质
CN108885632A (zh) 用于实时数据流编程的高效状态机
CN112307473A (zh) 一种基于Bi-LSTM网络和注意力机制的恶意JavaScript代码检测模型
CN108520180A (zh) 一种基于多维度的固件Web漏洞检测方法及系统
US20180232351A1 (en) Joining web data with spreadsheet data using examples
US11263062B2 (en) API mashup exploration and recommendation
CN113381962B (zh) 一种数据处理方法、装置和存储介质
WO2024027279A1 (zh) 代码补全方法、装置及设备
CN116340952A (zh) 一种基于操作码程序依赖图的智能合约漏洞检测方法
CN115033896A (zh) 以太坊智能合约漏洞检测方法、装置、系统与介质
CN115617395A (zh) 一种融合全局和局部特征的智能合约相似性检测方法
CN117235745B (zh) 基于深度学习工控漏洞挖掘方法、系统、设备和存储介质
CN114254323A (zh) 基于PCODE和Bert的软件脆弱性分析方法及系统
CN116578988B (zh) 一种智能合约的漏洞检测方法和装置、存储介质
CN116340951A (zh) 一种基于自监督学习的智能合约漏洞检测方法
CN113076089B (zh) 一种基于对象类型的api补全方法
CN106991144B (zh) 一种定制数据爬取工作流的方法及系统
Köhl An executable structural operational formal semantics for Python
CN109657247B (zh) 机器学习的自定义语法实现方法及装置
CN111475812A (zh) 一种基于数据可执行特征的网页后门检测方法与系统
CN115114627B (zh) 一种恶意软件检测方法及装置
CN117521658B (zh) 一种基于篇章级事件抽取的rpa流程挖掘方法及系统
CN116432176A (zh) 基于跨语言语义分析的Web恶意程序检测方法和系统
Yang et al. A Defect Detection Method Based on Code Defect Knowledge Graph
Przybylek Process Mining through Tree Automata.

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