合约审计

从事合约审计工作大概一年有余了。想从从业者的角度聊聊合约的审计的工作内容和发展前景。 合约审计是一项收入非常高的工作。但是收入的增加曲线是非线性的。初期的从业者很难从合约审计比赛中获得足够多的奖金来维持生计。当然我指的是普通的,大众的,大部分从业者。在网络上你可以看到那种天赋异禀的从业者,在花费了3个月以内的时间就能获得单场比赛5位数美金的奖金。其实很难去验证这些信息的真伪,但是不得不承认确实有些人天赋异禀,或者有相关的行业从业经验。比如在web2的时候就是从事漏洞发掘的工作,再转入到web3之后如鱼得水也有可能。

大部分的你我芸芸纵生,都是资质平平。对于这样的你我来说,3个月可能都没办法和合约的语言(solidity)搞的非常精通。更别说弄清楚那些隐藏在合约背后的漏洞是如何产生,又是何时消散的。

就拿我自己来说,前3个月都没有赚到3位数的奖金。这个过程是相当痛苦的,因为你不知道这条路是不是走的通,也不知道等待你的会是怎么样的结果?我们每一个合约审计从业者就像是黑夜中的赶路人。不知道何时会天亮,但是天一定会亮的信念支撑者我一路走下去。后面获得了第一笔3位数的奖金,再4位数的奖金。我相信很快5位数的奖金就在下一次的比赛。

这是一项非常有积累需要经验的工作。你会看到许多的solo finding获得了巨额的奖金。如果你擅长从不同的角度思考问题,你具备长时间专注阅读代码的能力,相信我这是一份很适合你的工作。有些人可能觉得说我根本不懂solidity,我不懂blockchain底层的逻辑,不懂geth的客户端的golang代码,不懂defi的各种复杂的交互,就像白天不懂夜的黑。但是这些其实根本不重要,重要的是思维方式,长期的专注的能力,这才是你能够从几百个参赛者中脱颖而出获得最高奖金的关键要素。至于代码怎么跑,从哪里开始跑,都是一些很低级的技能。我相信大部分人都能轻易掌握。

合约审计的平台选择

目前的合约审计平台五花八门,各有各的特点。 比如code4rena,这是我的入门平台。最早的时候这个平台支持gas优化的漏洞奖金,Low等级的奖金。对于新手试手来说非常的友好。大部分人的新手找到几个low等级的问题,找到一些gas优化的问题之后就非常兴奋,开始做起来了白日梦以为能够从此,出任CEO,赢取白富美,走上人生顶峰。在苦苦等候个把月之后发现自己提交的漏洞竟一个都没被采纳。不禁悲从中来,怀疑评审是不是针对了自己。在看过别人的审计报告之后,才发现为什么别人可以从这么刁钻的角度看待问题。这其实就是思维方式的差别,对项目的了解程度的差别,对底层逻辑的熟悉程度的差别。

在参加比赛,等待结果,查看完整报告这套流程走过几遍之后,我相信大部人的玩家都流失了。如果你坚持了大半年之后还在这个行业之后,那我相信这个时候一定是穷的叮当响的。

后面还有sherlock,cantina,immunifi等一大箩筐的平台。目前大部人的平台都不再支持low等级的漏洞了。你可以提交但是大部人的情况下都只是浪费时间。 最重要的最特殊的漏洞才能获得最高的奖金。 随着从业者人数的增加,人们往往话费更多的时间去升级自己的漏洞。就是那些被评委否定,但是提交者又心有不甘,于是从不同的角度来说服评为这是一个漏洞。这个过程由于人数众多,目前的审评过程往往都消耗个把月甚至2 3 个月的时间。所以你会发现这是一项回报周期很长的工作。

审计比赛和Bug Bounty的区别

审计比赛和BB有什么区别呢? 我想最大的区别是审计比赛对于那些重复的漏洞是有奖励的。你不需要成为第一个发现漏洞的人,也可以获得一定份额的奖金。但是BB就不同了,只有对于第一个提交的人才能够获得奖金。所以BB的奖金是非常高的,甚至达到过$1M的美金单个漏洞。相应的BB的难度肯定是更高了。对于放到immunifi上做BB的项目。基本上都已经经历了很多轮的合约审计。从业者能够从中找到valid漏洞的机会渺茫。

项目审计的学习步骤

首先我们肯定需要对语法有个了解,不一定需要特别精通但是大概的意思肯定需要看懂。这里一般都会涉及到solidity/rust/move等语言,这3门是比较常见的。 语言学习的过程对于一些有多年编程经验的人来说是非常简单的。像我自己来说在学习solidity的时候利用了大概1个月左右的业余时间。 在对语法有过几本的了解之后,我们可以去看下基础的漏洞比如:

  • 重入漏洞
  • DOS
  • 抢跑
  • 63/63 gas规则
  • 签名重放

在了解完这些基础知识之后,我的建议是直接去参加审计比赛,虽然刚开始可能不太会获得什么奖金,但是这个学习过程是我认为效率最高的。在规定的时间之后我们尽量去了解项目的流程,多关注细节。一些重大的安全漏洞往往藏在一些容易被人忽略的细节上。 有些平台可能很快就会公开审计的比赛结果和所有发现的漏洞,我们需要仔细的看看别人发现的漏洞。别人的审计报告是怎么写的。有时候描述的内容虽然相似,但是由于描述的方式不规范,或者影响的范围写的不完整导致没有拿到完整的奖金。在这个过程中我们可以学到很多东西。重复几次这个过程,我相信很快就能上手。