1. 首页
  2. 术语表
  3. 智能合约审计

智能合约审计

又称 安全审计 · DeFi 审计

定义

智能合约审计是对协议代码进行的独立安全审查,在代码上线之前或上线后不久查找漏洞。它能在其声明的范围和时间内降低风险,但并不代表代码没有任何缺陷。

智能合约是一种特殊的软件。它们直接持有资金,在公开环境中运行,任何人都可以研究,而且一旦部署就很难甚至无法修改。一行被忽视的代码,就可能让攻击者在单笔交易中掏空整个协议。审计是上线前的主要防线:让专家抢在攻击者之前读懂代码。

审计人员关注什么

  • 逻辑错误:代码按字面执行,却没有实现原本的意图,例如奖励公式重复支付。
  • 访问控制:本应仅限管理员调用的函数,任何人都能调用。
  • 重入:外部调用让攻击者在首次调用完成之前重新进入函数,2016 年 The DAO 遭受攻击正是因为这个漏洞。
  • 价格操纵:逻辑信任一个可以在单笔交易内被推动的价格,通常源于薄弱的预言机。
  • 经济设计:即使每一行代码都按写法运行,资金雄厚的参与者仍可能钻空子的激励机制。

审计人员会结合人工审查与自动化工具,越来越多地还会使用形式化验证,即用数学方法证明代码符合书面规范。

两种审计模式

在传统的审计公司模式中,一个小型安全工程师团队在固定期限内研究代码库,并交付报告。在竞赛式审计中,许多独立研究人员同时审查同一份代码,并按发现的问题获得报酬。两种模式往往能发现不同类型的问题,所以协议通常两者并用。

如何解读审计报告

先看范围:哪些合约、哪个版本的代码、哪些日期。对初版的审计,几乎说明不了下一版的情况。然后按严重程度阅读发现的问题。严重和高危问题可能导致资金损失;中危问题通常需要特定条件才会触发;低危和信息类问题关乎代码规范。对每个问题,查看它被标记为已修复、已知悉还是有争议,以及修复是否经过复审。

一个简单示例

一份报告列出一个高危问题:取整错误让用户可以取出略多于存入的金额,如果在成千上万笔交易中重复,就可能掏空一个金库。团队在上线前修复了它,审计人员确认了修复。外界从未听说过这个漏洞。这就是审计在发挥作用,也是为什么发现问题的部分比封面上的标志更重要。

风险与局限

审计是一张快照。审查之后代码会变化,新的合约会与之交互,攻击手段也会进步。一些损失惨重的 DeFi 攻击就发生在经过审计的协议上,往往是通过审计范围之外的代码,或多个协议之间的交互方式。审计也无法评判系统的链下部分,例如密钥如何管理、储备由什么构成。因此,审计作为多层防护中的一层时才最有价值:上线后持续奖励研究人员的漏洞赏金、监视实时交易的运行时监控,以及针对资产本身的储备金证明。

Tori Finance 如何运用这一概念

Tori Finance 的智能合约已由 Sherlock 和 Nethermind 审计。审计是其安全体系中的一层,此外还有 Hypernative 的运行时监控和 Accountable 的储备金证明。

常见问题

经过审计的协议还会被攻击吗?

会。审计覆盖的是特定时间点的特定代码。后续修改、审计范围之外的代码、与其他协议的交互以及新的攻击手段,都可能导致损失。

审计中的严重、高危、中危和低危分别是什么意思?

它们按影响和发生可能性对发现的问题分级。严重和高危问题可能导致资金损失或协议失灵,中危问题需要特定条件才会触发,低危和信息类问题影响较小,或涉及代码质量。

智能合约审计需要多长时间?

取决于代码的规模和复杂度。小型合约可能只需几天;大型协议可能需要数周,之后通常还有一轮较短的修复复审。

参考来源

由 Tori Finance 团队撰写。不构成投资建议。收益会有波动,资金存在风险。