Skip to main content
QUICK REVIEW

[论文解读] sGUARD: Towards Fixing Vulnerable Smart Contracts Automatically

Tai D. Nguyen, Long Hoang Pham|arXiv (Cornell University)|Jan 6, 2021
Security and Verification in Computing参考文献 22被引用 7
一句话总结

该论文提出 sGuard,一种通过可证明正确的运行时验证自动修复智能合约中四种常见漏洞的工具。通过分析符号执行轨迹并应用固定且安全的转换模式,sGuard 确保了正确性,同时仅引入了微小的性能开销——在 5,000 个合约上平均执行时间增加 14.79%,气体消耗增加 0.79%。

ABSTRACT

Smart contracts are distributed, self-enforcing programs executing on top of blockchain networks. They have the potential to revolutionize many industries such as financial institutes and supply chains. However, smart contracts are subject to code-based vulnerabilities, which casts a shadow on its applications. As smart contracts are unpatchable (due to the immutability of blockchain), it is essential that smart contracts are guaranteed to be free of vulnerabilities. Unfortunately, smart contract languages such as Solidity are Turing-complete, which implies that verifying them statically is infeasible. Thus, alternative approaches must be developed to provide the guarantee. In this work, we develop an approach which automatically transforms smart contracts so that they are provably free of 4 common kinds of vulnerabilities. The key idea is to apply runtime verification in an efficient and provably correct manner. Experiment results with 5000 smart contracts show that our approach incurs minor run-time overhead in terms of time (i.e., 14.79%) and gas (i.e., 0.79%).

研究动机与目标

  • 解决智能合约在部署后无法修补且可能含有可利用漏洞这一关键问题。
  • 克服现有验证与测试方法的局限性,这些方法由于不可判定性与误报问题,无法保证漏洞的绝对不存在。
  • 设计一种修复自动化方法,通过形式化正确性与完备性保证确保修复的正确性,而非仅依赖测试用例覆盖率。
  • 最小化执行时间与气体消耗方面的性能开销,这在区块链环境中至关重要。
  • 提供一个自包含、可证明正确的修复工具,专门针对图灵完备语言(如 Solidity)编写的智能合约而设计。

提出的方法

  • 从智能合约中收集符号执行轨迹,以探索所有可行的程序路径,而无需进行完整的符号探索。
  • 对收集到的轨迹进行定制化静态分析,以检测四种特定类型的漏洞:重入攻击、整数溢出/下溢、时间戳依赖与 delegatecall 误用。
  • 为每类漏洞设计并应用领域特定的、可证明正确的修复模式,确保修复后的语义正确性。
  • 使用从零开始构建的上下文敏感、基于轨迹的分析引擎,以避免现有工具(如 Securify 和 Ethainter)常见的误报问题。
  • 通过代码插桩实现运行时检查,这些检查经过形式化证明可防止已识别的漏洞,且不改变程序的原有行为。
  • 通过形式化正确性与完备性证明验证修复结果,确保无漏报或对测试用例的过度拟合。

实验结果

研究问题

  • RQ1能否为本质上在部署后无法修补的智能合约设计一种完全自动化、可证明正确的修复技术?
  • RQ2如何高效且可靠地应用运行时验证来修复常见智能合约漏洞,同时避免引入显著的性能开销?
  • RQ3符号执行轨迹在多大程度上可用于实现精确、可扩展的智能合约漏洞检测与修复?
  • RQ4修复方法能否通过依赖形式化正确性保证而非测试覆盖率,避免对测试套件的过度拟合?
  • RQ5在真实世界智能合约中自动注入安全运行时检查的实际性能影响(时间与气体)是多少?

主要发现

  • sGuard 在分析的 5,000 个智能合约中成功识别并修复了 1,605 个,展现出强大的实际适用性。
  • 修复引入的平均运行时开销为执行时间增加 14.79%,气体消耗增加 0.79%,表明性能影响极小。
  • 在高影响力合约中,sGuard 检测到并修复了 BAT 代币合约中的一个算术漏洞,但进一步分析表明该漏洞因已有检查而无法被利用。
  • 对于 BAT 合约,执行 10 笔真实交易时测得的气体开销为 18%,证实了该工具在真实场景中的高效性。
  • 工具正确识别出 10 个高影响力代币(如 LINK、BNB、CRO)中的 7 个为安全,无需任何修改,验证了其精度。
  • sGuard 的定制化静态分析引擎相比 Securify 和 Ethainter 等现有工具显著减少了误报,后者因语义规则不完整或冲突而存在问题。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。