[论文解读] Running on Fumes--Preventing Out-of-Gas Vulnerabilities in Ethereum Smart Contracts using Static Resource Analysis
该论文提出Gastap,一个静态分析平台,通过分析Solidity或EVM字节码,自动推断以太坊智能合约函数的精确气体消耗上限。Gastap利用控制流分析、反编译、大小关系推断和方程求解,提供精确、可扩展且准确的气体上限,防止出现气体不足漏洞,其中68.36%的分析时间用于求解气体方程,且在343小时内完成对29,061个合约的全部分析。
Gas is a measurement unit of the computational effort that it will take to execute every single operation that takes part in the Ethereum blockchain platform. Each instruction executed by the Ethereum Virtual Machine (EVM) has an associated gas consumption specified by Ethereum. If a transaction exceeds the amount of gas allotted by the user (known as gas limit), an out-of-gas exception is raised. There is a wide family of contract vulnerabilities due to out-of-gas behaviours. We report on the design and implementation of GASTAP, a Gas-Aware Smart contracT Analysis Platform, which takes as input a smart contract (either in EVM, disassembled EVM, or in Solidity source code) and automatically infers sound gas upper bounds for all its public functions. Our bounds ensure that if the gas limit paid by the user is higher than our inferred gas bounds, the contract is free of out-of-gas vulnerabilities.
研究动机与目标
- 为解决以太坊智能合约气体消耗分析中缺乏精确、自动化的工具,特别是针对输入大小和状态的复杂依赖关系。
- 实现对最坏情况气体使用量的精确静态估计,确保当气体限制超过推断的上限时,合约不会因气体不足而抛出异常。
- 克服现有工具仅提供常数上限或返回∞的局限,通过建模输入参数、合约状态和区块链数据对动态气体依赖关系。
- 构建一个可扩展的端到端系统,支持高级Solidity和低级EVM字节码输入,并具备形式化的正确性保证。
- 通过真实世界合约的实证分析,证明在大规模场景下对以太坊智能合约进行静态资源分析的可行性和有效性。
提出的方法
- 使用Oyente的扩展版本,从EVM或Solidity代码构建控制流图(CFGs)。
- 通过反编译生成更高层次的中间表示(EthIR),以提高分析精度。
- 利用Saco中适配的大小分析器,推断输入参数、合约状态与区块链数据之间的大小关系。
- 生成符号气体方程,以建模气体消耗对输入大小和状态变量的依赖关系。
- 使用Pubs求解器求解所得方程组,推导出气体使用量的闭式上限。
- 应用优化技术,如循环提取,并通过覆盖点错误检测处理互递归,尽管这仍是当前的局限。
实验结果
研究问题
- RQ1静态分析工具能否准确推断依赖于输入大小、状态大小和区块链数据的以太坊智能合约函数的最坏情况气体上限?
- RQ2与基于模式匹配或符号执行的方法相比,静态资源分析方法在检测气体不足漏洞方面的有效性如何?
- RQ3使用静态气体分析对大规模真实世界智能合约进行分析时,其可扩展性和性能开销如何?
- RQ4现有编译器和工具在多大程度上因采用非正式的编译策略而无法提供精确的气体上限?
- RQ5能否构建一个形式化、正确且完备的静态分析系统,用于EVM气体消耗分析,同时支持EVM字节码和高级Solidity代码?
主要发现
- Gastap成功分析了29,061个真实世界的以太坊智能合约,总分析时间为1,233,155.92秒(约342.54小时)。
- 耗时最长的阶段是求解气体方程(占总时间的68.36%),表明方程求解是性能瓶颈。
- 方程生成占总时间的21.68%,其中操作码和内存气体上限被分别生成。
- 该工具识别出近10%的分析函数其气体消耗依赖于输入大小或合约状态,凸显了广泛但尚未充分解决的漏洞面。
- 该系统具有正确性保证:若用户提供的气体限制高于Gastap推断的上限,则合约保证不会抛出气体不足异常。
- 该工具的实现利用并扩展了现有开源工具(Oyente、EthIR、Saco、Pubs),证明了将模块化组件集成用于复杂静态分析的可行性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。