FFRIエンジニアブログ

株式会社FFRIセキュリティのエンジニアが執筆する技術者向けブログです

Black Hat USA 2021 注目発表 2 ~ VM エスケープ脆弱性の発見と防御の発表紹介

はじめに

基礎技術研究室リサーチエンジニアの末吉です。

前回の Black Hat USA 2021 注目発表 1 に引き続き Black Hat USA 2021 の発表の中から、今度は Hyper-V の脆弱性発見手法と、 KVM の VM エスケープ防御機構について見ていきます。

まずは上記発表を理解するために必要な、近年重要性が増している VM エスケープ攻撃について説明します。

VM やコンテナといった仮想環境内では、悪意のあるユーザーが悪さをしようとしても仮想環境内でしか行えず、その外の環境に意図しない影響を与えないようになっています。 これはマルウェア解析や、クラウドサービス等の様々な用途において非常に有益なセキュリティ機能です。

我々マルウェア解析者は仮想環境内でマルウェアを動作させて挙動を確認するということをよく行います。 仮想環境内であることを検知して挙動を変えるマルウェアも存在しますが、たいていの場合は仮想環境で事足ります。 ホストの環境が侵害されることはなく、機密情報を盗られたりせず、さらに仮想環境が破壊されてもスナップショットを戻せば元通りです。

クラウドサービスでは、ほとんどの場合 VM を使用してユーザーの環境を構築しています(AWS の EC2 インスタンスなど)。 自分の環境を汚しても、その外にあるクラウドサービスのインフラや他人の環境までは汚せません。

ですが、ハイパーバイザーの実装の欠陥等によって、 仮想環境内から仮想環境を管理するホスト(ハイパーバイザー)を侵害できる脆弱性がたまに見つかります。 この脆弱性を悪用する攻撃は VM エスケープ攻撃と呼ばれます。

攻撃者にとってみればこの脆弱性は非常においしい存在です。 クラウドサービスにこの脆弱性が存在すれば、登録すれば容易に手に入る自分の VM からホストを掌握し、他のユーザーの VM も侵害して情報を抜き取れます。 (侵害できても不審な行動をすればすぐにばれるかもしれませんが)

今は VM エスケープ攻撃を使ったクラウド侵害で甚大な被害が発生したという実例を(幸いにも)まだ聞いたことがありませんが、起こり得るという事実は確かです。 さらにクラウドが台頭している昨今はその脅威も大きくなりつつあり、このような脆弱性の発見手法や防御の重要性は増しています。

Black Hat USA 2021 では Hyper-V の VM エスケープ攻撃に関する脆弱性の発見手法や、 KVM を用いた防御機構に関する発表がありました。

一個人の感覚ですが、 VM エスケープ脆弱性は主に KVM, QEMU, VMware, VirtualBox, Hyper-V で盛んに研究されていると感じています。

これらは簡単に利用でき、さらに多くの人に利用されているというのが研究要因の 1 つにあるかと思います。特に KVM や QEMU, VirtualBox は OSS であるため、 VM エスケープに限らず様々な研究で利用されています。 後ほど紹介する Alcatraz という防御機構は KVM を対象としていますが、この理由も 1 つあると考えられます。

これらの中でも、 Hyper-V は特に攻撃価値が高い対象の 1 つです。

Hyper-V はマイクロソフトが作った仮想化技術であり、同社が運営するクラウドサービス Microsoft Azure の仮想化技術としても使われています。 マイクロソフトの 2021 年第一四半期では、 Azure は Windows を超える収益であり、さらに前年同期比で 50% 収益が増加するなど未だに高い成長性を持っています。 また、 Canalys の調査によると 2021 年第一四半期では Azure はクラウドのシェアでは AWS に次ぐ第 2 位で、 19% のシェアを占めています。 こういった事情から、 Hyper-V の VM エスケープ攻撃は大きな影響を持ちます。

それでは、Black Hat USA 2021 での発表について簡単に紹介します。

Mobius Band: Explore Hyper-V Attack Interface through Vulnerabilities Internals

  • 発表者: Zhenhao Hong, Chuanjian Liao

この発表は Hyper-V の VM エスケープ脆弱性を見つけるためのアタックサーフェスについてのまとめと、発表者らが発見した 3 つの Hyper-V に存在した脆弱性の詳細についての話です。

発表者らは中でも VMBus を経由するアタックサーフェスを調査し、いくつかの脆弱性を発見しています。 脆弱性についてはここには書ききれないため割愛しますが、 VMBus は次に紹介する hAFL1 にも関係するため、ここで説明します。

VMBus

Hyper-V のホストとゲストは、パーティションによって分離されています。 ホストの仮想化管理スタックはルートパーティション(親パーティション)内で実行され、ゲスト OS は子パーティション内で実行されます。

パーティションについては Hyper-V のアーキテクチャをご覧ください。

子パーティションは直接ハードウェアを操作できず、ルートパーティションにアクセスリクエストを送信して操作を代行してもらいます。 ルートパーティションと子パーティションの間で通信するドライバーはいくつかありますが、それらは VMBus またはハイパーバイザーを経由して通信します。

ルートパーティションでホストされ、 VMBus を介して子パーティションからのデバイスアクセス要求を処理するインスタンスは Virtualization Service Provider(VSP) と呼ばれます。 子パーティションでホストされ、デバイスアクセス要求を VSP にリダイレクトするインスタンスは Virtualization Service Consumer(VSC) と呼ばれます。

次に紹介する hAFL1 では、この VMBus 経由のファジングを行っています。

hAFL1: Our Journey of Fuzzing Hyper-V and Discovering a 0-Day

この発表は hAFL1 という Hyper-V モジュールの vmswitch を対象とするファザーを開発し、 これを使用して VM エスケープ可能なゼロデイ脆弱性を発見した話です。まずは vmswitch について説明します。

vmswitch

vmswitch は仮想スイッチとも呼ばれます。

仮想スイッチはざっくり言えばゲストで発生する外部へのネットワーク通信をゲストの外へ出して、ゲストと外部間で通信するための準仮想化デバイスです。

仮想スイッチはルートパーティションでは VSP として vmswitch.sys が、子パーティションでは VSC として netvsc.sys が動作しています。

vmswitch.sys は VSP なので VMBus 経由で子パーティションからデータを受け取り、解釈する機能を持ちます。

vmswitch.sys が受け取ったデータを解釈する処理に脆弱性が存在すれば、子パーティションから細工したデータを vmswitch.sys に送信して、ホスト環境を攻撃できる場合があります。

hAFL1

hAFL1 は KVM (Linux で使われる仮想化技術) ベースのカーネルファザーである kAFL ベースで構築されています。 kAFL は KVM 上でファジング対象となるカーネルを起動し、Intel CPU でサポートされているトレーサー Intel PT を使用してカーネルのカバレッジを取得しつつファジングを行うファザーです。

hAFL1 は Hyper-V のカバレッジをとりながらファジングするために kAFL(VM は KVM ベース) 上で Windows VM1 を実行し、その VM の上で Hyper-V を実行して Windows VM2 を作成するという手法を採っています。 攻撃シナリオとしては VM2 にいる攻撃者が VM1 内で起動している Hyper-V に対して攻撃する感じです。 しかし kAFL はこのようなネスト VM 構造をサポートしていない問題がありました。 発表者は Hyper-V が有効で Intel VT-x が無効になっている場合、 Hyper-V は操作できないが vmswitch はカーネルメモリに読み込まれるという性質を発見し、それを利用して VM2 はダミーとして作成だけ行い、実際には使わずに vmswitch.sys を読み込んでファジングするという方法で解決しています。 Intel VT-x が使えない状態だと Hyper-V は壊れますが、それでも vmswitch を動かしてファジングする分には問題無かったそうです。

VMBus を初期化するために vmswitch.sys をリバースエンジニアリングして呼び出す関数や引数を特定し、パッチを当てて対処しています。

さらに、クラッシュ時にレポートを取得するために KeRegisterBugCheckCallback 関数を使用してクラッシュ時のスタックトレースとモジュール情報を収集するようになっています。 レポートは複数のクラッシュの原因が同一かどうかの判定や、根本原因の特定などに使います。

ここからは感想です。 hAFL1 ではカバレッジを取得したり VMBus を直接ファジングするために技巧的な方法を採っており、不安定ではありますがファジング程度なら十分できるという発見が面白いところです。 Mobius Band で Hyper-V のアタックサーフェスの洗い出しが行われていましたが、ここで出てきたほかのドライバに対してファジングを試しても面白そうです。

ちなみにここでは割愛しますが、改良版の hAFL2 がすでに出ています。

また、最近はこのファザーだけではなく Google Project Zero の Hyntrospect や、マイクロソフト自身も HyperFuzzer というファザーを発表しています。 それぞれ hAFL1 とは異なる手法で Hyper-V をファジングしています。興味のある方はこれらもご覧ください。

このことから、マイクロソフト自身も Hyper-V の脆弱性に強い関心を持っていることが分かります。 また、 Hyper-V のファザーが同時期に出現したことは、 マイクロソフトに限らず Hyper-V の脆弱性への関心が増加している現れかもしれません。

Alcatraz: A Practical Hypervisor Sandbox to Prevent Escapes from the KVM/QEMU and KVM-Based MicroVMs

この発表はオープンソースの仮想化技術である KVM の脆弱性を突かれても VM エスケープできないようにする防御機構についての話です。

従来の VM エスケープ防御機構はファームウェアを書き換えるなど手間のかかる方法でしたが、これはファームウェアを書き換えずにカーネルの変更のみで VM エスケープ防御を実現しています。

過去にあった KVM の VM エスケープ可能な脆弱性は、オーバーフローや Use After Free、不適切なハンドリングを利用するものが主でした。 これらの脆弱性で VM エスケープを達成する方法はいくつかのパターンに分類できます。

  1. 小さいシェルコードを使ってゲストからホスト上にプロセスを作成し、ホストユーザーから権限昇格して root 獲得
  2. VM が持つサービスやハードウェアエミュレーションコードを使ってユーザー権限のプロセスをホスト上に生成
  3. ホスト上でゲスト権限の VM プロセスが動いている状態で、不適切なハンドリングをする脆弱性を利用してホスト権限を取得、権限昇格
  4. /dev/kvm 経由で KVM の脆弱性を使って権限昇格

Alcatraz はこうした脆弱性の悪用を阻止するツールです。防御機構として以下を提供しています。

  • Extended Page Table(EPT) のパーミッションを使い、ホスト上での書き換えやコード実行を防ぐ(1 などの防御)
  • システムコールにハードウェアブレークポイントを仕掛け、プロセス生成等を監視(2,3 の防御)
  • VMX 命令をエミュレートし、KVM の動作権限を下げて KVM の脆弱性の影響範囲を狭める(4 などの防御)

パフォーマンス評価では、オーバーヘッドをホスト側で 10% 増、ゲスト側で 1% 増に抑えています。

パフォーマンスは防御機構の評価に重要な要素です。とりわけ低レイヤーでのパフォーマンス悪化は山積し、ユーザビリティに大きな影響を与えます。

クラウド事業者の視点からであれば、ホスト側で 10% の増加は一台の物理ホストで稼働できる VM の数などが少なくなるものの、ゲスト側が 1% に抑えられている点については、ユーザーのユーザビリティにおいては問題になりにくいのではないかと考えられます。 ユーザーのセキュリティを優先するならば有効な手段になるかもしれません。

おわりに

今年の Black Hat USA では VM に関する攻撃と防御、両面の発表がありました。

VM エスケープに限らずクラウドに対する攻撃はクラウドの発展とともに大きな脅威になりつつあり、事業者、攻撃者、研究者にとって大きな関心事になっています。 事業者も指をくわえて見ているわけではなく、脆弱性の発見や防御機構の研究開発に日々取り組んでいます。

ただし、防御機構にはオーバーヘッドがつきものです。今回紹介した Alcatraz のオーバーヘッドを許容できるかは状況次第ですが、とにかくより小さいオーバーヘッドで簡単に導入できて有効な防御が欲しいというのは、大勢の人の願いでしょう。

今の VM エスケープ防御機構はソフトウェアやファームウェアベースが主流ですが、 最近 CPU に低オーバーヘッドかつバイパス不可能を目指した脆弱性攻撃防御機構が組み込まれつつあるように、そのうち CPU の仮想化支援技術にも、そのような VM エスケープ防御機構を入れようという動きが現れるかもしれませんね。

エンジニア募集

FFRIセキュリティではサイバーセキュリティに関する興味関心を持つエンジニアを募集しています。採用に関してはこちらをご覧ください。