Halborn是一个安全工程团队,已完成对 Neon 治理计划的安全审计。本次审计于 2022 年 4 月 27 日开始,至 2022 年 5 月 8 日结束。本次安全审计是在Ackee Blockchain于 2022 年 7 月 22 日完成的审计之外进行的。
在审计过程结束时,最终报告已提交给 Neon Labs 团队。在本文中,我们将讨论最终审计报告中记录的 Halborn 安全审计的范围、目标、流程和重要发现。
安全评估的范围是两个 Solana 程序:spl-governance-addin-fixed-weights 合约和spl-governance-addin-vesting 合约。 审计的具体提交是nonlabsorg /neon-spl-governance存储库的c0c3732cf0aa0b90527f54a0068367d8d03af748 。这些程序与 Neon 项目治理相关,并依靠 SPL-Governance 和各种其他 Solana 库为 Neon 生态系统的参与者提供自定义治理流程。
外部图书馆和与财务相关的攻击超出了 Halborn 审计的范围。
Neon Labs 不断强调高安全标准的重要性。这就是团队决定与 Halborn 以及 Ackee Blockchain 合作来审查 Neon 的治理合同的原因。进行了安全审计以确保范围内的 Solana 程序正常运行并识别潜在的安全漏洞。
**安全审计的流程
**
Halborn 结合使用手动代码审查和自动安全测试来提供准确的审计服务,同时牢记效率、及时性和实用性。手动测试主要用于发现逻辑、流程和实施中的缺陷。为了补充手动测试,自动化测试技术有助于提高程序覆盖率并快速识别不符合安全最佳实践的项目。
审计程序和相关工具如下:
研究 Neon 平台的架构、用途和用途。
审查和演练 Solana 程序手动代码审查以确定逻辑问题。
彻底评估可能导致算术漏洞的关键范围内 Rust 变量和函数的安全性和使用情况。
使用cargo-geiger安全工具查找不安全的 Rust 代码使用情况,该工具列出了与使用 Rust 代码库及其依赖项中存在的不安全 Rust 代码相关的统计信息。
使用cargo 审计工具扫描依赖项以查找已知漏洞,该工具会扫描报告给 RustSec 咨询数据库的漏洞。RustSec 咨询数据库存储在https://crates.io 中发布的所有漏洞。
部署本地集群 ( solana-test-validator )。
使用soteria扫描常见的 Solana 漏洞,这是一种针对 Solana 程序的安全分析服务,可帮助检测众所周知的安全问题。
Halborn 通过计算安全事件发生的可能性以及事件发生时的影响来对漏洞或问题进行排名。然后将可能性和影响评级纳入评分框架,以确定风险的严重程度(信息、低、中、高和严重)。该框架对于传达技术漏洞的特征和后果很有用。定量模型确保了一致和准确的测量,同时还允许用户查看在确定风险优先级时考虑的潜在漏洞特征。
作为安全审计的输出,Halborn 确定了两个主要风险:(HAL-01)货物溢出检查缺失和***(HAL-02)过时的依赖版本。***Neon Labs 团队现在已经解决了这两种风险。可以在下面找到更多详细信息。
观察到在任何 Cargo.toml 文件中都没有 overflow-checks=true。默认情况下,溢出检查在优化的发布版本中被禁用。因此,如果发布构建中出现溢出,它将默默通过,从而导致应用程序出现意外行为。即使使用检查算法(checked_*),仍然建议在 Cargo.toml 中进行检查。
该发现被评为低风险,并已得到解决。Neon Labs 团队通过在提交5425078d1c45c62f92b5bb90492bbaeac751ec7b的工作区 Cargo.toml 文件中添加 overflows-check=true 解决了这个问题。
由于各种原因,软件不断更新。驱动程序引入更新,包括添加新功能、删除旧功能以及修补错误和漏洞。Halborn 团队检测到 spl-governance-addin-vesting 和 spl-governance-addin-fixed-wights 软件包的版本评估了引用的 solana-program 和 spl-token 的过时版本,这可能导致逻辑流程出现故障。
该发现被评为信息风险,并已得到解决。Neon Labs 团队通过在提交5425078d1c45c62f92b5bb90492bbaeac751ec7b 中将solana-program 和 spl-token 更新到其最新版本来解决此问题。
感谢您抽出宝贵时间查看 Halborn 安全审计的结果。如果您对安全审计或相关调查结果有任何疑问,请随时与我们联系。您可以通过Discord联系团队。最后,在Twitter、GitHub、YouTube和Medium上与团队保持联系,以获取更多开发更新和公告。