关键词:
区块链
智能合约
漏洞检测
代码表示学习
图神经网络
摘要:
智能合约是一种运行在区块链上的软件,承担着区块链上加密货币交易、加密资产管理和加密货币发行等多种功能。作为一种较新的软件类型,其开发者通常缺乏成熟的智能合约开发经验,容易在智能合约开发过程中引入漏洞。鉴于智能合约代码一旦部署上链后便难以更改,并且管理着价值巨大的加密资产,其存在的漏洞会使区块链用户遭受巨大经济损失。因此,如何辅助开发人员和用户进行智能合约漏洞检测,从而避免部署或使用存在漏洞的智能合约已成为近年来的研究热点。尽管现有智能合约漏洞检测方法已经取得了一定成效,但仍存在不足。首先,智能合约漏洞与合约代码内多种语法及语义特征相关,而现有方法未能充分表示和学习这些相关特征。其次,智能合约内部漏洞无关代码片段所含噪声会干扰漏洞特征的表示和学习。再者,现有方法较粗的漏洞检测粒度影响其应用便利性。最后,现有方法忽略了智能合约内漏洞相关跨函数语义的识别。本文围绕上述问题,展开了以下四项具体工作:
(1)针对现有方法存在的漏洞相关特征表示学习不充分问题,本文提出一种基于联合代码图表示学习的智能合约漏洞检测技术。该方法通过结合智能合约代码对应抽象语法树、控制流图和程序依赖图构建联合代码图以表示合约内部多种语法和语义特征,并利用漏洞语法特征和程序切片技术去除联合代码图中漏洞无关片段。在联合代码图的基础上,该方法利用双向门控图神经网络学习智能合约代码各语句对应语法特征和上下文语义特征,并通过构建混合注意力图池化层提取代码图中局部和全局特征进行漏洞检测。实验结果表明该方法在智能合约漏洞检测任务上的准确率可达89.2%,召回率可达92.9%,均超过基线方法。
(2)针对现有方法漏洞检测粒度较粗的不足,本文提出一种基于代码异构特征的细粒度智能合约漏洞检测方法。本方法采用代码图表示学习方法,将漏洞检测任务转化为图节点二分类问题,利用智能合约代码中各条语句包含的树结构语法特征和图结构语义特征实现语句粒度智能合约漏洞检测。为了充分表示并学习智能合约代码中各语句包含的树结构语法特征和图结构语义特征,本方法设计并构建异构代码图。在该代码图表示中,各节点内容为单条语句对应完整抽象语法树,图各边为语句间多种语义关系。通过保持各语句对应抽象语法树的树结构,并利用语句间语义关系连接各语句对应抽象语法树,本方法所构建的异构代码图能有效地保留各条语句对应语法和语义特征之间的异构性。在异构代码图基础上,本方法结合Tree-LSTM模型和图神经网络进行合约各语句所包含异构语法和语义特征学习。本方法通过充分学习智能合约各语句相关特征,从而实现语句粒度智能合约漏洞检测。实验结果表明该方法在语句粒度智能合约漏洞检测任务上的准确率可达91.4%,召回率可达89.7%,均超过基线方法。
(3)针对现有方法忽略漏洞相关跨函数语义特征识别的不足,本文提出一种基于领域知识的智能合约重入漏洞检测方法。智能合约重入漏洞由漏洞入口函数和重入函数两部分组成,检测此类漏洞依赖跨函数漏洞语义识别。本方法首先利用智能合约技术标准相关知识识别合约代码内潜在的重入漏洞相关入口函数和重入函数。基于识别出的漏洞潜在入口和重入函数,本方法利用污点分析技术追踪这些函数中状态变量相关数据流,从而识别这些重入漏洞相关函数之间的跨函数语义及其入口函数执行对重入函数的影响,从而实现智能合约重入漏洞的检测。实验结果表明该方法在两个智能合约重入漏洞数据集中均检测出最多漏洞样本,检测效果好于基线方法。
(4)针对现有方法在代码特征表示学习时受到漏洞无关噪声干扰的问题,本文提出一种基于交易语义的庞氏骗局智能合约检测方法。基于智能合约实现的庞氏骗局应用是区块链上最常见骗局合约应用之一,且此类智能合约应用代码中与庞氏骗局语义相关代码片段分布较为稀疏,如何充分表示其代码中庞氏骗局相关语义同时缓解无关噪声干扰是检测此类骗局合约的关键。本方法首先注意到庞氏骗局智能合约应用的本质特征为其代码内部“拆东墙补西墙”的交易模式。为充分表示此类合约内庞氏骗局交易模式相关特征同时避免其他无关信息干扰,本方法利用程序切片技术提取智能合约代码内部交易相关代码片段,并将其构建为交易属性图作为代码表示。其次,为学习交易属性图包含语义特征,本方法构建关系敏感图神经网络,结合语句上下文特征及语句间语义关系特征进行代码图特征学习和庞氏骗局智能合约检测。实验结果表明该方法在庞氏骗局智能合约检测任务上的准确率可达90.4%,召回率可达88.3%,均超过基线方法。