Siderophile:挖掘Rust代码库中的不安全代码靶点

Siderophile是一款专为Rust开发者设计的工具,能够遍历代码库依赖项,识别不安全函数并追踪调用关系,按危险程度排序函数,帮助快速定位模糊测试目标,提升代码审计效率。

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

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

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

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

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

示例输出

以下是在molasses(我们正在构建的一个完全实现MLS加密协议的crate)上运行siderophile的示例输出:

危险程度 函数
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依赖项中的所有不安全代码。例如,我们无法检查宏或解析动态分发的方法,因为不安全标记只发生在源代码级别。该工具的易用性可以更好,并且我们已经发现某些crate上存在一些不正确行为。如果你有兴趣帮忙,请务必参与!我们正在积极维护这个项目,并已经写出了一些问题。

尝试使用

Siderophile已在Github上发布,并附有更详细的工作原理和运行说明。你应该在你的Rust crate上运行它,并为它找到的内容设置模糊测试器。快去看看吧!

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

如果你喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

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