0 引言
区块链是一种分布式账本技术,它以去中心化的方式记录和验证交易数据,其中比特币
[1]是区块链技术的首个应用和代表。区块链技术通过去中心化、透明和安全的特性,为数据交换和价值传输提供了一种新的范式
[2]。以太坊
[3]是一种开源的区块链平台,它允许开发者构建和部署智能合约
[4]。这些合约可以在以太坊网络上执行
[5],实现去中心化的应用程序和数字资产的管理。开发者可以使用Solidity等编程语言编写智能合约,并通过以太坊虚拟机(Ethereum Virtual Machine, EVM)
[6]在以太坊网络上执行。智能合约是一种基于区块链技术的自动化合约,它可以在没有中介的情况下执行交易。庞氏骗局
[7-9]是利用新投资人的钱来向老投资者支付利息和短期回报,以制造赚钱的假象,进而骗取更多的投资。在智能合约上,庞氏骗局通常采用类似的方式
[9-10],但是由于智能合约的自动化执行,骗局可能会更加难以发现和防范。随着区块链技术和加密货币近年来蓬勃发展,越来越多的这种欺诈行为已经出现在区块链生态系统中
[11]。例如Fomo3D,一度是以太坊平台上最受欢迎的游戏之一。玩家可以购买钥匙,每购买一个钥匙,增加倒计时30 s,但倒计时上限为24 h。购买钥匙需要花费ETH,其中50%会流入奖金池,48%会分配给持有钥匙的玩家,2%会贡献给社区。游戏倒计时结束后,最后一个购买钥匙的人将赢得奖金池内的所有ETH。2018年,PlusToken最初以区块链钱包的名义推出,声称可以提供超高的收益。除了让用户存储数字货币,PlusToken还通过发展下线的方式来获得更高的收益。为了保障区块链市场的健康发展,庞氏合约检测技术的研究至关重要。
目前的基于交易数据提取特征的方法主要是人工设计特征,重点刻画所有参与者在收益和投资的数量和金额上的差异,对账户之间的交互作用的刻画有所欠缺,也不能在时间演化中学习合约的行为意图,对专家知识的严重依赖导致其通用性较差。依赖合约字节码提取特征的方法主要有基于操作码,基于n-gram词频分布和它们相对应的词频—逆文档频率分布检测技术,但是这些检测方法都缺乏可解释性,没有考虑代码在结构上的合约逻辑信息。而且这些方法容易出现规避技术。基于符号执行的检测方法依靠专家规则来识别庞氏骗局。但是随着以太坊智能合约的爆发式增长,很难通过不断扩大检测规则以应对新型的攻击模式。
为解决上述问题,提出一个能够利用合约代码结构特征和合约时间行为特征的模型(Code Structure and Temporal Behavior, CSTB),有效地提高了以太坊上的庞氏合约检测的性能。模型一共有两个模块,代码结构特征表示模块和时间行为特征表示模块。在代码结构特征表示模块中,通过解析合约字节码
[12]得到runtime字节码,然后通过pyevmasm工具将runtime字节码反编译成操作码,再用Ether Solve
[13]工具对合约runtime字节码生成合约控制流图,接着采取图嵌入技术将合约控制流图映射到固定维数的向量空间,得到刻画合约代码结构的特征。在时间行为特征表示模块中,根据合约的每一笔外部交易以及其触发的内部交易构造一个个子图,子图中的节点表示账户地址,边表示账户之间的交易,按照时间顺序将子图排序以生成合约的子图序列,进而将得到所有的子图进行图嵌入,得到每个子图固定维数的表示,也就得到了跟子图序列相对应的子图嵌入序列,用长短时记忆(Long Short-Term Memory, LSTM)网络
[14]处理合约子图序列嵌入,得到刻画合约时间行为的特征。
所提模型优势如下:1)该模型能刻画合约代码结构特征。通过解析合约字节码,构建合约控制流图,利用Graph2vec的图嵌入方法将合约控制流图映射到固定维数的向量空间,捕获合约控制流图的拓扑结构信息,进而刻画了合约在代码结构上的特征。2)该模型能刻画合约时间行为的特征。根据交易数据构建子图序列,按照时间顺序将子图排序以生成合约的子图序列,并将得到所有的子图进行图嵌入得到每个子图固定维数的表示,以得到子图嵌入序列,用LSTM网络提取子图嵌入序列的时序变化信息,以提取合约时间行为的特征。3)扩展性较强。与基于符号执行依靠专家规则的检测方法相比,所提模型不用因为庞氏合约吸引投资和支付收益的方式的不同设计新的模式规则。依赖于代码结构特征和时间行为特征,当庞氏合约吸引投资和支付收益的模式发生变化时,其时间行为特征依然保持典型的庞氏合约典型特征,检测新型庞氏合约的能力更强。
1 相关研究
Bartoletti等
[10]对以太坊上的庞氏骗局进行全面调查,从合约源代码、用户的收益和损失、合约流入和流出演变、合约的寿命等角度分析它们的行为和影响。Chen等
[15]首次利用数据挖掘和机器学习方法来检测区块链上的庞氏合约。从智能合约的交易和操作码中提取特征,利用XGBoost分类模型来检测庞氏合约。比较了两类特征的判别力,对账户、操作码及其组合这3种特征进行了实验。Fan等
[16]提取基于
n-gram的合约操作码的类别特征,并利用有序目标统计来处理智能合约的类别特征,避免目标泄漏引起的预测偏移。使用边界过采样技术作为数据增强方法来合成更多的庞氏合约匹配非庞氏合约的数量。Chen等
[17]提出一种启发式引导的符号执行技术,首先生成智能合约中每个可行路径的语义信息,然后识别与投资者相关的转移行为和所采用的分配策略。Jin等
[18]提出了一个通用的异构特征增强模块,模块在辅助异构交互图中学习基于元路径的行为特征,并将异构特征聚合到执行庞氏检测方法的同质交互图中相应的账户节点上。Ji等
[19]构建了智能合约字节码的控制流图,识别并消除与合约功能无关的元素,利用控制流图提取特征。利用这些特征分别构建了用于庞氏骗局检测的随机森林模型。Zheng等
[20]从字节码、语义和开发人员多个视图中提取大量独立于合约交易记录的特征。从考虑连续序列中词的局部性的角度出发,计算了
n -gram和
n-gram的TF-IDF。此外,word2vec算法从语义的角度将操作码嵌入到向量中。利用机器学习的多视图级联集成模型(MulCas)方法来构建识别模型。
2 模型设计
如
图1所示,所提模型包括两个模块,代码结构特征表示模块和时间行为特征表示模块。
2.1 代码结构特征表示模块
代码结构特征表示模块包括合约字节码的解析、控制流图生成和Graph2vec图嵌入部分。
2.1.1 合约字节码的解析
智能合约编写完成后,需要通过编译器将其编译成字节码才能在以太坊虚拟机上运行。智能合约字节码可以分为3个部分:部署字节码、runtime字节码和auxdata。在创建合约时,以太坊虚拟机会先创建合约账户,然后运行部署代码。运行完成后,它会将runtime字节码和auxdata存储到区块链上,并将二者的存储地址与合约账户关联起来,完成合约的部署。智能合约的部署需要使用包含地址等信息的字节码,并且还需要加密的auxdata用于验证,但这些数据与智能合约的执行无关。因此,在部署智能合约之前,应该从字节码中删除这些无关数据,以获得运行时字节码。
2.1.2 控制流图的构建
得到runtime字节码后,利用EtherSolve工具对合约runtime字节码生成合约控制流图。EtherSolve工具处理合约runtime字节码分为6个部分:字节码解析、基本块搭建、添加基本边、解决孤立跳跃、静态数据分离。在字节码解析中,通过官方文档中字节码的翻译规则将智能合约的字节码的每两个字符转换为相应的操作码。其次构建基本块,基本块包含若干条指令的集合,此集合中的指令段完成一个基本功能。每个基本块都由其偏移量(offset)唯一标识,即其第一个操作码在字节码中的位置。接着是解决孤立跳跃部分,孤立跳跃是在调用函数并执行完成后,确定应该返回什么地址继续执行的时候出现。分离静态数据部分,静态数据是字符串或者常量数组,不应该属于可执行代码,不应该有控制流。
2.1.3 图嵌入
采取Graph2vec图嵌入技术将合约控制流图映射到固定维数的向量空间,得到刻画合约代码结构的特征。Graph2vec是一种用于图嵌入的算法,它可以将图形数据转换为低维向量表示。Graph2vec通过提取子图、重标注和嵌入学习等步骤,将图形数据转换为低维向量表示,从而实现了图形数据的有效处理和分析。
2.2 时间行为特征表示模块
2.2.1 子图序列的构建
将智能合约的每一笔外部交易和由该外部交易触发的内部交易称为“交易子图”,交易子图是指由一个外部交易引发的一系列内部交易。如
图1所示,绿色的节点表示智能合约地址,红色的节点表示向合约地址发起交易的地址,蓝色的节点表示合约地址向该地址进行交易。边的属性包括交易时间和交易金额。通过交易子图,可以追踪一笔交易触发的所有的其他交易的顺序和关系。交易子图的概念有助于理解以太坊上复杂的交易执行过程,特别是当涉及到多个智能合约之间的交互时。通过分析交易子图,可以深入了解交易的执行路径、数据传递和状态变化等信息。
2.2.2 子图重标签
这样就得到每个智能合约的所有交易子图。庞氏骗局的本质特征就是利用新投资者的钱向老投资者支付收益,反映到交易行为上就是当有新的账户投资时,合约会偏向于给旧账户转账。为此,根据账户的参与投资先后和收益情况给交易子图重新设计了标签。
2.2.3 图嵌入
得到重标签的图序列之后,将所有合约图序列汇总一起利用Graph2vec图嵌入模型进行提取子图、重标注和嵌入学习等步骤,将图形数据转换为低维向量表示,也就得到了每个合约的子图序列嵌入,从而实现了图序列数据的有效处理和分析。
2.2.4 LSTM网络时序处理
使用LSTM网络模型来提取时间序列的特征,并将这些特征作为输入传递给机器学习分类器进行分类。根据庞氏与非庞氏合约相应的序列数据的长度分布,对序列的长度进行处理:对长度大于128的部分进行截断,对长度小于128的进行补0,序列均为128等长,有利于后面LSTM网络模型的处理。包括数据清洗、归一化等步骤,以确保数据的准确性和一致性。然后,使用LSTM网络模型对预处理后的时间序列数据进行训练,得到最后一层的表示。这些最后一层的表示被视为时间序列的特征向量,它们捕捉了序列中的关键信息。接下来,将这些特征向量作为输入传递给机器学习分类器XGBoost,以完成分类任务。
3 实验
本节进行实证评估,以证明所提出的结构行为框架的有效性。旨在回答以下研究问题:1)提议的结构行为方法检测以太坊庞氏合约地址的有效性;2)结构行为框架的每个组成部分(代码结构特征表示和时间行为特征表示)对最终的检测性能做出的贡献;3)通过提供不同的子图嵌入序列长度或不同的LSTM网络隐藏层大小,结构行为方法的性能的变化。
3.1 数据集
3.1.1 数据收集
从Xblock平台上下载了庞氏合约的数据集,数据集包含6 498份以太坊智能合约,其中318份人工标注为庞氏合约,其余为非庞氏合约。数据集里面包括了合约的地址、字节码、源码、字节码等庞氏标签。有了合约标签数据集后,从ehterscan.io爬取了智能合约的内部和外部交易数据。
3.1.2 数据清洗
删除数据集中重复的合约地址,删除交易记录少于5条或超过2 000条的地址的合约,最后得到了4 024个合约地址,其中庞氏合约229个,非庞氏合约3 795个。将构建的数据集进行随机划分,一共3组随机Split1(7:1:2)、Split2(5:2:3)和Split3(3:3:4),按照各自的比例依次划分为训练集、验证集和测试集。
3.2 实验设置
3.2.1 对比方法
将模型跟以太坊现有的4种庞氏合约检测技术进行了比较,包括:1)账户特征:文献[
15]基于智能合约交易数据的账户特征;2)操作码特征:文献[
15]提取的合约所有操作码频率特征;3)Word特征:基于Bag-of-Words模型计算词频计数和TF-IDF值作为合约特征;4)
n-gram特征:计算
n-gram和
n-gram的TF-IDF值作为特征。此外还跟账户结合操作码特征的方法进行比较。
3.2.2 评价指标
使用以下3个指标来全面评估不同方法在以太坊庞氏合约诈骗检测方面的性能:1)召回率,指检测到的已知网络钓鱼节点样本的百分比。2)精确度,指在被判定为可疑的地址中,真实的庞氏合约地址所占的百分比。3)F1分数。是对精确度和召回率的综合评价。
3.2.3 实现细节
对于Graph2vec模型,将Graph2vec的输出维度设置为128,Weisfeiler-Lehman迭代次数设置为2,最小结构特征计数设置为2;对于LSTM网络模型,将LSTM网络的隐藏状态的维度大小设置为32,LSTM网络模型的层数设置为32;对于XGBoost,将树的最大深度设置为6,学习率设置为0.3,每棵树对样本的采样比例设置为1。
3.3 效果结果
1)如
表1所示,在3个评价指标方面,CSTB明显优于所有其他对照方法。CSTB在D3数据集下,精确度为94.3%,召回率为80.7%,
F1分数为87%。第二好的方法是TF-IDF for
n-gramn,其
F1分数在D1数据集上达到了78%以上。基于Opcode特征的方法与基于TF-IDF特征的方法性能相近,
F1分数相差很小。性能最差的是基于Account特征的方法,召回率很低,只有50%左右。
2)与基于Account + Opcode特征的方法相比,CSTB的3个评价指标提高了近10%。在所有比较的方法中,只有基于Account特征的方法的性能是最差的,而且基于Account特征与基于Account + Opcode特征比较,3个评价指标提升效果很小,可以得出Account特征对于基于Account + Opcode特征的方法节点分类的贡献较少。
3)与基于Account特征的方法相比,CSTB的F1分数评价指标在3个数据集上都至少提高了20%。再次证明CSTB通过充分挖掘合约代码在结构上的特征,交易节点之间以太坊交易记录的时间信息,可以比其他方法更好地检测以太坊庞氏合约。
4)基于TF-IDF for n-gram特征的方法是CSTB强有力的对手,它充分利用了n-gram词频和相对应的TF-IDF在庞氏与非庞氏合约分布不同的特点。在3个数据集上,CSTB的3个评估指标都比它高。
3.4 消融研究
分别消除代码结构特征表示模块、时间行为特征表示模块和时间行为特征表示模块中的子图重标签部分,依次记为CSTB/c、CSTB/t和CSTB/z。其精确度和召回率结果如
图2所示。
从
图2中可以看出,与CSTB相比,CSTB/c的性能显著下降,在D1、D2和D3数据集上的召回率分别比CSTB低14.2%、14.3%和13%。这一结果表明,刻画代码结构特征对于庞氏合约检测任务至关重要,也证明了合约控制流图中包含的拓扑结构信息的重要性。3个消除部分中,时间行为特征表示模块中的子图重标签部分的贡献最小。这个模块能有效地提取庞氏时间行为信息。完整的CSTB在3个数据集上的性能优于其他消融模型,这证明每个模块都能提供有效的改进。
3.5 敏感性分析
如
图3所示,可以发现:随着Graph2vec输入长度的增加,结合评价指标,模型在所有数据集上的性能先是有所增强而后下降;有时较短的输入长度表现优于较长的输入长度;在3个数据集上使用最短的输入长度训练时,与较长的输入长度相比存在较大差距。
提供不同的LSTM输出长度,模型灵敏度结果如
图4所示,在每种输出长度设置下CSTB在所有数据集上的精确度和召回率两项评价指标上都取得了相似的性能,大多数情况与表2中的其他方法相比性能仍然是最好的;CSTB在使用较小的LSTM网络输出长度(例如
h=24)进行训练时仍然可以取得相对较好的性能,这表明了其基础架构的强大。因此,CSTB对LSTM网络输出长度具有鲁棒性,并大多数情况优于其他同类方法。
4 结束语
提出一种能提取代码结构的特征和时间行为特征的模型(CSTB),以提高以太坊庞氏合约检测的性能。CSTB将合约字节码转化成合约控制流图,再利用图嵌入技术处理,有效地刻画了代码结构特征。另外,CSTB根据合约的历史交易数据合约构造子图序列,采用Graph2vec嵌入,再用长短时记忆递归神经网络模型训练生成合约的时间行为特征。最后,结合这两类特征,提高了以太坊庞氏合约骗局检测的性能。实验表明,CSTB的性能和实用性优于目前主流的模型,证明了以太坊庞氏骗局的严重威胁,并呼吁区块链社区部署有效的应对措施。