2008年11月18日(火)
セキュアVMワークショップ
(公開用修正版)

筑波大学 講師 品川高廣
    情報漏洩事件の増加
      PC・USBメモリ等の紛失・盗難
      インターネット経由
       ▪ ウィルスやファイル交換ソフトなど

    仮想マシンモニタ(VMM)による安全性向上
      暗号化・認証をVMMで強制する
       ▪ ストレージ及びネットワークの暗号化
       ▪ ICカードによる認証・鍵管理


2008/11/21                   2
    ストレージ管理
                                  ゲストOS
      HDD・USBメモリの暗号化

    ネットワーク管理                      VMM
      IPsecでVPN接続      ストレージ管理    ID 管理   ネットワーク管理

                                    認証
                         暗号化                     VPN
                                   鍵管理
    ID管理
      ICカードで認証・鍵管理                VMMコア
                            CPU・デバイス仮想化,アクセス制御


    VMMコア
                                  ハードウェア
      CPU・デバイスの仮想化
      アクセス制御

2008/11/18                                             3
    暗号化を確実に実施できる
      強力・強制的な実施
             ▪ ユーザが勝手にセキュリティを無効にできない
             ▪ たとえOSが脆弱でも大丈夫
      透過的な実施
             ▪ OSの機能や設定には依存しない


    統一した暗号化システムを実現できる
      HDD, USBメモリを一括管理
             ▪ ICカードの活用


2008/11/18                             4
    VMM自身に脆弱性がないことが重要
      暗号化を無効される危険性がある
             ▪ VMMを乗っ取られる,暗号化を回避される,…
      VMMにセキュリティパッチは当てたくない
             ▪ OSとVMMの両方を管理するのは「二重苦」


    (TCBの)コードサイズ最小化が有効
      バグの数はコードサイズに比例する
             ▪ 小さいほど安全性の検証が容易になる



2008/11/18                              5
VM              VM

    Type II 型(ホスト型)                                       Device Model
                                                              VMM

      TCB=ホストOS+VMM                                         Host OS
                                                           Device Driver
             ▪ Linux 5,600万行+QEMU31万行                       hardware




    Type I 型(ハイパーバイザ型)                                VM

                                                           Device Model
                                                                       VM



      VMMがデバイスを管理                                            VMM
                                                           Device Driver

             ▪ VMWare ESX Server’s hypervisor=20万行          hardware


                                                     Driver VM

      ドライバVM型                                       Device Model          VM
                                                     Device Driver
             ▪ Xen hypervisor=10万行
                                                              VMM
                                                            hardware

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
             ▪ (例)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
各種ドライバ
ゲストOS            ATAドライバ                 USBドライバ                NICドライバ
                                                                              (画面,サウンドなど)




                            ストレージ                             IKE
                             暗号化              ID管理                    IPsec
                            (AES-XTS)
                                                          UDP/IP
 VMM
                ATA準パススルー               USB準パススルー             NIC準パススルー          IOMMU
                   ドライバ                    ドライバ                  ドライバ            ドライバ



                                                      VMMコア



                                    USBホストコントローラ                  NIC           各種デバイス
ハードウェア         ATAホストコントローラ
                    (IDE)              (UHCI, EHCI)       (Intel Pro100など)    (画面,サウンドなど)




  2008/11/18                                                                             12
    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
Command Block Registers                         LBA
                                                                     0
I/O Addr Offset   Size    Name(read)     Name(write)
   0x1F0 0        16bit   Data           Data
           1      8bit    Error          Features
           2      8bit    Sector Count   Sector Count                    01001101
                                                                         00110101
           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

                                            0x20:   READ SECTOR
                                            0x30:   WRITE SECTOR
                                            0xC8:   READ DMA
                                            0xCA:   WRITE DMA
  2008/11/18                                                                        14
Read                      Write

ゲストOS          rep insw                 rep outsw

                シャドウ                      シャドウ
                バッファ       ←復号   暗号化→     バッファ
 VMM           (512byte)                 (512byte)


               rep insw                 rep outsw

ハードウェア


  2008/11/18                                         15
    テーブル構造のDMAディスクリプタ
      PRD(Physical Region Descriptor)のテーブルをメモリ上に保持
      テーブルへのアドレスをレジスタに指定
      Command Register の 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




2008/11/18                                                                               16
    DMAディスクリプタのシャドウを作る
      データだけVMMで横取りする
       ▪ 制御はゲストOSにさせる
                            シャドウDMAディスクリプタ
                          バッファアドレス      バイト数    ステータス
                          0xF0004000    16384   OK

      ホストコントローラ
                                       VMMの領域
    ベースアドレスレジスタ
                      +
                                DMAディスクリプタ
             インデックス       バッファアドレス      バイト数    ステータス
                          0x08086000    4096    OK
                          0x04004000    8192    OK
                          0x00386000    4096    Ready
2008/11/18                                              17
物理メモリ

                      シャドウDMAディスクリプタ
VMM
                      ベースアドレス      バイト数
                      0xF0004000   16384




VMMによる暗号化/復号化+コピー
                        DMAディスクリプタ
                      ベースアドレス      バイト数
ゲストOS
                      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
    コア
      総数:21,582行
       ▪ 実行時:13,789行
             ▪ 命令エミュレーション:2,239行,シャドウページ管理:1,130行
         ▪ 初期化:2,062行
         ▪ デバッグ:5,781行


    ATAドライバ
      総数:1,287行
             ▪ ※最新バージョンでは実行時789行


2008/11/18                                          20
1400
25000
                             1200
20000         5781           1000

              2062           800
15000                 デバッグ                        デバッグ
                                     1279
                             600
                      初期化                         初期化
10000                                       789
                      実行時    400                  実行時
              13789
 5000                        200
                               0
      0
                                     ATA  ATA
             VMMコア
                                    ドライバ ドライバ
                                         (最新)

2008/11/18                                              21
BitVisor

               40
               35
               30
  オーバーヘッド(%)




               25
               20
               15
               10
               5
               0
                    null   fork   exec       prot   page   ctx

2008/11/18                                                       22
140

              120

              100
 転送速度(MB/s)




               80                               Linux
                                                BitVisorコア
               60
                                                +ドライバ
               40                               +暗号化

               20

                0
                    4KB   64KB   512KB   10MB
                            ブロックサイズ

2008/11/18                                                   23
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

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

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