{"content":{"title":"进行智能合约审计：你需要了解的内容","body":"智能合约审计是区块链安全专家的审查，确保用户不会因为故障或安全漏洞而失去资金。此外，审计还试图在合约部署之前预测意外和不良的智能合约行为。\r\n\r\n在这一领域导航是棘手的。有数十家审计公司，从其中多家公司获取报价需要时间，而且很难知道你是否拿到了公平的价格。\r\n\r\n本文将帮助作为导航获取智能合约审计的起点。\r\n\r\n本文提及的审计公司不应被视为认可。\r\n\r\n## 智能合约审计没有官方标准\r\n\r\n**而且在可预见的未来，随着行业发展的迅速，可能也不会有官方标准。**\r\n\r\n“智能合约审计”这个术语是行业术语的演变，它没有严格的定义，而且对不同的人而言可能意味着不同的事情。\r\n\r\n对于来自[ISO标准](https://www.iso.org/standards.html)为规范的行业的人来说，智能合约审计会显得像西部荒野（坦率地说，这是一个准确的评估）。\r\n\r\n虽然一些[智能合约漏洞](https://learnblockchain.cn/article/5853)是广为人知的，但其他漏洞是复杂系统的涌现属性， систематически 检测这些漏洞通常很困难。\r\n\r\n标准是成熟市场的特征，而整体而言，[web3](https://learnblockchain.cn/openspace/1) 并不是一个成熟的市场。\r\n\r\n称智能合约审计为“审计”有点混淆。在会计领域，“审计”有非常严格的定义；但在区块链工程中并非如此。区块链中的“审计”是由专家团队进行的安全审查。\r\n\r\n使这变得更加混淆的是，没有正式的定义或认证说明什么算得上智能合约审计员或安全专家。是的，有公司出售认证，但这些认证在行业内并没什么分量。\r\n\r\n可以预见，存在一些有眼光的个人利用混淆来出售他们并不具备的专业知识—因为没有公认的衡量专业知识的方法。\r\n\r\n买家需自慎。\r\n\r\n尽管如此，业界普遍一致认为，“此智能合约已经过审计”的说法意味着“一组安全专家被支付以审查此代码库并找出问题。”由于没有关于专业知识的正式定义，行业声誉通常被用作代理。\r\n\r\n## 三种主要类型的审计员\r\n\r\n### 智能合约审计公司\r\n\r\n这些公司专注于安全研究。有些只审计智能合约，而另一些则同时审计智能合约和传统计算机应用程序。可以将其视为由安全研究人员组成的机构。直到最近，这还是获取智能合约审计的标准方式。如果你在谷歌上搜索智能合约审计公司，通常会得到这样的结果。\r\n\r\n### 独立安全研究员\r\n\r\n有些安全研究员选择自己工作，而不是加入公司。他们比较难以找到，因为与机构相比，他们的营销预算小得多，但由于他们的开销较少，他们通常能提供更具竞争力的价格。\r\n\r\n一个缺点是，机构能够让几位审计员审查你的代码，而独立审计员只有一位审阅者。但是，对于小型或不太复杂的代码库，这可能是更具成本效益的选择。\r\n\r\n### 竞争审计\r\n\r\n最近，几个平台（[Code4rena](https://code4rena.com/), [Sherlock DeFi](https://www.sherlock.xyz/)）出现了，公司请求审计在平台上发布其源代码，并提供奖金池，然后独立参赛者尝试找到漏洞和缺陷。\r\n\r\n参赛者发现的漏洞越多，他们获得的收入就越高，但如果其他参赛者发现相同的漏洞，那么奖金会在两者之间分散。对于已知漏洞，奖金可能会分散得很厉害。\r\n\r\n在这种情况下，审计员的收入相对较低。尽管投入了相当大的努力，参赛者通常很难期待在每场比赛中获得超过1000美元的收入。参与者的主要动机是证明他们的能力，以便获得传统审计公司的工作或吸引客户作为独立审计员（独立研究员）。参赛者的质量没有保证，因为任何人都可以参加。\r\n\r\n然而，这些平台对新审计员来说可能非常有教育意义。由于这一形式鼓励对发现漏洞的强烈关注，并提供关于被遗漏漏洞的反馈，参与者可以获得相对紧密的反馈循环，从而加速学习。事实上，我们指导我们的[solidity bootcamp](https://learnblockchain.cn/openspace/1)参与这些比赛用于教育目的。\r\n\r\n顶级审计员不会在比赛中花费大量时间，因为他们为自己或公司工作能赚得更多钱。因此请记住，在审计比赛中表现良好的某个人很可能只是意味着他们在参与的比赛中没有遇到强劲的竞争。此外，一个独特的比赛结果可能占据了审计员公共收入的一大部分。不过，这种形式使更多的人关注代码，也让审计比赛发现了其他审计员遗漏的漏洞。它们还为公司向开发者和审计员社区悄悄推销他们的协议提供了一个渠道，因此它们对生态系统作出了宝贵的贡献。\r\n\r\n### 奖金：非正式代码审查\r\n\r\n一些开发者Discord小组会免费审查你的代码（出于乐于助人的愿望，所以请不要滥用他人的慷慨）。如果你的代码库小而简单，有时让几个专家自愿捐出时间可能是最具成本效益的途径。将这样的审查称为“审计”是极为不诚实的，但如果这是唯一可用的选项，它肯定比没有审查要好。\r\n\r\n## 智能合约审计中的注意事项\r\n\r\n### 查看该公司的过去审计\r\n\r\n有些审计员会使用严格的核对表来列出智能合约漏洞，并检查问题是否存在。这是初步检查的好方法，但许多漏洞是特定于应用的（正如我们在那篇文章中所提到的）。你需要确保审计员会考虑到应用的细微差别和业务需求。通过查看他们过去的审计，你可以发现他们是机械地对照清单还是深入关注你的应用的具体细节。审计员未能提供过往审计报告通常是一个红旗。\r\n\r\n### 审计员专业化\r\n\r\n如果你的项目使用异国情调的[DeFi](https://www.rareskills.io/defi-bootcamp)经济模型或[零知识证明](https://www.rareskills.io/zk-bootcamp)，你要确保所选择的审计员具有此方面的经验。同样，如果你在像[Solana](https://www.rareskills.io/solana-tutorial)这样不兼容EVM的链上构建dapp，你需要选择具有该区块链经验的审计员。\r\n\r\n### 最低费用\r\n\r\n某些审计公司不会审计像ERC20代币或基本NFT这样的较小代码库，因为他们赚的钱不足以支付销售电话和客户管理的费用。\r\n\r\n### 橡皮图章审计员\r\n\r\n由于没有正式的或被接受的审计定义，一些公司出现了，提供讽刺性地称之为“橡皮图章审计”。这些公司仅仅因为买方需要审计，以便对客户说“看，我们已经过审计了！”而提供审计报告。\r\n\r\n并不是每个协议故意获得橡皮图章审计；他们可能只是在不知道自己选择的审计员是橡皮图章审计员的情况下选择了他们。\r\n\r\n### 智能合约审计有多可靠？\r\n\r\n即使智能合约经过审计，后面仍然可能被黑客攻击；这并不罕见。\r\n\r\n[Rekt.news](https://rekt.news/)有一个[排行榜](https://rekt.news/leaderboard/)跟踪智合约攻击和损失资金数额。可以很容易看到，大多数被攻击的协议根本没有经过审计。\r\n\r\n然而，其中一些协议确实经历过审计，甚至不止一次，审计员仍未发现问题。在某些情况下，这可能是因为审计员不称职或没有尽力而为，但一般而言，无法保证代码库是无漏洞的。\r\n\r\n好消息是，一些漏洞不仅被审计员错过，同时也被黑客忽视。一些智能合约在活跃的漏洞状态下运行了数月，才最终得到修补。优秀的审计会确保消除黑客的“低垂的果实”。\r\n\r\n### 我应该进行多次审计吗？\r\n\r\n这是资金充足的旨在持有大量资金的DeFi协议的标准做法；让三家或更多审计公司审查代码非常普遍。\r\n\r\n一个审计员遗漏的东西，另一个可以发现，反之亦然。同样，一个审计员可能注意到一个漏洞，而开发人员可能在修补该漏洞时引入另一个漏洞。\r\n\r\n## 获取审计的典型工作流\r\n\r\n**1\\. 获取报价**  \r\n你将联系多个公司请求报价，并根据他们的可用性和你的启动日期进行协调。\r\n\r\n**2\\. 审计开始**  \r\n在进行审计时，你应该处于代码冻结状态。如果审计员在审查与你将在生产环境中发布的代码库不同的代码库，你就是在浪费金钱！\r\n\r\n**3\\. 审计报告**  \r\n大多数审计报告（那些不遵循固定核对清单的）会返回一份按严重性分类的发现清单，分类为：严重、高、中、低、信息性和气体优化。它们在下一节中进行详细解释。审计的时间可以短至几天，也可以长达几个月，具体取决于项目的范围。\r\n\r\n**4\\. 检查修复**  \r\n根据协议，审计员将审查开发人员所做的更改，并确保修复确实解决了漏洞。审计员认为可接受的审核修订次数因审计员而异。\r\n\r\n**5\\. 发布报告**  \r\n如果客户允许，审计员通常会发布他们的报告（客户通常希望审计是公开的，以便表明他们已进行审计）。\r\n\r\n## 审计发现严重性\r\n\r\n大多数审计报告将安全发现按严重性分组：\r\n\r\n  * 严重\r\n  * 高\r\n  * 中\r\n  * 低\r\n  * 信息性\r\n  * 气体优化\r\n\r\n并非所有公司都使用相同的标签。正如我们所提到的，缺乏普遍标准，无法为什么算作“高”或“中”漏洞提供统一定义。一些审计员对同一漏洞的合适评级存在分歧，但这里是一些审计员用来确定严重性的因素，：\r\n\r\n  * 最坏的结果。如果所有资金被盗，那将是灾难性。黑客无法盗取资金，但用户未得到适当保护不会出现脚踏自毁的漏洞会标记为低严重性。\r\n  * 受影响用户的数量。整个协议损失金钱要比单个用户损失更严重。\r\n  * 进行攻击的动机。如果攻击者进行攻击所需的资本投入超过其所能获得的收益，则严重性降低。这仍然算漏洞，因为攻击者可能会出于非经济动机发起攻击（如显摆、个人仇恨等）。\r\n  * 攻击的隐蔽性。如果漏洞类似于缺失的访问控制，普通攻击者便能进行攻击。如果漏洞源于对复杂的金融模型的深入理解，那么攻击者找到问题的可能性就小得多。\r\n\r\n一些审计员将最后两个因素合并为一个：攻击的可能性。根据这一模型，他们使用以下表格确定严重性：\r\n\r\n|  | 高损害 | 中损害 | 低损害 |\r\n| --- | --- | --- | --- |\r\n| 高可能性 | 高/严重 | 高 | 中 |\r\n| 中等可能性 | 高 | 中 | 低 |\r\n| 低可能性 | 中 | 低 | 低 |\r\n\r\n### 严重与高与中\r\n\r\n一些审计员区分严重漏洞与高漏洞，另一些审计员将严重漏洞与高漏洞归为一类。在这两种情况下，这些都被认为是极其严重的漏洞！对于那些有所区分的人，严重可能意味着整个协议都受到严重影响，而高意味着单个用户可能受到严重影响。\r\n\r\n中等严重性问题通常意味着虽可能造成损害，却不太可能发生。\r\n\r\n### 信息性\r\n\r\n一些审计员会指出一些问题，例如不遵循Solidity风格指南或者变量和函数名称拼写错误或引起误导。这些并不是安全漏洞，但可能会将来的某种程度上造成混淆。并不是所有审计员都会提出信息性问题。\r\n\r\n### 气体优化\r\n\r\n一些审计员会建议改进智能合约的[Gas成本优化](https://learnblockchain.cn/article/11235)。这些与安全无关，但肯定会改善用户体验。\r\n\r\n## 审计智能合约的成本是多少？\r\n\r\n**基于公开信息的估计**  \r\n如果你查看Fiverr，你会找到一些以低价格审计智能合约的服务，但你真的希望在如此关键的事情上依赖这种服务吗？由于合同通常包含保密协议，费率可能很难确定，但这里有一些公开信息。\r\n\r\n**1\\. 竞争审计的奖金池**  \r\n竞争审计平台会宣传奖金池，当然，这笔钱来自于支付审计的客户。在这里你可以看到奖金池低至5千美元，有时对于大型项目可高达数十万的奖金池。在极端情况下，奖金池超过100万美元的情况也有。显然，负责比赛的人会希望收取运行平台的费用，因此实际成本会更高。\r\n\r\n**2\\. 承包商薪资**  \r\n审计公司Spearbit公布了他们支付审计员（他们是承包商，而不是员工）的[费率](https://twitter.com/spearbitdao/status/1664642186405728256)，因此可以推断出审计的成本（不包括运营和利润）从哪里来。每位审计员的报酬根据资历不同为3K-20K每周。请记住，这不是全职工作，而是按接纳计。\r\n\r\n**3\\. 独立审计员**  \r\n另一个数据点是独立审计员，他们对收入直言不讳。有一个人声称在好的月份[每月赚40,000美元](https://twitter.com/pashovkrum/status/1653698582787096578)，大约每月进行四次审计；另一个声称[一个月赚了50,000美元](https://twitter.com/bytes032/status/1667868533257289730)，进行了五次审计。这处于独立审计员可以期待获得的较高水平，但并不超出合理范围；硅谷顶尖公司的员工工程师收入更高。\r\n\r\n## 审计员如何生成报价\r\n\r\n没有标准定价模型，但以下是审计员用来确定他们报价的一些做法。\r\n\r\n**按代码行美元数**  \r\n最常见的定价模型是 $/代码行。这个价格可能在每行几美元到几十美元之间。\r\n\r\n**大小和复杂性**  \r\n其他审计员使用尺寸和复杂性的组合。一千行的NFT远比一千行的数学库简单。审计公司会根据这些因素的组合作主观判断。\r\n\r\n**与现有协议的相似性**  \r\n如果待审项目与已建立的项目几乎是分叉的或非常相似，某些审计员会给予折扣，因为他们可以利用以前的审计来确定你的项目是否从过去的错误中吸取了教训。此外，未审查代码行总数只是项目的一个小比例。不同的审计员对什么构成与建立项目“相似”的定义有不同的阈值。\r\n\r\n**按漏洞收费**  \r\n这个模型在独立审计员中很常见。安全研究员会收取一个小的定金，对于每个发现的漏洞会根据严重性付出相应报酬。这个模型的优点是能够激励审计员更加认真地寻找问题，但也可能激励他们夸大漏洞的严重性。\r\n\r\n## 为什么审计如此昂贵？\r\n\r\n与其他高度专业的知识工作者相比，例如律师（最优秀的律师月收入可超过[一百万美元](https://www.wsj.com/articles/on-wall-street-lawyers-make-more-than-bankers-now-ae8070a7)），智能合约审计并不是令人无法承受的负担，但对于小公司来说可能是一个很大的压力。  \r\n成为智能合约审计员并非易事。通常所需的技能水平相当于在硅谷获得一份高度竞争工作的难度，这意味着起薪可能很容易达到六位数。审计公司必须在这些薪水之上收取显著的利润，因此审计成本会在几万美元甚至几十万美元的范围之内也就不足为奇了。\r\n\r\n## 先测试你的代码！\r\n\r\n让人震惊的是，许多智能合约在缺乏充分的[单元测试](https://learnblockchain.cn/article/9780)的情况下就被发送去审计。存在一些低级错误耗费了审计者的时间，从而未能发现更严重的问题，因此利用所有可用的测试和智能合约安全工具，确保你的合约没有漏洞是至关重要的。\r\n\r\n## 想要RareSkills的帮助？\r\n\r\nRareSkills不是审计公司，但我们的许多[讲师](https://www.rareskills.io/instructors)是专业审计员，我们确实从事安全研究。我们对哪些公司是可靠的、哪些不是有内部视角。随时可以[联系我们](mailto:contact@rareskills.io)，告诉我们你的需求，我们将根据你的情况将你推荐给合适的资源。\r\n\r\n如果你希望培训工程师如何开发安全的智能合约，那么我们行业领先的[智能合约训练营](https://learnblockchain.cn/openspace/1)可能符合你的兴趣。\r\n\r\n_最初发布日期2023年6月24日_\r\n\r\n>- 原文链接： [rareskills.io/post/smart...](https://www.rareskills.io/post/smart-contract-audit)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/20722","address":null},"history":null,"timestamp":1740647729,"version":1}