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) ノードの脆弱性スキャンを有効にできます。

前提条件

手順

  1. 次のコマンドのいずれかを実行して、コンプライアンスコンテナーを更新します。

    • メトリクスが無効になっているデフォルトのコンプライアンスコンテナーの場合は、次のコマンドを実行します。

      $ 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"}]}]}}}}'
  2. 次の手順を実行して、Collector DaemonSet (DS) を更新します。

    1. 次のコマンドを実行して、新しいボリュームマウントを Collector DS に追加します。

      $ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"volumes":[{"name":"tmp-volume","emptyDir":{}},{"name":"cache-volume","emptyDir":{"sizeLimit":"200Mi"}}]}}}}'
    2. 次のコマンドを実行して、新しい 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 のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

手順

Scanner V4 を使用してノードインデックス (ノードスキャンとも呼ばれます) を有効にするには、次の手順を実行します。

  1. Scanner V4 が Central クラスターにデプロイされていることを確認します。

    $ kubectl -n stackrox get deployment scanner-v4-indexer scanner-v4-matcher scanner-v4-db1
    1
    OpenShift Container Platform の場合は、kubectl の代わりに oc を使用します。
  2. 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 を使用します。
  3. ノードスキャンを有効にするすべてのセキュアなクラスターで次のコマンドを実行して、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 を使用します。
  4. ノードスキャンを有効にするすべてのセキュアなクラスターで次のコマンドを実行して、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 を使用します。
  5. ノードスキャンが機能していることを確認するには、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 を引き続き使用する場合は、この手順に従ってください。

前提条件

手順

StackRox Scanner を使用してノードインデックス (ノードスキャンとも呼ばれます) を有効にするには、次の手順を実行します。

  1. StackRox Scanner が Central クラスターにデプロイされていることを確認します。

    $ kubectl -n stackrox get deployment scanner scanner-db1
    1
    OpenShift Container Platform の場合は、kubectl の代わりに oc を使用します。
  2. Central クラスターで次のコマンドを実行して、Central Pod の central コンテナーで ROX_NODE_INDEX_ENABLEDfalse に設定します。

    $ kubectl -n stackrox set env deployment/central ROX_NODE_INDEX_ENABLED=false1
    1
    OpenShift Container Platform の場合は、kubectl の代わりに oc を使用します。
  3. ノードスキャンを有効にするすべての保護されたクラスターで次のコマンドを実行して、Collector Daemonsetの compliance コンテナーで、ROX_CALL_NODE_INVENTORY_ENABLEDtrue に設定します。

    $ kubectl -n stackrox set env daemonset/collector ROX_CALL_NODE_INVENTORY_ENABLED=true1
    1
    OpenShift Container Platform の場合は、kubectl の代わりに oc を使用します。
  4. ノードスキャンが機能していることを確認するには、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 ノードのスキャンを設定できます。

表14.4 Node-inventory 設定
環境変数説明

ROX_NODE_SCANNING_CACHE_TIME

キャッシュされたインベントリーが古いとみなされるまでの時間。デフォルトは ROX_NODE_SCANNING_INTERVAL の 90%、つまり 3h36m です。

ROX_NODE_SCANNING_INITIAL_BACKOFF

バックオフファイルが見つかった場合にノードスキャンが遅延する最初の時間 (秒)。デフォルト値は 30s です。

ROX_NODE_SCANNING_MAX_BACKOFF

バックオフの上限。デフォルト値は 5m で、これは Kubernetes 再起動ポリシー安定性タイマーの 50% です。

表14.5 コンプライアンス設定
環境変数説明

ROX_NODE_INDEX_ENABLED

このクラスターでノードインデックスを有効にするかどうかを制御します。デフォルト値は false です。Scanner V4 ベースの RHCOS ノードスキャンを使用するには、この変数を設定します。

ROX_NODE_SCANNING_INTERVAL

ノードスキャン間の間隔期間の基本値。デフォルト値は 4h です。

ROX_NODE_SCANNING_INTERVAL_DEVIATION

ノードスキャンの継続時間は、基本間隔時間と異なる場合があります。ただし、最大値は ROX_NODE_SCANNING_INTERVAL によって制限されます。

ROX_NODE_SCANNING_MAX_INITIAL_WAIT

最初のノードスキャンまでの最大待機時間。ランダムに生成されます。この値を 0 に設定すると、初期ノードスキャンの待機時間を無効にすることができます。デフォルト値は 5m です。

14.5.7. ダッシュボードを使用してノードの脆弱性を特定する

Vulnerability Management ビューを使用して、ノードの脆弱性を特定できます。特定される脆弱性には、Docker、CRI-O、runC、containerd などの Kubernetes コアコンポーネントとコンテナーランタイムの脆弱性も含まれます。RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。

手順

  1. RHACS ポータルで、Vulnerability Management Dashboard に移動します。
  2. ヘッダーの Nodes を選択し、ノードに影響するすべての CVE のリストを表示します。
  3. リストからノードを選択し、そのノードに影響するすべての CVE の詳細を表示します。

    1. ノードを選択すると、選択したノードの Node の詳細パネルが開きます。Node ビューには、ノードの詳細が表示され、CVSS スコア別の CVE およびそのノードの修正可能な CVE に関する情報が含まれます。
    2. 選択したノードのすべての CVE のリストを表示するには、CVEs by CVSS score で、View All を選択します。CVE の一覧をフィルタリングすることもできます。
    3. 修正可能な CVE を CSV ファイルとしてエクスポートするには、Node Findings セクションで Export as CSV を選択します。

14.5.8. ノードの CVE の表示

RHACS を使用すると、ノード内の脆弱性を特定できます。特定される脆弱性は次のとおりです。

  • Kubernetes コアコンポーネントの脆弱性
  • Docker、CRI-O、runC、containerd などのコンテナーランタイムの脆弱性

RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。

手順

  1. RHACS ポータルで、Vulnerability Management Node CVEs をクリックします。
  2. データを表示するために、次のいずれかのタスクを実行します。

    • すべてのノードに影響するすべての CVE のリストを表示するには、<number> CVEs を選択します。
    • CVE を含むノードのリストを表示するには、<number> Nodes を選択します。
  3. オプション: CVE をエンティティー別にフィルタリングするには、適切なフィルターと属性を選択します。フィルタリング条件をさらに追加するには、次の手順に従います。

    1. リストからエンティティーまたは属性を選択します。
    2. 必要に応じて、テキストなどの適切な情報を入力するか、日付またはオブジェクトを選択します。
    3. 右矢印アイコンをクリックします。
    4. オプション: 追加のエンティティーと属性を選択し、右矢印アイコンをクリックして追加します。フィルターのエンティティーと属性を次の表に示します。

      表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 クラスター)。
  4. オプション: 結果のリストを絞り込むには、次のいずれかのタスクを実行します。

    • CVE severity をクリックし、1 つ以上のレベルを選択します。
    • CVE status をクリックし、Fixable または Not fixable を選択します。
  5. オプション: ノードの詳細と、そのノードの 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_64podman パッケージに対してフラグが付けられました。ただし、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 セキュリティーデータの最近の改良点 を参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.