第11章 仮想化のセキュリティ

企業のインフラストラクチャに仮想化技術を導入する時には、ホストが侵害を受けないことを 確実にする必要があります。Xen hypervisor 内では、ホストはシステム管理を担当し、全ての仮想マシンを管理する権限のあるドメインです。このホストが安全でないと、システム内の他の全てのドメインが脆弱となります。仮想化を使用するシステム上でのセキュリティを強化するのに数種類の方法があります。担当者、又はその組織は、運営仕様を含む 導入プラン を作成して、仮想化ゲストとホストサーバーにどのサービスが必要か、及びそれらのサービスに何が 必要かと言う項目を指定すべきです。導入プランを開発する段階で考慮すべきセキュリティ問題を いくつか以下に示します:
  • ホスト上では必要なサービスのみを実行します。ホスト上で実行しているプロセスと サービスが少ない程、セキュリティとパフォーマンスのレベルが高くなります。
  • hypervisor 上で SELinux を有効にします。SELinux と仮想化の使用に関する詳細には 「SELinux と仮想化」 を お読み下さい。
  • ファイアウォールを使用して、dom0 へのトラフィックを制限します。デフォルトの拒否規則でファイアウォールを設定すると、dom0 への攻撃から保護をする助けになります。また、ネットワークが直面するサービスを制限することも大切です。
  • 一般ユーザーには dom0 へのアクセスを禁止します。一般ユーザーに dom0 へのアクセスを許すと、dom0 を危険に曝す恐れがあります。dom0 は特権用であり、非権限者に許可をすることはセキュリティレベルを低下することになります。

11.1. SELinux と仮想化

SELinux(Security Enhanced Linux)は Linux コミュニティの支援を受けて NSA によって開発されており、Linux の為により 強力なセキュリティを提供します。SELinux は攻撃者の能力を制限し、そして バッファオーバーフロー攻撃や権限昇格などの多くの一般的な侵害を阻止する ように機能します。この利便性の理由で、全ての Red Hat Enterprise Linux システムが SELinux を有効にして強制モードになっていることを Red Hat は推奨しています。
SELinux は SELinux が有効になっていて、イメージが正しいディレクトリに無い場合には、 ゲストイメージのロードを阻止します。SELinux は全てのゲストイメージが /var/lib/libvirt/images 内に存在することを要求します。
SELinux を強制モードにして LVM ベースのストレージを追加

以下のセクションは、論理ボリュームを SELinux が有効になった仮想化ゲストに 追加するサンプルです。これらの案内はハードドライブのパーティション設定にも 役に立ちます。

手順11.1 SELinux が有効になった仮想化ゲスト上で論理ボリュームの作成とマウント

  1. 論理ボリュームを作成します。このサンプルでは、NewVolumeName と言う名前の 5ギガバイトの論理ボリュームを volumegroup と言う名前のボリュームグループ上に 作成します。
    # lvcreate -n NewVolumeName -L 5G volumegroup
  2. NewVolumeName の論理ボリュームを ext3 などの 拡張属性をサポートするファイルシステムでフォーマットします。
    # mke2fs -j /dev/volumegroup/NewVolumeName
  3. 新規の論理ボリュームをマウントする為の新規ディレクトリを作成します。この ディレクトリはユーザーファイルシステムのどこにでも置けます。しかし、それは 重要なシステムディレクトリ(/etc/var/sys など)や、ホームディレクトリ(/home 又は /root)には配置しないように推奨します。 このサンプルでは、/virtstorage と言うディレクトリを使用します。
    # mkdir /virtstorage
  4. 論理ボリュームのマウント
    # mount /dev/volumegroup/NewVolumeName /virtstorage
  5. Xen フォルダー用に 正しい SELinux のタイプをセット
    semanage fcontext -a -t xen_image_t "/virtualization(/.*)?"
    
    別の方法として、KVM のフォルダーに正しい SELinux のタイプをセットします。
    semanage fcontext -a -t virt_image_t "/virtualization(/.*)?"
    
    targeted ポリシーが使用されている場合(targeted ポリシーがデフォルト)、 このコマンドは /etc/selinux/targeted/contexts/files/file_contexts.local ファイルに1行を追加して、それがこの変更を 恒久化します。追加される1行は以下に似ているものです:
    /virtstorage(/.*)?    system_u:object_r:xen_image_t:s0
    
  6. マウントポイント(/virtstorage)とその下の全てのファイルのタイプを xen_image_t に変更するようにコマンドを実行します。(restoreconsetfiles/etc/selinux/targeted/contexts/files/ 内のファイルを読み込みます)
    # restorecon -R -v /virtualization