Siderophile:暴露你的Crate中的不安全代码 - The Trail of Bits博客
Trail of Bits博客
Siderophile:暴露你的Crate中的不安全代码
Trail of Bits
2019年7月1日
程序分析,Rust
今天我们发布了一款工具siderophile,帮助Rust开发者在代码库中寻找模糊测试目标。
Siderophile会遍历你的crate依赖项,尝试找到每个不安全函数、表达式、特质方法等。然后它沿着调用图向上追踪,直到找到你的crate中使用这些不安全代码的函数。它会根据"危险度"对你crate中找到的函数进行排名——函数使用的不安全代码越多,其危险度评级就越高。
Siderophile ([ˈsidərəˌfīl]) – 对金属铁有亲和力
我们创建Siderophile是为了一个项目,当时我们收到了一个庞大的Rust代码库,但审查时间非常紧张。我们想要进行模糊测试,但甚至不确定从哪里开始。因此,我们创建了一个工具来确定哪些函数调用了最多的不安全行为。通过使用siderophile自动化目标定位过程,我们能够加速漏洞发现。我们现在开源这个工具,让每个人都能从中受益!
示例输出
以下是在molasses上运行siderophile的示例输出,这是我们正在构建的一个完全实现MLS加密协议的crate:
危险度 | 函数 |
---|---|
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提供当前的最佳实践。这个项目主要归功于他们的工作。