基础设施即代码(IaC)扫描

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

基础架构即代码 (IaC) 扫描在您的 CI/CD 流水线中运行,检查您的基础架构定义文件中已知的漏洞。在提交到默认分支之前识别漏洞,以主动解决应用程序的风险。

IaC 扫描分析器输出 JSON 格式的报告作为 作业产物

使用极狐GitLab 旗舰版,IaC 扫描结果也会被处理,您可以:

  • 在合并请求中查看它们。
  • 在审批工作流中使用它们。
  • 在漏洞报告中审核它们。

启用扫描器#

先决条件:

  • IaC 扫描需要 AMD64 架构。Microsoft Windows 不支持。
  • 至少需要 4 GB RAM 以确保一致的性能。
  • .gitlab-ci.yml 文件中需要 test 阶段。
  • 在极狐GitLab 私有化部署中,您需要极狐GitLab Runner 和 dockerkubernetes 执行器。
  • 如果您在 JihuLab.com 上使用 SaaS runners,这已默认启用。

要启用项目的 IaC 扫描:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。

  2. 选择 构建 > 流水线编辑器

  3. 复制并粘贴以下内容到 .gitlab-ci.yml 文件底部。如果已经存在 include 行,仅在其下面添加 template 行。

    yaml
    include: - template: Jobs/SAST-IaC.gitlab-ci.yml
  4. 选择 验证 标签,然后选择 验证流水线。 消息 模拟成功完成 表示文件有效。

  5. 选择 编辑 标签。

  6. 选择 提交更改

流水线现在包含一个 IaC 扫描作业。

支持的语言和框架#

IaC 扫描支持多种 IaC 配置文件。当在项目中检测到任何支持的配置文件时,它们将使用 KICS 进行扫描。支持混合 IaC 配置文件的项目。

支持的配置格式:

  • Ansible

  • AWS CloudFormation

  • Azure Resource Manager

    IaC 扫描可以分析 JSON 格式的 Azure Resource Manager 模板。如果您以 Bicep 编写模板,您必须使用 Bicep CLI 将 Bicep 文件转换为 JSON,然后 IaC 扫描才能分析它们。
  • Dockerfile

  • Kubernetes

  • OpenAPI

  • Terraform

    自定义仓库中的 Terraform 模块不会被扫描漏洞。

自定义规则#

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署

您可以自定义极狐GitLab 提供的默认 IaC 扫描规则。

以下自定义选项可以单独使用或一起使用:

规则集定义#

每个 IaC 扫描规则都包含在 ruleset 部分中,其中包含:

  • 规则的 type 字段。对于 IaC 扫描,标识符类型是 kics_id
  • 规则标识符的 value 字段。KICS 规则标识符是字母数字字符串。 要查找规则标识符:

禁用规则#

您可以禁用特定的 IaC 扫描规则。

要禁用分析器规则:

  1. 在项目根目录下创建一个 .gitlab 目录,如果尚不存在。
  2. .gitlab 目录中创建一个名为 sast-ruleset.toml 的自定义规则集文件,如果尚不存在。
  3. ruleset 部分的上下文中设置 disabled 标志为 true
  4. 在一个或多个 ruleset 子部分中列出要禁用的规则。

在将 sast-ruleset.toml 文件合并到默认分支后,禁用规则的现有发现会被 自动解决

在以下示例 sast-ruleset.toml 文件中,禁用的规则通过匹配标识符的 typevalue 被分配给 kics 分析器:

toml
1[kics] 2 [[kics.ruleset]] 3 disable = true 4 [kics.ruleset.identifier] 5 type = "kics_id" 6 value = "8212e2d7-e683-49bc-bf78-d6799075c5a7" 7 8 [[kics.ruleset]] 9 disable = true 10 [kics.ruleset.identifier] 11 type = "kics_id" 12 value = "b03a748a-542d-44f4-bb86-9199ab4fd2d5"

使用注释禁用扫描#

您可以使用 KICS 注释来控制基于 KICS 的极狐GitLab IaC 扫描分析器如何扫描您的代码库。例如:

  • 要跳过扫描整个文件,可以在文件顶部添加 # kics-scan ignore 作为注释。
  • 要在整个文件中禁用特定规则,可以在文件顶部添加 # kics-scan disable=<kics_id> 作为注释。
此功能仅适用于某些类型的 IaC 文件。

覆盖规则#

您可以覆盖特定的 IaC 扫描规则以自定义它们。例如,分配较低的严重性或链接到关于如何解决发现的自己的文档。

要覆盖规则:

  1. 在项目根目录下创建一个 .gitlab 目录,如果尚不存在。
  2. .gitlab 目录中创建一个名为 sast-ruleset.toml 的自定义规则集文件,如果尚不存在。
  3. 在一个或多个 ruleset.identifier 子部分中列出要覆盖的规则。
  4. ruleset 部分的 ruleset.override 上下文中,提供要覆盖的键。可以覆盖任何键的组合。有效的键是:
    • description
    • message
    • name
    • severity (有效选项是:Critical, High, Medium, Low, Unknown, Info)

在以下示例 sast-ruleset.toml 文件中,通过标识符的 typevalue 匹配规则,然后进行覆盖:

toml
1[kics] 2 [[kics.ruleset]] 3 [kics.ruleset.identifier] 4 type = "kics_id" 5 value = "8212e2d7-e683-49bc-bf78-d6799075c5a7" 6 [kics.ruleset.override] 7 description = "OVERRIDDEN description" 8 message = "OVERRIDDEN message" 9 name = "OVERRIDDEN name" 10 severity = "Info"

离线配置#

  • Tier: 专业版, 旗舰版
  • Offering: 极狐GitLab 私有化部署

离线环境对通过互联网访问外部资源有限制或间歇性访问。对于处于这种环境的实例,IaC 需要进行一些配置更改。本节中的说明必须与 离线环境 中详细的说明一起完成。

配置极狐GitLab Runner#

默认情况下,runner 尝试从极狐GitLab 容器仓库中拉取 Docker 镜像,即使有本地副本可用。您应该使用此默认设置,以确保 Docker 镜像保持最新。但是,如果没有网络连接可用,您必须更改默认的极狐GitLab Runner pull_policy 变量。

将极狐GitLab Runner CI/CD 变量 pull_policy 配置为 if-not-present

使用本地 IaC 分析器镜像#

如果您希望从本地 Docker 仓库而不是极狐GitLab 容器仓库获取镜像,请使用本地 IaC 分析器镜像。

先决条件:

  • 将 Docker 镜像导入到本地离线 Docker 仓库取决于您的网络安全策略。请咨询您的 IT 员工以找到接受和批准的导入或临时访问外部资源的过程。
  1. 将默认 IaC 分析器镜像从 registry.gitlab.com 导入到您的 本地 Docker 容器仓库

    plaintext
    registry.gitlab.com/security-products/kics:5

    IaC 分析器的镜像会 定期更新,因此您应该定期更新本地副本。

  2. 将 CI/CD 变量 SECURE_ANALYZERS_PREFIX 设置为本地 Docker 容器仓库。

    yaml
    include: - template: Jobs/SAST-IaC.gitlab-ci.yml variables: SECURE_ANALYZERS_PREFIX: "localhost:5000/analyzers"

IaC 作业现在应使用分析器 Docker 镜像的本地副本,而不需要互联网访问。

使用特定的分析器版本#

极狐GitLab 管理的 CI/CD 模板指定了一个主版本,并自动拉取该主版本中的最新分析器版本。在某些情况下,您可能需要使用特定版本。例如,您可能需要避免后续版本中的回归。

要使用特定的分析器版本:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。

  2. 选择 构建 > 流水线编辑器

  3. 在包含 SAST-IaC.gitlab-ci.yml 模板的行之后添加 SAST_ANALYZER_IMAGE_TAG CI/CD 变量。

    仅在特定作业中设置此变量。如果您在顶级设置它,您设置的版本会用于其他 SAST 分析器。

    将标签设置为:

    • 主版本,如 3。您的流水线会使用该主版本中发布的任何次要或补丁更新。
    • 次版本,如 3.7。您的流水线会使用该次版本中发布的任何补丁更新。
    • 补丁版本,如 3.7.0。您的流水线不会接收任何更新。

此示例使用 IaC 分析器的特定次版本:

yaml
1include: 2 - template: Jobs/SAST-IaC.gitlab-ci.yml 3 4kics-iac-sast: 5 variables: 6 SAST_ANALYZER_IMAGE_TAG: "3.1"

支持的发行版#

极狐GitLab 扫描器提供了一个基于 Alpine 的基础镜像,以便于大小和可维护性。

使用 FIPS 启用的镜像#

极狐GitLab 提供了扫描器镜像的 FIPS 启用的 Red Hat UBI 版本,除了标准镜像之外。

要在流水线中使用 FIPS 启用的镜像,请将 SAST_IMAGE_SUFFIX 设置为 -fips 或修改标准标签加上 -fips 扩展。

以下示例使用了 SAST_IMAGE_SUFFIX CI/CD 变量。

yaml
variables: SAST_IMAGE_SUFFIX: '-fips' include: - template: Jobs/SAST-IaC.gitlab-ci.yml

自动漏洞解决#

History
    • 在极狐GitLab 15.9 中引入项目级标志 sec_mark_dropped_findings_as_resolved
    • 在极狐GitLab 16.2 中 GA。特性标志 sec_mark_dropped_findings_as_resolved 被移除。

为了帮助您专注于仍然相关的漏洞,IaC 扫描自动解决 漏洞,当:

如果您稍后重新启用规则,发现会重新打开以供处理。

漏洞管理系统在自动解决漏洞时会添加一个注释。

报告 JSON 格式#

IaC 扫描器以现有的 SAST 报告格式输出 JSON 报告文件。

可以从以下位置下载 JSON 报告文件:

  • CI 流水线页面。
  • 通过将 artifacts: paths 设置为 gl-sast-report.json 从合并请求的流水线标签页下载。

有关更多信息,请参阅 下载产物

故障排除#

在使用 IaC 扫描时,您可能会遇到以下问题。

IaC 扫描发现意外显示为 不再检测到#

如果以前检测到的发现意外显示为 不再检测到,可能是由于扫描器更新引起的。更新可能会禁用被发现无效或误报的规则,发现会被标记为 不再检测到

在极狐GitLab 15.3 中,IaC 扫描器中的密钥检测被禁用,因此在 "密码和密钥" 家族中的 IaC 发现显示为 不再检测到

作业日志中的消息 exec /bin/sh: exec format error#

您可能会在作业日志中收到 exec /bin/sh: exec format error 错误。当尝试在非 AMD64 架构上运行 IaC 扫描分析器时会出现此问题。有关 IaC 扫描先决条件的详细信息,请参阅 启用扫描器