SELinux 再入門-仮想化・コンテナ編-(PDF/Jpn) - FFRI

FFRI,Inc.
Monthly Research
SELinux 再入門
-仮想化・コンテナ編株式会社FFRI
http://www.ffri.jp
Ver 1.00.01
1
FFRI,Inc.
SELinux 再入門 -仮想化・コンテナ編•  仮想化技術(VM)とセキュリティ
–  VM特有の脅威モデル
–  libvirt(svirt)
–  Type Enforcement*1 を使ったホスト-ゲスト隔離
–  Multi Category Security*2を用いたゲスト間隔離
•  Dockerとセキュリティ
–  Dockerとは
–  Dockerの脅威モデル
–  libcontainerによる隔離
•  まとめ
*1, *2: SELinuxの基礎については、2014年06月のMonthly Researchを参照
http://www.ffri.jp/assets/files/monthly_research/MR201406_A%20Re-introduction%20to%20SELinux_JPN.pdf
2
FFRI,Inc.
はじめに
•  VMを使ったOS仮想化環境においては、仮想化環境を提供するホスト
OSと仮想化環境であるゲストOSそれぞれの隔離と、ゲストOS間
のセキュリティが重要である
–  LXC, dockerのようなコンテナ型OS仮想化においても同様
•  現状、多くの仮想化及びコンテナは実行にroot権限が必要なため、
その“ゲストOS(コンテナ)の封じ込め”は非常に重要である
•  今回はlibvirtに統合されたSELinuxによるLinuxの仮想化システムの
隔離と、dockerのlibcontainerを用いた隔離について紹介する
3
FFRI,Inc.
仮想化技術(VM)とセキュリティ
4
FFRI,Inc.
VM特有の脅威モデル
•  ゲストOSがホストOSに対して攻撃を行うケース
–  ゲストOSはだいたいの場合特権ユーザで動作しているため、V
Mの脆弱性を用いて攻略されてしまう可能性がある
•  ゲスト同士がお互いの情報を読み取ったり、改ざんを行うケース
Attack from the guest to the other guest
Guest OS
Guest OS
Attack from guest to host
Host OS
Fig 1. Threat model of virtualization system
5
FFRI,Inc.
libvirt(with svirt)
•  各種仮想化システムを統合するための管理フレームワーク
–  ハイパーバイザの違いを意識せずにVMを操作できるvirshもこのフレ
ームワークの一部
•  各種仮想化システム(KVM、Xen、QEMU、VirtualBox、VMware 、HyperV、LXC、UMLなど)のプロセスのケーパビリティやSELinuxコンテキス
トを管理するsVirtが統合されている
–  ポリシーやセキュリティコンテキスト自体はreference policyで管理さ
れている
6
FFRI,Inc.
Type Enforcement を使ったホスト-ゲスト隔離
•  libvirtのSecurity Manager(svirt相当)は以下のアクセス制御機構を用
いて、ゲストOSをホストOSから隔離する
–  selinux, apparmor, Unix DAC(uidベースのアクセス制御)
allow
ipc etc.
Guest OS Process
libvirtd
(qemu_t)
allow read/write
(virtd_t)
Host OS
Guest OS image
(qemu_image_t or virt_image_t)
allow read/write
manage
SELinux Hooks
Fig 2. Host-Guest Isolation using SELinux 7
FFRI,Inc.
Multi Category Securityを用いたゲスト間隔離
•  libvirtのSecurity ManagerはゲストOS・コンテナごとに固有のセキ
ュリティラベルを割り当てる
•  SELinuxの type enforcementは動的なtype割り当てが苦手なので、
MCS(Multi Category Security)を使ってカテゴリを分ける
Guest OS Process
(MLS Context: c1)
Allow All
Guest OS1 Image
(MLS Context: c1)
Guest OS Process
(MLS Context: c2)
Deny All
Allow All
Guest OS2 Image
(MLS Context: c2)
SELinux Hooks
Fig 3. Guest-Guest Isolation using SELinux 8
FFRI,Inc.
DOCKERとセキュリティ
9
FFRI,Inc.
Dockerとは
•  アプリケーションのデプロイにフォーカスした、コンテナ型OS仮
想化と差分ディスク管理によるコンテナ管理基盤
–  Docker Engine
•  OS上で動作するマネージャ
–  Docker Hub
•  Web上でDockerイメージを管理、配信するプラットフォーム
(Githubのコンテナイメージ版)
•  元は米DotCloud(現docker)が開発したPaaS基盤
–  Amazon, Google, Microsoftが対応を表明するなど、非常にホッ
トな技術
10
FFRI,Inc.
Scalable Deployment Cycle with Docker
2. Building application
in Docker container
1. Download from Docker Hub
Docker
Container
Docker
Image
Docker Engine
Docker Hub
Developer’s Host
4. You can deploy
Docker image
from Docker Hub directly
3. Deploying production environment
from developer’s Docker container
Docker
Container
Docker
Container
Docker
Container
Docker
Container
Docker Engine
Docker Engine
Production Serer A
Production Serer B
11
FFRI,Inc.
Dockerの脅威モデル
•  Docker repositoryからOSイメージをダウンロードし、コンテナと
して実行することは、例えるなら信頼できないプログラムをダウ
ンロードし、ローカルで実行するようなものと同じともいえる
–  public imageに悪意がないと言い切ることは難しい
Attack
Benign
Docker
Container
Untrusted OS execution
with pilerivge
Malicious
Docker
Container
Docker Engine
This container is trusted?
Malicious
Docker
Image
Attack
Docker Hub
Developer’s Host
12
FFRI,Inc.
libcontainerによる隔離
•  Dockerは従来lxcとその管理コマンドlibvirt-lxcを用いて隔離を実現
していたが、0.9からlibcontainerを用いた隔離に変更した
–  コンテナ-ホスト間の隔離は、Linux capabilities とcgroup、
MAC(SELinux, AppArmor)を用いて行われる
–  コンテナ間の隔離は、MAC(SELinux, AppArmor)を用いて実現
している
•  SELinuxを使う場合、MCSセキュリティコンテキストを動
的に生成し、割り当てる
•  <~0.9で実現される隔離と0.9以降における隔離はほぼ同一
–  libvirtへの依存を減らし、他のディストリビューションやOSへ
適用しやすくしたものと考えられる
13
FFRI,Inc.
まとめ
•  仮想化やコンテナ技術を使う場合、2つの視点で隔離を行う必要がある
–  ホスト-ゲスト間の隔離
•  ホストOSを守れなければ、他のゲストOSも危ない
–  ゲスト間の隔離
•  ゲストOSから他のゲストOSを侵害させない
•  libvirtは洗練された仮想化基盤管理アプリケーションであり、SELinuxや
AppArmorも統合されている
•  dockerのようなコンテナ型仮想化においても、脅威モデルはVMのセ
キュリティと変わらない
14
FFRI,Inc.
参考文献
• 
• 
• 
• 
第3章 sVirt
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/
Virtualization_Administration_Guide/chap-sVirt.html
Docker and SELinux
http://www.projectatomic.io/docs/docker-and-selinux/
DOCKER 0.9: INTRODUCING EXECUTION DRIVERS AND LIBCONTAINER
https://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-andlibcontainer/
Introducing a *Super* Privileged Container Concept
http://developerblog.redhat.com/2014/11/06/introducing-a-super-privileged-containerconcept/
15
FFRI,Inc.
Contact Information
E-Mail : research—[email protected]
Twitter : @FFRI_Research
16