随着 Code Risk Analyzer(CRA)被 废弃,Syft 和 Grype 扫描作为替代方案,提供了 CRA 的大部分功能。 请参阅 选择不参与代码风险分析器的扫描 以禁用 CRA 功能。
配置 IBM Cloud Code Risk Analyzer 扫描
您可以使用 IBM Cloud Code Risk Analyzer 分析代码漏洞,并根据指定规则验证合规性。
Code Risk Analyzer 评估应用程序时,会生成一份软件材料清单 (SBOM),列出所有第三方软件包的依赖关系和可用许可信息。 如果需要,可以使用 cycloneDX-specific 格式生成此值。 将扫描 SBOM 文件中列出的包以查找漏洞。 该文件可以 cycloneDX-specific 格式生成。 另外,您也可以启用自动修复功能,对 Node.js、Maven 或 Gradle 编写的应用程序发现的漏洞进行修复。
- 将对所有 Kubernetes 文件进行合规性分析。
- 将对所有 Terraform 计划进行合规性分析。
代码风险分析器可在支持工具链的所有 IBM Cloud 地区使用。 有关更多信息,请参阅 插件文档。
配置扫描
要生成 SBOM 文件,Code Risk Analyzer 扫描将访问指定目录路径中的工件,并执行深度发现以识别所有依赖关系 (包括跟踪依赖关系)。 没有生成 SBOM 文件和发现漏洞所需的特定管道环境变量,但如果路径包含 Dockerfile,那么会拉取基本映像,并为文件中指定的每个构建阶段构建映像。
如果 Dockerfile 需要 ARGS,请将单个 ARG 设置为定制脚本中的环境变量,并提供定制脚本的位置作为管道可 vairable。
| 环境变量 | 描述 | 必需或可选 | 用途 |
|---|---|---|---|
cra-custom-script-path |
源中脚本的路径。 | 可选 | 设置 Docker 脚本需要的环境变量。 |
有关更多信息,请参阅 定制脚本
缺省情况下,不会分析 Terraform 文件。 要扫描 Terraform 文件,必须设置以下管道环境变量。
| 环境变量 | 描述 | 必需或可选 | 用途 |
|---|---|---|---|
opt-in-tfsec |
True 或 False。 缺省情况下设置为 false。 | 可选 | 扫描 Terraform 文件以获取安全性。 |
opt-in-cra-tf-validate |
True 或 False。 缺省情况下设置为 false。 | 可选 | 验证 Terraform 文件。 |
Code Risk Analyzer 扫描使用提供的 API 密钥登录到 IBMCloud CLI 并触发 Docker 构建。 现有 IBM Cloud CLI 会话将继续用于此 CRA 步骤的其余部分。 但是,对于标准 API 密钥登录,IBM Cloud CLI 会话将在 20 分钟后到期。 如果构建过程耗时超过 20 分钟,那么由于会话已到期,CRA 步骤将失败并显示 401 错误消息。 引入了环境变量 ibmcloud-enable-session-keep-alive,以便使
IBMCloud CLI 会话在如此长时间的操作中保持活动状态。
| 环境变量 | 描述 | 类型 | 必需或可选 | 用途 |
|---|---|---|---|---|
ibmcloud-enable-session-keep-alive |
0 或 1。 默认设置为 0。 | select | 可选 | 在 Code Risk Analyzer 扫描中,使长时间运行的作业的 IBMCloud CLI 会话保持活动状态。 |
缺省情况下,Code Risk Analyzer deployment-analyze 命令在 Kubernetes 部署清单上运行 配置检查。 Code Risk Analyzer deployment-analyze 命令使用 --strict 选项集运行。 要在 Code Risk Analyzer 部署-分析扫描期间忽略文件,必须使用以下环境变量。
| 环境变量 | 描述 | 必需或可选 | 用途 |
|---|---|---|---|
cra-cis-fileignore-path |
存储库中 .fileignore 文件的路径。 | 可选 | 指定 .fileignore 文件的路径,该文件包含代码风险分析器部署分析扫描期间要忽略的文件的信息。 |
省略漏洞以部署应用程序
代码风险分析器旨在抢在咨询委员会之前发现易受攻击的软件包。 在特殊情况下,您可能需要部署应用程序,即使检测到易受攻击的软件包并且尚未修复。 在可能的情况下,您应该在重新部署代码之前更新软件包或将其除去。
要忽略特定文件并完成推送到生产环境,可以使用以下模式在扫描的存储库根目录中创建名为 .cra/.cveignore 的文件:
[
{
"cve": "string",
"alwaysOmit": "bool",
"untilRemediationAvailable": "bool",
"expiration": "string"
},
]
以下代码片段显示了样本 .cveignore 文件:
[
{
"cve": "CVE-2021-27290",
"alwaysOmit": true
},
{
"cve": "CVE-2020-8244",
"untilRemediationAvailable": true,
},
{
"cve": "CLAIR-JAVA-ORGAPACHEHTTPCOMPONENTS-31517",
"expiration": "2022-02-10T22:08:41+04:00",
"comment": "Additional security measures are in place"
}
]
此文件以前称为 .craveomit。 原始文件格式已 不推荐 并由 .cra/.cveignore 替换。 请更新代码以使用最新文件。
您可以了解有关 Code Risk Analyzer 插件的文档 的更多信息,也可以检查 不推荐使用的 CRA 文档。
自动修复漏洞
您可以使用 Code Risk Analyzer 作为持续合规性 (CC) 管道的一部分,不仅可以查找漏洞,还可以自动修复漏洞。 代码风险分析器作为管道的 compliance-check 步骤的一部分工作。 默认情况下,自动修复功能处于关闭状态。
自动补救仅可用于 CC 管道。
开启自动补救后,Code Risk Analyzer 会尝试通过针对存储库的缺省分支创建具有所标识修订的拉取请求,将易受攻击的包更新为不可 vunlnerable 版本。 缺省情况下,Code Risk Analyzer 将更新主易受攻击软件包以及从属软件包的次要版本和补丁版本,但不会更新软件包的主要版本。 如果可接受拉取请求,那么可以手动核准并合并该请求。 每次运行管道时,都会生成新的拉取请求,因此请确保在打开这些请求时进行复审和合并,以避免重复。
自动修复可用于 Enterprise GitHub 和 GitLab 存储库,并且可以修改下表中指定的文件。
| 生态系统 | 可修改文件 |
|---|---|
| Nodejs | package.json 和 package-lock.json |
| Gradle | build.gradle、gradle.lockfile 和 buildscript-gradle.lockfile |
| Maven | pom.xml |
要开始自动修复漏洞,请为管道设置以下可选环境变量。
| 变量 | 描述 | 缺省设置 |
|---|---|---|
opt-in-cra-auto-remediation |
为管道启用自动补救。 | false要开始补救,请将此变量设置为 true。 |
opt-in-cra-auto-remediation-force |
在打开的拉取请求中强制主软件包更新。 | false要强制主软件包更新,请将此变量设置为 true。 |
opt-in-cra-auto-remediation-enabled-repos |
指定要在其中启用自动补救的特定存储库。 | 针对调用 list_repos 时返回的所有存储库启用。 要指定特定存储库,请提供以逗号分隔的存储库名称列表。 |
选择不参与代码风险分析器的扫描
设置以下环境变量,以停用 Code Risk Analyzer 的扫描功能。
| 变量 | 类型 | 必需或可选 | 选择退出值 | 缺省值 | 备用 |
|---|---|---|---|---|---|
cra-bom-generate |
枚举值 | 可选 | 0 |
1 |
Syft |
cra-vulnerability-scan |
枚举值 | 可选 | 0 |
1 |
Grype |
cra-deploy-analysis |
枚举值 | 可选 | 0 |
1 |
契诃夫 |
opt-in-cra-tf-validate |
枚举值 | 可选 | 0 |
1 |
契诃夫 |
默认情况下,漏洞扫描和部署分析扫描被设置为分支保护的必选检查项。 如果您希望取消其中任何一项扫描,请确保 自定义合规性检查 并 配置分支保护规则。