本文介绍了进行智能合约审计的十个关键步骤,强调了系统性的方法和逐步处理复杂任务的重要性。通过获取文档背景、测试协议、分析测试套件及使用静态分析工具等步骤,可以有效识别和缓解潜在的安全风险,为审计师提供了清晰的工作框架。
探讨作为安全研究者,在进行智能合约审计时,无论代码大小或复杂性,系统化处理的10个关键步骤。
你已投入时间,熟悉了常见的攻击向量,并参与了CodeHawks First Flights。现在,你准备首次进行真实的审计。
你坐下来,并克隆比赛仓库。接下来,你发现自己盯着10,000行让人困惑的代码工作,垃圾桶里的求职申请又显得诱人起来。
系统化地处理大型或令人生畏的任务至关重要。将流程拆分为独立的部分,将使其更 易于接近,让你在进行过程中可以认识到进展。
在这里,我们将概述安全研究者可以采取的10个步骤,以减轻“我该从哪里开始?”这一问题的困扰。
你第一步几乎总是应该检查文档。理解审计的范围,并掌握支撑协议的商业逻辑。
这一基础步骤至关重要。跳过它就像在没有地图的情况下穿越迷宫。文档就是你的地图,提供关于协议预期功能和目标的见解。
如果可以,向开发团队提问,并与他们讨论他们的架构决策。你对协议应该做什么获得的洞察越多,越容易发现它何时在做其他事情。
掌握了这些理解,是时候……
你接下来的行动应该是试用该协议并在本地克隆审计仓库。大多数被审计的协议将提供在本地测试环境中构建所需的步骤。
尝试协议的主要功能,并在理想条件下熟悉其流程。接下来,编译合约并使用 README 中分享的命令进行操作。
你对正常工作方式的熟悉程度越高,越容易找到漏洞。
通过这种熟悉度,将注意力转向协议的测试套件。
测试是协议的“心跳”,揭示了开发者重视和认为关键的内容。
检查测试覆盖率可以识别协议中更易受攻击的部分。这一步高亮显示了开发人员光顾的领域,并通过识别遗漏的测试来照亮代码库中被忽视的黑暗角落。
仔细观察现有测试,并准备编写更多以覆盖任何被忽视的盲点。
注意: 每个框架都不同,但 Foundry 命令 forge coverage 将为你提供测试撰写情况的概览。将此作为 指导,判断一个协议在测试其代码库上投入了多少时间和精力!
接下来,获得协议组件相互作用的可视化视角。
“看似不相关”的协议各部分如何相互作用的可视化表示通常是有帮助的。
创建(或利用工具创建)协议图是理解协议的一个部分如何影响另一个部分的好方法。 Excalidraw是一个很棒的(而且免费的)在线工具,用于创建你自己的简单图表。
像Solidity Metrics这样的工具,通过生成突出协议哪些区域是外部或涉及状态变化的图表,提供有价值的见解。作为安全研究者,这可以帮助你集中注意力在最脆弱的部分。
在清楚理解结构后,接下来是……
评估协议的稳定性——从字面上说。
检查正在使用的 Solidity 的哪个版本,因为每个版本都带有其特有的一组已知漏洞和特性。确定协议是否使用最新版本的 Solidity,如果没有,深入了解原因。
根据协议的范围,旧版本可能是合适的。但理解这些版本的使用以及版本选择对代码的潜在影响,对识别可能的漏洞至关重要。
因此,最好保持对Solidity 版本变更的最新了解。
然后,是时候利用行业见解来深化你的分析。
Solodit是用于智能合约(smart contracts)的过去漏洞和安全缺陷的综合数据库。因此,建议访问 Solodit 并熟悉类似协议中发现的漏洞。
Solodit将超过15,500个经过验证的安全审计结果汇总到一个方便的位置。它提供了对 web3 代码薄弱环节的无与伦比的知识,是任何认真对待自己工作的审计者的宝贵工具。
此外,利用 Solodit 的审计检查表、提供了常见攻击的全面列表、提问的方式和研究的示例。
接下来,聚焦于协议的关键组件以揭示其最薄弱的环节。
开始评估代码库的好地方是其最脆弱的点——最弱的环节。
这些包括:
这些都是潜在的恶意攻击向量。理解这些元素对识别安全风险至关重要。
通过利用像Solidity Metrics(在第4点提到的工具),你可以可视化这些关注区位于协议中的何处。
不过,记得使用自动化工具来补充你的手动审核。
虽然使用Aderyn或Slither等审计工具可能不会揭示独特或关键的发现,但它们在识别代码库中的弱点时是无价的。静态分析 工具提供了可能存在漏洞的初步位置,指引进一步的手动检查。
随着这些工具在检测漏洞的能力上提升,安全研究者可以将更多时间集中于更严重的发现。
在邀请私人或公共审计之前,协议应默认将静态分析整合到安全工作流程中!
掌握这些基础后,是时候深入代码进行逐行审查。
这是“深入实践”这一部分!应用你对协议的理解,评估每个函数对该目标的贡献。
比较代码片段的预期功能和实际功能。 通常,漏洞并不隐藏在复杂代码中,而是在预期商业逻辑与代码执行之间的差异中。这种分析可以揭示那些可能有深远影响的微妙错误。
利用审计方法,如"The Tincho"或审计检查表(分别由 Tincho Abbate 和 Hans Freise 提供),以确保全面、系统地评估代码库。
最后,清晰而准确地呈现你的发现。
你的审计报告是你的代表作。识别缺陷并不足够。 你必须有说服力地展示它们的存在及潜在影响。
使用代码证明(PoC)、清晰的标题和详尽的文档,让你的发现无法被忽视。
使用报告格式,如这个基本模板用于竞赛场景,或这个更详细版本用于私人审计的模板。
这十个步骤为应对任何新的审计提供了明确的起点。大型代码库可能让人感到不知所措,但采用系统化和结构化的方法使安全研究者能够高效工作,并在关注细节的同时不失去对整体的把握。
记住:
问。 你怎么吃掉一头大象?
答。 一口一口地吃。
如果你想深入了解智能合约安全和审计,请查看 Cyfrin Updraft - 这是智能合约开发和审计的终极学习平台。
- 原文链接: cyfrin.io/blog/10-steps-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!