面向全场景的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. 模糊测试活动中的函数调用限制
通过黑名单/白名单机制限制测试期间调用的函数:
|
|
4. 语料库保存与加载
启用覆盖支持后,Echidna能够以JSON格式保存和加载完整的测试语料库。这显著加速CI测试中复杂属性的验证过程。配置方式:
|
|
5. 高燃气消耗交易检测
使用estimateGas: true
配置可检测异常合约状态下的高燃气消耗交易,帮助开发者优化燃气效率。
6. 复杂合约扩展测试
- 通过Etheno使用任意交易初始化测试活动
- 使用
multi-abi: true
配置同时测试多个合约,可调用任何测试合约的公共/外部函数
与最新研究保持同步
我们持续跟踪智能合约模糊测试领域的最新研究进展,定期对比开源模糊测试工具,并将有效的新方法集成到Echidna中。我们不仅测试研究论文中的案例以确保工具效率,还通过学术会议讨论新技术,甚至资助改进工具的新研究。
未来规划
我们正在推进的功能管线包括:
- 增强的覆盖率反馈
- 数组生成和语料库变异
- Slither集成
- 在持续保障平台crytic.io中集成Echidna支持
总结
两年来,Echidna已从实验工具发展为模糊测试智能合约和识别正确性/安全问题的核心资源。我们持续突破智能合约模糊测试的技术边界,保持开源工具的持续更新。
需要Echidna测试智能合约?或需要代码审查/使用培训?Trail of Bits拥有多年智能合约安全评估经验,欢迎联系我们。