S-Gram:以太坊智能合约的语义安全审查

  • 时间:
  • 浏览:129

  Liu, H, Liu, C, Zhao, W, Jiang, Y, and Sun, J 2018 S-gram: towards semantic-aware security auditing for Ethereum smart contracts. In Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering (ASE 2018), pp. 814-819, DOI:

  https://doi.org/10.1145/3238147.3240728

  智能合约作为以太坊区块链上一种有前途、功能强大的应用,在过去的几年里发展迅速。由于它们极易受到不同形式的攻击,因此它们的安全性成为首要任务。然而,现有的安全审计技术要么在查找漏洞方面受到限制(依赖于预先定义的错误模式),要么非常昂贵(依赖于程序分析),因此不足以用于以太坊。为了减轻这些限制,我们提出了一种新的语义安全审计技术,称为以太坊S-Gram。技术的关键是n-gram语言建模和轻量级静态语义标记的结合,它可以学习契约令牌的统计规律并捕获高级语义(例如事务的流敏感性)。S-Gram可用于通过识别不规则的符号序列和优化现有的深入分析工具(例如,符号执行引擎、引信等)来预测潜在的漏洞。我们已经在以太坊中为Solidity智能合约实施了S-Gram。评估显示了S-Gram在识别可能的安全问题方面的潜力。

  近年来,智能合约(smart bet365 contract)的推出使得应用场景比比特币更加灵活。一般来说,智能合约是响应区块链交易的一种特殊形式的计算机程序。然而它们极易受到各种类型的安全攻击。我们使用图1中的简化场景来解释2016年6月的DAO攻击。具体来说,攻击者识别具有脆弱功能的受害者契约,该功能即即传输(步骤1)。他或她进一步部署了一个利用漏洞的契约,即()回退函数(步骤2)。接下来,攻击者调用transfer。在第2行余额更新之前,在第1行执行转账操作时,转账调用回退函数(步骤3)。fallback函数再次调用transfer以获得更多的钱(步骤4)

  为了解决安全问题,提出了基于规则和基于程序分析的审计解决方案。不幸的是,前者在处理未知模式方面是有限的,后者在实践中可能是昂贵的。本文以以太坊区块链为研究对象,重点介绍了智能合约的高效语义建模任务。但是,由于精确性和可扩展性之间的平衡关系,要完成这项任务具有挑战性。我们概述了以下主要挑战。

  挑战1:建立以太坊机制模型。

  以太坊已经定义了一套必须考虑的特殊机制,例如气体系统、数据存储等。

  挑战2:编码存储访问。

  以太坊中的智bet365官方能合约是有状态的,存储中保存着状态数据。查找安全问题通常需要对存储数据的访问进行推理。有效地对访问进行编码而不丢失太多的准确性成为一个重要问题。

  挑战3:确定流量敏感性。

  事务是流敏感的,即,在特定的控制流条件下,安全关键操作是脆弱的。然而,流量敏感度分析几乎不能按比例进行。

  语义感知安全审计 (Semantic-Aware Security Auditing)

  在本文中,我们提出了S-Gram,一种针对以太坊中的Solidity智能合约的语义安全审计技术,以解决上述挑战。S-Gram背后的关键是基于N-Gram的语言建模和轻量级静态契约分析的结合。利用S-Gram识别安全问题可以实现快速和可扩展的审计,因为语言模型只经过一次培训,并且审计减少到计算概率。在模型训练过程中,S-Gram使用轻量级静态分析生成语义元数据(如访问依赖性、流敏感度等),进一步帮助模型学习更多的语义规则,例如,货币转移总是由与msg.sender关联的谓词包装。然后,基于S-Gram语言模型,我们可以通过识别不规则的契约令牌序列来预测潜在的漏洞。此外,S-Gram还可以作为一个优化过程与现有的深度分析仪连接。我们已经实施了S-Gram并在以太坊合同中对其进行了评估。结果表明,S-Gram在准确识别安全问题方面具有潜力。

  3.1 总体框架

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

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

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

  3.3标记化技术(Tokenization)

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

  3.4预测

  S-Gram中的漏洞预测是通过识别合同中的不规则符号序列来实现的,即在S-Gram语言模型中采用低概率W.R.T。给定一个函数f,s-gram将所有可能的符号序列收集到一个sett=t1,t2,····,t m中,并计算每个序列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只报告其中一个漏洞。

  4.1数据集和设置

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

  4.2经验结果

  我们首先研究了安全审计能力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语言模型。

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

  4.3层叠深度分析(Cascading In-depth Analysis)

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

  本文介绍了以太坊智能合约的S-Gram语义安全审计技术。具体来说,S-Gram强调了统计异常很可能表明存在漏洞的观点。S-Gram首先执行静态语义元数据生成和基于类型的标记化技术,以准备标记序列并构建统计语言模型。接下来,S-Gram枚举并对要分析的合约的所有可能的标记序列进行排序,然后可能性最小的是潜在的弱点。我们已经将S-Gram原型化,并在以太坊合约中对其进行了评估。Ether在识别不同类型的潜在漏洞方面达到了90%以上的准确度。此外,Ether还发现了一些以前未知的安全问题,并提高了Solidity fuzzer的效率。未来,我们计划将S-Gram扩展到其他具有不同统计语言模型的区块链生态系统。

  本文由南京大学软件学院2016级本科生高毓彬翻译转述


bet365官方 bet365 bet365官方