智能合约审计是由区块链安全专家进行的审查,以确保用户不会因故障或安全漏洞而损失资金。此外,审计试图在部署合约之前预测意外和不良的智能合约行为。
驾驭这个领域是很棘手的。有几十家审计公司,从其中几家获得报价需要时间,而且很难知道你得到的价格是否公平。
本文将有助于作为完成智能合约审核任务的起点。
本文中提及的审计公司不应被视为认可。
“智能合约审计”一词是行业术语的演变,它没有严格的定义,对不同的人来说可能有不同的含义。对于那些来自ISO 标准为常态的行业的人来说,智能合约审计似乎就像狂野的西部(坦率地说,这将是一个准确的评估)。
尽管一些智能合约漏洞是众所周知的,但其他漏洞是复杂系统的新兴特性,很难系统地检测到。
标准是成熟市场的特征,而web3整体上还不是一个成熟的市场。
将智能合约审计称为“审计”有点混淆。在会计领域,“审计”有非常严格的定义;区块链工程中并非如此。区块链中所谓的“审计”,就是由专家团队进行的安全审查。
更令人困惑的是,对于什么使某人成为智能合约审计员或安全专家,没有正式的定义或认证。是的,有一些公司出售认证,但这些认证在行业中没有任何影响力。
正如您所预料的那样,有一些有进取心的个人利用这种混乱来出售他们不具备的专业知识——因为没有既定的方法来衡量专业知识。
买者自负。
尽管如此,业界普遍认为“这个智能合约已经过审核”意味着“聘请了一组安全专家来审查这个代码库并发现问题”。由于专业知识没有正式的定义,因此通常使用行业声誉作为代理。
这些是专门从事安全研究的公司。有些只审核智能合约,而另一些则审核智能合约和传统计算机应用程序。您可以将其视为由安全研究人员组成的机构。直到最近,这还是获得智能合约审核的标准方法。如果你在谷歌上搜索智能合约审计公司,你通常会得到这些结果。
一些安全研究人员不加入公司,而是为自己工作。与代理机构相比,他们的营销预算要少得多,因此很难找到,但由于他们的管理费用较少,因此通常可以提供更好的价格。
一个缺点是公司可以让多名审计员审查您的代码,而独立审计员只能有一名审查员。但对于较小或不太复杂的代码库,这可能更具成本效益。
最近,出现了几个平台( Sherlock DeFi 、 Code4rena ),要求审计的公司在平台上发布其源代码以及奖金池,然后独立参赛者尝试寻找错误和漏洞。
参赛者发现的错误越多,他们赚到的钱就越多,但如果另一位参赛者发现相同的错误,那么两人的奖金就会被稀释。对于众所周知的错误,支出可能会大大减少。
这种形式的审计师的收入相当低于标准。尽管参赛者付出了巨大的努力,但每次比赛的收入很少会超过 1,000 美元。参与者的主要动机是证明自己的能力,以便他们可以在传统审计公司找到工作或作为独立审计师(独立研究员)吸引业务。参赛者的质量也无法保证,任何人都可以参加。
然而,这些平台对于新审计员来说非常有教育意义。由于该格式鼓励集中精力查找错误,然后针对遗漏的错误提供反馈,因此它们可以提供相对紧密的反馈循环,从而有助于加快学习速度。事实上,我们出于教育目的引导我们的一些 Solidity 培训参加这些比赛。
最好的审计师不会在竞赛中花费大量时间,因为他们为自己或为公司工作赚的钱要多得多。因此请记住,某人在审计竞赛中表现出色可能仅仅意味着他们在参加的竞赛中没有面临重大竞争。还有一个运气因素,即单次竞赛占审计师公共收入的很大一部分。
然而,与其他审计格式相比,这种格式对代码的关注要多得多,并且审计竞赛可以发现其他审计员错过的错误。它们还充当公司向开发人员和审计社区巧妙推销其协议的渠道,因此它们对生态系统做出了宝贵的贡献。
一些开发者不和谐小组会免费审查您的代码(出于提供帮助的愿望,所以请不要滥用他人的慷慨)。如果您有一个小而简单的代码库,有时让一些专家贡献自己的时间可能是您最具成本效益的途径。将此类审查称为“审核”是极其不诚实的,但如果这是唯一可用的选择,那肯定比根本不审查要好。
一些审计员使用严格的清单来列出智能合约漏洞,并检查问题是否存在。作为第一遍,这很好,但许多错误是特定于应用程序的(正如我们在那篇文章中指出的那样)。您希望确保审核员会考虑您的应用程序的细微差别和业务要求。通过查看他们过去的审核,您可以了解他们是否机械地违反列表或深入研究您的应用程序的细节。审计师不提供过去的审计通常是一个危险信号。
如果您的项目使用奇异的DeFi代币经济学或零知识证明,那么您将需要确保您选择的审计员拥有这方面的经验。同样,如果您要在像Solana这样的非 EVM 兼容链上构建 dapp,那么您将需要一位对该区块链有经验的审计员。
一些审计公司不会为 ERC20 代币或基本 NFT 等小型代码库烦恼,因为他们赚不到足够的钱来支付销售电话和账户管理费用。
由于审计没有正式或公认的定义,一些公司突然出现,提供被嘲笑为“橡皮图章审计”的服务。这些公司提供审计报告只是因为买家想要进行审计,这样他们就可以告诉客户,“看,我们已经被审计了!”
并非每个协议都有意获得橡皮图章审核;他们可能只是选择了审计员,却没有意识到自己是橡皮图章审计员。
即使智能合约经过审计,之后仍然可能遭到黑客攻击;这种情况并不罕见。
Rekt.news有一个排行榜,可以根据损失的金额来跟踪智能合约黑客行为。很容易看出大多数被黑客攻击的协议根本没有经过审计。
然而,有些协议确实进行了审计,有些协议还不止一项,但审计人员仍然错过了。在某些情况下,这可能是因为审计员不称职或没有足够努力,但总的来说,不可能保证代码库没有错误。
好消息是,一些漏洞不仅会被审计人员漏掉,而且还会被审计人员漏掉。他们也会被黑客错过。一些智能合约在修复之前已经存在了几个月的存在漏洞。良好的审计将确保消除黑客的“唾手可得的果实”。
这是资金充足、打算持有大量资金的 DeFi 协议的标准做法;由三个或更多审计公司审查代码是很正常的。
一位审核员错过的内容,另一位审核员可能会发现,反之亦然。同样,一名审计员可能会注意到一个漏洞,开发人员可能会修补该漏洞,同时引入另一个漏洞。
1. 获取报价您将联系各个公司寻求报价,并根据他们的可用性和您的发布日期进行协调。
2. 审计开始当您进行审计时,您应该处于代码冻结状态。如果审计员正在审查与您将要发布到产品的代码库不同的代码库,那么您可能在浪费钱!
3. 审计报告大多数审计报告(不遵循固定检查表)将返回一系列结果,分类为“严重”、“高”、“中”、“低”、“信息”和“Gas 优化”。这些将在下一节中解释。审核时间短则几天,长则几个月,具体取决于项目的范围。
4. 审查修复根据协议,审核员将审查开发人员所做的更改,并确保修复确实解决了错误。可接受的修订审查数量取决于审核员。
5. 发布报告审核员通常会在客户允许的情况下发布他们的报告(并且客户通常希望公开审核以表明他们已经接受过审核)。
大多数审计报告将安全发现分为严重程度:
批判的
高的
中等的
低的
信息性
气体优化
并非所有公司都使用相同的标签。正如我们所指出的,由于缺乏通用标准,对于“高”或“中”漏洞没有统一的定义。一些审核员不同意对同一错误进行适当的评级,但以下是审核员用来分配严重性的一些因素:
最坏情况的结果。所有资金被盗都是灾难性的。如果黑客无法窃取资金,但用户没有得到足够的保护,以免搬起石头砸自己的脚,那么这些漏洞将被标记为低严重性。
受影响的用户数量。整个协议赔钱比单个用户赔钱更严重。
进行攻击的动机。如果攻击者需要花费更多的资金来进行攻击,而不是执行攻击所获得的收益,那么严重性就会降低。这仍然是一个漏洞,因为攻击者可能出于非经济动机进行攻击(炫耀、个人恩怨等)。
攻击的模糊性。如果漏洞类似于缺少访问控制,那么不熟练的攻击者就可以实施攻击。如果该弱点依赖于对使用高等数学的复杂代币经济机制的深入理解,那么攻击者就不太可能发现该问题。
一些审计员将后两个因素合二为一:攻击的可能性。在这种模型下,他们使用下表来分配严重性:
一些审核员区分严重漏洞和高漏洞,而其他审核员则将严重漏洞与高漏洞分组。无论哪种情况,这些都被认为是极其严重的错误!对于那些做出区分的人来说,“严重”可能意味着整个协议受到严重影响,而“高”则意味着个人用户可能受到严重影响。
中等严重性问题通常意味着可能具有破坏性但不太可能发生的问题。
一些审核员会指出问题,例如不遵守 Solidity 风格指南或变量和函数名称拼写错误或具有误导性。这些不是安全漏洞,但可能会导致混乱。并非所有审计师都会指出信息问题。
一些审计员会提出提高某些代码的 Gas 效率的方法。这些与安全无关,但它们肯定会改善用户体验。
根据公开信息进行的估计
如果您查看 Fiverr,您会发现一些以低价审核智能合约的服务,但您真的想依赖这种服务来完成如此重要的事情吗?由于合同通常有保密协议,因此费率可能很难确定,但这里有一些公开信息。
1.竞争性审计的奖励池竞争性审计平台会宣传奖励池,当然,这笔钱来自于支付审计费用的客户。在这里,您可以看到奖金池低至 5,000 美元,有时甚至高达数十万美元(对于非常大的项目)。当然,举办比赛的人希望获得运行平台的费用,因此实际成本会更高。
2.承包商薪资审计公司Spearbit公布了他们向审计师(他们是承包商,而不是雇员)支付的费率,因此人们可以据此推断出审计费用是多少(不包括运营和利润率)。每个审计师的工资为每周 3k-20k,具体取决于资历。请记住,这不是一份全职工作,而是每次参与的工作。
3. 独立审计师我们掌握的另一个数据点是公开披露收益的独立审计师。其中一位声称在业绩好的月份每月收入 4 万美元,每月接受大约四次审核,另一位则声称每月接受五次审核,每月收入 5 万美元。这是独立审计师所能期望的最高水平,但这并非不可能。硅谷顶尖公司的工程师收入远不止于此。
没有标准的定价模型,但审计师使用以下一些做法来确定他们所报的价格。
常见的定价模型是美元/代码行。每条线的成本可能在几美元到几十美元之间。
其他审计师结合使用规模和复杂性。 1,000 行 NFT 比 1,000 行数学库简单得多。审计事务所将综合这些因素做出主观判断。
如果要审计的项目与已建立的项目是分叉或非常相似,一些审计员会给予折扣,因为他们可以利用过去的审计来确定您的项目是否从过去的错误中吸取了教训。此外,未经审查的行总数仅占项目的一小部分。不同的审计师对于什么是与已建立的项目“相似”会有不同的门槛。
这种模式在独立审计师中很常见。安全研究人员会获得少量的首付款,并会针对发现的每个错误获得报酬,而对于严重性较高的问题,则价格较高。这样做的好处是可以激励审计人员更加努力地进行搜索,但它也可能会鼓励夸大错误的严重性。
与其他高度专业化的知识工作者(例如律师)(其中最好的 每月收入超过 100 万美元)相比,智能合约审计的费用并不高,但对于小公司来说可能是一个沉重的负担。
成为智能合约审核员并不容易。一般来说,所需的技能水平相当于在硅谷找到一份竞争激烈的工作,这意味着起薪很容易达到六位数。审计公司需要在工资之外收取大量利润才能保持盈利,因此审计费用即使不是数十万美元,也达到数万美元也就不足为奇了。
RareSkills 不是一家审计公司,但我们的许多讲师都是专业审计师,而且我们确实从事安全研究。我们对哪些公司信誉良好、哪些公司信誉不佳有内部看法。请随时联系我们并告诉我们您的需求,我们将根据您的情况向您推荐合适的资源。
如果您正在寻求培训您的工程师如何开发安全的智能合约,那么您可能会对我们行业领先的专业工程师智能合约训练营感兴趣。
也发布在这里。