如何成为智能合约审计员?

如何成为智能合约审计员?

May 22, 2022·

1 min read

网络上大多数指南合约相关的文章, 只是向初学者抛出的与安全相关的文章的集合,让他们不知所措。在这里我总结一些, 我对于智能合约审计的学习路线。这里主要指以太坊链及相关EVM链,因为大多数审计工作目前仍在这个生态系统中。

最后,我还将讨论与审计和获得第一份工作有关的常见问题。

学习编程

我希望你首先需要知道如何编程,任何语言都可以。如果没有,学习如何编程应该是你的第一步,因为审核代码需要能够阅读它。在我看来,成为一名开发人员是一个先决条件,否则,你将花费太多时间来尝试理解各个指令的语法和语义。这就像在不识字的情况下试图阅读尼采。首先要识字。这绝对是花费最多时间学习的步骤,学习安全方面的速度要快得多。

如果你之前没有编程经验,请做好心理准备,你的技能熟练掌握可能需要数年。我会从 JavaScript 开始,它是最适合初学者且用途广泛的语言。如果事实证明你实际上并不喜欢成为一名审计员,那么过渡到成为前端、后端或智能合约开发人员是很容易的。Solidity 和 JavaScript 的语法也有些相似。

学习 ETH 区块链和 Solidity 基础知识

所以你现在知道如何编程,但对以太坊和 Solidity 一无所知。学习一门新语言的最快方法是在实践中使用它,通过在其中编写代码 - 只阅读文档不会使知识持续记忆。没有比解决 CTF 更好的方法来结合学习 Solidity 和了解 ETH 安全性。

CTF(夺旗/战争游戏)是存在易受攻击代码的安全挑战,你需要编写智能合约来利用该漏洞。

以下是我个人为学习 Solidity 和语言而解决的三个 CTF:

The Ethernaut 和 Capture The Ether 挑战经常重叠,一些漏洞仅适用于旧的 Solidity 版本。你不会再在现代代码中看到它们了。请注意这一点。

还有一些更难的 CTF,比如Paradigm 的 CTF。在这些项目中得分高表明您知道自己在做什么,并且非常适合被录用.

熟悉最常用的智能合约

在你的审计生涯中,你会一遍又一遍地看到某些合同、模式甚至算法。熟悉它们并深入了解它们的工作原理和细微差别。

  • 代币合约:最常用的代币标准是 EIP20EIP721。还有很多,但是这两个是你一开始需要知道的。重要的是要了解最初的 ERC20 标准发展了很多,并且存在不符合最终 EIP20 的代币(最值得注意的是 USDT). 你还应该了解代币可以有不同的小数,它们将被解释为具有小数精度的浮点数,即,1e18 TOKENS (= 10**18 TOKENS) ~ 1.0 TOKENS对于带有18小数的代币。你会遇到很多错误,其中某些计算的代币数量的小数位数错误。

  • 代理:以太坊合约不可升级。如果要更新代码,则需要部署新合约。但是,这意味着仍然存在于原始合约中的存储也会丢失。因此代理实现了将存储与逻辑分离的想法。有许多不同的代理实现,看看 OpenZeppelin 代理。您应该了解delegatecall构建代理的重要性。

  • MasterChef:MasterChef 是一个质押合约,用户在其中存入流动性池 (LP) 代币并获得与其 time * stakeAmount. 这个合约已经被分叉了很多,但理解它的主要原因是它的奖励算法出现在许多不同的地方。范式称之为十亿美元算法。你应该了解它是如何工作的以及为什么在区块链设置中需要它(不能同时更新所有用户)。

  • Compound:我想说Compound是所有去中心化点对点借贷协议的基础。你应该知道它,因为许多 DeFi 原语以某种方式与借贷协议交互。该代码也比 Aave 的代码更干净,它是一个很好的文档外观的很好的例子。它的Governor&TimeLock合约也被用作许多其他协议的治理合约。

  • UniswapV2:虽然 Uniswap 已经在 V3 上,但 Uniswap V2明显更简单,耗油量更少,并且仍然是一般理解自动做市商 (AMM) 的基础。你还应该了解 LP 代币(更一般地说,共享代币,为你提供公平份额的基础余额)如何工作。

学习金融基础知识

有时你在审计一个使用大量传统金融术语的 DeFi 项目时,你什么都不懂。当你查找这些术语时,你会得到引用更多您不知道的术语的定义。因此,我发现学习一门不做任何假设的基础金融课程真的很有帮助,它实际上解释了人们为什么要使用这种特定金融工具的意图。

我推荐可汗学院的期权、掉期、期货、MBS、CDO 和其他衍生品章节,您将在其中学习期权、卖空、期货(~永续合约)的术语。从那里,你可以进一步扩展并深入了解各个主题。

审计实践

至此,你的培训结束了,你将继续阅读更多代码并利用事后分析来变得更好。每当理论部分变得太无聊时,你应该尝试在实际代码中发现问题,这可能是Immunefi 上的错误赏金或Code4rena 上的审计竞赛。这里最大的优势是它们是未经许可的。你可以匿名,无需通过工作面试,薪酬完全取决于技能。如果你想申请审计公司,收到实际的错误赏金是一个很好的补充。

审计人员薪资

我不是这方面的专家,但我想说审计员的每小时费率大致是:

  • 初级:100 $ / 小时

  • 有经验的:100$-250$ / h

  • 顶级审核员:250$-1000$/h

我将薪酬分为两类:

  • 固定:你的工作获得固定(小时)工资

  • 基于技能:你发现的错误越多或严重程度越高,你的补偿就越大。

如果你是初级人员,我建议你加入审计公司,如果你处于高级审计员阶段,则使用后一种薪酬模式寻找机会会更有利可图。请注意,顶级漏洞赏金猎人可以通过为关键漏洞支付数百万美元获得更多收入。

审查代码库需要多长时间?

范围审核始终是一项艰巨的任务,在我看来,只有通过经验才能做得更好。但是给出一个经验法则:假设你每小时可以审核 200 行代码(这是一些审核员 afaik 的标准假设) - 如果代码复杂、数学繁重或文档不好,请调整该参数. 然后,您将代码行除以 200 LOC/h,然后您获得审核单个人代码所需的时间。如果您是独立审计员,您还应该添加 5h-10h 来编写报告和所有 biz-dev 工作,以及回答问题。然后你把它乘以你的小时费率。

你怎么知道什么时候停止寻找错误?

这是个好问题。我总是可以花更多的时间在代码上,这会增加我发现错误的可能性。但在某些时候,会出现收益递减的情况,在代码上花费更多时间是不合理的。

你能成为审计员而不是开发人员吗?

在我看来,审计员和开发人员的技能大多是重叠的。我甚至会说成为一名审计员让我成为了一个更好的开发人员。你可能听说过 10 倍工程师的神话,但它只是一个以前做过很多类似项目的人,可以从他们以前的工作中复制粘贴,这样组装新协议的速度比没有工程师的人快得多之前的代码可以借鉴。到目前为止,我可能已经看到了大约 100 个 Solidity 代码库,并且如果我必须构建一个新协议,我确切地知道从哪里查找和复制代码。另一方面,协议开发人员更了解正确部署、管理日常链上任务、监控等领域。他们对实际输入代码的语法也有更好的肌肉记忆,而我主要阅读它。

审核时使用什么工具?

我不使用任何直接执行漏洞分析的工具。我只使用出色的“Solidity Visual Developer”VSCode 扩展,它突出显示存储变量和函数参数,这使得在阅读新代码库时更容易获得一些上下文。

我认为 ETH 有这么多漏洞的一些原因是, 他最具创新性,因此通常是复杂且未经测试的协议仍在 ETH 上.

正如你所看到的,有一些区块链层决策会影响其他区块链更好地解决的安全性。这并不是关于智能合约语言本身,而是更多关于理解区块链如何工作以及对安全性的影响。这是审核新链的更大障碍,通常,这些信息分散在博客文章中,甚至根本没有记录,你必须查看代码或希望在 Discord/Telegram 上找到核心开发人员。

以上就是如何成为一名智能合约审计员的一些经验.

更多关注