Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.3. SELinux

QEMU プロセスの権限を制限し、必要なものだけに制限すると、強制アクセス制御により、攻撃が試行される影響を制限します。Red Hat OpenStack Platform では、SELinux は、個別のセキュリティーコンテキストで各 QEMU プロセスを実行するように設定されます。Red Hat OpenStack Platform サービス用に SELinux ポリシーが事前設定されています。

OpenStack の SELinux ポリシーでは、ハイパーバイザーホストと仮想マシンを 2 つの主要な脅威ベクトルから保護するのに役立ちます。

  • ハイパーバイザーの脅威: ハイパーバイザーが基礎となるリソースにアクセスするためにハイパーバイザーを攻撃する、危険にさらされるアプリケーション。たとえば、仮想マシンがハイパーバイザー OS、物理デバイス、またはその他のアプリケーションにアクセスできる場合。この脅威ベクトルは、ハイパーバイザーで危険にさらされるリスクを表し、他の仮想マシンおよびネットワークセグメントを公開することも可能となります。
  • 仮想マシン (multi-project) の脅威: ハイパーバイザーが、別の仮想マシンとそのリソースにアクセスしたり、制御したりするために、VM 攻撃内で実行される、危険にさらされたアプリケーションです。これは、仮想化に固有の脅威ベクトルであり、1 つのアプリケーションの脆弱性により、仮想マシンファイルイメージの多重化のリスクにさらされる可能性があるためです。この仮想ネットワーク攻撃は、実際のネットワークを保護する管理手法が仮想環境に直接適用されないため、大きな懸念となります。KVM ベースの各仮想マシンは SELinux によってラベル付けされ、各仮想マシンのセキュリティー境界を効果的に確立します。このセキュリティー境界は Linux カーネルによって監視および実施され、ホストマシンのデータファイルや他の仮想マシンなど、仮想マシンの境界外にあるリソースへのアクセスを制限します。

Red Hat の SELinux ベースの分離は、仮想マシン内で実行されるゲストオペレーティングシステムに関係なく提供されます。Linux または Windows 仮想マシンを使用できます。

6.3.1. ラベルとカテゴリー

KVM ベースの仮想マシンインスタンスには、svirt_image_t と呼ばれる独自の SELinux データ型でラベルが付けられます。カーネルレベルの保護により、マルウェアなどの未承認のシステムプロセスが、ディスク上で仮想マシンイメージファイルを操作できなくなります。仮想マシンの電源がオフの場合、イメージは以下のように svirt_image_t として保存されます。

system_u:object_r:svirt_image_t:SystemLow image1
system_u:object_r:svirt_image_t:SystemLow image2
system_u:object_r:svirt_image_t:SystemLow image3
system_u:object_r:svirt_image_t:SystemLow image4

svirt_image_t label はディスク上のイメージファイルを一意に識別し、SELinux ポリシーでアクセスを制限することができます。KVM ベースのコンピュートイメージの電源が入ると、SELinux は、イメージにランダムな数値 ID を追加します。SELinux は、ハイパーバイザーノードごとに仮想マシン (最大 524,288) に数値識別子を割り当てることができますが、ほとんどの OpenStack デプロイメントでは、この上限に達することはほとんどありません。以下の例は、SELinux カテゴリー ID を示しています。

system_u:object_r:svirt_image_t:s0:c87,c520 image1
system_u:object_r:svirt_image_t:s0:419,c172 image2

6.3.2. SELinux ユーザーおよびロール

SELinux はユーザーロールを管理します。これらは、-Z フラグまたは semanage コマンドで表示できます。ハイパーバイザーでは、管理者のみがシステムにアクセスできる必要があり、管理ユーザーとシステムにあるその他のユーザーの両方に適切なコンテキストが必要です。