Aleo审计报告全文,来自三家机构!主网倒计时!
Aleo的粉丝朋友你们好,这里是
AleoASIA | Aleo大中华社区
Aleo最靠谱的中文社区
Aleo 完成 snarkOS 和 snarkVM 的安全审核
随着 Aleo 接近主网,评估我们代码库的安全性和完整性至关重要。我们聘请了三个独立的安全研究公司——Trail of Bits、NCC Group 和 zkSecurity——来审计 snarkOS 和 snarkVM(Aleo 网络的支柱)。
在 18 周的时间里,审计人员审查了 Aleo 的 snarkOS 和 snarkVM 组件的安全性:
-snarkOS:每家公司都对 snarkOS 进行了审查,重点关注 Bullshark BFT 实施、节点间通信以及对拒绝服务 (DoS) 的抵抗。
-snarkVM:每家公司都审查了 snarkVM,重点关注合成器和账本实现,着眼于与“Aleo 协议规范”保持一致,与正式的 Aleo 语法、数据序列化和反序列化以及交易和区块验证功能保持一致。
Trail of Bits
Trail of Bits 专注于软件测试、代码审查项目和区块链安全。他们将高端安全研究与现实世界的攻击者心态相结合,以降低风险并强化代码。
Trail of Bits 团队在 snarkOS 和 snarkVM 代码库中使用静态分析工具来识别存在代码质量问题的代码区域并获取测试覆盖率报告。此外,他们还使用 Semgrep 和 Dylint 来查找并确认手动发现的 API 滥用的变体。
他们的测试工作重点是确保处理未经验证的数据的接口的稳健性以及发现规范和实现之间的差异。该团队可以完全访问源代码和文档,使他们能够使用自动和手动流程对代码库执行静态和动态测试。
审计结果
阅读完整的 Trail of Bits 报告(https://github.com/trailofbits/publications/blob/master/reviews/2023-10-aleo-securityreview.pdf)
Trail of Bits 发现 Aleo 代码库通常对恶意或畸形数据非常稳健,并能正确验证其数据结构。他们所有的数据验证结果都具有信息严重性,除了低严重性的结果之外,在分散某些数据结构时,由于缺少数据验证,可能会导致拒绝服务 (DoS) 攻击。
然而,Trail of Bits 发现了共识算法中的一个重要函数,由于实现中的拼写错误,该函数几乎总是返回 false。最后,团队发现了一个与使用未固定的 GitHub 操作相关的中等严重性问题。
审计决议
Aleo 迅速解决了 31 个问题,以确保我们网络的安全。我们解决的问题:
FromBytes 实现中的拒绝服务向量
https://github.com/AleoHQ/snarkVM/pull/2167
2. 错误的验证导致 Finalize 命令的输入数量超出预期
https://github.com/AleoHQ/snarkVM/pull/1986
3. 解析aleo.abnf语法与实现的差异
https://github.com/AleoHQ/grammars/pull/62
4. Function、Closure 和 Finalize 反序列化例程允许大内存分配
https://github.com/AleoHQ/snarkVM/pull/1988
5. 提交指令的目标类型未经验证
https://github.com/AleoHQ/snarkVM/pull/1989
6. 不必要的溢出检查
https://github.com/AleoHQ/snarkVM/pull/1990
7. 缺少 MAX_STRUCT_ENTRIES 的上限验证
https://github.com/AleoHQ/snarkVM/commit/8ac0987523daca10bc5d4502d549fc5b65e3e70e
https://github.com/AleoHQ/snarkVM/commit/54c26e361a986fb6c1a941a8748a4384a5c1854e
8. matches_record 函数实现与其文档之间的差异
https://github.com/AleoHQ/snarkVM/pull/2163
9. /testnet3/node/env API端点提供二进制路径和存储库信息
https://github.com/AleoHQ/snarkOS/pull/2653
10. 对等最大消息限制减少一
https://github.com/AleoHQ/snarkOS/pull/2823
11. 对等方请求/响应流允许具有非节点端口的本地 IP
https://github.com/AleoHQ/snarkOS/pull/2833
12.refresh_and_insert函数可能不会返回之前看到的时间戳
https://github.com/AleoHQ/snarkOS/pull/2829
13.结构序列化没有声明正确的字段数量
https://github.com/AleoHQ/snarkVM/pull/2157
14. 总最终成本可能溢出
https://github.com/AleoHQ/snarkVM/pull/2158
15. is_sequential 函数允许 u64::MAX 到 0 转换
无法修复,“上一个”不会根据使用情况而溢出
16.请求更多的peer可能不会使用新连接的peer
不会修复,没有漏洞,但是未来可以改进
17. 委员会::新允许创建拥有四名以上成员的创世委员会
无法修复,`Committee::new` 用于测试
18. GitHub CI 操作版本未固定
目前不会修复,不会触及任何单元测试
19. 委员会排序测试不考虑验证者是否开放质押
https://github.com/AleoHQ/snarkVM/pull/2162
20. 权限验证例程中不可能匹配的情况
https://github.com/AleoHQ/snarkVM/pull/2159
21. BFT::is_linked 函数无法正确确定两个证书是否链接
https://github.com/AleoHQ/snarkOS/pull/2718
22.握手超时时,peer不会从connecting_peers中删除
https://github.com/AleoHQ/snarkOS/pull/2729
23. Rest API允许任何来源
https://github.com/AleoHQ/snarkOS/pull/2825
24.垃圾收集不收集next_gc_round
https://github.com/AleoHQ/snarkOS/pull/2826
25. 费用验证相差一
https://github.com/AleoHQ/snarkVM/pull/2160
26. 区块奖励潜在的截断和溢出
https://github.com/AleoHQ/snarkVM/pull/2161
27. 饱和加法和减法可能导致不一致
https://github.com/AleoHQ/snarkOS/pull/2832
28. IndexSet::remove 不保留 IndexMap 的顺序
无法修复:订购并不重要
29、批量证书id计算不包含原像中的签名数量
无法修复:BatchCertificate 序列化已更改
30. 块元数据和标头验证函数中缺少验证
没什么可修复的。
- 解根可以为零。
- `cumulative_weight`、`proof_targets` 和 `last_coinbase_target` 检查在 BlockHeader 中完成
31. saturating_add 和checked_sub 操作的顺序很重要
无法修复:方法已被弃用
NCC集团
NCC 集团是全球领先的软件弹性和业务连续性解决方案提供商。该公司保护软件客户免受不可预见的技术中断的影响,确保他们的关键服务始终可用。
Aleo 聘请 NCC 集团的密码学服务团队对 snarkVM 的多个组件进行实施审查。NCC Group 的评估针对 snarkVM 存储库,地址为 https://github.com/AleoHQ/snarkVM,分支 testnet3-audit-ncc,提交 0b151b9。
以下组件在范围内:
合成器:负责将更高级别的代码翻译成与底层 zk-SNARK 证明系统兼容的电路。
算法:证明系统的实现和执行以及支持它所需的原语。
分类帐:用于存储 Aleo 区块链并与之交互的数据结构和方法。
NCC Group 的审查由 https://developer.aleo.org/ 上的文档和文档草案:Aleo 协议规范(2023 年 8 月 11 日)和 Aleo Varuna 规范(2023 年 9 月 7 日)进行了补充。
该审查针对 snarkVM 的特定子组件,而不是整个库。除非另有说明,否则报告中的发现仅限于特定组件内的行为,并且可能没有充分考虑影响范围外组件的行为。
审计结果
阅读完整的 NCC 集团报告(https://research.nccgroup.com/2023/12/13/public-report-aleo-snarkvm-implementation-review/)
NCC 集团的评估发现了范围内组件的多项发现,包括:
查找“不正确的批准绑定检查”描述了如何无法正确执行块上的批准数量。
查找“批量证明构建和验证可能会跳过输入”描述了在构建或验证证明时如何省略某些输入。
查找“算术运算或随机生成后多项式中的尾随零”描述了多项式中前导零的不一致处理如何可能导致恐慌或不正确的结果。
请注意,NCC 集团报告的“业务说明”部分提供了其他业务说明和评论。
审计决议
Aleo 迅速解决了审核 1 中的 17 个问题,以确保我们的网络安全。审核 2 中的七个问题仍处于活跃状态,有待 NCC 集团审核。
审核1:
不正确的批准约束检查
https://github.com/AleoHQ/snarkVM/pull/2187
2. 批量证明构建和验证地图跳过输入
https://github.com/AleoHQ/snarkVM/pull/2032
3. 与 Aleo 协议规范相比,缺少健全性检查
没有 Github 链接
4. 推测中止交易的错误逻辑
https://github.com/AleoHQ/snarkVM/pull/2081
5. 从缓冲区反序列化时缺少边界检查
https://github.com/AleoHQ/snarkVM/pull/1988
6.算术运算或随机生成后多项式中的前导零
https://github.com/AleoHQ/snarkVM/pull/2147
7.函数ID哈希计算可能导致冲突
https://github.com/AleoHQ/snarkVM/pull/2154
8. 保留关键字列表不完整
https://github.com/AleoHQ/snarkVM/pull/2148
9. 缺少最小结构条目的绑定检查
https://github.com/AleoHQ/snarkVM/pull/2149
10. 输入的边界检查不一致或缺失
https://github.com/AleoHQ/snarkVM/pull/1986
11. 当两个操作数都为零时多项式除法不正确
https://github.com/AleoHQ/snarkVM/pull/2151
12. 多项式序列化和反序列化不会去除前导零
https://github.com/AleoHQ/snarkVM/pull/2152
13. Gamma 挑战的缺失子集成员资格检查
https://github.com/AleoHQ/snarkVM/pull/1947
14. 求值生成中的循环退出条件不正确
https://github.com/AleoHQ/snarkVM/pull/2153
15. 过时的依赖项、Cargo 审计漏洞和丢失的工具链文件
没有 Github 链接
16. 包装的轮班运算符不遵循记录的语义
https://github.com/AleoHQ/snarkVM/pull/2190
17. 错误的随机向量生成
https://github.com/AleoHQ/snarkVM/pull/2038
https://github.com/AleoHQ/snarkVM/pull/2191
重新测试后,NCC 集团发现大部分问题已得到解决。 在总共 17 项原始发现中,15 项被标记为“已修复”,一项中等严重性发现被标记为“接受风险”,一项信息性发现被标记为“未修复”。
审计 2:仍在进行中,有待 NCC 集团审核
1.InputID::Private中使用的非提交加密
https://github.com/AleoHQ/snarkVM/pull/2223
2. 块请求范围的后期/远程验证
没有 Github 链接
3. NoiseState::Handshake 的脆弱错误处理
没有 Github 链接
4. 密钥存储在明文文件中,缺少权限检查
没有 Github 链接
5. CLI 输入私钥和敏感值未清零
没有 Github 链接
6. 缺少传输响应验证
没有 Github 链接
7. 领导者选举过程与白皮书不符
没有 Github 链接
zkSecurity
zkSecurity 提供审计,确保公司的产品提供安全基线。他们对零知识证明系统、其应用程序以及使用它们的协议(例如,安全多方计算协议)进行审计。
审计 Aleo 的合成器
zkSecurity 审核了 Aleo 合成器在 Aleo 区块链中的使用情况。
Aleo合成器是用于在 Aleo 区块链上部署和执行用户程序的核心协议。它包装了 Varuna(Aleo 的基于 Marlin 的零知识证明系统),并为用户部署和执行程序以及网络验证正确的部署和执行提供了一个高级接口。(理论上,合成器支持第三个流程——收费流程——它的复杂性要低得多,并且在 zkSecurity 的报告中被省略了。)
zkSecurity 提供了涵盖合成器背后的一些协议的 Aleo 规范以及 Aleo 证明系统 Varuna 的规范。
zkSecurity 使用了 `testnet3-audit-zks` 分支(提交 `9f5246d8c28afc0aef769b723eeaa4ec4a402b9c`)。该范围包括 snarkVM 的合成器部分,它位于 snarkVM 存储库的合成器文件夹中。
审计Aleo的共识
此外,zkSecurity 还审核了 Aleo 区块链中使用的 Aleo 共识。
zkSecurity 使用 snarkOS 存储库的“testnet3-audit-zks”分支(提交“9234cbee73666c7e6d00dfbdbcb947a244a43818”)。
纳入范围:
Aleo 的 Bullshark(部分同步版本)和 Narwhal 实现用于重新共享并就全局交易顺序达成共识。
Aleo 在 snarkOS 中的高级共识逻辑(在 snarkOS/node 的某些文件夹内)。
Aleo 的账本服务,依赖于 snarkVM 存储库。
请注意,某些逻辑(例如谜题机制)超出了范围,因为计划进行替换。
审计结果
阅读完整的 zkSecurity 报告:Aleo 合成器
(chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.zksecurity.xyz/blog/2023-aleo-synthesizer.pdf)
阅读完整的 zkSecurity 报告:Aleo 共识
(chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.zksecurity.xyz/blog/2023-aleo-consensus.pdf)
在审核 Aleo 的合成器时,zkSecurity 团队发现代码有完整的文档记录、严格的测试和明确的说明。在审核 Aleo 的共识时,团队发现代码记录完整且质量很高。
审计决议
Aleo 迅速解决了这 8 个问题,以确保我们的网络安全。我们解决的问题:
1.InputID::Private中使用的非提交加密
https://github.com/AleoHQ/snarkVM/pull/2063
2. OutputID::Private 中使用的非提交加密
https://github.com/AleoHQ/snarkVM/pull/2063
3. 电路认证中的 Fiat-Shamir 变换不正确
https://github.com/AleoHQ/snarkVM/pull/2018
4. 证明委托可能会被截断
没有 Github 链接
5. 证明委托泄露用户签名密钥
https://github.com/AleoHQ/snarkVM/pull/2061
6. 调用者在函数执行过程中不固定
https://github.com/AleoHQ/snarkVM/pull/2076
7. Varuna Fiat-Shamir 转录中的模糊编码
https://github.com/AleoHQ/snarkVM/pull/2039
8. Merkle Leaf 指数并不唯一
没有 Github 链接
保护 Aleo 网络主网的安全
Aleo 是一个开源软件项目。我们从根本上相信,更多的眼睛等于更多的安全,这就是为什么我们不仅聘请了这些审核员,而且还分享了这项工作的结果。尽管我们已经解决了这些报告中分享的调查结果,但工作永远不会结束。Aleo 团队始终致力于透明度。展望未来,Aleo 基金会随时准备动员社区解决未来可能出现的错误。
我们已准备好主网。
本文译自https://aleo.org/post/aleo-completes-security-audits-of-snarkos-and-snarkvm/,2023年12月29日,Aleo工程师
Aleo 是第 1 层区块链,为网络带来隐私
打铭文暴富的看过来!靠谱变现出金U卡!费率低,平台稳!最低0元开卡,还白嫖5刀!
更多Aleo信息,请关注我们!重要的项目信息,将首发在VX群哦!
AleoAsia大中华社区,旨在为大中华区社区的伙伴传递最权威、最快速、最全面的项目资讯;同时协助Aleo在大中华区举办各种活动,包括宣传、会议、AMA等,扩大Aleo在大中华区的知名度,获得更多人对Aleo的认同感,从而加入到Aleo,一起为Aleo生态的繁荣努力!
加入AleoAsia大中华社区VX交流群,能更快获取信息哦!入群要求:请关注我们AleoAsia 公众号,并 转发文章至朋友圈,或 点赞+点看 我们文章,联系AleoAsia即可入群啦。进群请遵守群规!
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。DYOR!】