Siderophile:暴露你的Rust代码库中的不安全代码

Siderophile是一款帮助Rust开发者发现代码库中模糊测试目标的工具,它能追踪依赖项中的不安全函数并评估风险等级,显著提升漏洞发现效率。

今天我们发布了一款名为Siderophile的工具,它能帮助Rust开发者在代码库中寻找模糊测试目标。Siderophile会扫描你的crate依赖项,找出所有unsafe函数、表达式、特质方法等,然后沿着调用图追溯,直到定位到你的crate中使用这些不安全代码的函数。它会根据"危险度"对发现的函数进行排序——函数使用的不安全代码越多,其危险度评级就越高。

Siderophile [ˈsidərəˌfīl] ——对金属铁有亲和力

我们开发Siderophile是为了应对一个紧急项目:客户交付了一个庞大的Rust代码库,但审查时间非常有限。我们想进行模糊测试,却不知从何处入手。于是我们创建了这个工具来识别哪些函数调用了最多的不安全行为。通过自动化目标定位过程,我们显著加快了漏洞发现速度。现在我们将这个工具开源,让所有人都能受益!

示例输出

以下是在我们正在开发的MLS加密协议实现crate——molasses上运行Siderophile的示例结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
危险度 函数
012 molasses::crypto::hash::HashFunction::hash_serializable
005 molasses::crypto::hash::HashContext::feed_serializable
003 molasses::utils::derive_node_values
003 molasses::application::encrypt_application_message
003 molasses::application::decrypt_application_message
003 molasses::group_ctx::GroupContext::new_from_parts
003 molasses::group_ctx::GroupContext::from_welcome
003 molasses::group_ctx::GroupContext::update_transcript_hash
003 molasses::group_ctx::GroupContext::update_tree_hash
003 molasses::group_ctx::GroupContext::update_epoch_secrets
003 molasses::group_ctx::GroupContext::apply_update
...

如你所见,大部分不安全代码来自序列化和加密相关例程。在发布1.0版本前,我们肯定会先对这些代码进行模糊测试。

局限性

该工具不能保证捕获crate依赖项中的所有不安全代码。例如,由于unsafe标记仅发生在源代码级别,我们无法检查宏或解析动态分发方法。工具的易用性也有待改进,而且我们已经发现它在某些crate上会出现错误行为。如果你有兴趣帮忙改进,欢迎参与!我们正在积极维护这个项目,并已经列出了一些待解决的问题。

试用

Siderophile已发布在GitHub上,那里有更详细的工作原理说明和使用指南。你应该在自己的Rust crate上运行它,并为发现的问题设置模糊测试器。快去试试吧!

最后,感谢cargo-geiger和rust-praezi提供当前最佳实践。这个项目主要归功于他们的工作。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计