OpenShift Security

HOMEデベロッパー向けOpenShift Security

OpenShift Security インデックス

  1. OpenShift Security
  2. Red Hat CoreOS
  3. Container Security

OpenShift のセキュリティ

OpenShift として標準で提供しているセキュリティ機能

  • プロジェクト(namespace) 間のアクセス分離
  • Pod 間ネットワークの分離 (OpenShift SDN)
  • コンテナのアクセス権の制御 (SELinux / Seccomp / SCC:Security Context Constrain)
  • コンテナとホストのログ収集と可視化 (Elastic Search / Fluentd / Kibana)
  • ファイルの改竄検知 (OpenShift File Integrity Operator)
  • 各種 コンプライアンスの規格への準拠スキャン ( OpenShift Compliance Operator)

OpenShift の オプションが必要になる部分

  • OpenShift上で使用しているコンテナのイメージの脆弱性情報の提供 (Red Hat Quay / Red Hat Advanced Cluster Security)
  • アプリケーションビルド時の脆弱性の検査等、コンテナのサプライチェーン内の脆弱性の検知、デプロイ後の不審なアクティビティの検知 (Red Hat Advanced Cluster Security)

OpenShift としてカバーしていない所

  • ユーザーが作成した、アプリケーションに対する既知の脆弱性からの保護 (WAF/IPS/IDF)や外部からの脆弱性スキャン(ペネチュレーション・テスト、動的コード解析(DAST)
  • ソースコードの脆弱性検証などのホワイトボックステスト、静的コード解析(SAST)
セキュリティの対策はいろいろな側面があるので、ここで上げている対応は一部の例で、これで完全に安心というわけではありません。

サプライチェーンでの脆弱性/コンプライアンス

  • ビルドに使用しているイメージに脆弱性が含まれてないかチェックします。
  • マニフェストに適切な項目が記載されているかチェックします。(例:使用CPUの上限)
イメージを Buildした後、Registry に格納すれば Quayで脆弱性スキャンが可能

Host OSのセキュリティ

  • CoreOSは、アプライアンスに近いOSです。初期構成では ssh key を使ったログイン以外ではログインできません。
  • CoreOSは、OpenShift の構成コンポーネントと同様にOTA(Over-The-Air)でアップデートされます。

Registry での image の脆弱性の確認

  • OpenSfhitを構成するコンテナについては、脆弱性情報を提供します。
  • 標準の Image Registry を提供します(脆弱性スキャン機能無し)。
  • 脆弱性スキャン機能を持った Registryを使用する場合は、Quay や 3rd Party製レジストリが必要となります。

コンテナ と Host OS の分離

  • SCC (root権限をしっかり管理)
  • SELinux (アプリ単位でアクセスできるリソースを制限)
  • Pod 間の Network 分離 (NetworkPolicy + OpenShift-SDN (※2))
※1
開発の初期段階(絵的に左側)においてセキュリティに関する対策を考える事。セキュリティの対策は作成した後に行われがちなので、セキュリティ界隈でよく用いられるキーワード
※2
NetworkPolicy は、K8Sの標準だが、NetworkPolicy をサポートする CNIプラグインが必要。OpenShift SDN は対応。

稼働中のコンテナの脆弱性

  • 時間の経過とともに発覚するコンテナのイメージが持つ脆弱性を確認できます。
  • Quay をユーザー・コンテナの Repository として使用している場合は、使用しているイメージの脆弱性を検知・通知可能。CSO (Container Security Operator)を使うとUIに OpenShift コンソールに脆弱性を表示 / ACS では Quay 以外とも統合可能です。

アプリの攻撃からの保護

  • ネットワークトラフィックを何らかの方法で検査する必要があります。
  • LBの前に設置する / 機能拡張した Ingress Controller (L7 LB) として設置する方法/ コンテナのサイドカーとして設置する方法があります。
  • OpenShift Console 自体の保護も必要となります。

ログの収集と分析

  • Container /Host のログを収集・可視化 (Elasticsearch/Fluentd/Kibana)。
  • SIEMのように収集したログを自動分析をしたい場合は 3rd Party 製品が必要となります。

OTA(Over The Air) Update

  • OpenShift コンテナと一緒に、ホスト Core OSもOTA (Over-The-Air)アップデートが可能です。。
  • バージョンを選んで One Clickで実行することが可能です。

DevSecOps とシフトレフト

セキュリティの対策は、できるだけ開発の初期から行う(シフト・レフト)

コンテナ間とコンテナとホスト間の分離

  • OpenShift の Host OS は、CoreOS がデフォルト。コンテナ化できないソフトウェアをサポートする場合は、RHELも使用可能 (OCP 4.9 から、RHEL8のサポートを再び開始)。
  • コンテナは Linux のプロセスなので、基本のセキュリティは、Linux のセキュリティ機能と同じ。
  • namespaces によるマルチテナンシー。
  • cgroup による CPU / Memory 等のリソース管理。
  • seccomp によるシステムコール制御。
  • SELinux による厳密なアクセス制御。
  • ホストからの分離だけでなく、コンテナ間の保護することが可能。
  • RHEL CoreOSの採用による、最小限のアタックサーフェース。

SCC (Security Context Constraints)

  • インストール完了時から全てのコンテナ (OpenShift自身) にも適用されているセキュリティのポリシー。OpenShift 全体をセキュアに保護。
  • ユーザーが作成するアプリケーションのデフォルトは「restrcited」で Host へのアクセスはできない。

標準で用意されているSCC

SCC Description
anyuid Allow containers to run as any user ID,including root user (uid=0)
hostaccess Allow containers to access host file systems network and process table with restricted user ID
hostmount-anyuid Allow containers to access host file system using host mounts run as any user ID
hostnetwork Allow containers access to host networking host ports
node-exporter Reserved for use by Prometheus node exporter
nonroot Allow containers to run as any user ID except root user (uid=0)
privileged Allow access to all privileged and host features-most relaxed access use only for cluster administration
restricted Deny access to all host features require pod containers to run with restricted UID (default SCC)
デフォルトでは、host OS 機能へのアクセスを全て Deny。root やUser指定での起動は不可。SELinux も有効。
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.3/html/networking/nw-networkpolicy-multitenant-isolation_configuring-networkpolicy-plugin

SELinuxのコンテナにおける有効性

SELinux は、複数の Linux で採用されているセキュリティ・レイヤーです。プロセスが可能な動作を規定する事で、脆弱性を突かれて権限を奪われた場合でも、攻撃者が行える操作を制限できます。

Red Hat が提供するコンテナの脆弱性情報

古いイメージをそのまま使い続ける事は、脆弱性を放置する事につながります。
以下は、Red Hat が OpenSfhit 用に提供している ElasticSearch コンテナのバージョンによる脆弱性の違いです。
Red Hat が提供するコンテナイメージにつついては、常に最新の脆弱性の情報が提供されます。

これらの情報を OpenShift と連携させるには、オプショナルの製品が必要です。

https://catalog.redhat.com/
https://catalog.redhat.com/software/containers/rhceph-beta/rhceph-4-dashboard-rhel8/5e965720d70cc54b02d1f413?container-tabs=security

OTA (Over The Air Update)

Kubernetes は、年3回の新バージョンのリリースが行われ、OpenShift もそれに従います。Kubernetes では、このアップデートは基本的に手動作業です。パッチリリースまで含めると、これらのバージョンアップに追随するのは大変な作業です。

OpenShiftでは、

  • アップグレード可能なパスを自動的に提示します。
  • 「ワン・クリック」でアップデートを実行します。

OpenShift だけではなく、CoreOS も同時にアップグレード(RHEL使用時は、RHELは手動で管理する必要がある)

CLIからのアップデートも可能

Openshift Compliance Operator

cluster-admin: cluster の全権限を持った管理者

Compliance 対応のスキャンの結果表示。スケジュールを行い、定期的にスキャンができる。

[root@bastion openshift]# oc get ComplianceCheckResults
NAME                                                                                STATUS   SEVERITY
ocp4-cis-accounts-restrict-service-account-tokens                                   MANUAL   medium
ocp4-cis-accounts-unique-service-account                                            MANUAL   medium
ocp4-cis-api-server-admission-control-plugin-alwaysadmit                            PASS     medium
ocp4-cis-api-server-admission-control-plugin-alwayspullimages                       PASS     high
ocp4-moderate-oauth-or-oauthclient-token-maxage                                     FAIL     medium
ocp4-moderate-ocp-allowed-registries                                                FAIL     medium
ocp4-moderate-ocp-allowed-registries-for-import                                     FAIL     medium
ocp4-moderate-ocp-api-server-audit-log-maxbackup                                    PASS     low
ocp4-moderate-ocp-api-server-audit-log-maxsize                                      PASS     medium
ocp4-moderate-ocp-idp-no-htpasswd                                                   PASS     medium
 
<省略>
 
ocp4-moderate-scc-limit-process-id-namespace                                        MANUAL   medium
ocp4-moderate-scc-limit-root-containers                                             MANUAL   medium
ocp4-moderate-scheduler-no-bind-address                                             PASS     medium
ocp4-moderate-secrets-consider-external-storage                                     MANUAL   medium
ocp4-moderate-secrets-no-environment-variables                                      MANUAL   medium
[root@bastion openshift]# oc get ComplianceCheckResults | grep FAIL | wc -l
94
[root@bastion openshift]#

スキャンの結果の詳細と、コンプライアンスに準拠するための対応策の表示

[root@bastion openshift]# oc get  ComplianceCheckResults ocp4-moderate-resource-requests-quota -oyaml
apiVersion: compliance.openshift.io/v1alpha1
description: "Ensure workloads use resource requests and limits\nResource quotas provide
  constraints that limit aggregate resource consumption \nper project. This helps
  prevent resource starvation. When deploying your \napplication, it is important
  to tune based on memory and CPU consumption, \nallocating enough resources for the
  application to function properly."
id: xccdf_org.ssgproject.content_rule_resource_requests_quota
instructions: "Run the following command to retrieve the ClusterResourceQuota objects
  in the system:\n$ oc get clusterquota --all-namespaces \nMake sure there exists
  at least one ClusterResourceQuota object in the cluster.\n\nOr\n\nVerify that the
  every non-control plane namespace has an appropriate ResourceQuota.\n\nTo get all
  the non-control plane namespaces, you can do the\nfollowing command oc get  namespaces
  -o json | jq '[.items[] | select((.metadata.name | startswith(\"openshift\") | not)
  and (.metadata.name | startswith(\"kube-\") | not) and .metadata.name != \"default\")
  | .metadata.name ]'\n\nTo get all the non-control plane namespaces with a ResourceQuota,
  you can do the\nfollowing command oc get --all-namespaces resourcequota -o json
  | jq '[.items[] | select((.metadata.namespace | startswith(\"openshift\") | not)
  and (.metadata.namespace | startswith(\"kube-\") | not) and .metadata.namespace
  != \"default\") | .metadata.namespace] | unique'\n\nMake sure that the namespaces
  displayed in the commands of the commands match."
kind: ComplianceCheckResult
<省略>
    kind: ComplianceScan
    name: ocp4-moderate
<省略>
severity: medium
status: FAIL
[root@bastion openshift]#

このコンプライアンス項目の意味

このコンプライアンス項目に準拠するための対応方法

スキャンの結果

Openshift Compliance Operator サポートする Profile (@OCP 4.9)

Profile Profile title Compliance Operator version Industry compliance benchmark
ocp4-cis CIS Red Hat OpenShift Container Platform 4 Benchmark 0.1.39+ CIS Benchmarks ™ [1]
ocp4-cis-node CIS Red Hat OpenShift Container Platform 4 Benchmark 0.1.39+ CIS Benchmarks ™ [1]
ocp4-e8 Australian Cyber Security Centre (ACSC) Essential Eight 0.1.39+ ACSC Hardening Linux Workstations and Servers
ocp4-moderate NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - Platform level 0.1.39+ NIST SP-800-53 Release Search
ocp4-moderate-node NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - Node level 0.1.44+ NIST SP-800-53 Release Search
ocp4-nerc-cip North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for the Red Hat OpenShift Container Platform - Platform level 0.1.44+ NERC CIP Standards
ocp4-nerc-cip-node North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for the Red Hat OpenShift Container Platform - Platform level 0.1.44+ NERC CIP Standards
ocp4-pci-dss PCI-DSS v3.2.1 Control Baseline for Red Hat OpenShift Container Platform 4 0.1.47+ PCI Security Standards ® Council Document Library
ocp4-pci-dss-node PCI-DSS v3.2.1 Control Baseline for Red Hat OpenShift Container Platform 4 0.1.47+ PCI Security Standards ® Council Document Library
rhcos4-e8 Australian Cyber Security Centre (ACSC) Essential Eight 0.1.39+ ACSC Hardening Linux Workstations and Servers
rhcos4-moderate NIST 800-53 Moderate-Impact Baseline for Red Hat Enterprise Linux CoreOS 0.1.39+ NIST SP-800-53 Release Search
rhcos4-nerc-cip North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for Red Hat Enterprise Linux CoreOS 0.1.44+ NERC CIP Standards
[1]
CIS RedHat OpenShift Container Platform v4 Benchmarkを探すには、CIS Benchmarksのサイトにアクセスし、検索ボックスに「Kubernetes」と入力します。Kubernetes」をクリックし、「Download Latest CIS Benchmark」をクリックすると、ベンチマークをダウンロードするための登録画面が表示されます。

OpenShift 4 CIS Benchmarks

Openshift File Integrity Operator

スキャン後の概要

[root@bastion openshift]# oc get fileintegritynodestatuses
NAME                                             NODE                       STATUS
example-fileintegrity-ocp48-48xs5-master-0           ocp48-48xs5-master-0           Failed
example-fileintegrity-ocp48-48xs5-master-1           ocp48-48xs5-master-1          Succeeded
example-fileintegrity-ocp48-48xs5-master-2           ocp48-48xs5-master-2          Succeeded
<省略>
[root@bastion openshift]# 

Failed ( File Integrity が失われている) の理由

[root@bastion openshift]# oc describe cm aide-example-fileintegrity-ocp48-48xs5-master-0-failed
<省略>
Summary:
  Total number of entries:  35105
  Added entries:              1
  Removed entries:            0
  Changed entries:             0
---------------------------------------------------
Added entries:
---------------------------------------------------
f++++++++++++++++: /hostroot/root/.bash_history
---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------
/hostroot/etc/kubernetes/aide.db.gz
  MD5      : YtMdReUtYPff9bab2wciKg==
<省略>

結果は ConfigMap に保管される

Master Node に ssh ログインして、デバックをしたので、.bash_history のコマンド履歴が更新されたのが原因

OpenShift とオプショナルの製品によるセキュリティ機能

項目 OCP Quay ACS 3rd Party
コンテナ間の分離、Host層へのアクセスの厳密な制御 (SELinux Seccomp)、コンテナへのSeciruty Policy の適用 (SCC)マルチテナント
Namespace 間の NetworkPolicy の設定。OpenShift クラスター内から外部ネットワークへのアクセス制御。
etcd の暗号化 (バックアップ流出時の対策)
OpenShift / Nodeに使用されている RHCOSのパッチの、簡単なアップグレード(OTA:Over The Air)
OpenShift 環境のログ収集機能 (EFK)
コンテナイメージ(UBI)、Node で使用しているOS (RHCOS)への脆弱性情報の提供とパッチの提供
OpenShift File Integrity Operator。Fileの改竄検知。
OpenShift Compliance Operator。NIST/PCIDSS等のスタンダードへの対応チェック。
コンテナのサプライチェーンでの Build / Deploy / Run の各ステージにおけるコンテナ・イメージの脆弱性スキャン、マニフェストコンプライアンス・チェック。
稼働中コンテナでのシェル実行、普段と違うネットワークアクセスの検知
ミドルウェアライブラリに対する脆弱性スキャン
稼働中/レポジトリに保管されているコンテナのイメージの脆弱性スキャン [1]
WAF / IPS / IDS 機能。DDoS に対するアプリケーションの防御
アプリケーションに対するブラックボックス型の脆弱性診断 / CI/CDプロセスでのコードのホワイトボックス診断

選ぶなら業界をリードするコンテナプラットフォーム

OpenShiftならインフラ運用の効率化はもとよりアプリケーション開発者がソースコードの開発に専念できるように必要な機能までも提供してくれます