不正な VIB のインストールからのセキュアブートによる ESXi の保護

Share on:

Table of contents

背景

先日、VMware社およびMandiant社より、vSphere を標的とする新しい種類のマルウェア(VirtualPITA、VirtualPIE、VirtualGATE)に関する記事が公開されました。この記事のマルウェアの興味深いところとして、ESXi のソフトウェアパッケージである VIB にマルウェアがパッケージングされている点が挙げられます。

具体的には以下のような特徴があります。

  • 署名が無い不正な VIB にマルウェアをパッケージング
  • VIB の許容レベルは PartnerSupported に偽装
  • 不正な VIB の強制インストールによる永続化
  • ESXi の起動時にマルウェアを rc.local 内のスクリプトから実行
  • VIB やマルウェアのファイル名は ESXi にありそうな名称に偽装

このような VIB のインストールによるマルウェアの永続化が vSphere としては過去に類を見ない状況だったため、新しい攻撃手法に対する注意を促す記事となっているようです。

マルウェアを利用した攻撃を防ぐにあたって、VMware社からは複数のセキュリティのベストプラクティスが提示されています。その中で、ESXi が侵入された後、不正な VIB のインストールを阻止する手段として UEFI セキュアブートの有効化が案内されています。

Mitigation and Threat Hunting Guidance for Unsigned vSphere Installation Bundles (VIBs) in ESXi (89619)

Mitigation
In addition to implementing various operational security best practices mentioned in Protecting vSphere From Specialized Malware to prevent a potential compromise in the first place, VMware recommends enablement of the Secureboot feature in ESXi to mitigate the risk of malicious actors persisting on a compromised ESXi host via malicious VIB installation. Secure boot was designed to disallow installation of unsigned VIBs on an ESXi host. In addition, secure boot disallows the --force flag which would normally allow an administrator to bypass acceptance level settings on the ESXi host.

今回の記事では、セキュアブートの有効化により不正な VIB から ESXi がどのように保護されるかを見ていきます。

セキュアブートとは?

セキュアブートは信頼されているソフトウェア(ブートローダーや OS 等)のみを使用してシステムを起動するためのセキュリティの仕組みです。UEFI の仕様として定義されています。

ESXi のセキュアブートでは、UEFI ファームウェアの起動後に以下の順で各ソフトウェアの署名の検証を行っていきます。

  1. UEFI ファームウェアが ESXi のブートローダーの署名を検証
  2. ブートローダーが VMkernel とセキュアブート VIB 検証機能の署名を検証
  3. セキュアブート VIB 検証機能が全ての VIB の署名を検証

全ての検証が成功した場合、ESXi は正常に起動します。検証が失敗した場合にはそれぞれの段階で UEFI、ブートローダー、VMkernel がエラーを出力してブートシーケンスを停止します。

以下の図はドキュメントからの引用ですが、UEFI ファームウェアを信頼の基点としたトラストチェーンが構成されることになります。

また、セキュアブートが有効な ESXi には以下の特徴もあります。

  • 不正な VIB の強制インストールを拒否する
  • ESXi の起動時の local.sh スクリプトを実行しない
  • kickstart の %firstboot セクションを実行しない

ESXi が不正な VIB のインストールから保護される様子を見る

実際にセキュアブートにより ESXi が不正な VIB のインストールから保護される様子を以下の順に見ていきます。

  • セキュアブートが無効な ESXi への不正な VIB のインストール
  • 不正な VIB をインストール済みの状態からセキュアブートを有効化
  • セキュアブートが有効な ESXi への不正な VIB のインストール

セキュアブートが無効な ESXi への不正な VIB のインストール

まずはマルウェアを模したダミーの VIB を作成し、ESXi にインストールするとどのような状態になるかを見ます。ダミーの VIB (hello_world.vib) は以下の構成としています1

  • descriptor.xml
    許容レベルを PartnerSupported に変更
  • sig.pkcs7
    中身が空の署名ファイル
  • hello_world (/usr/lib/vmware/hello/hello_world)
    ダミーのペイロード(前回記事のELFバイナリ)

hello_world.vib は許容レベルを PartnerSupported に変更してはいますが、VMwareやパートナーによる署名が無いため CommunitySupported 相当の要件しか満たされていない状態です。

以下はセキュアブートが無効な ESXi に対して hello_world.vib のインストールを試みた例です。

オプション無しの場合は署名が空である旨のエラーでインストールに失敗していますが、--force オプションを付与した場合にはインストールができていることが分かります。

esxcli software vib signature verify コマンドで見てみると、PartnerSupported の許容レベルであるものの、署名が無効な VIB として検出されていることが分かります。

もし VirtualPITA や VirtualPIE のようなマルウェアやその起動スクリプトがペイロードに含まれていれば、VIB のインストールによるマルウェアの永続化が達成されてしまうことになります。

不正な VIB をインストール済みの状態からセキュアブートを有効化

続いて、不正な VIB がインストールされた状態でセキュアブートを有効にすると、ESXi のブート中に署名が無効な VIB を検出して PSOD となります。意図的な PSOD の発生により不正な VIB (hello_world.vib) を含んだ状態での ESXi の起動が防止されていることが確認できます。

セキュアブートが有効な ESXi への不正な VIB のインストール

セキュアブートが有効な ESXi では、--force オプションを付与して不正な VIB の強制インストールを試みても、以下のように署名が無効な VIB として拒否されます。

execInstalledOnly 起動オプションとの併用

前回記事で execInstalledOnly 起動オプションによる VIB から提供されないバイナリの実行防止に言及しました。

不正な VIB のインストールによってマルウェアが永続化された場合、マルウェアのバイナリはインストール済みの VIB から提供されることになります。このようなケースでは execInstalledOnly を有効にしてもバイナリ実行防止を回避されてしまいます。

execInstalledOnly 起動オプションをセキュアブートと併用することにより、不正な VIB のインストール、個別に配置された不正なバイナリの実行の両方が防止されるため、信頼された VIB から提供されるバイナリのみを実行させることが可能となります。

なお、これらの機能はあくまでも ESXi への侵入後の攻撃の影響を緩和するための手段です。脆弱性や不適切なユーザー管理を悪用した ESXi への侵入を防ぐことはできません。

セキュアブート利用時の注意点

セキュアブートを利用する場合、いくつかの注意点があります。

既存環境のセキュアブートとの互換性のチェック

既存の環境でセキュアブートを無効から有効に切り替える場合、以下のドキュメントの手順で事前にセキュアブートとの互換性を確認しておきます。

アップグレード後の ESXiホストでのセキュア ブート検証スクリプトの実行

過去に何らかの問題で署名を無視して VIB をインストールする必要があった場合、VIB の署名が検証されていないためセキュアブートの有効化後にブートに失敗する可能性もあります。一般的な環境であれば問題ありませんが、念のため事前に既存環境のセキュアブートとの互換性を確認しておくことをおすすめします。

起動時に local.sh スクリプトの実行不可

ESXi の起動時に実行されるスクリプトに /etc/rc.local.d/local.sh がありますが、セキュアブートが有効な場合は本スクリプトは実行されません。local.sh をカスタマイズしている環境は注意が必要です。

Modifying the rc.local or local.sh file in ESX/ESXi to execute commands while booting (2043564)

The script will not be run when UEFI secure boot is enabled.

kickstart の %firstboot セクションの実行不可

kickstart を使用して自動インストールを行う場合、初回起動時のみ実行する処理は %firstboot セクションに記載します。セキュアブートが有効な環境の場合には %firstboot セクションの内容は実行されません。

インストール スクリプトおよびアップグレード スクリプトのコマンド

重要:
ESXi ホスト上でセキュア ブートが有効になっていると、 %firstboot スクリプトは実行されません。

Auto Deploy 環境での VMware CA 証明書の UEFI への登録

Auto Deploy を使用する環境では KB2148532 およびハードウェアベンダーの資料に従って、UEFI の署名データベース(db 変数)に VMware の CA 証明書を登録する必要があります。

Auto Deploy でセキュアブートを利用する場合、DHCP の Option 67 (Boot File Name) にセキュアブート用の iPXE ファームウェア「snponly64.efi.vmw-hardwired.officialkey」を指定します。このファイルは VMware の CA 証明書で署名されていますが、通常、VMware の CA 証明書は既定で署名データベースに含まれません。このため、Auto Deploy を使用する場合は個別に登録が必要となります。

署名データベースへの CA 証明書の登録はハードウェア側の作業になるため、具体的な操作はハードウェアベンダー側の情報を確認する必要があります。例えば、KB2148532 で例に挙げられている Dell のハードウェアの場合はセットアップユーティリティや RACADM といったツールを操作することになると思います。

なお、手動でインストーラ ISO からインストールされる ESXi のブートローダーは Microsoft の CA 証明書で署名されています。一般に Microsoft の CA 証明書は UEFI の署名データベースに標準で組み込まれているため、Auto Deploy を使用していない環境では UEFI の署名データベースへの CA 証明書登録作業は不要になります。

おわりに

今回はセキュアブートによる不正な VIB のインストールからの保護について見ていきました。セキュアブートによって信頼された VIB 飲みを使用して ESXi が起動されることが保証されます。

セキュアブートや execInstalledOnly によって ESXi を不正な VIB やバイナリから保護できますが、これらはあくまでも ESXi への侵入後の攻撃の影響を緩和するための手段です。これらを有効にしても脆弱性や不適切なユーザー管理を悪用した ESXi への侵入を防ぐことはできません。

ESXi を脅威から守るには、定期的なパッチ適用で既存の脆弱性を塞ぐ、ESXi へのアクセスを適切に管理するなど、運用上で一般に必要となる対応を徹底することが肝心です。Security Configuration Guide などのリソースも活用し、環境に適切な対応を取っていきましょう。


  1. VIB の構成やカスタム VIB の作成方法は中の人の記事が参考になります。vibauthor という Flings を使う方法もありましたが、現在は vibauthor の Flings ページは無くなっているようです。 ↩︎