OpenShift Security
OpenShift Security インデックス
- OpenShift Security
- Red Hat CoreOS
- 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 blog
- [1]
- How SELinux separates containers using Multi-Level Security (redhat.com)
- [2]
- SELinux Mitigates container Vulnerability (redhat.com)
Red Hat が提供するコンテナの脆弱性情報
古いイメージをそのまま使い続ける事は、脆弱性を放置する事につながります。
以下は、Red Hat が OpenSfhit 用に提供している ElasticSearch コンテナのバージョンによる脆弱性の違いです。
Red Hat が提供するコンテナイメージにつついては、常に最新の脆弱性の情報が提供されます。
これらの情報を OpenShift と連携させるには、オプショナルの製品が必要です。
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]#
スキャンの結果の詳細と、コンプライアンスに準拠するための対応策の表示
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プロセスでのコードのホワイトボックス診断 |
このコンプライアンス項目の意味
このコンプライアンス項目に準拠するための対応方法
スキャンの結果