○奥野航平，大月勇人，瀧本栄二，毛利公一
立命館大学

 VM の状態を保存・復元する機能
 一瞬で復元が可能

 スナップショットが無い場合◦ ディスクのイメージファイルを書き戻す作業が必要→時間が掛かる Alkanet において◦ マルウェアに環境を改変される◦ 元に戻す作業が必要◦ もっと高速にしたい！
立命館大学

2014/11/21

2

 スナップショット機能を備えた BitVisor ストレージに対するスナップショット◦ 再起動時にストレージを初期状態へ復元できる
 利用例◦ Alkanet でマルウェア実行前の環境へ復元する◦ 共有端末や実験環境などで設定を復元する
 準パススルーによってハードウェアを物理マシンと同様に扱える

立命館大学

2014/11/21

3

 ストレージのデータを瞬時に復元できる
 最小限のエミュレーションで実現する◦ VM を使用しているということを意識させない
 Alkanet での VM 検知対策
◦ 仮想化特有のエミュレーションされたデバイスとして見せない 簡単な実装で実現する◦ BitVisor の変更量を少なく◦ 軽量な VMM を維持する
立命館大学

2014/11/21

4

 ドライバを経由してストレージへアクセスする デバイスの処理を BitVisor でエミュレーションさせる

 AHCI に着目

読書きリクエスト

OSAHCI ドライバ
I/O 処理物理マシン
このコントローラの処理をエミュレート

アプリケーション

AHCI 対応コントローラ

ディスク1

ディスク2

立命館大学

2014/11/21

5 Advanced Host Controller Interface◦ Serial ATA に特化したコントローラとホストコンピュータとのインタフェース規格 PC で幅広く使用されているインタフェース◦ SATA ポートがあるマザーボードには必ず実装されている

 AHCI に対応することでほとんどの PC で動作可能になる立命館大学

2014/11/21

6

1.

2.

3.

DMA 転送に使用するバッファを用意する◦ コマンドリスト と データバッファ の2 種類◦ それぞれベースアドレスレジスタにアドレスをセットする

ポートに対してコマンドを発行する◦ キューイング可能で 32 個のコマンドを同時に発行可能◦ コマンドリストのインデックスに対応するビットを CI レジスタにセットする

割込みを受け取る◦ コマンド完了後，コントローラは割込みを発生させる
AHCI
ポート1

OS

コマンドリスト
実行するコマンドを記録

1. アドレス登録

ベースアドレス
レジスタ
アクセス

データバッファ
書き込むデータ or
読み出されたデータ

CI レジスタ3.割込み生成
3.

ポート2
・・

2. コマンド実行

ディスク

立命館大学

2014/11/21

7

1台のディスクとして認識させる
OS

AHCI をフックしてデータの読書きをリダイレクトする

AHCI ドライバ

Snapshot BitVisor
仮想ディスクコントローラ
物理マシン
AHCI 対応コントローラ

元の状態を保持するディスク

ベースディスクスナップショット
ディスク

差分データを保持するディスク
Microsoft VHD Specification を簡易化したフォーマットを使用して管理
立命館大学

2014/11/21

8

OS のアクセス
OS・VMM のアクセス
VMM のアクセス
ゲスト OS (VM)
AHCI ドライバ

Snapshot BitVisor
Snapshot Disk
Conceal Driver

仮想ディスク
ドライバ

AHCI 準パススルー ドライバ
物理マシン

AHCI

ベースディスクスナップショット
ディスク
立命館大学

2014/11/21

9

ゲスト OS (VM)
AHCI ドライバ

OS のアクセス
OS・VMM のアクセス
ベースディスクへのアクセスをリダイレクトさせる
VMM のアクセス• 書込み• スナップショットディスクへデータを書き込む• 読出し• スナップショットディスクから更新されたデータを読み出す• ベースディスクから読み出す

Snapshot BitVisor
Snapshot Disk
Conceal Driver

仮想ディスク
ドライバ

AHCI 準パススルー ドライバ
物理マシン

AHCI

ベースディスクスナップショット
ディスク
立命館大学

2014/11/21

10OS のアクセス
OS・VMM のアクセス
VMM のアクセス
スナップショットディスクをゲストOSから隠すためのエミュレータ• VM からスナップショットディスクへのアクセスを拒否する• スナップショットディスクの書換えを防止

ゲスト OS (VM)
AHCI ドライバ

Snapshot BitVisor
Snapshot Disk
Conceal Driver

仮想ディスク
ドライバ

AHCI 準パススルー ドライバ
物理マシン

AHCI

ベースディスクスナップショットディスク
立命館大学

2014/11/21

11OS のアクセス
OS・VMM のアクセス
VMM のアクセス
ゲスト OS (VM)
AHCI ドライバ

Snapshot BitVisor
Snapshot Disk
Conceal Driver

仮想ディスク
ドライバ

AHCI 準パススルー ドライバ
物理マシン

AHCI

ベースディスク

BitVisor にあるドライバ• 独立してディスクにアクセスするために使用
スナップショット
ディスク
立命館大学

2014/11/21

12

1.

2.

VM が 読出しコマンドを実行する◦ BitVisor に処理が移る (VM-Exit)

データをシャドウバッファに読み出す◦ 差分あり: スナップショットディスクから差分データを読み出す◦ 差分なし: ベースディスクからデータを読み出す

シャドウバッファから VM のデータバッファにコピーする
4. 元々の読出しコマンドを実行する
3.

◦ 読み出したデータは破棄する

5.

割込みを AHCI に発生させ，VM に割込みを通知する

ゲスト OS(VM)
データバッファSnapshot BitVisor

1VM
Exit

3

シャドウバッファ

AHCI
4

ベースディスク

2
スナップ
ショット
ディスク

5. 割込み立命館大学

2014/11/21

13

1.

VM が 書込みコマンドを実行する◦ BitVisor に処理が移る (VM-Exit)

VM のデータバッファからシャドウバッファにコピーする
3. シャドウバッファのデータをスナップショットディスクへ書き込む
4. ベースディスクからシャドウバッファへデータを読み出す
2.

◦ 元々の書込みコマンドで書き換えようとしたアドレスのデータを読み出す

5.
6.

元々の書込みコマンドを実行する◦ ただし，シャドウバッファのデータを書き込むようにする

割込みを AHCI に発生させ，VM に割込みを通知する

ゲスト OS(VM)
データバッファSnapshot BitVisor

1

VM
Exit

2

AHCI
5

ベースディスク

4
シャドウバッファ

3
スナップ
ショット
ディスク

6. 割込み立命館大学

2014/11/21

14

Microsoft Virtual Hard Disk (VHD) Image Format Specification を簡易化したフォーマットを使用して管理する
 データを 2 MiB のブロックに分割し，ブロックごとに差分データを管理する
 ページングと仕組みはほぼ同じ◦ 1 アドレスに対して 1セクタ = 512 B である点が異なる
有効ビット数: 32 bit
最大 232 セクタ = 2 TiB
LBA(48 bit)無視(16 bit)

インデックス(20bit)Block 0(212 セクタ =4096 セクタ =2 MiB)

オフセット(12bit)

Block Allocation Table (BAT)
インデックス

ブロック0

Block 2

1

Block 0Block 1…
220-1

未割当て
立命館大学

2014/11/2115

 ヘッダ [2 MiB]

LBA

内容

◦ 空いているブロック番号 [4 B]

0MBR BAT [4 MiB]

1-4095空き◦ ブロック番号を 20 bit で格納する
 220 × 4 B = 4 MiB◦ ブロックの LBA 算出
 BAT[インデックス] << 12 +16384

4096 (2 MiB)

ヘッダ

8192 (4 MiB)

BAT

16384 (8 MiB)

Block 0

 ブロック0 [2 MiB]
 …

…
2 MiB でアライメント

スナップショットを削除するときは，ヘッダと BAT をゼロクリアする→ 6 MiB の書込みだけで復元可能

立命館大学

2014/11/21

16 実装した Snapshot BitVisor の動作をテストする 確認項目◦ Windows 7 をベースディスクにインストールし，環境を復元できるか◦ スナップショットディスクを隠せているか立命館大学

2014/11/21

17

 Windows 7 の起動で一時的にハングアップする◦ Windows のロゴが表示される直前で約 90 秒ほど停止
 Windows がディスクの接続状態を確認しているため停止する タイムアウト?により起動が続行する◦ Conceal Driver に不具合がある可能性がある

 1世代のみしか管理できない◦ ヘッダを変更することで複数世代のスナップショットが管理できるようになる 割込み生成のために I/O 待ち時間がある◦ オリジナルのコマンドを実行させて割込みを生成している
 I/O 待ちができ，スループットが低下している◦ 割込みをエミュレーションによって解決できると考える
立命館大学

2014/11/21

18

 Snapshot BitVisor◦ スナップショット機能を実現する BitVisor◦ 2 台のストレージに分け，差分データを保管◦ AHCI を使用してアクセスを捕捉・書換え◦ Windows，Linux で起動することを確認した◦ 約 1100 行の変更で実装できた立命館大学

2014/11/21

19