本文总结了 Vyper 编译器在过去一年中为提升安全性和稳定性所做的努力,包括增加安全预算、进行多次安全审计、发起漏洞赏金计划、实施合约监控系统等。文章还介绍了 Vyper 团队在测试和形式化验证方面的工作,以及未来的发展计划,强调了社区支持对 Vyper 安全的重要性。
作者:benny
一年前,Vyper 编译器旧版本中的一个漏洞导致了一次攻击,影响了 Curve Finance 上的多个流动性池。 从那时起,团队一直在不断努力,以确保编译器的安全性和稳健性,同时提供新功能和优化。 感谢来自 Curve、Lido 和 Optimism 的慷慨捐助,我们得以显着增加 Vyper 2023-2024 年的安全预算。 其成果是 12 项审计、2 位安全专家待命、2 个漏洞赏金计划、1 项安全竞赛、1 个合约监控系统以及 100 多项已解决的发现。
ChainSecurityChainSecurityCodeHawksOtterSecOtterSecChainSecurityCyberthirstOtterSecStatemindChainSecurityChainSecurityStatemindChainSecurityChainSecuritySemantic analysis, codegenSecurity advisoryCompetitive AuditRelease v0.3.10rc1Built-insBuilt-ins, bytecode genContinuous reviewv0.4.0Storage layoutModules, v0.4.0Modules, v0.4.0Storage layout, modulesCodegenABI decoder, v0.4.0Sep 23Nov 23Jan 24Mar 24May 24Jul 24Vyper Audit Timeline 2023-24(Retainer engagements marked with lighter colored bars)
我们继续与我们的长期审计师 ChainSecurity 合作,但也扩大了合作范围,聘请了一位顾问,以待命的方式提供持续的安全建议。 我们还引入了两家新的审计机构,Ottersec 和 Statemind,以提供额外的安全评估,并将不同的视角和方法引入我们的审查流程。 在黑客攻击后不久,还在 CodeHawks 上组织了一场 安全竞赛,奖金为 16 万美元。
安全竞赛是对传统审计流程的绝佳补充。 与仅有少量专家团队进行定期审计相比,大量参与者意味着更多人关注代码库。 该赛事的竞争性质也促使人们想出独特、创造性的方法来破坏事物。
CodeHawks 通过 Patrick Collins 主动提出免费运行 Vyper 的竞赛,并邀请了 Python 专家开发者参与。 obront 和 pcaversaccio 等 web3 安全专家也加入了进来。 本次竞赛共吸引了 13 名参与者,提交了 38 项发现。 本次竞赛由 Lido、Yearn、Curve、Cyfrin 和 UnoRe 赞助。
在最高严重性问题中,审计师发现 slice() 代码中存在一个整数溢出,可能导致内存损坏,以及 concat
built-in 存在一个可能导致内存损坏的问题。
本次竞赛也被证明是 Vyper 的一个招聘平台,获得第三名的 cyberthirst 随后被聘用,对代码库进行持续审查。 Cyberthirst 现在负责 Vyper 的安全,并将很快实施新的措施,以确保编译器的正确性,如下所述。
Vyper 在 2023 年 8 月 Curve 重入攻击后不久,在 ImmuneFi 上启动了第一个漏洞赏金计划,为期 1 个月,并得到了 Lido 和 Yearn 的支持。 该计划的范围是来自赞助协议的任何在线 Vyper 合约,并且赏金在这些协议现有的漏洞赏金之上提供了额外的激励。 该计划于 2023 年 9 月 14 日结束,没有申领任何赏金。
2024 年 9 月,Vyper 被添加到以太坊基金会的 漏洞赏金计划 中,用于奖励语言编译器错误。 对于关键发现,赏金最高可达 25 万美元。
Vyper 团队实施了一个全面的系统,用于监控 23 条链上已部署的 Vyper 合约。 该存储库目前索引了超过 30,000 个合约,并能够快速搜索可能受到通过审计发现的新问题影响的合约。 如果将来发生攻击,此工具还可以让团队识别其他可能受影响的合约,从而更快地降低风险。 对于所有中等或更高级别的安全建议,该团队都会进行合约搜索,以验证当前是否已部署任何易受攻击的合约(到目前为止尚未发现)。
该系统定期扫描新的 Vyper 合约,并将它们添加到私有 GitHub 存储库中。
诸如 Curve、Yearn、Snekmate 和 Lido 等主要存储库直接从 GitHub 中提取。 经过验证的 Vyper 合约也会每隔几天从区块链浏览器中提取并添加到存储库中。
在 2023 年的最后几个月里,审计的重点是现有代码库和 10 月初发布的 0.3.10 版本。
Ottersec 对 v0.3.10 的第一个候选版本进行了全面审查,发现了两个高危漏洞。
其中一个是内存溢出,因为某些内存分配并不总是强制执行以太坊的 2256 限制。
另一个是在合并并发内存操作(mload
和 mstore
)的优化过程中,在某些情况下,这可能会导致不正确的合并和意外的行为。
这两个问题都在发布之前得到了修复。
在后来的审计中,Ottersec 还与 ChainSecurity 同时审查了 Vyper 的 built-ins。
最后,在 2024 年初,Statemind 审查了自 v0.1.0b16 以来所有版本中 Vyper 的 存储布局,只发现了信息性问题。
Sep 23Nov 23Feb 24Mar 24Jun 240246810121416182022Audit Findings over TimeLowMediumHigh
高危漏洞的数量随着时间的推移而减少。
低危漏洞很容易修复,不会直接影响编译器的安全性,但可能会影响可维护性和性能。它们包括编译器崩溃、可优化代码、样式和代码卫生问题。 中危漏洞是导致意外但良性行为的错误;这些可能包括产生不正确但非关键结果的边缘情况,或不损害核心功能的逻辑错误。 高危漏洞可能会导致生产中的错误或导致潜在的漏洞。
随着即将发布的 Vyper 0.4.0 及其对该语言带来的重大更改,自今年年初以来,审计自然而然地集中在这个新版本上。
模块和新功能已由 ChainSecurity、Statemind 和 OtterSec 进行了彻底的审计。
在新引入的 range()
built-in 的参数中发现了一个高危漏洞,并在该功能发布之前进行了修补。
虽然中低危漏洞数量众多,无法在此处详细介绍,但它们当然也很重要。 这些发现揭示了 Vyper 前端和后端中的许多错误,并提供了修复建议。 除此之外,它们还强调了缺乏或不正确的文档和注释,提出了提高代码清晰度的建议,并改进了错误报告。
感谢全年进行的广泛审计,我们现在可以对 Vyper 代码库的每个重要部分进行审计覆盖。
与审计师合作的另一个优势是,从简单地阅读报告中无法直接看到的是审计师在审计过程中开发的工具。 OtterSec 和 Statemind 都开发了自己的 fuzzer,其中包含 mutation testing,以增强测试覆盖率和稳健性。 ChainSecurity 开发了另一个专门针对 multiple evaluation issues 的 fuzzer。
在审计师从事模糊测试工作的同时,该团队还开发了另一个专门针对 ABI 解码器的 fuzzer,该解码器现在是测试套件的一部分。 事实上,虽然外部审计对于 Vyper 的安全性至关重要,但强大的测试对于及早发现错误并确保新功能不会引入意外行为也必不可少。 展望未来,我们不希望仅仅依赖于其中任何一种(审计或测试)。这些是互补的努力,它们都是整体安全策略的一部分,目的是在开发周期的早期尽可能地提高编译器的安全性和稳健性。
我们改进了测试基础设施,使其能够直接与 EVM 后端连接,并增加了对在 EVM 实现之间切换的支持。 总之,这些改进使套件的运行速度提高了 1-2 个数量级,从而增加了我们在模糊测试编译器时能够运行的案例数量。
我们正在探索使用 Certora 的 prover 对 Vyper 的数学函数进行形式验证。 这些工作正在进行中,因为它们发现了 prover 本身中的错误 - 这些错误现在正在得到修复。 我们还在研究为此目的使用 hevm 和 halmos,Vyper 团队报告的几个错误已经得到修复!
最后,cyberthirst 开始研究 ivy,这是一个为 Vyper 运行时语义全新实现的解释器。它是 Vyper 语义的实时“可执行规范”。一旦它对该语言有合理的覆盖率,我们将开始使用它对编译器进行差异模糊测试,从而提高对编译器语义是否按预期运行的信心。
即将发布的 Vyper 版本将提供新功能,例如 proxy built-ins、traits、存储压缩、抽象函数以及后端(Venom)上的更多优化。 我们计划继续与我们的审计合作伙伴合作,以确保每次更改在投入生产之前都经过彻底审查和测试。
Vyper 安全性的另一个令人兴奋的进展是 cyberthirst 将要进行的实施最先进的编译器验证方法的工作。 随着越来越多的优化被添加到后端,拥有一种确保编译后的字节码与原始源代码保持语义等价性的方法变得至关重要。 这项工作将侧重于三种主要方法:
虽然这些安全措施和未来的发展对于 Vyper 的发展和可靠性至关重要,但它们需要持续的资金支持。 Vyper 开发和安全的未来最终取决于社区的支持。
如果你重视我们正在做的工作并希望帮助保持项目的安全,你可以直接捐款,或在 Gitcoin、Octant 和 Optimism 上的资助轮次中投票支持我们。
- 原文链接: blog.vyperlang.org/posts...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!