2 个版本
0.1.1 | 2019 年 5 月 8 日 |
---|---|
0.1.0 | 2019 年 5 月 5 日 |
#597 在 Cargo 插件
8KB
107 行
Cargo Permissions
⚠️ 此仓库仅是一个原型
Rust 的一个核心原则是安全性。为了保持 crates.io 中包的健康发展,我们需要尽可能多地执行各种方法来检测任何类型的漏洞。
Crates.io,与其他许多包仓库一样,面临着保持所有可用包的可靠性和安全性的挑战。这些仓库的开发者和用户对仓库维护者抱有很大的信心。
随着包之间依赖性的增加,漏洞传播的风险也在增加。一个著名的crate中的小安全问题可能导致许多项目中出现大问题。我们在 NPM 等其他平台上看到了许多类似的安全问题。
此包试图通过源代码分析和依赖树分析的方法来最小化已知风险用例的影响。我们可以利用静态分析来了解包底层的运行情况。
此项目的主要想法是,将一组与一些特定标准包列表相关联的权限。另一方面,通过 AST 分析,检查 crate 使用的标准库。例如,如果一个 crate 开始使用 std::net
库,它将获得 net
权限。所有使用此其他 crate 作为依赖项的 crate 都将间接获得 net
权限。这种权限获取将一直持续到最后一个包。
采用这种方法,我们可以构建一个包含所有获取到的权限的依赖树。这组权限将为我们提供关于我们不控制的包的尽可能多的信息。
有了这些权限,我们可以回答以下问题
- 为什么一个 png 库使用网络层?
- 为什么一个 http 库使用文件系统层?
这种方法受到了不同平台中权限系统(如)的启发
风险用例
- 读取未经授权的文件
- 向不受信任的域名发出请求
- 执行未经授权的程序
- 窃取信息
- 窃取 CPU 资源
- 不安全地执行代码
权限
- fs: 此 crate 使用标准文件系统库
- net:此crate使用标准网络系统库
- io:此crate使用标准io系统库
- process:此crate使用标准进程系统库
- thread:此crate使用标准线程系统库
- unsafe:此crate使用unsafe代码
依赖项
~2.5MB
~51K SLoC