2008-11-18 セキュアvmワークショップ
Post on 21-Jul-2015
193 Views
Preview:
TRANSCRIPT
情報漏洩事件の増加
PC・USBメモリ等の紛失・盗難
インターネット経由
▪ ウィルスやファイル交換ソフトなど
仮想マシンモニタ(VMM)による安全性向上
暗号化・認証をVMMで強制する
▪ ストレージ及びネットワークの暗号化
▪ ICカードによる認証・鍵管理
2008/11/21 2
ストレージ管理
HDD・USBメモリの暗号化
ネットワーク管理 IPsecでVPN接続
ID管理
ICカードで認証・鍵管理
VMMコア CPU・デバイスの仮想化 アクセス制御
2008/11/18 3
VMM
ハードウェア
ゲストOS
ネットワーク管理 ストレージ管理 ID 管理
認証 鍵管理
VPN 暗号化
VMMコア
CPU・デバイス仮想化,アクセス制御
暗号化を確実に実施できる
強力・強制的な実施 ▪ ユーザが勝手にセキュリティを無効にできない
▪ たとえOSが脆弱でも大丈夫
透過的な実施 ▪ OSの機能や設定には依存しない
統一した暗号化システムを実現できる
HDD, USBメモリを一括管理 ▪ ICカードの活用
2008/11/18 4
VMM自身に脆弱性がないことが重要
暗号化を無効される危険性がある ▪ VMMを乗っ取られる,暗号化を回避される,…
VMMにセキュリティパッチは当てたくない ▪ OSとVMMの両方を管理するのは「二重苦」
(TCBの)コードサイズ最小化が有効
バグの数はコードサイズに比例する ▪ 小さいほど安全性の検証が容易になる
2008/11/18 5
Type II 型(ホスト型)
TCB=ホストOS+VMM ▪ Linux 5,600万行+QEMU31万行
Type I 型(ハイパーバイザ型)
VMMがデバイスを管理 ▪ VMWare ESX Server’s hypervisor=20万行
ドライバVM型 ▪ Xen hypervisor=10万行
2008/11/18 6
hardware
Host OS
VMM
VM VM
hardware
VMM
VM VM
Device Driver
Device Model
Device Driver
Device Model
hardware
VMM
Driver VM
VM
Device Driver
Device Model
可能な限りパススルー デバイスを仮想化しない
▪ ゲストOSがデバイスを直接制御
必要最小限の監視・変換
制御I/Oの監視 ▪ 状態把握とアクセス制御
データI/Oの変換 ▪ データの暗号化
2008/11/18 7
ハードウェア
ゲストOS
デバイス
デバイスドライバ
準パススルーVMM
アクセス制御 暗号化
制御I/O データI/O その他I/O
パススルー
ゲストOSは複数同時に稼働しない 1つのゲストOSがデバイスを直接制御している
▪ 複数ゲストOS間での共有・保護は難しい
必ずしも複数ゲストOS稼働は必要ではない ▪ デスクトップ環境のセキュリティ(暗号化)が目的
対応するマシン環境が限定される 制御I/O及びデータI/Oはデバイス依存
▪ 通常のデバイスドライバよりはサイズが小さい
ドライバが必要なのは一部のデバイスのみ ▪ グラフィックスやサウンドは(完全)パススルー
2008/11/18 8
コードサイズを小さくできる 完全なデバイスドライバを持たなくてよい
▪ ゲストOSのデバイスドライバを活用している
複数ゲストOS間の共有機能を削減できる ▪ スケジューリング,資源管理機能などが不要
開発コストを削減できる デバイスドライバの数を削減できる
オーバーヘッドを低減できる
デバイスへのアクセスが準パススルー
VM間のスケジューリングなどが不要
2008/11/18 9
制御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
2008/11/18 12
ATAホストコントローラ (IDE)
USBホストコントローラ (UHCI, EHCI)
NIC (Intel Pro100など)
ストレージ 暗号化
(AES-XTS) ID管理 IPsec
ハードウェア
VMM
ゲストOS ATAドライバ USBドライバ NICドライバ
IKE
VMMコア
NIC準パススルー ドライバ
ATA準パススルー ドライバ
USB準パススルー ドライバ
UDP/IP
各種ドライバ (画面,サウンドなど)
各種デバイス (画面,サウンドなど)
IOMMU ドライバ
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
2008/11/18 14
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
I/O Addr 0x1F0
LBA 0
01001101 00110101
Command Block Registers
0x20: READ SECTOR 0x30: WRITE SECTOR 0xC8: READ DMA 0xCA: WRITE DMA
2008/11/18 15
Read Write
rep insw rep outsw
ハードウェア
VMM
ゲストOS
シャドウ バッファ (512byte)
シャドウ バッファ (512byte)
rep insw rep outsw
←復号 暗号化→
テーブル構造のDMAディスクリプタ PRD(Physical Region Descriptor)のテーブルをメモリ上に保持 テーブルへのアドレスをレジスタに指定 Command Register の Start Bit に 1 を書き込むとDMA転送開始
2008/11/18 16
Memory Region Physical Base Address[31:1] 0
EOT reserved Byte Count[15:1] 0
… 0
… … … 0
1
Bus Master IDE Controller
Physical Region Descriptor Table
オフセット 機能
00h Command Register
02h Status Register
04h-07h PRD Table Address
DMAディスクリプタのシャドウを作る
データだけVMMで横取りする
▪ 制御はゲストOSにさせる
2008/11/18 17
ホストコントローラ
バッファアドレス バイト数 ステータス
0xF0004000 16384 OK
ベースアドレスレジスタ
インデックス
シャドウDMAディスクリプタ
+ バッファアドレス バイト数 ステータス
0x08086000 4096 OK
0x04004000 8192 OK
0x00386000 4096 Ready
DMAディスクリプタ
VMMの領域
2008/11/18 18
ベースアドレス バイト数
0x08086000 4096
0x04004000 8192
0x00386000 4096
DMAディスクリプタ
物理メモリ
ベースアドレス バイト数
0xF0004000 16384
シャドウDMAディスクリプタ VMM
ゲストOS
VMMによる暗号化/復号化+コピー
内容 コードサイズ ▪ コードサイズが削減できていることの確認
オーバーヘッド ▪ 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
コア
総数:21,582行
▪ 実行時:13,789行 ▪ 命令エミュレーション:2,239行,シャドウページ管理:1,130行
▪ 初期化:2,062行
▪ デバッグ:5,781行
ATAドライバ
総数:1,287行 ▪ ※最新バージョンでは実行時789行
2008/11/18 20
0
5000
10000
15000
20000
25000
VMMコア
13789
2062
5781
デバッグ
初期化
実行時
0
200
400
600
800
1000
1200
1400
ATA
ドライバ
ATA
ドライバ
(最新)
1279
789
デバッグ
初期化
実行時
2008/11/18 21
0
20
40
60
80
100
120
140
4KB 64KB 512KB 10MB
転送速度(
MB
/s)
ブロックサイズ
Linux
BitVisorコア
+ドライバ
+暗号化
2008/11/18 23
準パススルー型VMM「BitVisor」の概要
VMMのサイズを非常に小さく出来る
▪ ゲストOSのデバイスドライバを活用
▪ 必要最小限のI/OのみをVMMで監視・変換
準パススルー方式の実現手法を示した
▪ 制御I/OとデータI/Oの捕捉によるアクセス制御・暗号化
▪ シャドウDMAディスクリプタによるDMA転送の監視
2008/11/18 25
top related