-
/etc/alpine-release
-
/etc/apt/sources.list
-
/etc/lsb-release
-
/etc/os-release
或/usr/lib/os-release
-
/etc/oracle-release
、/etc/centos-release
、/etc/redhat-release
或/etc/system-release
-
其他类似的系统文件。
使用Red Hat Advanced Cluster Security for Kubernetes,您可以使用RHACS扫描器分析镜像中的漏洞,也可以配置集成以使用其他支持的扫描器。
RHACS中的扫描器会分析每个镜像层以查找包,并通过将它们与来自不同来源填充的漏洞数据库进行比较来匹配已知的漏洞。根据使用的扫描器,来源包括国家漏洞数据库 (NVD)、开源漏洞 (OSV) 数据库和操作系统漏洞Feed。
RHACS扫描器V4使用可在OSV.dev上获得的OSV数据库,该数据库根据Apache License 2.0许可。 |
RHACS包含两个扫描器:StackRox扫描器和扫描器V4。
StackRox扫描器源自Clair v2开源扫描器的分支,是默认扫描器。在4.4版本中,RHACS引入了基于ClairCore的扫描器V4,它提供了额外的镜像扫描功能。
本文档使用术语“RHACS扫描器”或“扫描器”来指代两个扫描器(StackRox扫描器和扫描器V4)提供的组合扫描功能。当提到特定扫描器的功能时,将使用特定扫描器的名称。 |
当RHACS扫描器发现任何漏洞时,它将执行以下操作:
RHACS 扫描器会检查镜像并根据镜像中的文件识别已安装的组件。如果修改最终镜像以删除以下文件,则可能无法识别已安装的组件或漏洞
组件 | 文件 |
---|---|
包管理器 |
|
语言级依赖项 |
|
应用程序级依赖项 |
|
RHACS 提供了自己的扫描器,或者您可以配置集成以将 RHACS 与其他漏洞扫描器一起使用。
从 4.4 版开始,基于ClairCore构建的扫描器 V4 提供了针对语言和操作系统特定镜像组件的扫描。目前,RHACS 也使用 StackRox 扫描器。为了继续获得具有最新功能的完整扫描支持,需要同时使用这两个扫描器。
从 4.6 版开始,由于使用的漏洞来源发生变化,扫描器 V4 仅考虑影响红帽产品且日期追溯到 2014 年的漏洞。以前,在读取红帽的 OVAL 数据时,漏洞的日期追溯到 2000 年之前。 |
对于 4.4 版,RHACS 提供两个扫描器:StackRox 扫描器和扫描器 V4。这两个扫描器都可以检查连接到您网络中的安全集群中的镜像。在使用 Operator 部署的 Red Hat OpenShift 环境中或使用委托扫描时,安全集群扫描默认启用。有关更多信息,请参见“访问委托镜像扫描”。
即使启用了扫描器 V4,目前仍然必须启用 StackRox 扫描器才能提供对 RHCOS 节点和平台漏洞(例如 Red Hat OpenShift、Kubernetes 和 Istio)的扫描。扫描器 V4 中对该功能的支持计划在未来的版本中提供。请勿禁用 StackRox 扫描器。 |
使用 StackRox 扫描器时,RHACS 会执行以下操作
Central 将镜像扫描请求提交给 StackRox 扫描器。
收到这些请求后,StackRox 扫描器会从相关注册表中提取镜像层,检查镜像,并识别每一层中已安装的软件包。然后,它将识别的软件包和特定于编程语言的依赖项与漏洞列表进行比较,并将信息发送回 Central。
StackRox 扫描器会识别以下区域中的漏洞
基础镜像操作系统
由包管理器安装的软件包
特定于编程语言的依赖项
编程运行时和框架
使用扫描器 V4 时,RHACS 会执行以下操作
Central 请求扫描器 V4 Indexer 下载并索引(分析)给定的镜像。
扫描器 V4 Indexer 从注册表中提取镜像元数据以确定镜像的层,并下载每个以前未索引的层。
扫描器 V4 Indexer 从 Central 请求有助于索引过程的映射文件。扫描器 V4 Indexer 生成索引报告。
Central 请求扫描器 V4 Matcher 将给定的镜像与已知的漏洞进行匹配。此过程会产生最终扫描结果:漏洞报告。扫描器 V4 Matcher 从 Central 请求最新的漏洞。
扫描器 V4 Matcher 从扫描器 V4 Indexer 请求镜像索引的结果(索引报告)。然后,它使用该报告来确定相关的漏洞。只有当镜像在 Central 集群中被索引时,才会发生这种交互。当扫描器 V4 匹配安全集群中已索引镜像的漏洞时,不会发生这种交互。
Indexer 将与索引结果相关的數據存储在扫描器 V4 DB 中,以确保仅下载和索引镜像层一次。这可以防止不必要的网络流量和其他资源利用。
启用安全集群扫描时,Sensor 会请求扫描器 V4 索引镜像。除非 Central 存在于相同的命名空间中,否则扫描器 V4 Indexer 会从 Sensor 请求有助于索引过程的映射文件。在这种情况下,将改为联系 Central。
使用 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 扫描镜像时,您可能会看到CVE DATA MAY BE INACCURATE
警告消息。当扫描器无法检索有关镜像中操作系统或其他软件包的完整信息时,扫描器会显示此消息。
下表显示了一些常见的扫描器警告消息
消息 | 描述 | ||
---|---|---|---|
|
表示扫描器不正式支持镜像的基础操作系统;因此,它无法检索操作系统级软件包的 CVE 数据。 |
||
|
表示镜像的基础操作系统已达到生命周期结束,这意味着漏洞数据已过期。例如,Debian 8 和 9。 有关识别镜像中组件所需文件的更多信息,请参见检查镜像中的漏洞。 |
||
|
表示扫描器已扫描镜像,但无法确定用于该镜像的基础操作系统。 |
||
|
表示目标注册表在网络上不可访问。原因可能是防火墙阻止了 要分析根本原因,请为私有注册表或存储库创建特殊的注册表集成,以获取 RHACS Central 的 pod 日志。有关如何执行此操作的说明,请参见与镜像注册表集成。 |
||
|
表示扫描器已扫描镜像,但该镜像较旧,不在 Red Hat 扫描器认证范围内。有关更多信息,请参见Red Hat 漏洞扫描器认证合作伙伴指南。
|
本节列出的支持平台是指 Scanner 可识别漏洞的分布式系统,这与您可以安装 Red Hat Advanced Cluster Security for Kubernetes 的支持平台不同。
Scanner 可识别包含以下 Linux 发行版的镜像中的漏洞。有关所用漏洞数据库的更多信息,请参阅“RHACS 架构”中的“漏洞来源”。
发行版 | 版本 |
---|---|
|
|
|
|
CentOS |
|
以下漏洞来源未由供应商更新: |
|
|
|
|
|
|
|
|
|
以下漏洞来源未由供应商更新: |
仅在 StackRox Scanner 中受支持。
仅在 Scanner V4 中受支持。
Scanner V4 不支持 2020 年 6 月之前的镜像。
Scanner 不支持 Fedora 操作系统,因为 Fedora 不维护漏洞数据库。但是,Scanner 仍然可以检测基于 Fedora 的镜像中的特定语言漏洞。 |
Scanner 可以检查以下编程语言的依赖项中的漏洞
编程语言 | 软件包格式 |
---|---|
Go[1] |
二进制文件:分析用于构建二进制文件的标准库版本。如果二进制文件使用模块支持 (go.mod) 构建,则还会分析其依赖项。 |
Java |
JAR、WAR、EAR、JPI、HPI |
JavaScript |
package.json |
Python |
egg, wheel |
Ruby |
gem |
仅在 Scanner V4 中受支持。
从 Red Hat Advanced Cluster Security for Kubernetes 3.0.50(Scanner 版本 2.5.0)开始,StackRox Scanner 可识别以下开发平台中的漏洞
.NET Core
ASP.NET Core
Scanner V4 不支持这些。
Red Hat Advanced Cluster Security for Kubernetes (RHACS) 支持扫描您使用以下 OpenShift Container Platform 自定义资源 (CR) 配置的镜像注册表镜像:
ImageContentSourcePolicy
(ICSP)
ImageDigestMirrorSet
(IDMS)
ImageTagMirrorSet
(ITMS)
有关如何配置镜像注册表镜像的更多信息,请参阅“配置镜像注册表镜像”。
您可以使用委托镜像扫描自动扫描镜像注册表镜像。
有关如何配置委托镜像扫描的更多信息,请参阅“使用安全集群扫描镜像”。
您可以拥有仅可从安全集群访问的隔离容器镜像注册表。委托镜像扫描功能使您可以扫描安全集群中任何注册表中的镜像。
目前,默认情况下,中央服务扫描程序会对在安全集群中观察到的镜像执行索引(组件识别)和漏洞匹配(使用漏洞数据丰富组件),OpenShift Container Platform 集成注册表中的镜像除外。
对于来自 OpenShift Container Platform 集成注册表的镜像,安装在安全集群中的 Scanner-slim 执行索引,而中央服务扫描程序执行漏洞匹配。
委托镜像扫描功能通过允许 Scanner-slim 索引来自任何注册表的镜像,然后将其发送到中央进行漏洞匹配来扩展扫描功能。要使用此功能,请确保在安全集群中安装了 Scanner-slim。如果不存在 Scanner-slim,则扫描请求将直接发送到中央。
要使用安全集群而不是中央服务扫描镜像,您可以使用委托镜像扫描功能。
新的委托扫描配置指定您可以从中委托镜像扫描的注册表。对于 Sensor 观察到的镜像,您可以使用委托注册表配置来委托来自无注册表、所有注册表或特定注册表的扫描。
要使用 `roxctl` CLI、Jenkins 插件或 API 启用扫描委托,您还必须指定目标集群和源注册表。
您已在安全集群中安装 Scanner 用于扫描镜像。
在 OpenShift Container Platform 和 Kubernetes 安全集群上支持启用 Scanner。 |
在 RHACS 门户中,单击**平台配置 → 集群**。
在**集群**视图标题中,单击**委托扫描**。
在**委托镜像扫描**页面中,提供以下信息
**委托扫描对象**: 选择镜像委托的范围,选择以下选项之一
**无**: 默认选项。此选项指定安全集群不扫描任何镜像,除了来自集成 OpenShift 镜像注册表的镜像。
**所有注册表**: 此选项指示安全集群扫描所有镜像。
**指定注册表**: 此选项根据注册表列表指定安全集群应扫描的镜像。
**选择要委托到的默认集群**: 从下拉列表中,选择默认集群的名称。默认集群处理来自命令行界面 (CLI) 和 API 的扫描请求。这是可选的,如果需要,您可以选择无
。
可选:要指定源注册表和目标集群详细信息,请单击**添加注册表**。
例如,将源注册表指定为example.com
,并从下拉列表中为目标集群选择远程
。如果需要,您可以添加多个源注册表和目标集群。
如果扫描请求不是来自 CLI 和 API,则可以将目标集群选择为 |
单击**保存**。
镜像集成现在已在 Central 和 Sensor 之间同步,Sensor 从每个命名空间捕获拉取密钥。然后,Sensor 使用这些凭据对镜像注册表进行身份验证。
RHACS Operator 在每个安全集群上安装 Scanner-slim 版本,用于扫描 OpenShift Container Platform 集成注册表中的镜像,以及可选的其他注册表中的镜像。
更多信息,请参见 使用 Operator 在安全集群上安装 RHACS。
安全集群服务 Helm chart (secured-cluster-services
) 在每个安全集群上安装 Scanner-slim 版本。在 Kubernetes 中,安全集群服务包含 Scanner-slim 作为可选组件。但是,在 OpenShift Container Platform 上,RHACS 会在每个安全集群上安装 Scanner-slim 版本,用于扫描 OpenShift Container Platform 集成注册表中的镜像以及可选的其他注册表中的镜像。
对于 OpenShift Container Platform 安装,请参见 无需自定义安装 secured-cluster-services Helm chart。
对于非 OpenShift Container Platform 安装(例如 Amazon Elastic Kubernetes Service (Amazon EKS)、Google Kubernetes Engine (Google GKE) 和 Microsoft Azure Kubernetes Service (Microsoft AKS)),请参见 无需自定义安装 secured-cluster-services Helm chart。
验证安全集群的状态是否指示 Scanner 存在且运行正常。
在 RHACS 门户中,转到**平台配置 → 集群**。
在**集群**视图中,选择一个集群以查看其详细信息。
在**运行状况状态**卡片中,确保**Scanner** 存在且标记为**健康**。
您可以使用roxctl
CLI、Jenkins 和 API 扫描存储在集群特定 OpenShift Container Platform 集成镜像注册表中的镜像。您可以在委托扫描配置中指定相应的集群,或者使用roxctl
CLI、Jenkins 和 API 中提供的集群参数。
有关如何使用roxctl
CLI 扫描镜像的更多信息,请参见 使用 roxctl CLI 进行镜像扫描。
您可以配置扫描设置,例如自动扫描活动和非活动镜像。
Red Hat Advanced Cluster Security for Kubernetes 定期扫描所有活动镜像,并更新镜像扫描结果以反映最新的漏洞定义。活动镜像是您已在环境中部署的镜像。
从 Red Hat Advanced Cluster Security for Kubernetes 3.0.57 开始,您可以通过配置镜像的**监控**设置来启用非活动镜像的自动扫描。 |
Central 每 4 小时从 Scanner 或您使用的其他集成镜像扫描程序获取所有活动镜像的镜像扫描结果,并更新结果。
您也可以使用roxctl
CLI 按需检查镜像扫描结果。
Red Hat Advanced Cluster Security for Kubernetes (RHACS) 每 4 小时扫描所有活动(已部署)镜像,并更新镜像扫描结果以反映最新的漏洞定义。
您还可以将 RHACS 配置为自动扫描非活动(未部署)镜像。
在 RHACS 门户中,单击**漏洞管理** → **工作负载 CVE**。
单击**管理监控镜像**。
在**镜像名称**字段中,输入以注册表开头并以镜像标签结尾的完全限定镜像名称,例如docker.io/library/nginx:latest
。
单击**将镜像添加到监控列表**。
可选:要删除监控的镜像,请在**管理监控镜像**窗口中找到该镜像,然后单击**删除监控**。
在 RHACS 门户中,单击**平台配置** → **系统配置**以查看数据保留配置。 与从监控镜像列表中删除的镜像相关的所有数据,将继续在 RHACS 门户中显示在**系统配置**页面上提到的天数,只有在此期间结束后才会删除。 |
单击**关闭**返回**工作负载 CVE**页面。
RHACS 从多个漏洞源获取漏洞定义和更新。这些源既有通用的,例如 NVD,也有特定发行版的,例如 Alpine、Debian 和 Ubuntu。有关查看和解决已发现漏洞的更多信息,请参见 漏洞管理。
在联机模式下,Central 每 5 分钟从单个源获取漏洞定义。此源结合来自上游源的漏洞定义,每 3 小时刷新一次。
源地址为https://definitions.stackrox.io
。
您可以通过设置ROX_SCANNER_VULN_UPDATE_INTERVAL
环境变量来更改 Central 和 StackRox Scanner 的默认查询频率。
$ oc -n stackrox set env deploy/central ROX_SCANNER_VULN_UPDATE_INTERVAL=<value> (1)
1 | 如果您使用 Kubernetes,请使用kubectl 代替oc 。 |
请注意以下说明:
StackRox Scanner 的配置映射仍然具有updater.interval
参数用于配置扫描程序的更新频率,但它不再包含fetchFromCentral
参数。
此环境变量设置不支持 Scanner V4。
有关 RHACS 使用的漏洞来源的更多信息,请参阅“Red Hat Advanced Cluster Security for Kubernetes 架构”中的“漏洞来源”。
Red Hat Advanced Cluster Security for Kubernetes 门户中的漏洞管理仪表板为每个漏洞显示单个通用漏洞评分系统 (CVSS) 基础评分。RHACS 根据以下标准显示 CVSS 评分:
如果 CVSS v3 评分可用,RHACS 将显示该评分并在其旁边列出v3
。例如,6.5 (v3)
。
只有在您使用 StackRox Scanner 1.3.5 或更高版本或 Scanner V4 时,才提供 CVSS v3 评分。 |
如果 CVSS v3 评分不可用,RHACS 可能会仅显示 CVSS v2 评分。例如,6.5
。
您可以使用 API 获取 CVSS 评分。如果漏洞的 CVSS v3 信息可用,响应可能包含 CVSS v3 和 CVSS v2 信息。
对于 Red Hat 安全公告 (RHSA),CVSS 评分设置为所有相关 CVE 中的最高 CVSS 评分。一个 RHSA 可以包含多个 CVE,Red Hat 有时会根据漏洞如何影响其他 Red Hat 产品而分配不同的评分。
Scanner 默认情况下会识别编程语言特定依赖项中的漏洞。您可以禁用特定语言的依赖项扫描。
要禁用特定语言的漏洞扫描,请运行以下命令:
$ oc -n stackrox set env deploy/scanner \ (1)
ROX_LANGUAGE_VULNS=false (2)
1 | 如果您使用 Kubernetes,请使用kubectl 代替oc 。 |
2 | 如果您使用的是 Red Hat Advanced Cluster Security for Kubernetes 3.0.47 或更早版本,请将环境变量名称ROX_LANGUAGE_VULNS 替换为LANGUAGE_VULNS 。 |