面向全场景的Echidna:智能合约模糊测试技术全面升级

本文详细介绍了Echidna智能合约模糊测试工具两年来的重大技术升级,包括多编译框架支持、断言测试、语料库管理、高燃气交易检测等核心功能,以及其在实际审计项目中的成功应用案例。

面向全场景的Echidna:智能合约模糊测试技术全面升级

Gustavo Grieco | 2020年3月30日

TL;DR:自Echidna发布以来,我们为其添加了大量新功能和增强特性——且还有更多功能即将推出。

两年前,我们开源了基于属性的智能合约模糊测试工具Echidna。根据我们的记录,在过去两年的智能合约审计中,Echidna的使用率约为35%,包括MakerDAO、0x和Balancer等知名项目的审计。从首次发布至今,我们持续为Echidna添加新功能并修复错误。

新功能

我们通过一系列令人兴奋的新功能扩展了Echidna的能力,其中最重要的包括:

1. 多编译框架支持

通过crytic-compile集成,Echidna能够直接测试复杂的Truffle项目,甚至支持其他语言(如Vyper)编写的智能合约。该功能对用户完全透明,是去年实现的最重要特性之一。

2. 断言测试

Solidity的assert语句可作为显式Echidna属性的替代方案,特别适用于检查函数内部复杂代码的正确使用。该功能还能检测编译器插入的隐式断言(如数组越界访问)。只需在配置文件中添加checkAsserts: true即可启用。

3. 模糊测试活动中的函数调用限制

通过黑名单/白名单机制限制测试期间调用的函数:

1
2
filterBlacklist: true  # 使用false启用白名单模式
filterFunctions: ["f1", "f2"]

4. 语料库保存与加载

启用覆盖支持后,Echidna能够以JSON格式保存和加载完整的测试语料库。这显著加速CI测试中复杂属性的验证过程。配置方式:

1
2
coverage: true
corpusDir: "corpus"

5. 高燃气消耗交易检测

使用estimateGas: true配置可检测异常合约状态下的高燃气消耗交易,帮助开发者优化燃气效率。

6. 复杂合约扩展测试

  • 通过Etheno使用任意交易初始化测试活动
  • 使用multi-abi: true配置同时测试多个合约,可调用任何测试合约的公共/外部函数

与最新研究保持同步

我们持续跟踪智能合约模糊测试领域的最新研究进展,定期对比开源模糊测试工具,并将有效的新方法集成到Echidna中。我们不仅测试研究论文中的案例以确保工具效率,还通过学术会议讨论新技术,甚至资助改进工具的新研究。

未来规划

我们正在推进的功能管线包括:

  • 增强的覆盖率反馈
  • 数组生成和语料库变异
  • Slither集成
  • 在持续保障平台crytic.io中集成Echidna支持

总结

两年来,Echidna已从实验工具发展为模糊测试智能合约和识别正确性/安全问题的核心资源。我们持续突破智能合约模糊测试的技术边界,保持开源工具的持续更新。

需要Echidna测试智能合约?或需要代码审查/使用培训?Trail of Bits拥有多年智能合约安全评估经验,欢迎联系我们。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计