Rust代码安全分析工具Siderophile:自动检测unsafe代码漏洞

本文介绍Trail of Bits开源的Rust安全分析工具Siderophile,该工具通过分析crate依赖关系自动检测unsafe代码使用情况,按危险程度排序函数,帮助开发者快速定位模糊测试目标,提升Rust代码安全性。

Siderophile:暴露你的Crate不安全代码 - Trail of Bits博客

今天我们发布了一款工具siderophile,帮助Rust开发者在代码库中寻找模糊测试目标。

Siderophile会遍历你的crate依赖项,尝试找出所有unsafe函数、表达式、特质方法等。然后沿着调用图向上追踪,直到找到你的crate中使用这些不安全代码的函数。它会根据"危险程度"对你crate中的函数进行排序——函数使用的不安全代码越多,其危险程度评级就越高。

Siderophile ([ˈsidərəˌfīl]) – 对金属铁具有亲和力

我们创建Siderophile是为了在一个时间紧迫的审计项目中,需要审查一个庞大的Rust代码库。我们想要进行模糊测试,但甚至不知道从哪里开始。因此,我们创建了这个工具来确定哪些函数调用了最多的不安全行为。通过使用siderophile自动化目标定位过程,我们能够加速漏洞发现。我们现在将其开源,让每个人都能从中受益!

示例输出

以下是在molasses(我们正在构建的完全实现MLS加密协议的crate)上运行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 设计