
2.1 引用
Wang, Haijun, et al. "Vultron: catching vulnerable smart contracts once and for all." Proceedings of the 41st International Conference on Software Engineering: New Ideas and Emerging Results. IEEE Press, 2019.
2.2 摘要
尽管涉及高风险,但智能合约往往以无纪律的方式发展。漏洞的存在损害了智能合约的安全性和可靠性,并危及参与者对其正在进行的业务的信任。现有的漏洞检测技术通常是逐个设计的,因此难以概括。在本文中,我们设计了检测易受攻击的智能合约的一般原则。我们的主要观点是,几乎所有与交易相关的漏洞都是由于实际转移金额与合同内部簿记所反映的金额不匹配所致。基于此,我们提出了一种精确且普遍适用的技术 VULTRON,它可以检测由于各种类型的对抗攻击而导致的不规范交易。我们还报告了将我们的技术应用于实际案例研究的初步结果。
2.3 技术介绍
由于许多智能合约以无规律的方式开发, 导致攻击者容易利用漏洞,因此这种攻击成为可能。一个臭名昭着的例子是“DAO”攻击,即攻击者从“DAO”合同中偷走了超过 350 万以太币(当时相当于约 4,500 万美元)。 从那以后,人们进行了大量尝试来检测智能合约中的漏洞。然而,这些技术都遵循逐案的方式: 合同计划被分析并与之前观察到的攻击模式相匹配。因此, 这些技术的精确度和召回率在很大程度上取决于模式的指定程度以及模式集合的综合程度。ContractFuzzer 提出了在合同计划中观察到的七种特定模式,以检测七种漏洞。由于收集的模式是有限的并且它们在句法层面建模, 因此分析既有假阴性也有误报。
为了克服这些问题,我们的主要观点是,几乎所有现有的漏洞模式(在语法层面定义)都可以追溯(语义上)到交易中实际转移金额与合同内部反映的金额之间的不匹配。基于此,我们提出了一种精确且通用的智能合约漏洞检测技术 VULTRON,它可以深入研究问题的根源。VULTRON 的本质是构建一个能够有效区分不规则事务(通常是恶意攻击的结果) 与正常事务的 oracle。我们的 oracle 足以覆盖之前报告的漏洞,而不受任何特定智能合约编程语言或区块链技术的限制。 我们在以太坊平台上展示了我们的方法,而且,我们的方 法背后的原理可以很容易地在其他平台上进行调整和实现。 拟议的 oracle 改进并实现了广泛的下游分析技术,包括静态分析,如符号执行,程序验证和动态技术(如测试和模糊测试)。
2.3.1漏洞检测的oracle方法
智能合约中的漏洞通常是由实现与预期语义之间的不一致引起的。与交易相关的漏洞可能(其中大部分已经被利用)进行攻击,例如从易受攻击的合同中窃取资金。本文我们将讨论检测智能合约中与交易相关的漏洞的基本原则和具体挑战。
现在我们讨论将提议的不变量实现为 oracle 的自身工具所涉及的挑战以及用于检测由于漏洞导致的不规则事务的自动化工具。两个不变量的关键因素是几乎所有在多方之间执行有意义交易的合约都包含这样一个变量,通常带有名称余额或 balanceOf。有些合同没有簿 记变量,例如King of the Ether。在这些情况下,我们的分析可以插入 ghost 变量及其相应的更新。簿记变量既可以由用户给出,也可以作为我们方法的输入,或者使用污点分析自动识别。我们的想法是首先执行几个正常的务并观察合同程序中的所有全局变量如何变化,以找到一 个总是与执行的事务匹配的变量。 处理非货币资产。某些合同的簿记余额可能不直接指向加密货币。在符合 ERC20 的合同中通常就是这种情况。在这些合同中,参与者的数字资产反映在可用令牌而非以太币的 数量上。这些非货币资产可以通过乘以其价格转换为以太币。所述资产的当前价格存储在某个位置(例如,可变价格),其可以用用于定位簿记变量的类似技术来识别。 验证不变量。然后将不变量转换为程序断言,然后静态动态验证。在翻译中也应考虑交易的燃气消耗,这不包括 在我们的合同模型和不变量中。断言可以插入到编译的以太坊虚拟机(EVM)字节码中,在每个函数的末尾,然后可以通过现有的验证工具进行检查。或者,我们可以检测 EVM 本身以在运行时强制执行不变量。即使部署的 合同计划容易受到攻击,这也可以防止不正常的交易发生。
我们已经为我们的方法实现了原型,并在 Truffle Suite 上进行了测试。然后,我们回顾以前报告的以太坊智能合约的漏洞,并展示我们的方法如何帮助检测并重入这些漏洞。事务的原子性和顺序性可能让程序员相信,当调用非递归函数时,它不能在终止之前重新进入。
2.3.2潜在的应用
在智能合约上应用传统安全分析技术(例如,测试,验证,监控和自动修复)时的根本困难是缺乏通用测试指导。 这再次归因于智能合约运作的特殊方式,它们不会崩溃,并且在违规情况下可以默默地恢复执行。我们将描述 VULTRON 在应用于智能合约时如何启用和改进这些技术。
测试和验证。
测试和模糊测试是用于检测安全漏洞的重要动态技术,这两种技术都需要测试 oracle 来确定程序是 根据预期行为执行。类似地,程序验证依赖于一组给定的属性来检查程序是否与属性对齐。为通用计算机程序提供这样的指导和属性可能很麻烦并且需要大量的专业知识。 对于智能合约,我们提出的不变量可以很容易地转换为 oracles 和断言,这使得下游分析无需额外的努力。我们还设想,当配备 VULTRON 时,模糊测试可能会发现新类型的 攻击,因为我们的测试指导是通用的,并深入到与事务相关的漏洞的根源。
监控和维护。
我们可以通过适当检查来检测 EVM,以便对合同执行进行运行时监控。在执 行期间检测到故障时,我们可能会阻止正在进行的交易, 甚至可以对易受攻击的合同进行修复。VULTRON 产生的信息可用于指导自动程序修复技术为检测到的漏洞构建补丁。
超越漏洞。
VULTRON 的未来不仅仅是检测弱势合同。有另一种类型的合同是故意设计的,以利用参与者。我们将它们归类为恶意合同(有时在文献中称为不公平合同)。 尽管此类合同是公开的,但大多数参与者无法仔细检查和分析合同代码,以便提前发现所有恶意行为。这种合同的共同之处在于,某些参与者(通常是合同所有者)比其他参与者具有显着的优势,而这背后隐藏着晦涩的语言语法和合同逻辑。VULTRON 可以扩展到考虑公平性方面,这将智能合约的分析带入一个全新的层面。
2.4 本文主要贡献
我们提出了 VULTRON,一种用于智能合约的通用漏洞检测 oracle。与以前的工作不同,提议的不变量捕获了与事务相关的漏洞的根源,因此它们并不特定于任何特定的攻击模式。 我们已经证明这些不变量能够覆盖先前报告的漏洞。我们还相信,我们的方法可以很容易地推广,并作为各种下游分析技术的驱动。
添加新手交流群:币种分析、每日早晚盘分析
添加助理微信,一对一亲自指导:YoYo8abc