2008-11-18 セキュアvmワークショップ

26
2008年11月18日(火) セキュアVMワークショップ (公開用修正版) 筑波大学 講師 品川高廣

Upload: takahiro-shinagawa

Post on 21-Jul-2015

193 views

Category:

Technology


4 download

TRANSCRIPT

2008年11月18日(火) セキュアVMワークショップ (公開用修正版) 筑波大学 講師 品川高廣

情報漏洩事件の増加

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

5

10

15

20

25

30

35

40

null fork exec prot page ctx

オーバーヘッド(%)

BitVisor

2008/11/18 22

0

20

40

60

80

100

120

140

4KB 64KB 512KB 10MB

転送速度(

MB

/s)

ブロックサイズ

Linux

BitVisorコア

+ドライバ

+暗号化

2008/11/18 23

0

2

4

6

8

10

12

14

VMMなし BitVisorコア +ATAドライバ +暗号化

起動時間(秒)

WindowsXP

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