Blog

中国のサイバースパイ、VMware ESXi ゼロデイを使用。侵害したハイパーバイザー上で特権ゲスト操作を実行

Alexander Marvi, Brad Slaybaugh, Ron Craft, Rufus Brown
Jun 13, 2023
3 min read
|   Last update Jun 20, 2023
Threat Intelligence
Zero Day Threats
Vulnerabilities
China

脆弱性の悪用にはハイパーバイザーへのアクセスが必要 (例: 不正取得された ESXi 認証情報など)

EDR(Endpoint Detection and Response)ソリューションによって Windows および Linux システム上でのマルウェア検知の有効性が向上するにつれて、国家支援を背景とするサイバー攻撃グループの中には、一般的にEDRがサポートしないようなシステム - ネットワーク アプライアンス、SAN アレイ、VMware ESXi ホストなど - をターゲットとしたマルウェアの開発と展開へとシフトしています。

2022年後半、Mandiantは、VMware ESXiホスト、vCenterサーバー、Windows仮想マシン(VM)に影響を与える、中国のサイバースパイグループであるUNC3886が展開する新しいマルウェアシステムに関する詳細を発表しました。そして過去1年間にわたる継続的なセキュリティリサーチと調査の結果、MandiantはUNC3886がEDRソリューションの監視対象から逃れるために複数の組織で用いた次のような追加のテクニックを発見しました:

  • vCenter Server アプライアンスに組み込まれた vPostgreSQL サーバーから、接続されているすべての ESXi ホストの vCenter Server のサービス アカウント認証情報を窃取する
  • ゼロデイ脆弱性 (CVE-2023-20867) を悪用し、侵害された ESXi ホストからのゲスト認証情報の認証やゲスト VM でのデフォルトのログ記録を行わずに、Windows、Linux、および PhotonOS (vCenter) ゲスト VM 全体で特権コマンドを実行する
  • 水平展開とアクセス維持のために、代替ソケット アドレス ファミリである VMCI を使用して ESXi ホストにバックドアを展開する。このアドレス ファミリにより、ネットワーク セグメンテーションや設定されているファイアウォール ルールに関係なく、ゲスト VM から侵害された ESXi ホストのバックドアへの直接の再接続が可能になる。
  • 影響を受けたシステムのログ サービス改ざんと無効化を継続。侵害された環境内においてUNC3886 を調査を困難にする。

このブログでは、図 1 に示されている攻撃パスについてさらに詳しく説明し、ゼロデイ脆弱性 (CVE-2023-20867) と攻撃者が目的を達成するために利用した VMCI 通信ソケットの両方の影響を解説しています。続報として、過去の攻撃者の活動を示すホスト上に存在するアーティファクト、ゲスト レベルでゲスト操作を追跡するためのオプションのログ記録、および vCenter と ESXi の両ソリューションのハードニングのための推奨事項を共有する予定です。

Expanded UNC3886 attack path
図1:UNC3886の攻撃経路の拡大イメージ

UNC3886 が vCenter サーバー上の ESXi ホストのサービスアカウント情報を取得する方法を説明する前に、図 1 の攻撃経路に関連する脅威要因について現在判明していることを以下に説明します。

アトリビューション

UNC3886は、非常に巧妙な中国のサイバースパイグループで、EDRソリューションをサポートしないファイアウォールや仮想化技術のゼロデイ脆弱性を標的とし、これを悪用してきました。UNC3886は、主に米国とアジア太平洋地域にある国防、テクノロジー、テレコミュニケーションの組織を標的にしてきました。Mandiantは、UNC3886が新しいマルウェアファミリーやユーティリティを利用していることを確認しており、このことは、このグループが標的となるアプライアンスの基礎技術を理解するための幅広い研究やサポートにアクセスしていることを示しています。 

UNC3886 に関連する Mandiant の過去のブログ投稿では、ファイル名やハッシュなどの基本的な指標が共有されていますが、この攻撃者は、言及されている指標を公開後 1 週間以内に置き換えていることが観察されています。このため、本ブログでは、マルウェアやコマンドの種類に関係なく、この攻撃経路を検知して対応できるように、攻撃者が利用した戦術や方法論に焦点を当てます。

次のセクションでは、このブログ記事で紹介した vpxuser の使用方法と関連付け、攻撃者が ESXi ホストが接続されている vCenter サーバを標的として ESXi マシンのサービスアカウント認証情報を取得した方法を説明します。

vCenter の悪用

Mandiantの前回のESXiブログポストでは、図2にUNC3886が侵害されたESXiホストを利用してゲストVM上でコマンドを実行する方法を可視化しています。この攻撃経路では、攻撃者がvpxuserアカウントの認証情報と、ゲストVM上で実行するコマンドを、Pythonスクリプトe.pyのパラメータとして使用しています。

vpxuser account usage
図 2: vpxuser アカウントの使用

Mandiantは、UNC3886がvvpxuser認証情報を取得し、ESXiホストとそのゲストVMをエミュレートし、接続されたESXiホストのファイアウォール・ルールを操作できるようにする追加の攻撃者スクリプトを確認しました。これらのスクリプトにより、攻撃者は以下のアクションを実行することができます:

  • 接続されているすべてのESXiホストのvpxuserサービスアカウントの平文パスワードを、接続されているvPostgreSQLデータベースを介して侵害されたvCenterサーバから取得する。
  • vCenterサーバに接続されているすべてのESXiホストと、接続されている各ESXiホスト上のゲストVMをリストアップする。
  • 接続されているすべてのESXiホストで、指定されたサービス(デフォルトのsshServer)のアクセス許可IPのリストに追加または削除する。

これらのスクリプトの詳細については、以降のセクションで説明します。

vpxuser クレデンシャル・ハーベスティング

vpxuser アカウントは、ESXi ホストが vCenter サーバに初めて接続されたときに自動的に作成される特権的なサービス アカウントです。このユーザのパスワードは暗号化されてvCenterサーバ上のvPostgreSQLデータベースに保存され、デフォルトでは30日ごとに自動的に更新されます。vCenterは主にこのサービスアカウントを、異なるESXiホスト間でのVMの移動、実行中のVMの構成の変更などの管理操作に使用します。UNC3886は、このサービスアカウントを利用して、VIRTUALPITAまたはVIRTUALPIEのバックドアを含む悪意のあるvSphere Installation Bundles (VIB)を導入していました。 

2022年3月、Penteraの研究者Yuval Lazarは、vCenterサーバ上でvpxuserの認証情報を採取する方法を説明した特権昇格の脆弱性、CVE-2022-22948に関連するガイダンスを発表しました。この脆弱性はガイダンス公開後にパッチが適用されていますが、攻撃者がvCenterサーバーへのルートアクセスを得ることができた場合、vpxuserの暗号化された認証情報を取得し、それをクラックすることは可能です。

ESXi ホストおよびゲスト マシンのエミュレーション

vpxuserの認証情報を取得すると、攻撃者は追加のスクリプトを使用して、ESXiホストとそれぞれのゲストVMをマッピングしていました。回収されたPythonスクリプトの内容は、vpxuser認証情報が保存されている同じvPostgreSQLデータベースを利用して、vCenterサーバーに接続されているすべてのESXiホストと、各ESXiホスト上でホストされているゲストVMを一覧表示しました。

vCenter から ESXi ホストへのファイアウォールの操作 

利用可能なESXiホストとゲストVMを特定した上で、別の攻撃者のPythonスクリプトを使用して、このスクリプトが実行されたvCenterサーバに接続されたすべてのESXiホストで、あらゆるサービスに対するIPアドレスの許可リストを更新しました。これにより、攻撃者は複数のESXiホストのファイアウォールを一度に素早く変更することができ、デフォルトでは、ESXiホストに直接SSH接続できるIPアドレスが提供されるようになりました。また、悪意のあるVIBが導入されると、同じIPアドレスを削除し、後で再接続するための代替手段を提供することで、攻撃者の追跡を容易に行うことができます。  

攻撃者のリモートSSHアクセスとvpxuserサービスアカウントの認証情報を使用して、ESXiホストに接続し、永続的なバックドアを展開しました。攻撃者は、VIBを通じてこれらのバックドアを展開し、ESXiホストが再起動されるたびに、内部にパッケージされたマルウェアを実行できるようにしました。VIBには、VIRTUALPITAおよびVIRTUALPIEバックドアが含まれており、TCPまたはVMCIポートでリッスンしていました。 

これらのVIBのインストール、これらのインストールを隠すためのアンチフォレンジックの実行、およびCVE-2023-20867を悪用して認証されていないゲスト操作を実行するために使用された攻撃者スクリプトは、次のセクションで説明されています。

ESXi ホストの悪用 

悪意のある VIB のインストール 

UNC3886 に関する追加調査が進むにつれ、Mandiant は、UNC3886 が ESXi ホストに悪意のある VIB を配備するために使用したインストールスクリプトを回収しました。Mandiantが過去に公開したブログ記事では、vmkwarning.logの特定のイベントからわかるように、攻撃者はタイムストンプを利用して活動を隠していることが示唆されていましたが、Mandiantが発見したスクリプトにより、攻撃者が悪意のあるVIBのインストール前にタイムストーンを行うために使用した時間を正確に確認することができます。

インストールスクリプトは、標的となったESXiホストで以下の動作を行いました: 

  1. 現在のファイアウォールの状態とシステム時間を保存  
  2. ファイアウォールを無効化 
  3. VIBの受け入れレベルをPartnerSupportedに設定 
  4. ファイルからVIBのインストール時刻を取得: /var/db/esximg/vibs/esx-base-*.xml 
  5. システムクロックを取得したVIBインストール時刻に設定
  6. コマンドで悪意のある VIB をインストール:esxcli software vib install -f --no-sig-check 
  7. ファイアウォールを再有効化
  8. システムクロックを現在の日付と時刻に戻す

Mandiantは、2022年に、過去の調査においてCVEが悪用された証拠を確認できなかったと指摘したことがあります。2023年にUNC3886の活動に関する調査を継続する中で、Mandiantは、攻撃者がゼロデイ脆弱性であるCVE-2023-20867を利用して、ゲストの認証情報を必要とせずに、侵害したESXiホストからコマンドを実行し、ゲストVMとの間でファイルを転送していることを発見しました。さらに、CVE-2023-20867を使用すると、ESXiホストからコマンドが実行されても、ゲストVMに認証ログイベントが生成されない。Mandiantは、VMwareと緊密に連携し、この脆弱性を責任を持って開示しました。この脆弱性の詳細については、VMwareのアドバイザリであるVMSA-2023-0013をご参照ください。

CVE-2023-20867がESXiホストと接続されたゲストマシンにどのような影響を与えるかを説明する前に、このエクスプロイトが影響を与えるAPIであるVMware Guest Operationsの概念について、以下のようにさらに詳しく説明しています。

VMware ゲストの操作の説明

攻撃者は、侵害されたESXiホスト上で動作するゲストVMとやりとりするために、VMware tools (vmtools) Guest Operationsを利用して、ESXiホストを通じてプロビジョニングされたVMと通信しました。Vmtools Guest Operations は、vSphere API の機能で、さまざまなタイプのホストとゲストの相互作用を可能にするものです。すべての異なるゲスト操作のリストは、表1で見ることができます。(GuestOperationsManager API Callsのリストはこちらを参照

表 1: vmtools Guest Operationsの一覧

Managed Object 

Methods 

Description 

GuestAliasManager 

AddGuestAlias 

define alias for guest account 

ListGuestAliases 

list guest aliases for specified user 

ListGuestMappedAliases 

list alias map for in-guest user 

RemoveGuestAliasByCert 

remove certificate associated aliases 

GuestAuthManager 

AcquireCredentialsInGuest 

authenticate, return session object 

ReleaseCredentialsInGuest 

release session object 

ValidateCredentialsInGuest 

check authentication data or timeout 

GuestFileManager 

ChangeFileAttributesInGuest  

change attributes of file in guest 

CreateTemporaryDirectoryInGuest  

make a temporary directory 

CreateTemporaryFileInGuest  

create a temporary file 

DeleteDirectoryInGuest 

remote directory in guest OS 

DeleteFileInGuest 

remove file in guest OS 

InitiateFileTransferFromGuest  

start file transfer from guest OS 

InitiateFileTransferToGuest  

start file transfer to guest OS 

ListFilesInGuest 

list files or directories in guest 

MakeDirectoryInGuest 

make a directory in guest 

MoveDirectoryInGuest 

move or rename a directory in guest 

MoveFileInGuest 

rename a file in guest 

GuestWindowsRegistryManager 

CreateRegistry KeyInGuest 

create a registry key 

DeleteRegistryKeyInGuest  

delete a registry key 

DeleteRegistryValueInGuest  

delete a registry value 

ListReeistryKeysInGuest 

list registry subkeys for a given key 

ListRegistryValuesInGuest 

list registry values for a given key 

SetRegistryValueInGuest 

set or create a registry value 

GuestProcessManager 

ListProcessesInGuest 

list processes running in guest OS 

ReadEnvironmentVariableInGuest  

read environment variable in guest 

StartProgramInGuest 

start running program in guest 

TerminateProcessInGuest 

stop a running process in guest 

通常、ゲストオペレーションを実行するには、管理者は以下のいずれかの方法でゲストマシンと認証する必要があります: 

  • NamePasswordAuthentication(ネームパスワード認証 
  • SAMLTokenAuthentication (サムライトークン認証) 
  • SSPIA 認証  
  • TicketedSessionAuthentication(チケット付きセッション認証) 

Mandiantは、UNC3886がESXiホストからVMと対話する際にGuest Operations APIコールを行っていたことを指摘しました。これらの調査において、Mandiantは攻撃者がESXiホストからゲストVMとやりとりにおけるSecurityログ内のWindows 4624イベントIDなどの認証イベントの証拠を発見しませんでした。しかし、UNC3886 の侵入に関する調査が進むにつれ、Mandiant は、攻撃者が ESXi ホスト上のゲスト VM でゲスト操作を行う際に認証を回避し、その結果として攻撃の成功時に利用可能なログに認証イベントが生成されないという新しい証拠を発見しました。この情報は、責任を持ってVMware社に開示され、CVE-2023-20867というラベル付とともにパッチが生成されました。

CVE-2023-20867 ホストからゲスト マシンへの未認証のゲスト操作

CVE-2023-20867 により、攻撃者は、認証チェック メカニズムをターゲットにして、ゲスト VM での認証を必要とせずに、侵害された ESXi ホストからゲスト VM 上で特権ゲスト操作を実行することができました。さらに、このエクスプロイトは、ESXi ホストまたはゲスト VM で実行される従来のログ記録アクションをバイパスします。この脆弱性を悪用するために必要な要件は次のとおりです。

  • 攻撃者がESXiホストに対して特権アカウント(rootやvpxuserなど)のアクセス権を持っている。
  • 対象のゲストマシンにVMware Toolsソフトウェアがインストールされていること 

この脆弱性は、Windows、Linux、およびPhotonOS(vCenter)のゲストにおいて、認証されていないゲストオペレーションを成功させることが可能でした。攻撃者は、Pythonスクリプトを実行し、実行中の/bin/vmxプロセスにインジェクションし、特にゲストオペレーションを実行する前に認証チェックを行うuserCredentialTypeをターゲットとして、このエクスプロイトを達成しました。

図3は、GitHubからvixCommand.hのソースコードを表示したもので、vmtoolsに組み込まれている10種類の認証タイプを定義しています。ゲスト操作を実行しようとしたときに生成されるデフォルトのチャレンジは、ゲスト操作を完了する前にユーザー名とパスワード(VIX_USER_CREDENTIAL_NAME_PASSWORD - Type 1)を要求します。このエクスプロイトでは、userCredentialTypeチャレンジをType 3に変更し、ゲストオペレーションを実行する前に認証チェックを行いません。

VixCommand userCredentialTypes
図3: VixCommand userCredentialTypes

UNC3886に関するMandiantの調査では、さらにPythonスクリプトが発見され、侵害されたESXiホストからゲストVM全体でアクションを実行することが可能になりました。攻撃者は、表2に見られるPythonスクリプトを使用して、/bin/vmxプロセスを変更し、複数のタイプのゲストオペレーションを実行しました。

表2: VMware Tools Guest Operation APIコールを利用した攻撃者Pythonスクリプトのリスト

Filename 

Description 

e.py 

StartProgramInGuest - Executes commands on a guest VM from an ESXi host 

d.py 

InitiateFileTransferFromGuest - Download files from a specified directory on a guest VM to the ESXi host 

l.py
lf.py 

ListFilesInGuest - List all files in a specified directory on a guest VM from an ESXi host 

lp.py 

ListProcessesInGuest - List all running processes on a guest VM from an ESXi host 

p.py 

Exploits CVE-2023-20867 by modifying a single byte in the /bin/vmx process to bypass authentication on the guest VM when interacting with it from the host 

pall.py 

Similar functionality to p.py with extended compatibility for ESXi versions prior to 6.0 

u.py 

InitiateFileTransferToGuest – Uploads a file to a specified directory on a guest VM from an ESXi host 

前述の通り、このエクスプロイトの成功には、ESXiホストのvpxuserやrootアカウントなどの管理アカウントへのアクセス、およびゲストVMにインストールされたvmtoolsが必要です。UNC3886の調査中に発見されたp.pyスクリプトにより、攻撃者はCVE-2023-20867を悪用して、侵害されたESXiホストからゲストVM上の認証をバイパスすることができます。一方、攻撃者がこの脆弱性を利用してアクセスしようとしたゲストVMのうち、vmtoolsがインストールされていないものは、ログイン試行に失敗することになります。しかし、攻撃者がESXiホストへの特権的なアクセス権を獲得すると、攻撃者はどのゲストVMにもvmtoolsをインストールすることができるようになります。 

現在、CVE-2023-20867の悪用に成功した場合、デフォルトではロギングイベントは生成されません。WindowsゲストVM上でGuest Operationsの実行に成功した場合、ゲストVM上の認証チェックの要件をバイパスするため、Windows内で4624または4634のWindowsイベントIDが生成されることはありません。Linuxでは、このエクスプロイトを使用したGuest Operationsの実行に成功しても、Linuxのアクセスログにアクションが記録されることはありません。

ロギングを有効にし、エクスプロイトの失敗と成功の両方を検出する方法に関する詳しいガイダンスは、このブログポストのフォローアップに記載されています。

VMCI ソケットの悪用 

VMCI ソケットとは? 

過去1年間、MandiantはUNC3886がVMCIソケットを使用して複数のバックドア(VIRTUALGATEとVIRTUALPITA)を展開し、水平方向の移動と持続的なアクセスを実現していることを確認しています。このトピックは、前回のブログ記事でVIRTUALGATEを定義する際に簡単に取り上げましたが、Mandiantは、VMCIソケットとは何か、攻撃者に与える独自の機能、およびそれを検知する可能性のあるケースについてさらに追加調査を行いました。 

VMCIソケットは、ESXiホストとゲストVMの間で、ESXiホストを実行しているベアメタルマシンにローカライズされたチャネルを介して、低レイテンシかつ高スループットの通信を可能にするエンドポイントであり、その高いレベルでは、VMCIソケットは、ESXiホストとそのゲストVMの間の通信を可能にします。このトラフィックはベアメタルマシンにローカライズされているため、図4に見られるように、ゲストVMまたはESXiホストが他方との接続を開始することを制限するセキュリティメカニズムは存在しません。さらに、仮想化環境に存在するゲストVMとESXiホストの外側のトラフィックを監視することはできません。クライアント/サーバ通信ソケットは、TCPやUDPによく似たコネクションオリエンテッドとコネクションレスのバリエーションを持ちますが、異なるソケットアドレスファミリーに属するため、カスタム設定なしではtcpdump、netstat、nmap、Wiresharkなどの一般的なネットワークツールでは見えません。

Overview of attacker’s use of ESXi Hypervisor VMCI Communications
図4:攻撃者によるESXiハイパーバイザーVMCI通信の利用

VMCIのルーティングと通信に入る前に、ネットワークツールのデフォルト設定でVMCIのアクティビティが検知されない理由を理解するために、ソケットとは何か、さらにアドレスファミリーにどのように分類されるかについて、背景を説明する必要があります

ソケットアドレスファミリーの定義

ソケットは、1つのマシン内の複数のプロセス間、またはネットワーク内の複数のマシン間でデータを送受信するためのエンドポイントとして機能する双方向通信チャネルです。

ソケットは情報を送受信するだけなので、受け取った情報を正しく解釈できるように標準化する必要がありました。ソケットアドレスファミリーは、データソケット上で不可知論的な通信を行うために、標準化されたデータ構造フォーマットとして作成されました。一般的なアドレスファミリーは、AF_INETとAF_UNIXですが、VMCIソケットは独自のアドレスファミリーに属します。重要なことは、プログラムは、ソケットに渡される情報を解釈し、認識するコードを持たなければならないということです。情報が期待されるアドレスファミリーの基準に適合しない場合、それはおそらくドロップ/無視されます。

VMCI ルーティング可能な識別子

プライベートIPアドレスがローカルネットワーク上のエンドポイントを一意に識別するために使用されるのと同様に、VMCIソケットはコンテキストID(CID)と呼ばれるエンドポイント識別子を利用して、仮想化環境全体でトラフィックをルートします。ESXi ホストは、常に 2 つの静的 CID を持ちます:  

  • 0 - VMCIソケットがESXiホストにのみ見えるCID  
  • 2 - VMCI ソケットが開いているときにゲストマシンとの間でルーティング可能なCID 

各ゲスト仮想マシンの CID は、ESXi ホストの /vmfs/volume/<Volume-ID>/<Virtual-Machine-Name>.vmx にある仮想マシンの .vmx ファイル内で確認できます。.vmxファイル内の以下の行を使用して、VMのCIDを取得することができます:

vmci0.id = "<CID>" 

攻撃者はこれをどのように活用できるのか?

Mandiant は、UNC3886 が ESXi ホスト上で悪意のある VIB として展開された複数の VMCI バックドアを使用していることを確認しました。ゲストとホスト間のこのオープンな通信チャネルにより、クライアントまたはサーバーとして機能できるため、バックドアがデプロイされ、攻撃者が任意のゲストマシンへの初期アクセスを取得してさえいれば、バックドアのある ESXi ホストへのアクセスを取り戻して維持するための新たな手段を得ることができます。。これは、次のようなさまざまな理由から攻撃者にとって魅力的です。

  • ESXiホストにアクセスするために通常必要なネットワークセグメンテーションをバイパスすることができる 
  • オープンリスニングポートや変則的なNetFlowの動作に関するほとんどのセキュリティレビューを回避することができる
  • ESXiホストへのアクセスを回復する際のみ、いずれかの仮想マシンへのアクセスが必要
  • CVE-2023-20867と合わせて、攻撃者がESXiホストへのアクセスを回復すると、そのESXiホストの下で動作するすべての仮想マシンで、最高権限のアカウントで認証されないアクションを実行できる
  • ESXiホストの下に仮想マシンとしてvCenterが存在する場合、攻撃者はvCenterに接続されているすべてのESXiホストのvpxuser認証情報を取得し、環境全体を水平方向に移動し続けることができる。

まとめ

Mandiant は UNC3886 の調査を継続しています、このブログで解説している内容は UNC3886 が ESXi、vCenter、および VMware の仮想化プラットフォームに対して深い理解と技術的知識を有していることをさらに強調するものとなっています。 UNC3886 は、従来 EDR ソリューションがサポートしていないプラットフォームを標的としており、それらの環境でゼロデイ エクスプロイトを展開し続けています。UNC3886 は、ログ サービスを無効化して改ざんし、ときには攻撃活動に関するログを選択的に削除することでその調査を困難なものにしています。この攻撃者はこれまで、その活動が公けにされてから数日以内に過去に遡って削除処理を実行しており、このことからも彼らがいかに用心深く活動しているかがわかります。組織は常に警戒を怠らず、オペレーティング システム層でネットワークを監視するだけでなく、基盤となるインフラストラクチャを稼働させているアプライアンスのパッチ適用や保守、監視を継続する必要があります。

謝 辞

このブログで説明したマルウェア ファミリの調査、技術レビュー、検知機能の作成にご協力いただいた Mortz Raabe、Joshua Kim、Matthew Maczko、Maegan Palombo、DJ Palombo、Jeremy Koppen、Charles Carmakal に心より感謝いたします。さらに、この調査への協力と支援をしていただいた VMware にも感謝いたします。