OpenShift Security - Container Security

HOME デベロッパー向け OpenShift Security Red Hat CoreOS

OpenShift Security インデックス

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

セキュリティのガイドラインについて

コンテナ/コンテナに近い部分
具体的な製品・設定についての指定は無いレベル (抽象的)

NIST SP 800-190

「アプリケーション・コンテナのセキュリティガイド」
NIST (Nastional Institute of Standard and Technology:米国標準技術研究所)は、商務省の配下の組織

NIST SP 800-204

「マイクロサービスをベースとしたアプリケーションのセキュリティ戦略」

NIST SP 800-53

「連邦政府情報システムおよび連邦組織のためのセキュリティ管理策とプライバシー管理策」
米国連邦政府で使用するシステムのセキュリティとプライバシー管理の基準。日本も政府で導入するクラウドシステムの管理基準の一つとして採用する予定。

具体的な製品毎の設定についてのガイド

CIS Benchmarks[1] for Docker / Kubernetes

CIS (Center for Internet Security) が発行。ベンダー製品・サービスを対象に25以上のベンダー向けの100 以上のベストプラクティスがある。
HIPAA (Health Insurance Portability and Accountability Act)
医療情報のプライバシーとセキュリティに関する法律。それを満たすためのデータのプライバシーとセキュリティ要件。

HIPAA (Health Insurance Portability and Accountability Act)

医療情報のプライバシーとセキュリティに関する法律。それを満たすためのデータのプライバシーとセキュリティ要件。

PCI DSS (Payment Card Industry Data Security Standard)

クレジットカードの情報を保護する事を目的に作られた、クレカ向けシステムの基準。
審査機関が存在し、認証が取得できる。定期的な検査も求められる。

参考:NIST SP 800-190

SP=Special Publication. コンテナを使用する上でのセキュリティの考慮ポイント
(一般的なリスク・ポイントと対策の概念について言及したもので、具体的な手法、ツールなどについてガイドしているわけではありません)

3.1. イメージのリスク

3.1.1 イメージの脆弱性
  • 使用されたイメージは時間の経過と伴に古くなり脆弱性がでてくる。
3.1.2 イメージ設定の不備
  • 必要以上に大きな権限で実行できるようになっている。SSHデーモンが含まれおり、アタックサーフェスが大きなコンテナが存在する(設定の問題)。
3.1.3 埋め込まれたマルウェア
  • 不適切なサードパーティーや出所が不明なイメージをベースレイヤーとして使用する事で、マルウェアが埋め込まれている可能性がある。
3.1.4 踏め混まれた平文の秘密情報
  • SSH秘密鍵、X.509秘密鍵が埋め込まれたコンテナがあるとセキュリティリスクになる。
3.1.5 信頼できないイメージの使用
  • 組織外から配布されている脆弱性やマルウェアが仕込まれたイメージを使用する。「3.1.3 埋め込まれたマルウェア」に近い内容。

3.2. レジストリのリスク

3.2.1 レジストリへのセキュアでない接続
  • 暗号化されてないやりとりをする事により、認証情報を盗み出したり、中間者攻撃により、問題のあるイメージをオーケストレーターに提供する。
3.2.2 レジストリ内の古いイメージ
  • レジストリに保管されているイメージが古くなり、脆弱性を含んだ状態になる。「3.1.1イメージの脆弱性」の内容に近い。
3.2.3 認証・認可の不十分な制限
  • レジストリへの不正アクセスによる知的財産の損失。

3.3. オーケストレーターのリスク

3.3.1 制限のない管理者アクセス
  • 悪意のあるもしくは不注意のユーザーが他のネームスペースに影響を与える可能性がある。
3.3.2 不正アクセス
  • 独自でUser Directory を持っているオーケストレーターのアカウント管理 (厳密に管理されにくい)。
    オーケストレーターが保管しているデータボリュームの暗号化の考慮。
3.3.3 コンテナ間ネットワークトラフィックの不十分な分離
  • 暗号化されたオーバーレイ・ネットワークは安全だが、モニタリングできないためセキュリティ上の「盲点」となる可能性がある。
  • セキュリティレベル(機微性)が異なるアプリが同一ネットワークにあると、一つのアプリが攻撃された時に共有されたネットワークを介して別のアプリを攻撃できてしまうことへの考慮。
 3.3.4 ワークロードの機微性レベルの混合
  • 同じノード上に重要度が異なる、コンテナが配置される事がある。片方のセキュリティが破られた場合、もう一方が脆弱性にさらされる可能性がある。
 3.3.5 オーケストレーターノードの信頼
  • 不正なノードがクラスタに参加しコンテナを実行
  • 一つのノードの侵害がクラスタ全体のセキュリティリスクになる可能性がある(同じ鍵ペアが使われている)
  • オーケストレーターと、管理者、開発者、ノード間の通信が暗号化されてない。認証がない。

3.4. コンテナのリスク

3.4.1 コンテナ・ランタイムの脆弱性
  • コンテナ・ランタイムソフトウェアの脆弱性を使用した他のコンテナやホストOS自体への攻撃。
3.4.2 コンテナからの無制限ネットワークアクセス
  • 「3.3.3コンテナ間ネットワークトラフィックの不十分な分離」と似ているが、コンテナ間通信ではなく、コンテナと外向けネットワークのアクセスについて。
  • 外部のネットワークアドレスは、内部では使われておらず、トラフィックの可視性がないため、管理が難しい。
3.4.3 セキュアでないコンテナランタイムの設定
  • コンテナランタイムを不適切に設定するとホストOSのリスクを増大させる。
  • 特権モードで動作するコンテナは、ホストの全てのデバイスにアクセスできる。
3.4.4 アプリの脆弱性
  • アプリの作りによる脆弱性。XSSやSQL injection 等。
3.4.5 未承認コンテナ
  • 開発やデバッグ用などで用いられる、本来環境には存在するべきではない“未承認”コンテナの存在。気づかれずに環境に存在している場合、セキュリティリスクになる。

3.5. ホストOSのリスク

3.5.1 大きなアタックサーフェス
  • ホストOSはアタック・サーフェスが大きい。
3.5.2 共有カーネル
  • コンテナ専用OSでも、共有カーネルを使用しているため、ハイパーバイザーよりは分離レベルが低く、アタックサーフェスは大きい。
3.5.3 ホストOSコンポーネントの脆弱性
  • ホストOSの脆弱性。コンテナ専用OSでも最低限の機能しか持っていないとは言え、最低限の機能の中に脆弱性が存在する可能性はある。
3.5.4 不適切なユーザーアクセス権
  • ユーザーが管理目的でOSに直接できるようになっている場合、全てのユーザーに影響する広範囲の変更が可能になる。
3.5.5 ホストOSファイルシステムの改竄
  • コンテナがホストOS上のディレクトリーをマウントできるようになっている場合、他のコンテナに影響を与えるファイル改竄のリスクになる可能性がある。

セキュリティのガイドラインについて

セキュリティのガイドラインの多くは、一つ一つの項目を全てをカバーしなければいけないというものではなく、あくまで気づきを与えてくれるものです。

  • 具体的な対策方法を教えてくれるものではありません。
    例:ホストOSはアタックサーフェスが大きい。
  • 一つ一つの項目は相互に関わっている場合もあります。
  • ガイドラインの想定はあくまで、一般的なものなので、実際のシステムには当てはまらない事もあります。注意すべき視点を与えてくれるものとなります。
  • どのレベルでどの項目をカバーするか。セキュリティレベルを上げる事は、運用負荷とシステム負荷を上げる事になり、限度も無くコストとの兼ね合いになる。動かすアプリによっても適切なレベルがあります。 例:インターネット上の公開掲示板システムに PCIを適用する必要は通常ありません。
    暗号化されているため監視できない。と言って全てのポイントで暗号化/復号化すると、システムに過大な負荷をかけます。
    全ての兆候を捉えるために SIEM を導入する場合は、大量のログを管理・分析するためのリソースが必要になります。
  • ある機能に対応しているセキュリティ製品があっても「できる」というのと「どのレベルで」「できる」のかは違います。
  • 適切な箇所に、適切なレベルのセキュリティ設計を行います(判断するには、それなりの時間と、理解できるエンジニアが必要です)。
補足
コンテナ関連のセキュリティ・スタンダートでは、NIST SP 800-204 「Security Strategies for Microservices-based Application Systems」というのもあります。
https://csrc.nist.gov/pubs/sp/800/204/final

コンテナ環境におけるセキュリティ (NIST SP 800-190視点)

文言は、NIST SP800-190 をそのまま書き写しているわけではなく、抜粋アレンジしています。

コンテナ / コンテナ環境のリスク (NIST SP 800-190視点)

OpenShift も標準で、セキュリティを考えた設計 / 実装 がされています。

①イメージのリスク

イメージの脆弱性、秘密情報の埋め込まれたコンテナ、出所不明なイメージ Quay、CSO(Container Security Operator) 、Red Hat Ecosystem Catalog のベースイメージの使用

②レジストリのリスク

認証・認可、知的財産の喪失 Docker Registry の project ベースのアクセス制御、Quay によるアクセス制御、Geo Replication / Mirroring

③オーケストレーターのリスク

カーネルの共有、ホストOSの設定、コンテナ間のアクセス分離 File Compliance Operator、SELinux、SCC(Security Context Constrain)、OTAによる簡単な最新へのアップデート

④コンテナのリスク

ランタイム、ネットワークアクセス CRI-O / NetworkPolicy / namespace (Project)

NetworkPolicy, namespace は K8S標準のもの
  • NetworkPolicy は、使用されるCNIプラグインによっては使用できないが、OpenShift SDNは対応している
  • OpenShift の project (namespace ) では、template という概念があり、ユーザーが project を作成した時にデフォルトの “template” を適用でき、そこでデフォルトの NetworkPolicy を適用する事ができる。

⑤ホストOSのリスク

広いアタックサーフェス CoreOS、Machine Config Operator、Compliance Operator、OTA(Over The Air Update)

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

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