今天我们发布了一款名为siderophile的工具,它能帮助Rust开发者在代码库中寻找模糊测试目标。该工具会扫描crate的所有依赖项,定位每个不安全函数、表达式、特质方法等,然后沿调用图追溯至使用这些不安全元素的源头函数,并按危险程度(badness)进行排序——函数使用的不安全元素越多,其危险等级就越高。
Siderophile([ˈsidərəˌfīl])——对金属铁有亲和力
我们在一次紧急代码审计任务中开发了这个工具。当时需要短时间内审查一个庞大的Rust代码库,通过siderophile自动化定位高风险函数,显著加速了漏洞发现过程。现在我们将这个工具开源。
示例输出
在MLS加密协议实现库molasses上运行的示例结果:
危险度 | 函数 |
---|---|
012 | molasses::crypto::hash::HashFunction::hash_serializable |
005 | molasses::crypto::hash::HashContext::feed_serializable |
003 | molasses::utils::derive_node_values |
… | … |
可见主要风险集中在序列化和加密相关例程中,这些将是1.0版本前的重点模糊测试对象。
局限性
当前版本无法检测宏和动态分发方法中的不安全操作,且在某些crate上存在误报。我们正在积极维护项目,欢迎贡献者参与改进。
立即试用
Siderophile已发布在GitHub,包含详细使用说明。建议对您的Rust crate运行该工具,并针对发现的高风险函数设置模糊测试。
最后感谢cargo-geiger和rust-praezi项目的先驱工作。本工具很大程度上基于他们的成果。