14.5. RHCOS ノードホストのスキャン
OpenShift Container Platform の場合、コントロールプレーンとしてサポートされるオペレーティングシステムは、Red Hat Enterprise Linux CoreOS (RHCOS) のみです。ノードホストの場合、OpenShift Container Platform は RHCOS と Red Hat Enterprise Linux (RHEL) の両方をサポートします。Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用すると、RHCOS ノードの脆弱性をスキャンし、潜在的なセキュリティー脅威を検出できます。
RHACS は、RHCOS インストールの一部としてノードホストにインストールされた RHCOS RPM をスキャンして、既知の脆弱性がないか調べます。
まず、RHACS は RHCOS コンポーネントを分析して検出します。次に、RHEL と次のデータストリームを使用して、特定されたコンポーネントの脆弱性を照合します。
- StackRox Scanner がノードスキャンに使用される場合は、OpenShift 4.X Open Vulnerability and Assessment Language (OVAL) v2 セキュリティーデータストリームが使用されます。
- ノードスキャンに Scanner V4 が使用される場合は、Red Hat Common Security Advisory Framework (CSAF) Vulnerability Exploitability eXchange (VEX) が使用されます。
-
roxctl
CLI を使用して RHACS をインストールした場合は、RHCOS ノードのスキャン機能を手動で有効にする必要があります。OpenShift Container Platform で Helm または Operator インストール方法を使用する場合、この機能はデフォルトで有効になります。
14.5.1. StackRox Scanner を使用した RHCOS ノードスキャンの有効化
OpenShift Container Platform を使用する場合は、Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ノードの脆弱性スキャンを有効にできます。
前提条件
- セキュアなクラスターの RHCOS ノードホストをスキャンするには、OpenShift Container Platform 4.12 以降にセキュアなクラスターをインストールしておく必要があります。サポートされるプラットフォームおよびアーキテクチャーの詳細は、Red Hat Advanced Cluster Security for Kubernetes Support Matrix を参照してください。RHACS のライフサイクルのサポート情報は、Red Hat Advanced Cluster Security for Kubernetes サポートポリシー を参照してください。
- この手順では、ノードスキャンを初めて有効にする方法について説明します。Scanner V4 ではなく StackRox Scanner を使用するように Red Hat Advanced Cluster Security for Kubernetes を再設定する場合は、StackRox Scanner を使用して RHCOS ノードのスキャンを復元する の手順に従ってください。
手順
次のコマンドのいずれかを実行して、コンプライアンスコンテナーを更新します。
メトリクスが無効になっているデフォルトのコンプライアンスコンテナーの場合は、次のコマンドを実行します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":"disabled"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
Prometheus メトリクスが有効になっているコンプライアンスコンテナーの場合は、次のコマンドを実行します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":":9091"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
次の手順を実行して、Collector DaemonSet (DS) を更新します。
次のコマンドを実行して、新しいボリュームマウントを Collector DS に追加します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"volumes":[{"name":"tmp-volume","emptyDir":{}},{"name":"cache-volume","emptyDir":{"sizeLimit":"200Mi"}}]}}}}'
次のコマンドを実行して、新しい
NodeScanner
コンテナーを追加します。$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"command":["/scanner","--nodeinventory","--config=",""],"env":[{"name":"ROX_NODE_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"spec.nodeName"}}},{"name":"ROX_CLAIR_V4_SCANNING","value":"true"},{"name":"ROX_COMPLIANCE_OPERATOR_INTEGRATION","value":"true"},{"name":"ROX_CSV_EXPORT","value":"false"},{"name":"ROX_DECLARATIVE_CONFIGURATION","value":"false"},{"name":"ROX_INTEGRATIONS_AS_CONFIG","value":"false"},{"name":"ROX_NETPOL_FIELDS","value":"true"},{"name":"ROX_NETWORK_DETECTION_BASELINE_SIMULATION","value":"true"},{"name":"ROX_NETWORK_GRAPH_PATTERNFLY","value":"true"},{"name":"ROX_NODE_SCANNING_CACHE_TIME","value":"3h36m"},{"name":"ROX_NODE_SCANNING_INITIAL_BACKOFF","value":"30s"},{"name":"ROX_NODE_SCANNING_MAX_BACKOFF","value":"5m"},{"name":"ROX_PROCESSES_LISTENING_ON_PORT","value":"false"},{"name":"ROX_QUAY_ROBOT_ACCOUNTS","value":"true"},{"name":"ROX_ROXCTL_NETPOL_GENERATE","value":"true"},{"name":"ROX_SOURCED_AUTOGENERATED_INTEGRATIONS","value":"false"},{"name":"ROX_SYSLOG_EXTRA_FIELDS","value":"true"},{"name":"ROX_SYSTEM_HEALTH_PF","value":"false"},{"name":"ROX_VULN_MGMT_WORKLOAD_CVES","value":"false"}],"image":"registry.redhat.io/advanced-cluster-security/rhacs-scanner-slim-rhel8:4.6.2","imagePullPolicy":"IfNotPresent","name":"node-inventory","ports":[{"containerPort":8444,"name":"grpc","protocol":"TCP"}],"volumeMounts":[{"mountPath":"/host","name":"host-root-ro","readOnly":true},{"mountPath":"/tmp/","name":"tmp-volume"},{"mountPath":"/cache","name":"cache-volume"}]}]}}}}'
14.5.2. Scanner V4 を使用した RHCOS ノードスキャンの有効化
OpenShift Container Platform を使用する場合は、Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ノードの脆弱性スキャンを有効にできます。
Scanner V4 を使用した RHCOS ノードのスキャンは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
セキュアクラスターの RHCOS ノードホストをスキャンするには、次のソフトウェアがインストールされている必要があります。
- OpenShift Container Platform 4.12 以降のセキュアクラスターサービス
RHACS バージョン 4.6 以降
サポートされるプラットフォームおよびアーキテクチャーの詳細は、Red Hat Advanced Cluster Security for Kubernetes Support Matrix を参照してください。RHACS のライフサイクルのサポート情報は、Red Hat Advanced Cluster Security for Kubernetes サポートポリシー を参照してください。
手順
Scanner V4 を使用してノードインデックス (ノードスキャンとも呼ばれます) を有効にするには、次の手順を実行します。
Scanner V4 が Central クラスターにデプロイされていることを確認します。
$ kubectl -n stackrox get deployment scanner-v4-indexer scanner-v4-matcher scanner-v4-db1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
Central クラスターで次のコマンドを実行して、Central Pod の
central
コンテナーでROX_NODE_INDEX_ENABLED
およびROX_SCANNER_V4
変数をtrue
に設定します。$ kubectl -n stackrox set env deployment/central ROX_NODE_INDEX_ENABLED=true ROX_SCANNER_V4=true1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンを有効にするすべてのセキュアなクラスターで次のコマンドを実行して、Sensor Pod の
sensor
コンテナーでROX_NODE_INDEX_ENABLED
およびROX_SCANNER_V4
変数をtrue
に設定します。$ kubectl -n stackrox set env deployment/sensor ROX_NODE_INDEX_ENABLED=true ROX_SCANNER_V4=true1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンを有効にするすべてのセキュアなクラスターで次のコマンドを実行して、Collector Daemonset の
compliance
コンテナーでROX_NODE_INDEX_ENABLED
およびROX_SCANNER_V4
変数をtrue
に設定します。$ kubectl -n stackrox set env daemonset/collector ROX_NODE_INDEX_ENABLED=true ROX_SCANNER_V4=true1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンが機能していることを確認するには、Central ログで次のメッセージを調べます。
Scanned index report and found <number> components for node <node_name>.
ここでは、以下のようになります。
- <number>
- 検出されたコンポーネントの数を指定します。
- <node_name>
- ノードの名前を指定します。
14.5.3. StackRox Scanner を使用した RHCOS ノードスキャンの復元
OpenShift Container Platform を使用する場合は、Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ノードの脆弱性スキャンを有効にできます。この機能は、StackRox Scanner と Scanner V4 の両方で利用できます。Red Hat Enterprise Linux CoreOS (RHCOS) ノードのスキャンに StackRox Scanner を使用し、他のノードのスキャンには Scanner V4 を引き続き使用する場合は、この手順に従ってください。
前提条件
- セキュアなクラスターの RHCOS ノードホストをスキャンするには、OpenShift Container Platform 4.12 以降にセキュアなクラスターをインストールしておく必要があります。サポートされるプラットフォームおよびアーキテクチャーの詳細は、Red Hat Advanced Cluster Security for Kubernetes Support Matrix を参照してください。RHACS のライフサイクルのサポート情報は、Red Hat Advanced Cluster Security for Kubernetes サポートポリシー を参照してください。
手順
StackRox Scanner を使用してノードインデックス (ノードスキャンとも呼ばれます) を有効にするには、次の手順を実行します。
StackRox Scanner が Central クラスターにデプロイされていることを確認します。
$ kubectl -n stackrox get deployment scanner scanner-db1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
Central クラスターで次のコマンドを実行して、Central Pod の
central
コンテナーでROX_NODE_INDEX_ENABLED
をfalse
に設定します。$ kubectl -n stackrox set env deployment/central ROX_NODE_INDEX_ENABLED=false1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンを有効にするすべての保護されたクラスターで次のコマンドを実行して、Collector Daemonsetの
compliance
コンテナーで、ROX_CALL_NODE_INVENTORY_ENABLED
をtrue
に設定します。$ kubectl -n stackrox set env daemonset/collector ROX_CALL_NODE_INVENTORY_ENABLED=true1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンが機能していることを確認するには、Central ログで次のメッセージを調べます。
Scanned node inventory <node_name> (id: <node_id>) with <number> components.
ここでは、以下のようになります。
- <number>
- 検出されたコンポーネントの数を指定します。
- <node_name>
- ノードの名前を指定します。
- <node_id>
- ノードの内部 ID を指定します。
14.5.4. 分析と検出
RHACS を OpenShift Container Platform とともに使用すると、RHACS は分析と検出用に 2 つの調整コンテナー (Compliance コンテナーと Node-inventory コンテナー) を作成します。Compliance コンテナーは、以前の RHACS バージョンの一部としてすでに組み込まれていました。ただし、Node-inventory コンテナーは RHACS 4.0 で新しく追加されたもので、OpenShift Container Platform クラスターノードでのみ機能します。
起動時に、Compliance コンテナーと Node-inventory コンテナーは、5 分以内に Red Hat Enterprise Linux CoreOS (RHCOS) ソフトウェアコンポーネントの最初のインベントリースキャンを開始します。次に、Node-inventory コンテナーはノードのファイルシステムをスキャンして、インストールされている RPM パッケージを特定し、RHCOS ソフトウェアコンポーネントをレポートします。その後、インベントリースキャンが定期的な間隔 (通常は 4 時間ごと) で行われます。Compliance コンテナーの ROX_NODE_SCANNING_INTERVAL 環境変数を設定することで、デフォルトの間隔をカスタマイズできます。
14.5.5. RHCOS ノードでの脆弱性照合
Central や Scanner などの Central サービスは、脆弱性の照合を実行します。ノードスキャンは、次のスキャナーを使用して実行されます。
- StackRox Scanner: これはデフォルトのスキャナーです。StackRox Scanner は、Red Hat の Open Vulnerability and Assessment Language (OVAL) v2 セキュリティーデータストリームを使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ソフトウェアコンポーネントの脆弱性を照合します。
- Scanner V4: Scanner V4 は、ノードスキャンに使用できるテクノロジープレビュー機能です。Scanner V4 を明示的に有効にする必要があります。詳細は、「関連情報」のドキュメントを参照してください。
RHCOS ノードをスキャンする場合、RHACS リリース 4.0 以降では、カーネルとコンテナーのランタイムバージョンを見つけるために Kubernetes ノードのメタデータを使用しなくなりました。代わりに、RHACS は、インストールされている RHCOS RPM を使用してその情報を評価します。
14.5.6. 関連する環境変数
次の環境変数を使用して、RHACS での RHCOS ノードのスキャンを設定できます。
環境変数 | 説明 |
---|---|
|
キャッシュされたインベントリーが古いとみなされるまでの時間。デフォルトは |
|
バックオフファイルが見つかった場合にノードスキャンが遅延する最初の時間 (秒)。デフォルト値は |
| バックオフの上限。デフォルト値は 5m で、これは Kubernetes 再起動ポリシー安定性タイマーの 50% です。 |
環境変数 | 説明 |
---|---|
|
このクラスターでノードインデックスを有効にするかどうかを制御します。デフォルト値は |
|
ノードスキャン間の間隔期間の基本値。デフォルト値は |
|
ノードスキャンの継続時間は、基本間隔時間と異なる場合があります。ただし、最大値は |
|
最初のノードスキャンまでの最大待機時間。ランダムに生成されます。この値を |
14.5.7. ダッシュボードを使用してノードの脆弱性を特定する
Vulnerability Management ビューを使用して、ノードの脆弱性を特定できます。特定される脆弱性には、Docker、CRI-O、runC、containerd などの Kubernetes コアコンポーネントとコンテナーランタイムの脆弱性も含まれます。RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。
手順
-
RHACS ポータルで、Vulnerability Management
Dashboard に移動します。 - ヘッダーの Nodes を選択し、ノードに影響するすべての CVE のリストを表示します。
リストからノードを選択し、そのノードに影響するすべての CVE の詳細を表示します。
- ノードを選択すると、選択したノードの Node の詳細パネルが開きます。Node ビューには、ノードの詳細が表示され、CVSS スコア別の CVE およびそのノードの修正可能な CVE に関する情報が含まれます。
- 選択したノードのすべての CVE のリストを表示するには、CVEs by CVSS score で、View All を選択します。CVE の一覧をフィルタリングすることもできます。
- 修正可能な CVE を CSV ファイルとしてエクスポートするには、Node Findings セクションで Export as CSV を選択します。
14.5.8. ノードの CVE の表示
RHACS を使用すると、ノード内の脆弱性を特定できます。特定される脆弱性は次のとおりです。
- Kubernetes コアコンポーネントの脆弱性
- Docker、CRI-O、runC、containerd などのコンテナーランタイムの脆弱性
RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。
手順
-
RHACS ポータルで、Vulnerability Management
Node CVEs をクリックします。 データを表示するために、次のいずれかのタスクを実行します。
- すべてのノードに影響するすべての CVE のリストを表示するには、<number> CVEs を選択します。
- CVE を含むノードのリストを表示するには、<number> Nodes を選択します。
オプション: CVE をエンティティー別にフィルタリングするには、適切なフィルターと属性を選択します。フィルタリング条件をさらに追加するには、次の手順に従います。
- リストからエンティティーまたは属性を選択します。
- 必要に応じて、テキストなどの適切な情報を入力するか、日付またはオブジェクトを選択します。
- 右矢印アイコンをクリックします。
オプション: 追加のエンティティーと属性を選択し、右矢印アイコンをクリックして追加します。フィルターのエンティティーと属性を次の表に示します。
表14.6 CVE のフィルタリング エンティティー 属性 ノード
- Name: ノードの名前。
- Operating system: ノードのオペレーティングシステム (例: Red Hat Enterprise Linux (RHEL))。
- Label: ノードのラベル。
- Annotation: ノードのアノテーション。
- Scan time: ノードのスキャン日。
CVE
- Name: CVE の名前。
- Discovered time: RHACS が CVE を検出した日付。
CVSS: CVE の重大度。
CVE の重大度レベルには次の値が関連付けられています。
- is greater than
- is greater than or equal to
- is equal to
- is less than or equal to
- is less than
Node Component
- Name: コンポーネントの名前。
-
Version: コンポーネントのバージョン (例:
4.15.0-2024
)。これを使用すると、たとえばコンポーネント名と組み合わせて、特定のバージョンのコンポーネントを検索できます。
Cluster
- Name: クラスターの名前。
- Label: クラスターのラベル。
- Type: クラスターのタイプ (例: OCP)。
- Platform type: プラットフォームのタイプ (例: OpenShift 4 クラスター)。
オプション: 結果のリストを絞り込むには、次のいずれかのタスクを実行します。
- CVE severity をクリックし、1 つ以上のレベルを選択します。
- CVE status をクリックし、Fixable または Not fixable を選択します。
- オプション: ノードの詳細と、そのノードの CVSS スコアと修正可能な CVE に基づく CVE 情報を表示するには、ノードのリストでノード名をクリックします。
14.5.9. Stackrox Scanner と Scanner V4 のスキャン結果の違いを理解する
オペレーティングシステムバージョンが同じでも、Scanner V4 を使用して RHCOS ノードホストをスキャンした場合に報告される CVE の数の方が著しく多くなります。たとえば、Scanner V4 は約 390 件の CVE を報告しますが、StackRox Scanner は約 50 件の CVE を報告します。選択された脆弱性を手動で確認すると、次の原因が明らかになりました。
- Scanner V4 で使用される Vulnerability Exploitability eXchange (VEX) データの方が正確です。
- VEX データには、"no fix planned" や "fix deferred" などの詳細なステータスが含まれます。
- StackRox Scanner によって報告された脆弱性の一部は誤検出されていました。
つまり、Scanner V4 はより正確で現実的な脆弱性評価を提供します。
特に、一部のセキュアなクラスターが古いバージョンの RHACS で StackRox Scanner を使用しており、一方で Scanner V4 を使用しているクラスターがある場合、ユーザーは報告された脆弱性の矛盾に驚くかもしれません。この違いをわかりやすくするために、理解しやすくするために次の例では、報告された脆弱性を手動で検証する方法について説明します。
14.5.9.1. 報告された脆弱性の矛盾の例
この例では、任意に選択された 3 つの RHCOS バージョンに対して報告された CVE の違いを分析しました。この例は、RHCOS バージョン 417.94.202501071621-0
の調査結果を示しています。このバージョンでは、RHACS により次のスキャン結果が提供されました。
- StackRox Scanner は 49 件の CVE を報告しました。
- Scanner V4 は 389 件の CVE を報告しました。
内訳は次のとおりです。
- StackRox Scanner のみが報告した CVE は 1 件。
- 両方のスキャナーが報告した CVE は 48 件。
- Scanner V4 のみが報告した CVE は 341 件。
14.5.9.1.1. StackRox Scanner のみが報告した CVE
StackRox Scanner のみが報告した 1 件の CVE は誤検出でした。CVE-2022-4122 は、バージョン 5:5.2.2-1.rhaos4.17.el9.x86_64
の podman
パッケージに対してフラグが付けられました。ただし、RHSA-2024:9102 の VEX データを手動で確認したところ、この脆弱性はバージョン 5:5.2.2-1.el9
で修正されたことが示されました。したがって、スキャンされたパッケージバージョンは最初に修正が追加されたバージョンであり、影響はなくなりました。
14.5.9.1.2. Scanner V4 のみが報告した CVE
Scanner V4 のみが報告した 341 件の CVE からランダムに 10 件を選択し、VEX データを使用して詳細な分析を実施しました。これらの脆弱性は次の 2 つのカテゴリーに分類されます。
- 影響を受け、修正が予定されていないことを示す詳細なステータスを持つパッケージ
- 影響を受け、修正に関する追加のステータス詳細がないパッケージ
たとえば、次のような結果が分析されました。
-
git-core
パッケージ (バージョン2.43.5-1.el9_4
) は CVE-2024-50349 (VEX データ) のフラグが付けられ、"Affected" のマークと "Fix deferred" の詳細ステータスが示されています。これは、優先度の高い開発作業があるため修正は保証されないことを意味します。このパッケージは、合計 3 件の CVE の影響を受けます。 -
vim-minimal
パッケージ (バージョン2:8.2.2637-20.el9_1
) には 109 件の CVE がフラグ付けされており、そのうち 108 件に低い CVSS スコアが付けられていました。ほとんどは "Affected" とマークされており、詳細ステータスは "Will not fix" でした。 -
krb5-libs
パッケージ (バージョン1.21.1-2.el9_4.1
) は CVE-2025-24528 (VEX データ) のフラグが付けられましたが、詳細ステータスはありませんでした。これは、この分析を行った時点で最近検出された CVE であったため、ステータスはすぐに更新される可能性があります。
14.5.9.1.3. 両方のスキャナーが報告した CVE
ランダムに選択された 3 つのパッケージを手動で検証したところ、StackRox Scanner で使用される OVAL v2 データと、Scanner V4 で使用される VEX データが、検出された CVE に対して一貫した説明を提供していることがわかりました。場合によっては、CVSS スコアが若干異なりますが、これは VEX パブリッシャーデータの違いから予測されるものです。
14.5.9.2. 脆弱性の状態の検証
ベストプラクティスとして、公開されている VEX データを使用して、環境にとって重要なノードホストコンポーネントの脆弱性の詳細なステータスを検出します。VEX データは、人間が判読できる形式と機械が判読できる形式の両方でアクセスできます。VEX データの解釈の詳細は、Red Hat Enterprise Linux CoreOS セキュリティーデータの最近の改良点 を参照してください。