Nightshade 为 Midnight 的 Compact 合约带来安全分析

开发者 Dickson Wu 使用刻意植入的缺陷和 300 份公开可用的合约对这款开源工具进行了测试。

By SongMarketCap

Midnight News - Nightshade 为 Midnight 的 Compact 合约带来安全分析

Nightshade 是一款静态分析工具,旨在帮助开发者审查用 Compact 编写的智能合约。Compact 是在 Midnight 上构建应用所使用的编程语言。

该工具由 Wu 于 10 月 29 日在 Midnight Forum 上介绍。它依据 96 条规则检查源代码,并标记可能需要进一步审视的模式。其结果会指出相关代码行,并包含旨在帮助开发者调查问题的信息。

Nightshade 检查 Compact 代码中的安全模式

静态分析无需运行合约即可审视源代码。Nightshade 采用这种方法查找与隐私、授权以及合约逻辑其他部分相关的模式。

Wu 指出的一个示例涉及在授权检查中使用过的私密信息随后被发布到账本。开发者可能打算用该信息来确认用户的权限,同时保持其底层值的私密性。之后将其发布可能会暴露原本应受保护的信息。

其他检查会查找被丢弃的签名验证结果,以及将见证值视为身份证明的情形。该工具还会标记涉及由调用方提供的时间且未基于链上时间设定边界的模式,以及未进行成员性检验的 Merkle 证明。

据 Wu 介绍,对于每项发现,Nightshade 会提供相关源码行、数据经过的路径以及建议的修复。这为开发者审视某个数值在合约中的流动方式以及被标记行为发生的位置提供了起点。

仅凭一条警告并不能证明合约已遭利用或信息已被泄露。同样,完成一次分析也不能保证合约是安全的。

Dickson Wu 分享 Nightshade 测试结果

Wu 使用包含刻意植入缺陷的测试用例对 Nightshade 进行了评估。他报告称,该工具检测到了评估所覆盖的266 个含漏洞用例中的 263 个。

该开发者还测试了这些用例的修复版本。对于242 个已修复版本中的 240 个,Nightshade 未给出任何警告,而对另外两个仍给出了发现。这些结果仅描述了该次评估所用的测试用例,并不代表对所有可能的安全问题的检测率。

随后,Wu 将该工具运行在来自 144 个代码库的300 个公开的 Compact 合约上。据其报告,在此过程中没有发生崩溃,并识别出有 258 份合约完成了完整分析。

这种区分很重要,因为完成扫描与未发现问题是两种不同的结果。根据 Wu 的说法,未完成完整分析的合约会被报告为不完整,而不是被视为干净。

该开发者与工具一同发布了评估方法和测试统计,便于他人审视这些报告结果是如何得出的。

[NEWSBREAK]

离线分析与开发者集成

据 Wu 介绍,Nightshade 可在本地运行,扫描源代码不需要互联网连接或 Compact 编译器。该工具支持 Compact 编译器版本0.28 到 0.35。

开发者可以以文本形式查看发现,或将其导出为 JSON 和 SARIF 格式。还提供了一个 GitHub Action,可在审查拟议代码变更期间显示结果,将这些发现置于开发者已在使用的审查更新的工作流之中。

该工具以 Apache 2.0 开源许可发布。Wu 介绍了版本0.1.1,并邀请开发者分享反馈、报告误报并提出新增规则建议。