2008-03-19 第2回セキュアVMシンポジウム2. ? 1.セキュアVMとは(ユーザ向け)
? 目的,利用例,脅威モデル
? 2.VMMアーキテクチャ概要
? 設計方針,基本アーキテクチャ
? 3.VMMアーキテクチャ詳細(開発者向け)
? CPU, メモリ,デバイスの扱い
2007/7/19 2
4. ? 「セキュア」+「VM(仮想マシン)」
? 仮想的にセキュアなマシン環境を提供する
オペレーティングシステム
仮想マシン(Virtual Machine)
仮想マシンモニタ(VMM)
セキュリティ機能
物理マシン(Physical Machine)
ハードウェア
2007/7/19 4
5. ? 情報漏洩の防止(Confidentiality)
? PC?USBメモリの紛失?盗難
? インターネットへの情報漏洩
? ウィルスやファイル交換ソフトなど
? 情報漏洩事件の多発が背景
? 月平均「20件以上」発生※
? 2007年10月~12月だけで「68件」
? 官公庁,教育機関,病院,銀行,…
? エンドユーザからの情報漏洩が多い
※Security NEXT 「個人情報漏洩事件一覧」より算出
2007/7/19 5
6. ? 強力なセキュリティの実現
? たとえOSが脆弱性でも大丈夫
? セキュリティの強制
? 勝手にセキュリティを無効に出来ないようにする
? 「ユーザ任せのセキュリティはやめたい」
(山口内閣官房情報セキュリティ補佐官談)
基盤となるコンピュータそのものをセキュアにしたい
2007/7/19 6
7. ? ストレージ管理 ゲストOS
? HDD?USBメモリの暗号化
? ネットワーク管理 VMM
? IPSecでVPN接続 ストレージ管理 ID 管理 ネットワーク管理
認証
暗号化 VPN
鍵管理
? ID管理
? ICカードで認証?鍵管理 VMMコア
CPU?デバイス仮想化,アクセス制御
? VMMコア ハードウェア
? CPU?デバイスの仮想化
? アクセス制御
2007/7/19 7
8. ? ログイン VPN サーバ
? ICカードを挿入する
? PIN番号を入れる
? システムの起動 PIN: ****
? 暗号化が解除される
? VPNが接続される
? OSが起動する
? ログアウト カード
IC Card IC Card
? OSを停止する リーダ
? ICカードを抜く
2007/7/19 8
9. ? PCやメディアの紛失?盗難
? HDDやUSBメモリはVMMで強制的に暗号化
? 暗号鍵はICカードに格納
? ネットワーク経由での情報漏洩
? VPNにより接続先がVMMで強制される
? ネットワーク通信は自動的に暗号化される
2007/7/19 9
10. ? 内部犯行
? ICカードを持ったユーザによるハード的攻撃
? 例:HDDを物理的の取り出してICカードの鍵で復号する
? 間接的手段
? 画面を撮影する
? 音声にデータを乗せて取り出す
? 隠れチャネル
2007/7/19 10
11. ? 情報漏洩の防止
? ストレージの暗号化
? ネットワークの認証?暗号化
? ICカードによるユーザ認証?鍵管理
? VMによるセキュリティの強制
? OSに依存しない
? ユーザに依存しない
2007/7/19 11
13. ? 新規開発 v.s. 既存VMMの改良
? Xen, QEMU など既存VMMを流用するか否か
? 完全仮想化 v.s. 準仮想化
? ゲスト翱厂に手を入れるか否か
? TypeⅠ v.s. TypeⅡ
? ホストOSを使うか否か
2007/7/19 13
14. ? WindowsXPが動作すること
? ゲスト翱厂に手を入れることは難しい
? ?「完全仮想化」が必要
? 実運用を視野に入れること
? 政府機関での使用,オープンソース公開
? ?それなりの性能?完成度が必要
? 開発期間?コストは限定的である
? 約2年半弱,数億円
? ?大がかりなシステムは作れない
2007/7/19 14
15. ? VMM自身がセキュアである
? ?VMMを出来るだけ小さくシンプルにすべき
? デスクトップ環境を想定する
? ?サーバ統合のようなことはしなくてよい
? 対応デバイスは限定してよい
? オフィス環境で必要なもののみ
? 入札などで仕様を指定可能
? ?独自のVMMを作ることが可能
2007/7/19 15
16. ? 独自VMMを作成する
? VMMを小さくシンプルに
? TypeⅠのVMM
? 短期間?低コストでの実現
? 実運用に耐えうる性能?完成度
? 「完全仮想化」する
? デスクトップ用途
2007/7/19 16
17. ? 基本はパススルー ゲストOS
? デバイスを仮想化しない デバイスドライバ デバイスドライバ デバイスドライバ
? ゲストOSがデバイスを直接制御
VMM
? 必要最小限の監視?変換 準パススルー
制御I/O データI/O
? 制御I/Oの監視 アクセス制御 暗号化
? デバイスの状態把握
? VMMに対するアクセス制御
? データI/Oの変換 ハード
? ストレージ?ネットワーク暗号化 デバイス デバイス デバイス
2007/7/19 17
18. ? セキュリティ向上
? VMMを小さくできる
? VMM自身の安全性が向上する(検証が容易)
? 性能?完成度
? 仮想化のオーバーヘッドを大幅に削減できる
? ゲストOSのデバイスドライバを活用できる
? 開発コストの削減
? 0からの開発が現実的なコストで可能になる
? デバイスドライバの数を限定できる
2007/7/19 18
19. ? 複数ゲストOSは同時に稼働しない
? デスクトップ環境だから許容される
? Windowsがセキュアな環境で動作すればよい
? 将来的には対応できなくはない
? 方法1:ハードウェアサポートを期待する
? PCI SIGでIOV(I/O Virtualization)が策定中
? 方法2:エミュレーション層を追加開発する
? 対応するマシン環境が限定される
? 現状では許容されている
? 今後の展開に期待?
2007/7/19 19
20. TypeⅡ型(VMWare Workstation等) Para virtualization型(Xen)
ゲスト翱厂 ゲスト翱厂 Domain 0
(VMM)
VMM
仮想デバイス ゲスト ゲスト
仮想デバイス 仮想デバイス
OS OS
複数ゲスト管理
複数ゲスト管理
ドライバ
ホストOS
ドライバ Hypervisor
TypeⅠ型(VMWare Server等) 準パススルー型(BitVisor)
ゲスト翱厂 ゲスト翱厂
ゲスト翱厂
VMM
仮想デバイス 仮想デバイス VMM
複数ゲスト管理 セキュリティ機能
ドライバ 準パススルードライバ
2007/7/19 20
21. ゲスト翱厂 ATAデバイスドライバ USBデバイスドライバ NICデバイスドライバ
ID管理
ストレージ暗号化
PKCS#11
IKEv1 IPSec
カプセル化
ATA USB マス PC/SC
ストレージ ストレージ
VMM クラス クラス CCID UDP/IP
ATAプロトコル USB多重化レイヤ NIC多重化レイヤ
ATAデバイスドライバ USBデバイスドライバ NICデバイスドライバ
VMMコア
ハードウェア ATAホストコントローラ USBホストコントローラ NIC
2007/7/19 21
22. ? 準パススルー型アーキテクチャ
? 可能な限りパススルー
? 最小限必要なデバイスだけ監視?変換
? 独自VMMを0から作成
? TypeⅠ型(ホストOSは使用しない)
? 「完全仮想化」方式
? ゲスト翱厂は改変しない
2007/7/19 22
24. ? CPUの仮想化
? メモリの仮想化
? デバイスの仮想化
2007/7/19 24
25. ? Intel VT 機能を利用
? VMX non-root モードと VMX root モード
? VMCS(Virtual Machine Control Structure)領域
? レジスタの状態などを保存するためのメモリ領域(4KB)
VMX non-rootモード VMX rootモード
リング3 ゲストアプリ
リング2
リング1
リング0
ゲストカーネル VMM
VMEnter/VMExit
VMCS領域
Guest-state VM-entry control VM-execution control
Host-State VM-exit control VM-exit information
2007/7/19 25
26. ? I/O命令の一部
? ATA, USB, NIC関連 IN, INS, OUT, OUTS
MOV CRx
特権命令の一部
CPUID
? RDMSR
WRMSR
? 制御レジスタへの読み書きなど INVLPG
Exceptions
NMI
External Interrupts
? 割り込み?例外 Interrupt window
INIT Signals
? ページフォルト関係など Start-up IPIs
? SMP関連
2007/7/19 26
27. ? リアルモード対応
? 仮想8086+命令エミュレーションで対応
? モード切替時,INS/OUTS命令,MMIO等でも利用
? メモリ管理
? EPT(Extended Page Table)はまだない
2007/7/19 27
28. ? 基本的にはアドレス変換しない
? ゲスト物理アドレス=マシン物理アドレス
? VMMは後端(<4GB)に常駐する
? 現在のサイズは32MB
? BIOSコール(e820h)をごまかしてreserved領域に
仮想アドレス空間 ゲスト物理アドレス空間 マシン物理アドレス空間
4GB Reserved 4GB Reserved
Reserved VMM
Reserved BIOSフック等
0 0
2007/7/19 28
29. ? ゲスト翱厂のシャドウ(コピー)をVMMで保持
? VMM領域の保護
? ページングオフ時の対応
VMM ゲストOS
ゲストCR3
CR3 PD PT CR3 PD PT
PT PT
PT ページフォルト時に更新 PT
シャドウページテーブル ゲストページテーブル
2007/7/19 29
30. ? I/O命令(IN, OUTなど)
? VTの機能によりVMMで捕捉
? I/Oポートアドレス単位でビットマップで指定
? 制御I/Oの監視,データI/Oの変換
? MMIO
? シャドウページングにより捕捉
? DMA
? VT-dによるアクセス制御
? シャドウDMAディスクリプタ
2007/7/19 30
31. ? DMAディスクリプタのシャドウを作る
? データだけVMMで横取りする
? 制御はゲストOSにさせる
シャドウDMAディスクリプタ
バッファアドレス バイト数 ステータス
0xF0004000 16384 OK
ホストコントローラ
VMMの領域
ベースアドレスレジスタ
+
DMAディスクリプタ
インデックス バッファアドレス バイト数 ステータス
0x08086000 4096 OK
0x04004000 8192 OK
0x00386000 4096 Ready
2007/7/19 31
32. 物理メモリ
シャドウDMAディスクリプタ
VMM
ベースアドレス バイト数
0xF0004000 16384
VMMによる暗号化/復号化+コピー
DMAディスクリプタ
ベースアドレス バイト数
ゲスト翱厂
0x08086000 4096
0x04004000 8192
0x00386000 4096
2007/7/19 32
33. ? VMMから一部のデバイスを使う必要がある
? USB(ICカードリーダ),NIC(IKEプロトコル)
? シャドウDMAディスクリプタの拡張で対応
シャドウDMAディスクリプタ
バッファアドレス バイト数 ステータス エントリ
の挿入
0xF0004000 4096 OK
ホストコントローラ 0xF0010000 8192 OK
ベースアドレスレジスタ
+
DMAディスクリプタ
インデックス バッファアドレス バイト数 ステータス
0x08086000 4096 OK
0x04004000 8192 OK
0x00386000 4096 Ready
2007/7/19 33
34. ? 比較的シンプルな構造
? PRD(Physical Region Descriptor)のテーブルをメモリ上に保持
? テーブルへのアドレスをレジスタに指定
? Start Bit に 1 を書き込むとDMA転送開始
Physical Region Descriptor Table
Bus Master IDE Controller Memory Region Physical Base Address[31:1] 0
EOT reserved Byte Count[15:1] 0
オフセット 機能
… 0
00h Command Register
… … … 0
02h Status Register
04h-07h PRD Table Address
1
2007/7/19 34
35. ? 時間枠(1024ms)単位の転送
? 1024エントリ×4Byte=1ページのフレームリスト
? TD(Transfer Descriptor)のリンクリスト
TD (Transfer Descriptor)
LinkPointer
USB ホストコントローラ
(UHCI) Status
MaxLen Device PID
カウンタ Base Index 00
Buffer Pointer
オフセット 機能
Frame List
00h-01h Command Isochronous Interrupt/Bulk/Control
Frame Pointer Q T
02h-03h Status … TD TD QH QH
04h-05h Interrupt Enable Frame Pointer Q T
TD TD TD TD
06h-07h Frame Number Frame Pointer Q T
08h-0Bh Frame List Base Address Frame Pointer Q T
TD TD TD TD
2007/7/19 35
36. ? ディスクリプタのリング構造
? Tail ポインタをドライバソフトウェアで更新する
? Head ポインタをホストコントローラが更新して追いか
ける
? Tail に追いつくと自動的に停止する
Transmit Descriptor Ring Structure
NIC
(Intel PCIe* GbE Controllers) Base Buffer Address … Status Len
オフセット 機能
Head
03800h Descriptor Base Low
ハードウェアが管理
03804h Descriptor Base High
03808h Descriptor Length
Tail
03810h Descriptor Head 循環
Base+Length バッファ
03818h Descriptor Tail
2007/7/19 36
37. ? LVMM(Intel vPro)
? クライアント端末のリモート管理が目的
? ネットワークのみ仮想化し,残りはパススルー
? VMが2つある(User Partition と Service Partition)
? SecVisor [SOSP ‘07]
? Linux カーネルの改竄防止
? W+Xページ,不正なカーネルモジュール防止
? VMは1つ,デバイスは完全パススルー
2007/7/19 37
38. ? 平成19年度
? VMMコア
? ATAドライバ(IDE)
? 平成20年度
? USBドライバ(UHCI:USB1.1)
? USBドライバ(EHCI:USB2.0)
? ATAドライバ(ATAPI)(AHCI未定)
? NICドライバ(Intel PRO1000系)
? ID管理
? VPN管理
? 未対応デバイス
? IEEE 1394
? 無線LAN
? プリンタ/スキャナ
2007/7/19 38
39. ? セキュアVMの概要
? ストレージ暗号化
? ネットワーク暗号化
? ICカードによる認証?鍵管理
? 準パススルー型VMMの紹介
? 可能な限りパススルー
? 必要最小限のアクセスだけVMMで捕捉
? 準パススルー型の実装概要
? Intel VT機能を活用
? シャドウページテーブル
? シャドウDMAディスクリプタ
2007/7/19 39
40. ? 準パススルー型
? TypeⅠ型 VMM(Hypervisor型)
? 64bit 対応(ゲスト翱厂は32bitのみ)
? PAE対応
? マルチコア?マルチプロセッサ対応
? WindowsXP/Vista, Linux が動作
? コード行数約20,000行(コアのみ)
2007/7/19 40
41. 本日ソースコード公开
BitVisor 0.2 (α版)
http://www.securevm.org/
2007/7/19 41