今天我们发布了一款名为Siderophile的工具,它能帮助Rust开发者在代码库中寻找模糊测试目标。Siderophile会扫描你的crate依赖项,找出所有unsafe函数、表达式、特质方法等,然后沿着调用图追溯,直到定位到你的crate中使用这些不安全代码的函数。它会根据"危险度"对发现的函数进行排序——函数使用的不安全代码越多,其危险度评级就越高。
Siderophile [ˈsidərəˌfīl] ——对金属铁有亲和力
我们开发Siderophile是为了应对一个紧急项目:客户交付了一个庞大的Rust代码库,但审查时间非常有限。我们想进行模糊测试,却不知从何处入手。于是我们创建了这个工具来识别哪些函数调用了最多的不安全行为。通过自动化目标定位过程,我们显著加快了漏洞发现速度。现在我们将这个工具开源,让所有人都能受益!
示例输出
以下是在我们正在开发的MLS加密协议实现crate——molasses上运行Siderophile的示例结果:
|
|
如你所见,大部分不安全代码来自序列化和加密相关例程。在发布1.0版本前,我们肯定会先对这些代码进行模糊测试。
局限性
该工具不能保证捕获crate依赖项中的所有不安全代码。例如,由于unsafe标记仅发生在源代码级别,我们无法检查宏或解析动态分发方法。工具的易用性也有待改进,而且我们已经发现它在某些crate上会出现错误行为。如果你有兴趣帮忙改进,欢迎参与!我们正在积极维护这个项目,并已经列出了一些待解决的问题。
试用
Siderophile已发布在GitHub上,那里有更详细的工作原理说明和使用指南。你应该在自己的Rust crate上运行它,并为发现的问题设置模糊测试器。快去试试吧!
最后,感谢cargo-geiger和rust-praezi提供当前最佳实践。这个项目主要归功于他们的工作。