MASTG-TECH-0133: 通过扫描包管理器工件对 iOS 依赖项进行软件组成分析 (SCA)
iOS 有几个依赖管理器,其中最受欢迎的是
依赖项在构建过程中集成到项目中,然后编译到 IPA 文件中。但是,依赖项的版本信息可能会在编译过程中被剥离,这意味着我们无法扫描 IPA 文件。幸运的是,我们可以扫描依赖管理器生成的工件。
诸如 dependency-check 的工具可以扫描所有三个依赖管理器创建的文件。这些文件将依赖项列为 通用平台枚举 (CPE) 及其版本。CPE 将包含在 iOS 应用程序中。然后,这些工具通过针对漏洞数据库(例如国家漏洞数据库 (NVD))检查依赖项来搜索依赖项中的已知漏洞或 CVE(通用漏洞披露)。
请注意, dependency-check 支持 Carthage、CocoaPods 和 SwiftPM,但这些分析器被认为是实验性的。虽然这些分析器可能很有用并提供有效的结果,但必须完成更多测试以确保可接受的误报/漏报率。
要使用 dependency-check 进行测试,我们需要检索依赖管理器的相应文件
- 对于 Carthage,它是文件
Cartfile.resolved
。 - 对于 CocoaPods,它是文件
*.podspec
或Podfile.lock
- 对于 SwiftPM,它是文件
Package.swift
或Package.resolved
请记住,开发人员可能使用多个依赖管理器,因此您可能需要执行多次扫描。使用 dependency-check 进行扫描时,扫描依赖管理器创建的文件就足够了;您无需访问整个 Xcode 项目或源代码。
在运行扫描之前,请获取 NVD 的 API 密钥。此密钥用于检索最新的 CVE 信息。您可以从 https://nvd.nist.gov/developers/request-an-api-key 请求 API 密钥以访问 NVD API。
- 要开始扫描使用 SwiftPM 的项目,请执行以下命令扫描
Package.Swift
或Package.resolved
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Package.resolved
- 要开始扫描使用 CocoaPods 的项目,请执行以下命令扫描
Podfile.lock
或*.podspec
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Podfile.lock
- 要开始扫描使用 Carthage 的项目,请执行以下命令扫描
Cartfile.resolved.
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <YOUR-API-KEY> -s Cartfile.resolved
输出始终是一个 SARIF 文件,可以使用 Visual Studio Code (vscode) 中的 Sarif 查看器插件查看。找到的任何已知漏洞都将与其 CVE 编号和描述一起列出。
一次只能扫描一个文件。扫描 CocoaPods 或 Carthage 时,请使用相同的命令但扫描相应的依赖管理器文件。