Rust由于其内存安全保证,在编写安全性至关重要的程序方面前景很好。但是,尽管Rust crates中的漏洞较为少见,但是仍然存在,并且Rust当前缺少处理他们的工具。
例如,如果你运行一个存在漏洞的Linux发行版,它会对你进行提示,你甚至可以选择进行自动安全更新。Cargo不仅没有安全更新的基础设施,它甚至都不知道是哪些库或哪个库编译了一个二进制,所以就没办法检查你的系统是否存在漏洞。
我以及开始着手准备解决这个问题。
今天我很高兴宣布auditable这个crate的最初发布。它将依赖关系树嵌入到编译后的可执行程序,因此你可以检查在构建过程中使用了哪个crate。主要动机是为了能够回答 “我们在生产中实际运行的Rust二进制文件是否有任何已知的漏洞?”甚至可以让像云提供商这样的第三方来自动完成这件事。
我们提供了处理这些信息的crate[1],你可以通过它轻松构建自己的工具,还有一个转换器可以转为Cargo.lock的形式以便于兼容已有的工具。这些信息以及可以和cargo-audit[2]一起使用,见这里[3]的例子。
demo以及更多内部信息请看这个仓库[4],包括像二进制碰撞这样的经常被问到的问题[5]。
最终的目标是在 Cargo 中集成这个功能,并在对可执行文件大小没有严格限制的所有平台上默认启用。在这里[6]可以找到一份尚未合并的RFC。现在,主要的阻碍因素是:
rustc中的这个缺陷[7]阻碍了集成到Cargo中的正确实现
在稳定之前,我们需要积累一些数据格式的经验
如果你正在运行生产中的 Rust 工作负载,并且希望能够审计它们的安全漏洞,请与我联系。我很乐意协助在现实世界的环境中部署使用的auditable,以消除这些缺陷。
注:本文翻译自auditable作者在reddit上发布的一个主题帖子,下面还有一些讨论,详见:https://www.reddit.com/r/rust/comments/iotx5u/introducing_auditable_audit_rust_binaries_for/
参考资料
[1]crate: http://docs.rs/auditable_extract/
[2]cargo-audit: https://github.com/RustSec/cargo-audit
[3]这里: https://github.com/Shnatsel/rust-audit#demo
[4]仓库: https://github.com/Shnatsel/rust-audit
[5]经常被问到的问题: https://github.com/Shnatsel/rust-audit#faq
[6]这里: https://github.com/rust-lang/rfcs/pull/2801
[7]rustc中的这个缺陷: https://github.com/rust-lang/rust/issues/47384
本文禁止转载,谢谢配合!! !欢迎关注我的微信公众号: Rust碎碎念