[CODE BLUE 2018] Hyper-Vのアーキテクチャと脆弱性を深掘りする ジョー・ビアレク ニコラス・ジョリー [レポート] #codeblue_jp

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

『世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議』でありますCODE BLUE 2018に参加していますのでレポートします。

このブログは下記セッションについてのレポートです。

Hyper-Vのアーキテクチャと脆弱性を深掘りする ジョー・ビアレク ニコラス・ジョリー

仮想化技術は、プラットフォームのセキュリティを構築し、クラウドをセキュアにするための、より一層の共通基盤となっている。しかしながら、仮想化技術は最終的にはソフトウェアであり、ソフトウェアには脆弱性があり、そして、ゲストからホストへのエクスプロイットほど美しい(そして恐ろしい)ものはほとんどない。

この最先端分野における研究は、単純に興味深いというだけでなく、非常に有益なものでもある。マイクロソフトはHyper-Vの脆弱性に対して最大25万ドルの報奨金を支払うバグバウンティプログラムを提供している。みなさんの賞金稼ぎを容易にするために、セキュリティ研究者として脆弱性を探す必要があるという点にフォーカスしてHyper-Vの仕組みについて解説を行う。ここではHyper-Vハイパーバイザおよびカーネルモードとユーザーモードでのコンポーネントのサポートについて詳しく解説する。また、これまでにHyper-Vで見られた興味深い脆弱性について紹介し、もしそれらがバグバウンティを通じて報告されていればどうなっていたのかについても議論を行う。

レポート

  • マイクロソフトのセキュリティセンターに努めている
  • 見つけたバグについて報告したい
  • Hyper-V Bog Bountyもあるのでぜひバグを見つけてほしい
    • 最大$250,000!
  • Hyper-Vのアーキテクチャ
    • TopにはHypervisor
      • 一つのバイナリ
    • パーティションでOSを分離している
    • EPTを利用して物理メモリをVMから隔離する
    • Hypervisorを狙うことは有益か?
      • あまり機能が多いわけではなく有益ではない
    • Rootパーティション
      • VMの管理を行っている特別なパーティション
      • 物理メモリにアクセスする
      • バグを探したいならまずRootパーティションをみてみよう
    • ゲストパーティション
      • 物理メモリにはアクセスできない
  • 物理メモリ
    • SPA
      • System Physical Address
    • GPA
      • Guest Physical Address
    • GPADL
      • Guest Physical Address Descriptor List
  • Component
    • VDEV
      • Virtual Device
    • VSP
      • Virtualizations Service Provider
    • IC
      • Integration component
      • 今まで見つかったバグは少ない
  • Rootパーティションサービス
    • ゲストに対して様々なサービスを提供している
    • 各コンポーネントのエミュレート
      • ネットワーク
      • ストレージ
      • フロッピー
    • Para-virtualized
      • エミュレートは遅いのでコチラも利用する
      • ネットワーク
      • ストレージ
    • その他
      • BIOS
      • ライブマイグレーション
      • Dynamic memory
      • Time sync
      • Heardbeat
  • Hyper-Vの原則は最低限
    • 新しいものをhypervisorに追加しない
    • 高速性が求められるものはカーネルに入れる
  • communication channel(Hypervisor)
    • Hypercall
      • ゲストがハイパーバイザにアクセスする
      • system callのようなもの
    • faults
    • instruction emulation
    • register access
    • overlay pages
    • このあたりはあまりバグ探しには向いてない
  • communication channel(kernel mode)
    • VMBUS
    • Extended Hypercalls
    • Aperture
    • Intercept Handling
      • trupの対応
  • communication channel(user mode)
    • IO ports
    • MMIO
    • VMBUS
    • Apature
      • 共有されるセクション
      • double-fetchがあるので注意
    • Read/Write Notifications
      • MMIOとは違う
      • インストラクションポインタは必要ない
      • Live Migrationに役に立つ
  • VMBUS
    • 超高速のコミュニケーションチャネル
    • ゲスト-ホスト間
    • abstraction layersを利用する
    • host ring bufferとguest ring bufferがsystem physical memoryを経由してやり取りする
    • KMCL
      • VSPに利用される
      • コールバック中心の設計
      • double-fethのリスクが有るのではないか
        • コピーを別の場所において、それをホストが見るため、ない
      • GPADLで外部データをアタッチできる
    • Pipes
      • ユーザモードがVMBUSを利用する場合のインターフェイス
      • コンポーネントがチャンネルのオファーをして、ハンドルを提供する
  • IO Port / MMIO Entry Points
    • NotifyMmioRead
    • NotiryMmioWrite
  • Finding Bugs!
    • Hyper-Vのシンボルを一部公開した
    • 脆弱性
      • VMBUS induced vulnerabilities
      • Intercepted I/O vulnerabilities
    • これらのバグはIOに関わる部分
    • CVE-2017-0051
    • CVE-2018-0964
      • vPCI VpciMsgCreateInterruptMessage Uninitialized Stack Object
    • CVE-2017-8706
      • VideoSynthDevice::SynthVidSendSupportedResolutionsResponse Uninitialized Object Field
      • 簡単に再現できる
    • CVE-2018-0888
      • Information disclosure during MMIO emulation
      • エミュレータの中に初期化してない部分があった
    • CVE-2018-0959
      • Out-of-Bounds Read/Write in VmEmulatedStorage
      • 任意の4GBのRead/Writeができる
      • $150,000の報奨金が出た

感想

VMのバグは致命的になることが多いですが、それもあってバウンティという視点ではとてもレベルが高く報奨金も大きいですね。

是非挑戦してみてはいかがでしょうか?