如何评估智能合约审计报告
智能合约审计报告并不是安全保证。了解如何检查审计范围、发现的问题、修复情况和审计方的可信度,以及识别虚假审计的危险信号。
要评估一份智能合约审计报告,你需要确认它是真实的并由审计方发布,检查其范围是否覆盖实际部署的合约,阅读严重和高危问题以及每个问题是否已修复,并记下审计明确未覆盖的内容。审计只是特定代码的一次快照,并不能保证项目安全或诚实。
项目方常常把“已审计”当作信任徽章来宣传。有些审计全面且有意义,有些则范围狭窄、已经过时,甚至是伪造的。只要懂得如何阅读报告,你大约十五分钟就能分辨出差别。
什么是智能合约审计
智能合约审计是一种安全审查:专家阅读项目代码、进行测试,并寻找重入、访问控制错误、数学错误和逻辑缺陷等漏洞。随后他们发布一份报告,列出发现的问题、每个问题的严重程度以及团队的回应。相关阅读:智能合约漏洞攻击。
审计之所以有价值,是因为智能合约一旦部署就很难修改,而且常常存放大量资金。但审计方在有限的时间内工作,只审查交给他们的内容,也可能遗漏细微的问题。许多遭到攻击的协议都曾经过审计。
典型审计报告的组成部分
| 部分 | 需要关注什么 |
|---|---|
| 摘要 | 审计方名称、项目、日期、总体结论 |
| 范围 | 审查的具体文件、合约、提交哈希或已部署地址 |
| 方法 | 人工审查、自动化工具、测试、形式化验证 |
| 发现的问题 | 每个问题的严重程度、描述和建议 |
| 状态 | 每个问题是已修复、已确认还是有争议 |
| 免责声明 | 审查的局限性 |
分步指南:如何评估报告
1. 核实报告的真实性
虚假审计是一种常见的诈骗手法。请自行访问审计方的官网或 GitHub 查找报告。如果审计方从未听说过该项目,或者报告只以 PDF 形式存在于项目网站上,就应将其视为未经核实。我们关于虚假审计的指南列出了常见的伎俩。
2. 将范围与已部署的内容进行核对
报告应注明代码提交或合约地址。请在区块浏览器上检查已部署的合约是否一致。常见的漏洞包括:
- 审计针对的是较早的版本,之后代码发生了变化。
- 只审计了代币合约,而没有审计存放用户资金的质押、金库或跨链桥合约。
- 合约可升级,因此代码以后可能被替换。
3. 先阅读严重问题
直接查看严重和高危问题。对每一个问题都要问:
- 它是否被标记为已解决,审计方是否验证了修复?
- 如果它只是被“确认”而没有修复,团队给出了什么理由?
- 它是否涉及管理员权限,例如增发代币、暂停转账或提取资金的能力?
对投资者来说,被确认的中心化问题往往比代码漏洞更重要。一个可以无限增发代币的所有者,即使代码运行完美,也依然是一种风险。
4. 检查日期
记下审计的执行时间,并与部署日期以及之后的任何升级进行比较。对于频繁升级的协议,一份旧的审计几乎无法说明当前代码的情况。
5. 评估审计方
寻找有公开业绩记录、发布详细报告并具名安全研究人员的审计方。一家每月审计数百个代币的公司出具的、没有细节的一页报告,分量要轻得多。
6. 阅读免责声明和局限性
免责声明通常会说明,审计不涵盖经济设计、链下组件、预言机、前端代码或未来的修改。而现实中的许多损失恰恰发生在这些领域。
理解严重程度等级
大多数审计方使用类似的等级划分,尽管各家公司的定义有所不同:
| 严重程度 | 典型含义 | 你应该有多担心 |
|---|---|---|
| 严重 | 可能直接导致资金损失或被盗 | 必须在上线前修复;未解决就应远离 |
| 高 | 在特定条件下造成重大资金损失或核心功能失效 | 应已修复;检查审计方是否确认 |
| 中 | 特定情况下的问题,或显著的中心化 | 仔细阅读,尤其是有关管理员权限的问题 |
| 低 | 影响有限的小问题 | 如已确认,通常没问题 |
| 信息性 | 代码质量、Gas 效率、最佳实践 | 对用户来说很少值得担心 |
一份发现很多问题的报告未必是坏消息。这可能说明审计方很细致,而团队在上线前修复了问题。关键在于仍未解决的问题有多严重,以及团队如何回应。一个对每个问题都提出异议、或悄悄忽视严重问题的团队,能让你看出它的安全文化如何。
审计报告中的危险信号
- 没有范围细节、提交哈希或合约地址。
- 严重问题被列为“已确认”却没有修复。
- 项目方淡化有关所有者权限的问题。
- 报告仅由项目方托管。
- “100% 安全”或“经审计完全安全”之类的营销说法。
- 审计日期远早于重大代码修改。
审计无法告诉你的事
即使是一份扎实的审计,也无法回答:
- 团队是否真实可信——参见如何核实加密团队是否真实。
- 流动性是否已锁定,还是可以被撤走。
- 代币的供应量和解锁安排是否公平。
- 协议的经济设计在压力下是否会失效。
请将审计与其他检查结合起来,例如公开的漏洞赏金计划、多次独立审计、无事故的生产运行时间以及透明的管理员控制。
总结
只有当审计报告真实、及时,并且覆盖你实际使用的合约时,它才是有用的证据。核实来源,核对范围,阅读严重问题及其解决方式,并留意哪些内容被排除在外。把它作为研究中的一项参考,而绝不要把它当作项目安全的证明。
常见问题
经过审计就意味着加密项目是安全的吗?
不是。审计是特定团队在特定时间对特定代码进行的审查。它可能遗漏漏洞,无法说明团队是否诚实或代币经济学是否合理,也不涵盖审查后修改过的代码。许多遭到攻击的协议都曾经过审计。请把审计当作证据之一,而不是保证。
如何判断审计报告是否真实?
到审计方自己的官网或官方 GitHub 上查找报告,而不是只看项目方网站。核对报告中的合约地址或代码提交是否与实际部署的一致。有些审计方允许你直接验证报告。仅存在于项目方渠道中的 PDF 是不够的。
审计中的严重程度等级是什么意思?
审计方通常将发现的问题分为严重、高、中、低和信息性几个等级。严重和高危问题可能导致资金损失或协议瘫痪。最重要的是这些严重问题是否已修复,以及审计方是否在后续复审中确认了修复。
一次审计就够了吗?
对于持有大量用户资金的大型协议来说,一次审计通常被视为最低要求。多次独立审计、公开的漏洞赏金计划、关键组件的形式化验证,再加上长期无事故的运行记录,合起来提供的证据远比任何单一报告有力。
