S-gram: towards semantic-aware security auditing for ethereum smart contracts

S-gram: towards semantic-aware security auditing for ethereum smart contracts

论文题目:(2018-ASE)S-gram: towards semantic-aware security auditing for ethereum smart contracts —— 以太坊智能合约的语义安全审查

论文引用:Liu H, Liu C, Zhao W, et al. S-gram: towards semantic-aware security auditing for ethereum smart contracts[C]//2018 33rd IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 2018: 814-819.

一、主要内容

本文提出了一种新的语义感知安全审计技术(semanticaware security auditing technique),称为以太坊S-gram方案。结合N-gram语言建模(N-gram language modeling)和静态语义标记(lightweight static semantic labeling)的S-gram方案可用于通过识别不规则标记序列并优化现有深度分析器来预测潜在漏洞。

二、设计实现

2.1 总体框架

S-Gram的一般框架,如图所示。S-Gram工作分为两个阶段,即模型构建阶段(model construction phase)和安全审计阶段(security auditing phase)。在模型构建阶段,输入是大量智能合约语料库的集合。给定来自语料库的合约,静态分析器(Static Analyzer)执行轻量级分析以生成语义元数据,例如访问依赖性和事务流敏感性。然后,标记器(Tokenizer)将合约解析为标记了语义元数据的标记序列。接下来,S-Gram使基于n-gram的训练引擎训练S-Gram语言模型。

image-20201219093142035

The general S-gram framework

2.2 语义元数据生成(Semantic Metadata Generation)

给定一个智能合约,S-Gram首先执行一个轻量级的静态分析来生成语义元数据,即作者设置的存储访问依赖性和流敏感度。接下来,我们将在图中描述使用合约生成语义元数据的详细信息

image-20201219093749441

An example Solidity smart contract used for explaining semantic metadata generation

2.3 标记化技术(Tokenization)

生成语义元数据后,S-Gram执行标记化技术过程,将智能合约代码解析为标记序列。特别是,解析是通过以基于类型的方式遍历合约的抽象语法树(AST)来实现的,也就是说,令牌是由特定类型的ast节点生成的。图4显示了图3中reward函数的AST。每个节点都有一个特定的类型,例如callexpr、binaryexpr、id等。每个节点值都是合同的一个lexem,例如msg、address、0等。

image-20201219094017667

The AST of the reward function

3.4 预测 Prediction

S-Gram中的漏洞预测是通过识别合同中的不规则符号序列来实现的,即在S-Gram语言模型中采用低概率W.R.T。给定一个函数f,s-gram将所有可能的符号序列收集到一个sett=t1,t2,····,tm中},并计算每个序列w.r.t.M的概率probm(ti)。基于k的预测大小(考虑的符号序列的最大长度),我们使用预测(t,k,m)来表示t中的k序列,概率最小为m,po十分之一的弱点。在我们的评估中,我们将k作为一个变量,并探讨了k如何影响s-gram的疗效。此外,S-Gram利用几个预先定义的规则来过滤误报。具体地说,对于只包含范围标记的序列t,例如function_begin和function_end,S-Gram直接抛出它。如果t及其子序列t’都被标记为潜在的漏洞,则S-Gram只报告其中一个漏洞。

三、实验评估

Dataset and Setting

将S-Gram实现到一个名为Ether的安全审计工具中。S-Gram语言模型是通过kenlm库进行训练的。从Etherscan存储库中收集了S-Gram语言模型的训练集,其中包括43553个部署的开源合同。测试集包含1500个智能合约。评估数据可在https://github.com/njaliu/sgram-artifact上公开获取。同时选择Oyente来确认漏洞,并使用纯n-gram方法(仅考虑lexems)作为与s-gram的基线比较。

Empirical Results

首先研究了安全审计能力w.r.t.不同的s-gram配置。图5显示了Ether在预测大小k=20时发现的实际漏洞数量。对于不同的S-Gram配置,Ether在20个标记的潜在安全问题中平均找到3.32到6.94个漏洞。也就是说,S-Gram能够在实践中生成一组小而有效的候选漏洞。对于六种不同配置的S-Gram模型,即n=2···7,n=5表现最好,n=2表现最差。这可以解释为:Bigram未能捕获智能合约中的大多数统计规律。因此,作者使用5-gram构建了S-Gram语言模型。

image-20201219094607582

X-axis: value of N. Y-axis: the number of vulnerabilities found by Ether⋆. Prediction size: K = 20.

进一步探讨预测大小k如何与Ether的漏洞检测能力相关,如图b(左栏)所示。随着预测规模的增加,Ether找到了更多的漏洞。然而,从小到大的K值增长速度变慢。此外,还进行了比较实验来比较S-Gram和基线方法,即基于N-Gram的技术。结果下图所示。具体来说,图a显示了两种技术的审计准确性。在不同的预测尺寸下,S-Gram的预测精度从91.2%提高到94.2%,而基线只能上升到85.3%。此外,S-Gram通过发现169.1%以上的问题超过了基线方法。

image-20201219094807771

Comparison between S-gram and Baseline.

Cascading In-depth Analysis 层叠深度分析

在评估中,结合了Ether与Reguard,一种设计用于识别Solidity智能合约中的重入漏洞的模糊器。具体来说,我们使用Ether对函数进行排序,并进一步优化Reguard中的事务序列生成。表2总结了Ether的性能。使用Ether,Reguard在所有情况下审核智能合约时都变得更加高效。这五个合约中选择,Ether节省的时间从31.46%到79.49% w.r.t.。

Performance of cascading analysis with Ether⋆. Time unit: second. Opt: optimization

image-20201219095052080

四、评价总结

1、本文介绍了以太坊智能合约的S-Gram语义安全审计技术。具体来说,S-Gram强调了统计异常很可能表明存在漏洞的观点。

2、S-Gram首先执行静态语义元数据生成和基于类型的标记化技术,以准备标记序列并构建统计语言模型。接下来,S-Gram枚举并对要分析的合约的所有可能的标记序列进行排序,然后可能性最小的是潜在的弱点。