2008 年 11 月 18 日 ( 火 ) セキュア VM ワークショップ ( 公開用修正版 ) 筑波大学講師品川高廣 セキュア VM BitVisor の アーキテクチャ概要
背景と目的 情報漏洩事件の増加 PC USBメモリ等の紛失 盗難 インターネット経由 ウィルスやファイル交換ソフトなど 仮想マシンモニタ (VMM) による安全性向上 暗号化 認証を VMM で強制する ストレージ及びネットワークの暗号化 ICカードによる認証 鍵管理 2008/11/21 2
BitVisor の機能構成 ストレージ管理 HDD USB メモリの暗号化 ゲスト OS ネットワーク管理 IPsec で VPN 接続 ストレージ管理 VMM ID 管理 ネットワーク管理 ID 管理 IC カードで認証 鍵管理 VMM コア CPU デバイスの仮想化 アクセス制御 暗号化 認証鍵管理 VMM コア CPU デバイス仮想化, アクセス制御 ハードウェア VPN 2008/11/18 3
VMM を使う利点 暗号化を確実に実施できる 強力 強制的な実施 ユーザが勝手にセキュリティを無効にできない たとえOSが脆弱でも大丈夫 透過的な実施 OS の機能や設定には依存しない 統一した暗号化システムを実現できる HDD, USB メモリを一括管理 IC カードの活用 2008/11/18 4
VMM の信頼性 VMM 自身に脆弱性がないことが重要 暗号化を無効される危険性がある VMM を乗っ取られる, 暗号化を回避される, VMM にセキュリティパッチは当てたくない OS と VMM の両方を管理するのは 二重苦 (TCB の ) コードサイズ最小化が有効 バグの数はコードサイズに比例する 小さいほど安全性の検証が容易になる 2008/11/18 5
従来の VMM Type II 型 ( ホスト型 ) TCB= ホスト OS+VMM Linux 5,600 万行 +QEMU31 万行 Type I 型 ( ハイパーバイザ型 ) VMM がデバイスを管理 VMWare ESX Server s hypervisor=20 万行 VM VM Device Model VMM Host OS Device Driver hardware VM VM Device Model VMM Device Driver hardware ドライバ VM 型 Xen hypervisor=10 万行 Driver VM Device Model Device Driver VMM hardware VM 2008/11/18 6
準パススルー型アーキテクチャ 可能な限りパススルー デバイスを仮想化しない ゲスト OS がデバイスを直接制御 ゲスト OS デバイスドライバ 準パススルー VMM 必要最小限の監視 変換 制御 I/O の監視 状態把握とアクセス制御 データ I/O の変換 データの暗号化 制御 I/O アクセス制御 その他 I/O パススルーデバイスハードウェア データ I/O 暗号化 2008/11/18 7
準パススルー方式の制約 ゲスト OS は複数同時に稼働しない 1 つのゲスト OS がデバイスを直接制御している 複数ゲスト OS 間での共有 保護は難しい 必ずしも複数ゲスト OS 稼働は必要ではない デスクトップ環境のセキュリティ ( 暗号化 ) が目的 対応するマシン環境が限定される 制御 I/O 及びデータ I/O はデバイス依存 通常のデバイスドライバよりはサイズが小さい ドライバが必要なのは一部のデバイスのみ グラフィックスやサウンドは ( 完全 ) パススルー 2008/11/18 8
準パススルー方式の利点 コードサイズを小さくできる 完全なデバイスドライバを持たなくてよい ゲスト OS のデバイスドライバを活用している 複数ゲスト OS 間の共有機能を削減できる スケジューリング, 資源管理機能などが不要 開発コストを削減できる デバイスドライバの数を削減できる オーバーヘッドを低減できる デバイスへのアクセスが準パススルー VM 間のスケジューリングなどが不要 2008/11/18 9
監視 変換する I/O 制御 I/O デバイスへのデータ転送を制御する I/O ( 例 )LBA の指定,R/W の指定, 転送の開始 終了, アクセス制御をおこないつつパススルー 制御自体はゲスト OS のデバイスドライバが行う データ I/O 実際のデータの転送をおこなう I/O ディスクデータの読み書き, ネットワークパケットの送受信 VMM で捕捉して変換する (encrypt/decrypt) メモリ上でのデータの書き換え 2008/11/18 10
名前空間とアクセス制御 原則ハードウェアの名前空間と同じ デバイスをゲスト OS に直接見せる ゲスト物理アドレス=マシン物理アドレス I/Oアドレス, ストレージLBA,PCIバスアドレス, アクセス制御のみをおこなう VMM の保護 VMMのメモリ領域, ディスク領域への読み書き禁止 IOMMUによるDMAアクセス制御 2008/11/18 11
BitVisor の構成 ゲスト OS ATA ドライバ USB ドライバ NIC ドライバ 各種ドライバ ( 画面, サウンドなど ) VMM ATA 準パススルードライバ ストレージ暗号化 (AES-XTS) ID 管理 USB 準パススルードライバ IKE UDP/IP IPsec NIC 準パススルードライバ IOMMU ドライバ VMM コア ハードウェア ATA ホストコントローラ (IDE) USB ホストコントローラ (UHCI, EHCI) NIC (Intel Pro100 など ) 各種デバイス ( 画面, サウンドなど ) 2008/11/18 12
I/O デバイスへのアクセス I/O 命令 I/O アドレス空間 (16bit) へのアクセス 専用の命令 (IN, OUT) による I/O Ex. in dx, al, out dx, al,... MMIO( メモリマップド I/O) 物理メモリ空間 (32bit or 64bit) へのアクセス メモリアクセス命令による I/O Ex. mov al, [edx], mov [edx], al DMA 専用ハードウェアによるデータ転送 2008/11/18 13
ATA ホストコントローラ I/O Addr 0x1F0 Command Block Registers Offset Size Name(read) Name(write) 0 16bit Data Data 1 8bit Error Features 2 8bit Sector Count Sector Count 3 8bit LBA Low LBA Low 4 8bit LBA Mid LBA Mid 5 8bit LBA High LBA High 6 8bit Device Device 7 8bit Status Command LBA 0 01001101 00110101 0x20: READ SECTOR 0x30: WRITE SECTOR 0xC8: READ DMA 0xCA: WRITE DMA 2008/11/18 14
PIO アクセスの暗号化 復号 Read Write ゲスト OS rep insw rep outsw VMM シャドウバッファ (512byte) 復号 暗号化 シャドウバッファ (512byte) rep insw rep outsw ハードウェア 2008/11/18 15
DMA ディスクリプタ テーブル構造の DMA ディスクリプタ PRD(Physical Region Descriptor) のテーブルをメモリ上に保持 テーブルへのアドレスをレジスタに指定 Command Register の Start Bit に 1 を書き込むと DMA 転送開始 Bus Master IDE Controller オフセット 機能 00h Command Register 02h Status Register 04h-07h PRD Table Address Physical Region Descriptor Table Memory Region Physical Base Address[31:1] 0 EOT reserved Byte Count[15:1] 0 0 0 1 2008/11/18 16
シャドウ DMA ディスクリプタ DMA ディスクリプタのシャドウを作る データだけ VMM で横取りする 制御はゲスト OS にさせる シャドウDMAディスクリプタ バッファアドレス バイト数 ステータス 0xF0004000 16384 OK ホストコントローラ ベースアドレスレジスタ インデックス + VMMの領域 DMAディスクリプタ バッファアドレス バイト数 ステータス 0x08086000 4096 OK 0x04004000 8192 OK 0x00386000 4096 Ready 2008/11/18 17
DMA 転送データの暗号化 物理メモリ VMM シャドウ DMA ディスクリプタ ベースアドレス バイト数 0xF0004000 16384 VMM による暗号化 / 復号化 + コピー ゲスト OS DMA ディスクリプタ ベースアドレス バイト数 0x08086000 4096 0x04004000 8192 0x00386000 4096 2008/11/18 18
評価 内容 コードサイズ コードサイズが削減できていることの確認 オーバーヘッド VMM によるオーバーヘッドの測定 環境 ハードウェア :Intel Core 2 Duo E6850(3.0GHz), メモリ 2GB, ディスク 74GB(10,000rpm) ゲスト OS:Fedora 8 (Linux 2.6.25.9-40.fc8) VMM: BitVisor 0.3 (64bit 版 ) 2008/11/18 19
VMM のコードサイズ コア 総数 :21,582 行 実行時 :13,789 行 命令エミュレーション :2,239 行, シャドウページ管理 :1,130 行 初期化 :2,062 行 デバッグ :5,781 行 ATA ドライバ 総数 :1,287 行 最新バージョンでは実行時 789 行 2008/11/18 20
VMM のコードサイズ 25000 1400 1200 20000 15000 10000 5000 5781 2062 13789 デバッグ 初期化 実行時 1000 800 600 400 200 1279 789 デバッグ 初期化 実行時 0 VMM コア 0 ATA ドライバ ATA ドライバ ( 最新 ) 2008/11/18 21
オーバーヘッド (%) Lmbench の結果 BitVisor 40 35 30 25 20 15 10 5 0 null fork exec prot page ctx 2008/11/18 22
転送速度 (MB/s) ストレージのオーバーヘッド (lmdd) 140 120 100 80 60 40 Linux BitVisorコア +ドライバ + 暗号化 20 0 4KB 64KB 512KB 10MB ブロックサイズ 2008/11/18 23
起動時間 ( 秒 ) WindowsXP の起動時間 WindowsXP 14 12 10 8 6 4 2 0 VMM なし BitVisor コア +ATA ドライバ + 暗号化 2008/11/18 24
まとめ 準パススルー型 VMM BitVisor の概要 VMM のサイズを非常に小さく出来る ゲストOSのデバイスドライバを活用 必要最小限のI/OのみをVMMで監視 変換 準パススルー方式の実現手法を示した 制御 I/O とデータ I/O の捕捉によるアクセス制御 暗号化 シャドウ DMA ディスクリプタによる DMA 転送の監視 2008/11/18 25
ダウンロード 近日公開予定 BitVisor 0.7 http://www.securevm.org/ 2008/11/18 26