基础设施即代码(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 和 docker 或 kubernetes 执行器。
- 如果您在 JihuLab.com 上使用 SaaS runners,这已默认启用。
要启用项目的 IaC 扫描:
-
在左侧边栏中,选择 搜索或转到 并找到您的项目。
-
选择 构建 > 流水线编辑器。
-
复制并粘贴以下内容到 .gitlab-ci.yml 文件底部。如果已经存在 include 行,仅在其下面添加 template 行。
yamlinclude: - template: Jobs/SAST-IaC.gitlab-ci.yml -
选择 验证 标签,然后选择 验证流水线。 消息 模拟成功完成 表示文件有效。
-
选择 编辑 标签。
-
选择 提交更改。
流水线现在包含一个 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 扫描规则。
要禁用分析器规则:
- 在项目根目录下创建一个 .gitlab 目录,如果尚不存在。
- 在 .gitlab 目录中创建一个名为 sast-ruleset.toml 的自定义规则集文件,如果尚不存在。
- 在 ruleset 部分的上下文中设置 disabled 标志为 true。
- 在一个或多个 ruleset 子部分中列出要禁用的规则。
在将 sast-ruleset.toml 文件合并到默认分支后,禁用规则的现有发现会被 自动解决。
在以下示例 sast-ruleset.toml 文件中,禁用的规则通过匹配标识符的 type 和 value 被分配给 kics 分析器:
toml1[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 扫描规则以自定义它们。例如,分配较低的严重性或链接到关于如何解决发现的自己的文档。
要覆盖规则:
- 在项目根目录下创建一个 .gitlab 目录,如果尚不存在。
- 在 .gitlab 目录中创建一个名为 sast-ruleset.toml 的自定义规则集文件,如果尚不存在。
- 在一个或多个 ruleset.identifier 子部分中列出要覆盖的规则。
- 在 ruleset 部分的 ruleset.override 上下文中,提供要覆盖的键。可以覆盖任何键的组合。有效的键是:
- description
- message
- name
- severity (有效选项是:Critical, High, Medium, Low, Unknown, Info)
在以下示例 sast-ruleset.toml 文件中,通过标识符的 type 和 value 匹配规则,然后进行覆盖:
toml1[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 员工以找到接受和批准的导入或临时访问外部资源的过程。
-
将默认 IaC 分析器镜像从 registry.gitlab.com 导入到您的 本地 Docker 容器仓库:
plaintextregistry.gitlab.com/security-products/kics:5IaC 分析器的镜像会 定期更新,因此您应该定期更新本地副本。
-
将 CI/CD 变量 SECURE_ANALYZERS_PREFIX 设置为本地 Docker 容器仓库。
yamlinclude: - template: Jobs/SAST-IaC.gitlab-ci.yml variables: SECURE_ANALYZERS_PREFIX: "localhost:5000/analyzers"
IaC 作业现在应使用分析器 Docker 镜像的本地副本,而不需要互联网访问。
使用特定的分析器版本
极狐GitLab 管理的 CI/CD 模板指定了一个主版本,并自动拉取该主版本中的最新分析器版本。在某些情况下,您可能需要使用特定版本。例如,您可能需要避免后续版本中的回归。
要使用特定的分析器版本:
-
在左侧边栏中,选择 搜索或转到 并找到您的项目。
-
选择 构建 > 流水线编辑器。
-
在包含 SAST-IaC.gitlab-ci.yml 模板的行之后添加 SAST_ANALYZER_IMAGE_TAG CI/CD 变量。
仅在特定作业中设置此变量。如果您在顶级设置它,您设置的版本会用于其他 SAST 分析器。将标签设置为:
- 主版本,如 3。您的流水线会使用该主版本中发布的任何次要或补丁更新。
- 次版本,如 3.7。您的流水线会使用该次版本中发布的任何补丁更新。
- 补丁版本,如 3.7.0。您的流水线不会接收任何更新。
此示例使用 IaC 分析器的特定次版本:
yaml1include: 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 变量。
yamlvariables: 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 扫描先决条件的详细信息,请参阅 启用扫描器。