卷积神经网络在智能合约审计中的应用

降维安全
降维安全 机构得得号

Sep 04, 2018 降维安全旨在打造区块链最全面、最有深度的服务解决方案。

摘要: 研究团队借力深度学习技术,借助安全专家已经审计的大量合约做标签数据,研发了一套专门适用于智能合约代码审计的引擎,经过数据测试,其审计能力比肩人工审计,但是效率远超过人工。

引言

传统智能合约代码审计,多使用纯人工或者形式化验证等切片穷举的方式,而且涉及到代码审计审计人员水平高低不一样,容易导致审计结果出现偏差。人工方式受到个人能力所限,质量无法保证,且人力疏忽的可能性远高于自动化程序。

传统自动化程序又无法发现逻辑、业务范畴的风险。

背景

以太坊支持图灵完备的智能合约协议,整个生态有许多人基于以太坊开发自己的Dapp,生态得到了蓬勃发展。这其中,绝大部分被广泛使用的合约,均为Token代币合约。这些合约,为用户的资产在区块链网络中流通提供了极大的助力。

基于以太坊生态的合约代币,价值已相当客观,甚至有个别币种达到数亿美金。

同时,也不乏很多“问题币”,这些“问题币”在代码层面上实现的时候,开发人员由于自身水平问题或者限于项目开发时间制约,导致代码部署到以太坊之后,存在风险,所有的合约代码或opcode,都公开在区块链上,这就容易遭受到黑客的定向攻击,一旦黑客们开始尝试利用这些问题合约的漏洞,对很多项目来说,几乎就是灭顶之灾,交易所和用户损失惨重,所以一个合约部署之前,或者合约部署之后,安全专家可以对部署代码做安全审计,发现其中隐藏问题。目前仅以太坊上的合约项目,远大于全球安全专家数量,每一名安全专家在合约代码审计上所付出的精力太多,这就迫切需要一个自动化,智能化的系统,能自动审计日益增长的合约代码,同时要能保障其审计能力不会低于专家水平。

近年来,机器学习迅速发展,而其中的深度学习更是独领风骚,已经在视觉计算和自然语言处理等方向取得了显著的成绩,解决了众多场景下难题,我们研究人员借力深度学习技术,借助安全专家已经审计的大量合约做标签数据,研发了一套专门适用于智能合约代码审计的引擎,经过数据测试,其审计能力比肩人工审计,但是效率远超过人工。

模型结构

整个模型结构简要如下所示。

方法

预处理阶段

通过专家的指导了解到,由于应用层代码里面大量人为定义的变量,如果选择源代码作为输入的时候,会有很多不可预知的因素在里面,比如两个合约,A合约函数声明function transfer(address _to, uint256 _value),B合约函数声明function transfer(address to, uint256 token)从源代码层面上来说,是有很大区别的,但是对代码解析器来说,这两者几乎没有区别的,所以我们选取编译后的opcode 作为整个模型的原始输入,收集到原始的opcode的之后,我们仍然需要人工处理,比如操作数,简单的统一处理,以一个特殊的字符串来替代,有特殊含义的立即数,则原样保留,在送到整个模型之前,采用词嵌入方法,得到数据的向量形式,来表征我们的样本数据。

卷积核的选择:

由于文本的数据表示与图片在形式上完全不同,所以核的大小需要与输入层的宽保持一致,经过计算后得到feature map。

池化操作:

文本的表征和图片相比,不存在通道概念,同时,也需要避免在batch上做池化操作,窗口滑动时候,按照步长1来滑动。

中间层特征合并:

我们把多类不同核之后的的特征,合并起来,作为下一层的输入,同时为了防治过拟合,引入dropout ,概率取0.5来操作。

全联接层:

经过dropout 的操作后,通过全联接层,我们计算特征潜在的权重,最后通过softmax 来输出最大可能性标签,用来预测结果。

训练表现:

训练准确率如下图所示:

橙色线条代表测试样本的准确率,可以看到随着训练迭代次数的增加,准确率在缓慢攀升。目前由于积累的样本不够完善,可以看到训练过程中模型loss的波动比较大,但可以期待的是,随着样本的完善和积累,整体效果会愈发明显。

总结:

在特定场景下,深度神经网络展现了不俗的表现能力,我们希望借助深度学习模型强大的泛化能力,切实解决一些合约代码的安全问题,同时也在不断探索深度学习技术在区块链行业的新应用方向。

(作者:降维安全,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 降维安全 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信