本文介绍了成为智能合约审计员的途径和所需技能,阐述了这一领域的潜力和灵活性,强调了相关知识和实践的重要性。作者鼓励有经验的研究者转向智能合约审计,以应对行业需求并提高自身职业价值。
所以,你想成为智能合约审计师!你在过去的几年里追逐着 Chromium 和 Linux kernel 的漏洞,结果却跟其他三位研究人员争夺了一个价值 10,000 美元的漏洞。我理解你的痛苦。这就是为什么你应该审计智能合约的原因。
我发现许多漏洞研究人员对接触加密货币存在严重的顾虑。如果你也是如此,请继续阅读。如果你只是一个觊觎利润的机会主义者,可以直接跳过这一部分。
没关系。在某种程度上,任何有头脑的人都认识到生态系统,或者至少是它的当前版本,在许多方面都是相当有问题的。你可以批评比特币和以太坊对环境的影响;批评NFT的高度资本主义和物质主义;批评DeFi对缺乏经验的零售投资者的掠夺;批评这一领域通常只是一个充满旧车销售员的滑腻和诈骗的场所。这没关系。你不必参与这个闹剧,审计也并不会让你成为你在 Twitter 上看到的那些加密家伙。你只需作为审计师从事兼职工作,获得你应得的报酬。
你可能还有一个误解,认为你赚的钱最终来自不幸的零售投资者。这种情况下也不对。像任何咨询行业一样,你的潜在客户的质量从阴暗的骗子到顶级的机构投资者(如风险投资、私募股权、投资银行、对冲基金等)都有。既然你已经是一个高技能的漏洞研究人员,接受低质量客户明显浪费你的时间。因此,当然你的客户主要是由机构投资者资助的大型协议。如果你对金融有轻视的态度,可以考虑以下几点:你是从华尔街获取钱财并将其重新分配到经济的其他地方。这倒是为艺术委员会提供资金的不错方式。
如果你不想和客户打交道,也没关系。有一些公司会为你寻找和谈判审计工作,只要你拥有应对审计的技能。那么问题是,谁会最好地补偿你呢?↗😉 当然,还有如何提升自己的技能。这就引出了我的下一个要点。
审计智能合约比你想象的要简单得多。审计的核心能力是能够读取、理解和发现代码中的漏洞。作为安全研究人员,你已经比其他想要进入这个领域的人走得远得多。如果你在二进制文件中利用了棘手的内存破坏漏洞,或在Web应用中发掘了难以预料的逻辑漏洞,那么你已经有资格了。换句话说,你是一位美国职业棒球大联盟的超级明星,而目前智能合约安全的状态却如同一个充满10岁孩子的小联盟比赛。
你应该将“智能合约”视为另一种研究目标。例如,你可能知道一个专门研究浏览器的人。他们对V8、Turbofan和JavaScriptCore非常精通。他们知道所有的JIT(即时编译)误编译漏洞、安全检查消除错误、ArrayBuffer策略等。但这个人的本质就是一名漏洞研究人员。我敢肯定,如果你跟他们说“嘿,我们需要你做一会儿内核特权提升,”他们不会突然忘记他们在做什么。所以你的任务实际上就是学习有关“智能合约”的所有冗长小偏离。这将解锁你现有的直觉和经验,接下来可以进行技能转移。
这是对高层次概述的优美阐述。现在在我实际告诉你需要学习什么之前,先让我给你介绍一下区块链的绝对状态。
作为顾问,你不仅要了解技术方面的内容,还需掌握整个行业的更广泛背景。没人想要一个在没人关心的事情上浪费时间的顾问。但你的客户会喜欢你,因为你会“懂这些”。这就是审计师的思维。因此,我将告诉你现在的情况。
我可以这样描述智能合约:想象一份普通的法律合同,但它不是在你当地法庭系统上运行,而是在一个神奇的区块链上运行。
假设你在现实生活中去银行申请贷款。你将签署一份法律文件,这是一份你与银行之间的合同。该合同规定了各种事项,如贷款期限、利率、抵押品等。现在假设我们将银行的合同从法律条款转化为一些计算机代码。那么这段代码将是你、你的资金和银行之间关系的依据。这本质上就是智能合约。而现在,有许多去中心化的借贷池,你可以从中借款,比如以太坊上的 Compound。
那么,是否存在问题?当然!当律师们在法律合同中发现漏洞时,这是坏事。这可能需要进入法院,费用很高。当黑客在智能合约中发现漏洞时,这也是坏事。不同之处在于,在当前 DeFi (去中心化金融) 的情况下,黑客只需将所有偷来的资金发送到 Tornado.cash,然后就再也听不见它们的消息。这也是你为何能拿到丰厚报酬的原因。你现在是一名智能合约律师。
DeFi 的想法是,通过为传统机构(如投资银行)提供去中心化的替代方案,便将权力还给群众,并据称“使金融民主化”。但是,讽刺的是,正是那些老派金融机构(如投资银行、私募股权、风险投资和对冲基金)现在正在为加密货币和 DeFi 提供资金。当人们告诉你某些华丽目标,例如“使金融民主化”时,只需微笑并点头。你不是来“实现金融民主化”。你是来发现智能合约中的问题。这就是审计师的思维。
现在你了解了一些软性知识。那我为什么要浪费你的时间呢?老实说,即使当你在做漏洞研究时,你也已经在更广泛的 InfraSec 限制下将你的研究进行框架化,比如,我们都知道,没有人会真正在乎一些随机视频游戏中的 DoS 漏洞。而且你也知道,游戏出版商的漏洞赏金计划通常也很糟糕,因此这并不值得你追求。看得出你的行业软知识发挥了关键作用吗?
现在,以太坊(还有它的虚拟机,EVM)基本上是智能合约和 DeFi 的代表。还有一些反叛的“帕特农神庙”(如 Solana)在使用其他新链,但 EVM 兼容链将是你的日常工作。因此,你在学习过程中将重点放在以太坊上。
EVM 的工作原理是你将智能合约编译为 EVM 字节码,并在所有以太坊节点上运行。为了处理停机问题,他们通过让你以“gas”的形式支付 CPU 周期来限制执行。一旦你将智能合约上传(“部署”)到链上,你就可以通过发送交易与其进行交互。交易是原子性的,如果在任何时候发生回滚,整个交易都会回滚(有一些特殊情况,如 try/catch)。在链上,你的合约有一些持久存储(“storage”)在链上存在,还有临时存储(“memory”),这基本上就像栈上的局部变量。
你还会很快注意到一切都使用 JavaScript。为什么会这样很快就清楚了。
在 DeFi 中,开发者希望使用户能够顺利无阻地参与一个新项目。构建和为用户进行实际的本机应用按部就班地入驻成本太高了。将我的资金放入一个新的骗局,必然不会比点一个链接困难。这就是为什么一切都是该死的网页应用,以及所有的用户体验都是糟糕的。这被称为“Web3”。
不管怎样,如果前端是用 JS 编写的,为什么不把 DevOps 基础设施也用 JS 来做呢?管他呢。所以每个人都使用一些开发框架,如 Hardhat.js,它提供了一种“Web3 API”,以一种 JavaScript 风格包装以太坊节点 RPC 调用。所以你会用 Solidity 写智能合约,但实际编译、测试和部署它们的驱动代码将全部使用 JavaScript 和 Hardhat 编写。最近,Foundry 是另一个(用 Rust 编写)正在获得重视的工具链。但仍然充斥着很多 JavaScript。
(2024 更新:Foundry 变得好多了,现在每个人都在使用 Foundry。但仍然到处都是 JavaScript;生态系统实际上是 Golang、TypeScript 的混著体,如果幸运的话才是 Rust 和 Solidity)。
幸运的是,通常你不需要审计项目的 JavaScript 部分。在以太坊上,智能合约本身是用一种叫做 Solidity 的语言写的。Solidity 是一种有很多糟糕设计决策的小语言,它们试图通过时间进行补偿。刚开始时,你实际上会阅读很多 Solidity。
因此,你可以将 Web3 理解为基本上是用 JavaScript 编写前端的网页应用(“Dapps”)和利用区块链上的智能合约提供所有业务逻辑的后端。
因此,回到那些糟糕的设计——Solidity 具有许多愚蠢的独特性。部分由以太坊区块链的技术局限性造成,其余的只是糟糕的设计决策。当然,没有任何编程语言是完美的。但是,你有责任了解所有这些愚蠢的陷阱,以便在你的审计报告中指出这些问题。这就是审计师的思维。
我不会枚举所有愚蠢的事情,因为那会太冗长,所以我只会在文章稍后链接给你一堆详细的文档。此外,阅读这些文档还将帮助你进一步理解以太坊生态系统的绝对现状。
另外,非常重要的一点——如果你在学习 Solidity 时感到愚蠢:你 并不愚蠢。是 Solidity 它才愚蠢。 不要害怕问一个“愚蠢”的问题,因为答案可能是“哦,是的,真的很愚蠢,按这样做,没错,确实如此。”
智能合约中的问题主要可以分为 4 个主要类型。
每个项目都是不同的。如果你正在审计一个无需外部交互的简单协议,那么不太可能会有一些花哨的 DeFi 交互漏洞。但它可能有一些表面上的错误。
没关系,如果你和一家公司的合作,他们通常会有一个模板给你,而且报告中大部分语言都是在多个报告中相似的模板。
快速学习这一点的最好方法是阅读约 10 篇 Trail of Bits 或 Zellic 的报告。这些公司做得很好。你会迅速识别模式,并看到它实际上相当模板化。因此,只要你能找到问题,编写报告不会那么困难。这只是费时,这很好,因为这是你收费工作的一部分。
你还应该阅读 CertiK 和 Peckshield 的报告。他们审核许多项目,他们的量比 Trail of Bits 更高,因此可以想象他们在这个领域的位置有所不同。研究他们的发现类型,并学习如何这样做。
你需要多才多艺。你的工作是发现安全问题,没错。客户支付你是为了让他们对整个项目感到放心。无论是智能合约的问题,还是客户的密钥保管问题,都要从客户的角度来考虑。如果你觉得审计范围不够,就去制造更多的审核范围。如果你认为存在漏洞攻击面,就将其纳入审计范围,并向客户说明其理由。这就是审计师的思维。
在我看来,学习新目标的最佳方式是通过可攻破的挑战。所以去做这些挑战:Damn Vulnerable DeFi↗
一开始可能会很混乱,如果你需要作弊并查看前 1 或 2 个挑战的解决方案以理解如何使用 Hardhat,请不要感到内疚。那些挑战本身就是初学者挑战。
你需要理解如何编写 Solidity 代码,因此,值得一去阅读 Foundry Book↗ 并制作一些基础的“hello world” Dapp,以便理解事情是怎样的。
你也要阅读常见的 Solidity 模式和反模式:
阅读一些著名的 DeFi 黑客事件。一些重要的事件包括:
还有许多著名研究者的新闻通讯和博客,提供高质量的分析报告。
更多的可攻破挑战:
一旦你完成了 Damn Vulnerable DeFi 挑战,你就 或多或少准备好在真实世界中处理一些简单的审计工作。 是的,真的就是这么简单。这就是审计师的思维。
希望你喜欢这门充满犀利观点和搞笑笑话的简明课程。如果你认为审计师的发挥适合你,应该来和我们一起工作↗。Zellic 是一家由研究人员为研究人员创建的区块链安全公司。我们的薪酬非常具有竞争力,非常期待你加入。请联系我们: jobs[at]zellic.io。
Zellic↗ 是一家由黑客创办、为黑客服务的智能合约审计公司。我们的安全研究人员在最有价值的目标中发现了漏洞,从财富500强企业到DeFi巨头。无论你是在开发还是部署智能合约,Zellic 的经验丰富团队都能帮助你防止遭受攻击。
如果你喜欢这篇博客文章,你或许也会喜欢这篇由我们创始人之一 cts 撰写的 Phrack 文章↗。
- 原文链接: zellic.io/blog/the-audit...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!