迫りくる新たな脅威、「BlackLotus」UEFIブートキット

この記事をシェア

Windows 11の最新のセキュアブートを回避する新たなUEFIブートキットを初検出。その分析結果を解説します。

本記事はESET Japanが提供する「ESETブログ」に掲載された「「BlackLotus」 UEFIブートキット:いま、そこにある現実の危機」を再編集したものです。

迫りくる新たな脅威、「BlackLotus」UEFIブートキット

近年では多くのUEFIの脆弱性が発見されていますが、パッチが適用されていない、あるいは、脆弱なバイナリを失効できない状況が長期間にわたっており、サイバー攻撃者は虎視眈々と攻撃の機会を狙ってきました。そして、プラットフォームの中核的なセキュリティ機能であるUEFIセキュアブートをバイパスするUEFIブートキットが今回初めて検出されました。脅威がいま現実の危機となったのです。このブログでは、このUEFIブートキットの分析結果を初めて公開します。このブートキットは、UEFIセキュアブートが有効な最新の状態のWindows 11システムでも実行可能です。ESET社は、このブートキットはその機能と特性から、少なくとも2022年10月以降、ハッキングフォーラムにおいて5,000ドルで販売されているUEFIブートキットである「BlackLotus」であると考えています。

UEFIブートキットは最も警戒すべき脅威です。OSの起動プロセスを完全に制御できることから、OSの各種のセキュリティ機構を無効化でき、OSの起動段階で攻撃者が用意したカーネルモードやユーザーモードのペイロードを展開できます。つまり、高い権限でマシンを秘密裏に操ることが可能になります。これまで、実環境で検出されたUEFIブートキットはわずかしかありません。例えば、2020年にESET社が発見したいくつかの悪意のあるEFIブートローダーの検体、ESET社が昨年発見したESPecterブートキットなどの詳細な機能を実装するUEFIブートキット、そして、Kasperskyのリサーチャーが発見したFinSpyブートキットなどがあるだけです。

UEFIブートキットは、2018年にESET社のチームによって実環境で発見された初のUEFIファームウェアインプラントであるLoJaxのようなファームウェアインプラントと比較すると、簡単にアクセスできるFAT32ディスクパーティションにブートキットがあることから、ファームウェアインプラントと比較するとステルス性は低くなっています。しかし、ブートローダーとして実行することで、ファームウェアインプラントと同等の機能を実行でき、ファームウェアへの書き込みを保護するBWE(BIOS Write Enable)、BLE(BIOS Lock Enable)、PRx(SPI Protected Range Registers)ビットなどのマルチレベルのSPIフラッシュ保護や、Intel Boot Guardなどのハードウェア保護を解除する必要がありません。確かに、UEFIセキュアブートはUEFIブートキットをブロックすることができますが、この基本的なセキュリティメカニズムをバイパスできる既知の脆弱性が多く存在します。本記事の執筆時点で最新のシステムを利用している場合でも、BlackLotusによって悪用されている脆弱性など、簡単に攻撃できる脆弱性が存在していることが、状況を悪化させています。

ESET社の調査は、2022年末にテレメトリ(監視データ)でBlackLotusのユーザーモードコンポーネント(HTTPダウンローダー)と考えられる脅威が数件見つかったことから始まっています。最初の調査によって、検体で特定されたコードパターンから、6つのBlackLotusインストーラーを発見できました(VirusTotalおよびESETのテレメトリの両方)。これにより、実行チェーン全体を探索することが可能になり、通常のマルウェアとは異なっていることが明らかになりました。

BlackLotusの特徴と、関連イベントをまとめたタイムラインを以下に示します。

  • UEFIセキュアブートを有効にしている、すべてのパッチが適用された最新のWindows 11システムでも実行が可能です。
  • 1年以上前の脆弱性(CVE-2022-21894)を悪用し、UEFIセキュアブートをバイパスしてブートキットを常駐させます。今回初めて、この脆弱性が実環境で悪用されたことが特定された事例となりました。
  • この脆弱性は、マイクロソフト社の2022年1月のアップデートで修正されていますが、影響を受ける有効な署名付きのバイナリがまだUEFI失効リストに追加されていないため、現在も悪用が可能になっています。
    BlackLotusは、この状況に付け入り、この脆弱性を悪用するために、正規で脆弱なバイナリのコピーをシステムに持ち込んでいます。
  • BitLocker、HVCI、Windows Defenderなど、OSに実装されているセキュリティ機能を無効にできます。
  • インストールされたこのブートキットの主な目的は、ブートキットが削除されないように保護するカーネルドライバーを展開し、C&Cと通信し、追加のユーザーモードまたはカーネルモードのペイロードをロードするHTTPダウンローダーを展開することです。
  • BlackLotusは、少なくとも2022年10月6日からアンダーグラウンドのファーラムで販売されています。このブログでは、このブートキットが本物であり、広告が詐欺ではないことを示す証拠についても提示します。
  • 興味深いことに、ESET社が分析したBlackLotusのインストーラーには、感染したホストが以下の言語を使用している場合、ブートキットのインストールを続行しないものがありました。
    • ルーマニア語(モルドバ)、ro-MD
    • ロシア語(モルドバ)、ru-MD
    • ロシア語(ロシア)、ru-RU
    • ウクライナ語(ウクライナ)、uk-UA
    • ベラルーシ語(ベラルーシ)、be-BY
    • アルメニア語(アルメニア)、hy-AM
    • カザフ語(カザフスタン)、kk-KZ

BlackLotusに関連する各イベントのタイムラインを、図1に示します。

図1. BlackLotus UEFIブートキットに関連する主なイベントのタイムライン

図1. BlackLotus UEFIブートキットに関連する主なイベントのタイムライン

先に述べたように、このブートキットは少なくとも2022年10月6日からアンダーグラウンドのファーラムで販売されています。ESETのテレメトリからは、このブートキットを標的ユーザーに展開するために使用された正確な配信チャネルはこれまで特定できていません。ESET社が一般に公開されているソースやESETのテレメトリから取得できたBlackLotusの検体数は少ないことから、多くのサイバー攻撃者はこのブートキットをまだ使い始めていない可能性があります。しかし、このブートキットは簡単に展開できることや、サイバー犯罪集団が運用しているボットネットのマルウェア拡散能力を考えると、BlackLotusが悪用している脆弱なブートローダーが失効されるまでは、活発に活動している犯罪組織にこのブートキットが渡った場合、事態が急変する恐れがあります。

本当にBLACKLOTUSなのか?

BlackLotusに関する情報をまとめた記事やブログはいくつか存在しており(The Registerの記事LinkedInへのScott Scheferman氏の投稿BleepingComputerの記事など)、これらの記事の情報はいずれもこのブートキットの開発者がアンダーグラウンドのハッキングフォーラムに提供した情報に基づいています。今のところ、これらの主張は肯定も否定もされていません。

これまでに公開されている記事や投稿の内容と、ESET社がこのブートキットの検体をリバースエンジニアリングして得た情報を比較した結果を以下に示します。

  • ハッキングフォーラムでのBlackLotusの広告では、セキュアブートをバイパスする機能が実装されていると主張している。バイパスを可能にする脆弱性は、現在使用されている数百のブートローダーに影響することから、脆弱なドライバーをUEFIの失効リストに追加することは不可能である。
    • この主張はESET社の解析結果と一致します。このブートキットは、CVE-2022-21894を攻撃して、UEFIセキュアブートが有効なシステムでこのセキュリティ機能を解除し、常駐します。この記事の執筆時点では、使用されている脆弱なドライバーは最新のdbxで失効していません。
  • ハッキングフォーラムでのBlackLotusの広告では、リングプロテクションのリング0/カーネルによる削除防止機能が実装されていると主張している。
    • この主張はESET社の解析結果と一致します。このカーネルドライバーは、EFIシステムパーティション(ESP)上のファイルに関連するハンドルが終了しないように保護します。削除されないように保護するための追加の仕組みとして、これらのハンドルを常に監視しており、いずれかのハンドルが終了される場合に、「ESPにあるブートキットファイルが削除されないように保護する仕組み」のセクションで説明しているように、BSOD(ブルースクリーン)がトリガーされます。
  • ハッキングフォーラムでのBlackLotusの広告では、マルウェア解析をブロックするために、仮想マシン検出機能、デバッグ対策機能、コード難読化機能が実装されていると主張している。
    • この主張はESET社の解析結果と一致します。このブートキットには、さまざまな仮想マシン検出機能、デバッグ対策機能、難読化手法が取り入れられており、複製や解析が困難になっています。しかし、簡単に解析でき、画期的な手法や高度な解析対策が実装されているわけではありません。
  • ハッキングフォーラムでのBlackLotusの広告では、このブートキットの目的がHTTPダウンローダーとして機能することであると主張している。
    • この主張はESET社の解析結果と一致します。このブートキットの最後のコンポーネントは、「HTTPダウンローダー」のセクションで説明しているように、HTTPダウンローダーとして機能します。
  • ハッキングフォーラムでのBlackLotusの広告では、このHTTPダウンローダーは正規のプロセスとしてSYSTEMアカウントで実行されると主張している。
    • この主張はESET社の解析結果と一致します。このHTTPダウンローダーは、winlogon.exeプロセスのコンテキストで実行されます。
  • ハッキングフォーラムでのBlackLotusの広告では、ディスク上のサイズがわずか80KBという軽量なブートキットであると主張している。
    • この主張はESET社の解析結果と一致します。ESET社が実際に取得した検体のサイズは80KB程度でした。
  • ハッキングフォーラムでのBlackLotusの広告では、HVCI、Bitlocker、Windows DefenderなどのWindows内蔵のセキュリティ保護を無効化し、ユーザーアカウント制御(UAC)をバイパスできると主張している。
    • この主張はESET社の解析結果と一致します。このブートキットは、HVCI、Windows Defender、BitLockerを無効化でき、UACをバイパスできます。

これらの解析結果から、今回実環境で検出されたブートキットは、本物のBlackLotus UEFIブートキットであるとESET社は確信しています。

攻撃の概要

BlackLotusによるセキュリティ侵害のチェーンを簡略化した図を図2に示します。攻撃は、以下の3つの部分から構成されています。

  • インストーラーの実行(図2のステップ1)から攻撃が始まります。このステップでは、ブートキットのファイルをEFIシステムパーティションに展開し、HVCIとBitLockerを無効にして、マシンを再起動します。
  • 最初に再起動した後に、CVE-2022-21894の脆弱性が攻撃され、攻撃者のマシン所有者キー(MOK)が登録され、UEFIセキュアブートが有効なシステムでも常駐化されます。その後、再度、マシンを再起動します(図2のステップ2-4)。
  • この後は、起動するたびに、自己署名されたUEFIブートキットが実行され、カーネルドライバーとユーザーモードのペイロードであるHTTPダウンローダーの両方が展開されます。これらのコンポーネントを組み合わせることで、C&Cサーバーから追加のユーザーモードおよびドライバーコンポーネントをダウンロードして実行し、ブートキットが削除されないように保護します(図2のステップ 5-9)。
図2. BlackLotusの実行の概要

図2. BlackLotusの実行の概要

注意すべきアーティファクト

ESET社は、これがBlackLotus UEFIブートキットだと考えていますが、分析した検体ではBlackLotusを示す直接的な情報は見つかっていません。しかし、higurashi_installer_uac_module.dllやhigurashi_kernel.sysといった各コンポーネントの名前や、ブートキットバイナリに署名する自己署名証明書(図3を参照)には、アニメシリーズ『ひぐらしのなく頃に』からの引用がコードに多く含まれています。

図3. BlackLotusブートキットが使用する自己署名証明書

図3. BlackLotusブートキットが使用する自己署名証明書

また、このコードには、BlackLotusの作者からのメッセージ(図4を参照。hasherezadeは、有名な研究者であり、さまざまなマルウェア解析ツールの作者)や、さまざまな楽曲、ゲーム、シリーズからのランダムな引用を含むさまざまな文字列が含まれています。

図4. BlackLotusの作者がコードに残したメッセージの例

図4. BlackLotusの作者がコードに残したメッセージの例

インストールプロセス

まず、BlackLotusのインストーラーを解析した結果を説明します。このブートキットは、オフラインとオンラインの2つのバージョンのインストーラーから配布されている可能性があります。両者の違いは、セキュアブートをバイパスするために後で使用される正規で脆弱なWindowsバイナリを入手する方法にあります。

  • オフラインバージョンでは、Windowsバイナリがインストーラーに埋め込まれています。
  • オンラインバージョンでは、Windowsバイナリがマイクロソフト社のシンボルストアから直接ダウンロードされます。以下のWindowsバイナリがBlackLotusブートキットによって悪用されていることが確認されています。
    • https://msdl.microsoft.com/download/symbols/bootmgfw.efi/7144BCD31C0000/bootmgfw.efi
    • https://msdl.microsoft.com/download/symbols/bootmgr.efi/98B063A61BC000/bootmgr.efi
    • https://msdl.microsoft.com/download/symbols/hvloader.efi/559F396411D000/hvloader.efi

このインストーラーの目的は明確であり、BitLockerディスク暗号化やHVCIなどのWindowsのセキュリティ機能を無効にし、悪意のあるブートキットなど複数のファイルをESPに展開します。次に、侵害されたマシンを再起動して、展開したファイルを使用して、UEFIセキュアブートでマシンが保護されているかどうかに関わらず、システムの起動時に自己署名のUEFIブートキットが秘密裏に実行されるようにします。

ステップ0 - 初期化と権限昇格(必要な場合)

インストーラーが実行されると、残りのファイルをESPに展開し、HVCIやBitLockerの無効化など、高度な権限が求められるアクションを実行できる(少なくとも管理者権限が必要)があるかどうかをチェックします。権限がない場合は、ユーザーアカウント制御(UAC)をバイパスして、再度インストーラーを実行して権限を昇格します。詳細は、「プログラム互換性アシスタントによるUACのバイパス」を参照してください。

必要な権限があれば、Windows API関数を使用してUEFI変数のSecureBootの値を読み取り、UEFIセキュアブートの状態をチェックし、メモリーのKUSER_SHARED_DATA構造のフィールドNtMajorVersionとNtMinorVersionに直接アクセスしてWindowsのバージョンを判断します。Windowsのバージョンを確認するのは、標的のシステムにブートキットを展開するために、UEFIセキュアブートをバイパスする必要があるかどうかを判断するためです(セキュアブートのサポートはWindows 8で初めて追加されており、標的のマシンで有効になっていない場合もあります)。

次のステップに進む前に、ESP:EFIMicrosoftBootディレクトリにある正規のWindowsブートマネージャー(bootmgfw.efi)バイナリの名前をwinload.efiに変更します。名前が変更されたこのbootmgfw.efiバックアップは、後でブートキットによってOSを起動するために使用され、C&Cサーバーからアンインストールのためのコマンドを受け取った場合に元のブートチェーンを回復するために使用されます。詳細は、「C&Cとの通信」のセクションを参照してください。

ステップ1 - ファイルの展開

UEFIセキュアブートが有効な場合、インストーラーは複数のファイルをESP:/EFI/Microsoft/Boot/およびESP:/system32/ディレクトリに展開して処理を続行します。前者はWindowsが使用する標準的なディレクトリであり、後者はインストーラーが作成する独自のフォルダーです。

インストーラーがドロップするファイルのリストと、実行チェーンにおける各ファイルの役割に関する簡単な説明を、表 1に記載します。実行チェーンの仕組みについては後ほど詳しく説明します。ここでは、悪意のあるファイルとともに、Microsoftによって署名された正規のいくつかのファイルが展開されていることに注目してください。

フォルダー ファイル名 説明
ESP:\EFI\Microsoft\Boot grubx64.efi BlackLotusブートキット、自己署名された悪意のあるUEFIアプリケーション。
bootload.efi マイクロソフト社が署名した正規のshimバイナリ(これは一時的な名前であり、CVE-2022-21894の脆弱性が攻撃されて、bootmgfw.efiに変更されます)。
bootmgfw.efi 脆弱性がある(CVE-2022-21894)正規のWindowsブートマネージャーのバイナリ。インストーラーに組み込まれているか、Microsoftシンボルストアから直接ダウンロードされます。
BCD CVE-2022-21894の攻撃チェーンで使用される攻撃者独自のブート構成データ(BCD)ストア
BCDR 標的ユーザーの元のBCDストアのバックアップ。
ESP:\system32 hvloader.efi 脆弱性がある(CVE-2022-21894)正規のWindowsハイパバイザーロードのバイナリ。インストーラーに組み込まれているか、Microsoftシンボルストアから直接ダウンロードされます。
bootmgr.efi 脆弱性がある(CVE-2022-21894)正規のWindowsブートマネージャーのバイナリ。インストーラーに組み込まれているか、Microsoftシンボルストアから直接ダウンロードされます。
mcupdate_AuthenticAMD.dll 自己署名された悪意のあるネイティブPEバイナリ。このファイルは、AMD CPUを使用するシステムでCVE-2022-21894を攻撃した後で、hvloader.efiによって実行されます。
mcupdate_GenuineIntel.dll Mustang Pandaの既知のKorplugローダー。
BCD Mustang Pandaの既知のKorplugローダー。

表 1. UEFIセキュアブートが有効なシステムでBlackLotusインストーラーが展開するファイル

標的ユーザーがUEFIセキュアブートをサポートしていないWindowsバージョンを使用している場合や、セキュアブートが無効になっている場合、展開のプロセスは非常にシンプルになります。悪意のあるブートキットを展開するために必要なのは、ESP:\EFI\Microsoft\Boot\ディレクトリにある既存のWindowsブートマネージャー(bootmgfw.efi)バイナリを、攻撃者が署名した悪意のあるUEFIアプリケーションに置換することだけです。UEFIセキュアブートは無効にされており、起動時に整合性が検証されないため、UEFIファームウェアはセキュリティ違反を認識することなく悪意のあるブートマネージャーを実行します。

ステップ2 - ハイパーバイザーで保護されたコードの整合性(HVCI)の無効化

署名のない独自のカーネルコードを後で実行できるようにするために、インストーラーはシステムでHVCIが無効になっていることを確認する必要があります。ESET社のリサーチャーの一人が、2022年にこのトピックについてのブログ(署名されたカーネルドライバー - 保護されていないWindowsコアへのゲートウェイ)を書いていますので、その一部を以下に紹介します。

仮想化ベースのセキュリティ(VBS)は、いくつかの保護機能を提供しますが、最も重要な保護機能はハイパーバイザーによるコードの整合性の強制(HVCI)であり、これはスタンドアロンの機能としても提供されています。HVCIはカーネルのコードの整合性をチェックして、署名されたコードのみを実行できるようにします。この機能により、使用される攻撃手法に関わらず、脆弱なドライバーを悪用して署名のないカーネルコードを実行し、悪意のあるドライバーをロードすることを効果的に防止できます。脆弱なドライバーを悪用して悪意のあるコードをロードするマルウェアが存在していることが、マイクロソフト社がこの機能を実装した主な理由の1つだと考えられます。

図5に示すように、この機能を無効にするために、インストーラーはHypervisorEnforcedCodeIntegrityレジストリキーにあるレジストリEnabledの値をゼロに設定します。

図5. HVCIを無効化するBlackLotusインストーラーの機能をHex-Raysで分解したコード。

図5. HVCIを無効化するBlackLotusインストーラーの機能をHex-Raysで分解したコード。

ステップ3 – BitLockerの無効化

インストーラーによって無効にされる次の機能は、BitLockerドライブ暗号化です。BitLockerをTPM(トラステッドプラットフォームモジュール)と組み合わせて使用すれば、BitLockerドライブ暗号化を構成してから、セキュアブートを含む各ブートファイルや構成が改ざんされていないことを確認できるため、このインストーラーはこの機能を無効化します。このインストーラーは侵害したマシンのWindowsブートチェーンを変更するため、TPMをサポートするシステムでBitLockerが有効になっていると、次の起動時にBitLockerの回復画面が表示され、システムが侵害されていることが被害者に通知されます。

この保護を無効にするために、BlackLotusのインストーラーは以下の処理を行います。

  • WMIクラスWin32_EncryptableVolumeのGetProtectionStatusメソッドを呼び出して、WMIの名前空間Root\CIMV2\Security\MicrosoftVolumeEncryptionにあるすべてのボリュームを調べて保護の状態をチェックします。
  • BitLockerでボリュームが保護されている場合、DisableCountパラメータをゼロに設定してDisableKeyProtectorsメソッドを呼び出します。これにより、手動で有効にするまで保護が中断されます。

攻撃を実行するための障害となる保護機能を無効にし、すべてのファイルを展開したら、システムを次回に再起動するときにインストーラー自身を削除するように設定し、マシンを再起動してCVE-2022-21894を攻撃します。

セキュアブートのバイパスと常駐化

このセクションでは、UEFIセキュアブートが有効なシステムで、BlackLotusがどのように常駐するかを詳しく説明します。これから説明する実行チェーンは非常に複雑です。最初に基本的な原理を説明してから、技術的な詳細を説明します。

このプロセスは、2つの重要なステップから構成されています。

  • CVE-2022-21894を攻撃して、セキュアブート機能をバイパスし、ブートキットをインストールします。これにより、プラットフォームがまだファームウェアによって管理されており、UEFIブートサービスが利用可能な初期のブートフェーズで任意のコードを実行できるようになります。これにより、攻撃者は、UEFIセキュアブートが有効なマシンで、ブートサービス専用のNVRAM変数を変更するなど、本来マシンに物理的にアクセスできなければ実行できない多くの操作が可能になります。次に、この状況を利用して攻撃者は次のステップでブートキットを常駐させます。この攻撃の詳細については、「CVE-2022-21894の攻撃」のセクションを参照してください。
  • 攻撃者のMOKをブートサービス専用のNVRAM変数MokListに書き込み、常駐化します。この操作により、起動のたびに脆弱性を攻撃するのではなく、マイクロソフト社が署名した正規のshimを使用して自己署名されたUEFIブートキットをロードできるようになります。このUEFIブートキットは、MokListに書き込まれた鍵に関連する秘密鍵で署名されています。これについては、ブートキットの常駐化のセクションで詳しく説明しています。

詳細な分析内容を以下の2つのセクションで分かりやすく説明するため、次の実行フローの図(図6)のステップに従って説明します。

図6. セキュアブートのバイパスとMOKによる常駐化の設定

図6. セキュアブートのバイパスとMOKによる常駐化の設定

CVE-2022-21894の攻撃

セキュアブートをバイパスするために、BlackLotusはCVE-2022-21894(別名Baton Drop)を使用します。これは、セキュリティ機能であるセキュアブートをバイパスする脆弱性です。この脆弱性は、システムのセキュリティに重大な影響を与えるにもかかわらず、あまり注目されてきませんでした。この脆弱性は、マイクロソフト社の2022年1月のアップデートで修正されましたが、影響を受けるバイナリがまだUEFI失効リストに追加されていないため、悪用が可能になっています。そのため、攻撃者は、脆弱なバイナリのコピーを標的ユーザーのマシンに持ち込み、この脆弱性を攻撃し、最新のUEFIシステムであってもセキュアブートをバイパスできます。

さらに、この脆弱性のPoC(概念実証)のエクスプロイトが2022年8月から公開されています。BlackLotusがVirusTotalに初めて送信された日付(図1)を考慮すると、このマルウェアの開発者は、このエクスプロイトの仕組みを深く理解せずに、公開されていたPoCを適応した可能性があります。

最初に、GitHubのPoCと一緒に公開されている説明を中心に、この脆弱性について簡単に紹介します。

  • 影響を受けるWindowsブートアプリケーション(bootmgr.efi、hvloader.efi、winload.efiなど)では、BCDブートオプションtruncatememoryを使用して、アプリケーションによりロードされる前に、シリアライズされたセキュアブートポリシーをメモリーから削除できます。
  • これにより、攻撃者はbootdebug、testigning、nointegritychecksなどの他の危険なBCDオプションを使用できるようになり、セキュアブートを回避します。
  • この脆弱性を攻撃する方法はいくつかありますが、そのうちの3つの方法がPoCリポジトリで公開されています。
  • 例えば、正規のhvloader.efiを悪用して、任意の自己署名されたmcupdate_<platform>.dllバイナリ(マシンで使用されるCPUによって、<platform>はGenuineIntelまたはAuthenticAMDになります)をロードできるPOCが公開されています。

以下、BlackLotusがこの脆弱性を悪用する方法について説明します(以下のリストの数字は図6にあるステップ番号と対応しています)。

1. インストーラーがマシンを再起動すると、UEFIファームウェアは最初のブートオプションをロードします。
Windowsシステムの場合、最初のブートオプションはデフォルトでESPのESP:/EFI/Microsoft/Bootフォルダーにあるbootmgfw.efiに設定されています。ここでは、ファームウェアは、標的ユーザーの元のbootmgfw.efi(インストーラーによってwinload.efiに名前が変更されます)を実行せず、インストーラーによって展開された脆弱なWindowsブートマネージャーバイナリを実行します。

2. bootmgfw.efiが実行されると、インストーラーによって変更されたBCDブートオプションがロードされます。図7は、正規のBCDと変更後のBCDとの比較を示しています。

3. 図7に示しているように(緑色の下線が引かれたパス)、正規のWindowsブートマネージャーは通常、デフォルトのブートアプリケーションとしてWindows OSローダー(\WINDOWS\system32\winload.efi)をロードします。しかし、ここでは変更されたBCDを使用し、BCDのエレメントavoidlowmemoryに値0x10000000を設定し、ESP:\system32\bcdに保存されている攻撃者が準備した別のBCDを、エレメントcustom:22000023が指定するように設定し、脆弱なESP:\system32\bootmgr.efiをロードして処理を続けます。これらのエレメントの使用に関する説明は、公開されているPoCに記載されています。

攻撃者は、シリアライズされたセキュアブートポリシーが既知の物理アドレス以上に割り当てられていることを確認する必要があります。
[…]
avoidlowmemoryエレメントを使用すると、物理メモリーのすべてが指定された物理アドレス以上に割り当てられることを保証できます。

  • Windows 10以降では、VBSが有効になっていると、このエレメントは許可されませんが、シリアライズされたセキュアブートポリシーがメモリーから読み込まれる前に、ブートアプリケーションを初期化するときに時に使用されるため、bootmgrをロードし、攻撃者のBCDのパス(bcdfilepathエレメント(別名:custom:22000023)使用)を指定すれば、この制約を回避できます。
図7. 正規のBCDストア(前)とBlackLotusインストーラーが使用したBCDストア(後)の比較

図7. 正規のBCDストア(前)とBlackLotusインストーラーが使用したBCDストア(後)の比較

4. 次のステップでは、実行されたESP:\system32\bootmgr.efiがESP:\system32\bcdにある別のBCDをロードします。この別のBCDを解析した内容を、図8に示します。

図8. BlackLotusインストーラーが展開した2つ目のBCD - CVE-2022-21894を攻撃するために使用される

図8. BlackLotusインストーラーが展開した2つ目のBCD - CVE-2022-21894を攻撃するために使用される

5. 図8に示すBCDファイルから読み込まれたオプションによって、bootmgr.efiは、インストーラーによって展開された別の脆弱なWindowsブートアプリケーションであるESP:\system32\hvloader.efi(Windowsハイパーバイザーローダー)をロードして処理を続けます。さらに重要なのは、次の別のBCDオプションが同じBCDファイルで指定されることです(図8を参照)。

a. Truncatememoryを0x10000000に設定
b. NointegritychecksをYesに設定
c. TestsigningをYesに設定

ここからが重要なポイントです。シリアライズされたセキュアブートポリシーは、0x10000000以上の物理アドレスにロードする必要があるため(前のステップで使用したavoidlowmemoryのため)、truncatememoryエレメントを指定すれば効果的にポリシーを削除でき、セキュアブートが解除され、nointgritychecksやtestsigningなどのリスクのあるBCDオプションを使用できるようになります。攻撃者は、これらのオプションを使用して、hvloader.efiに自己署名したコードを実行させることができます。

6. この処理では、PoCで説明されているのと同じ手法が使用されます。正規のhvloader.efiは、実行中に<device>:\<systemroot>\system32\ディレクトリからネイティブバイナリmcupdate_{GenuineIntel| AuthenticAMD}.dllをロードして実行します。このmcupdate*.dllバイナリをロードするhvloader.efiの関数をHex-Raysで逆コンパイルしたコメント付きのコードを図9に示します。通常、hvloader.efiは、この正規のmcupdate*.dllバイナリを<os_partition>:\Windows\system32からロードしますが、今回はインストーラーがあらかじめ作成した独自のESPディレクトリ(ESP:\system32)から自己署名したmcupdate*.dllが実行されています。図8のBCDで使用されているBCDオプションのdeviceとsystemrootが、現在のデバイスをboot(ESPを示す)に指定し、さらにシステムルートをこのデバイスのルート(\)ディレクトリに指定しているために、この処理が実行されています。

図9. mcupdate_*.dllをロードする正規のhvloader.efiのBtLoadUpdateDll関数をHex-Raysで逆コンパイルしたもの。

図9. mcupdate_*.dllをロードする正規のhvloader.efiのBtLoadUpdateDll関数をHex-Raysで逆コンパイルしたもの。

7. これで、攻撃者が署名したmcupdate*.dllがロードされ実行され、このチェーンの最後のコンポーネントである組み込みのMokInstaller(UEFIアプリケーション)が実行されます。この詳細については、図10を参照してください。

図10. 自己署名された悪意のあるmcupdate*.dllバイナリをHex-Raysで逆コンパイルしたコード

図10. 自己署名された悪意のあるmcupdate*.dllバイナリをHex-Raysで逆コンパイルしたコード

ブートキットの常駐化

これでMokInstallerは、攻撃者のMOKをNVRAM変数に登録し、マイクロソフト社が署名した正規のshimバイナリをデフォルトのブートローダーとして設定することで、常駐することが可能になりました。このプロセスの詳細を説明する前に、shimとMOKについて説明します。

shimは、さまざまなLinuxディストリビューションをUEFIセキュアブートで動作させるために、Linux開発者が開発したファーストステージのUEFIブートローダーです。これは単純なアプリケーションであり、別のアプリケーションをロード、検証、実行することが目的です。Linuxシステムの場合、通常、GRUBブートローダーをロード、検証、実行します。また、マイクロソフト社はshimのみに署名し、shimがその他のアプリケーションを管理する仕組みになっており、UEFI変数dbのキーを使用することにより、セカンドステージのブートローダーの整合性を検証できます。また、プラットフォームとshimの開発者(Canonical、RedHatなど)の両方が信頼するコンポーネントの実行を許可するために、独自の「許可」または「取り消し」キーやハッシュのリストを埋め込んでいます。shimは、これらのリストに加え、MOKリストと呼ばれるユーザーが管理する外部の鍵データベースを利用することもできます。図11は、MOKによるUEFIセキュアブートの仕組みを分かりやすく説明しています。

このMOKデータベースは、MokListという名前のブート専用のNVRAM変数に格納されています。上記のような脆弱性を悪用できなければ、UEFIセキュアブートが有効なシステムでこの変数を変更するにはマシンに物理的にアクセスしなければなりません(この変数は、起動時にOSローダーがUEFIブートサービス関数ExitBootServicesを呼び出す前にのみ利用できます)。しかし、この脆弱性を利用することで、攻撃者はUEFIセキュアブートをバイパスし、ExitBootServicesを呼び出す前に自己署名したコードを実行できるため(NVRAM変数MokListを修正することで)、簡単に自分の鍵を登録し、セキュリティ違反を発生させることなく、登録したその鍵で署名した任意のアプリケーションをshimに実行させることができます。

図11. MOKブートプロセスの概要(画像の出典)

図11. MOKブートプロセスの概要(画像の出典)

8. 図6 - ステップ8のフローの説明を続けます。MokInstaller UEFIアプリケーションは、BlackLotus UEFIブートキットを常駐化し、以下の操作を行い、攻撃の痕跡を隠ぺいします。

a. インストーラーが作成したバックアップから元のBCDストアを復元し、bootmgfw.efiを、インストーラーによってESP:\system32\bootload.efiに前に展開されたマイクロソフト社が署名した正規のshimに置き換えます。
b. NVRAM変数のMokListを作成します。これには、攻撃者が自己署名した公開鍵証明書が含まれます。この変数は他のUEFI署名データベース変数(dbやdbxなど)と同じ方法でフォーマットされ、UEFIの仕様で定義されているEFI_SIGNATURE_LISTタイプの署名リストから構成されていることに注意してください。
c. 攻撃者のESP:\system32\フォルダーから攻撃に関するすべてのファイルを削除します。

9. 最終的にマシンを再起動し、展開したshimが、インストーラーによって\EFI\Microsoft\Boot\grubx64.efiに展開された自己署名付きのブートキットを実行するようにします。grubx64.efiは、通常、x86-64システムでshimによって実行されるデフォルトのセカンドステージのブートローダーです。

最後の2つのステップで説明した操作を実行するコードを図12に示します。

図12. Hex-Raysで逆コンパイルしたコード - BlackLotusブートキットを常駐化するためのMokInstaller UEFIアプリ

図12. Hex-Raysで逆コンパイルしたコード - BlackLotusブートキットを常駐化するためのMokInstaller UEFIアプリ

BLACKLOTUS UEFIブートキット

常駐化の設定が完了すると、システムを起動するときにBlackLotusブートキットが毎回実行されます。このブートキットの目的は、カーネルドライバーと最終的なユーザーモードのコンポーネントであるHTTPダウンローダーを展開することです。ブートキットを実行するときには、Windowsの別のセキュリティ機能である仮想化ベースのセキュリティ(VBS)とWindows Defenderを無効化し、このブートキットを展開し秘密裏に動作させる可能性を高めようとします。このプロセスの詳細を説明する前に、カーネルドライバーとHTTPダウンローダーについての基本情報について説明します。

  • カーネルドライバーの機能:
    • 攻撃チェーンの次のコンポーネントであるHTTPダウンローダーを展開する。
    • マシンが終了してもローダーを存続させる。
    • ブートキットのファイルがESPから削除されないように保護する。
    • HTTPダウンローダーから指示された場合、追加のカーネルペイロードを実行する。
    • HTTPダウンローダーから指示された場合、ブートキットをアンインストールする。
  • HTTPダウンローダーの機能:
    • C&Cと通信する。
    • C&Cから受信したコマンドを実行する。
    • C&Cから受信したペイロードをダウンロードして実行する(カーネルペイロードとユーザーモードペイロードの両方に対応)。

インストーラーからHTTPダウンローダーまでの実行フローを簡略化した図を、図13に示します。これらの各ステップについては、次のセクションで詳しく説明します。

図13. BlackLotus UEFIブートキットの実行を示す図

図13. BlackLotus UEFIブートキットの実行を示す図

BlackLotusの実行フロー

実行フローを以下に説明します(これらのステップは図13を参照してください)。

1. 最初のステップとして、UEFIファームウェアはデフォルトのWindowsブートオプションを実行します。これは、通常、\EFI\Microsoft\Boot\bootmgfw.efiに格納されているファイルです。先に説明したように(「ブートキットの常駐化」セクションの、8.aを参照)、MokInstallerバイナリはこのファイルを署名されている正規のshimに置き換えています。

2. shimが実行されると、NVRAM変数MokListを読み出し、攻撃者が前に保存した証明書を使用して、\EFI\Microsoft\Boot\grubx64.efiにある攻撃者が署名したセカンドステージブートローダー(BlackLotus UEFIブートキット)を検証します。

3. 検証が完了すると、shimはブートキットを実行します。

4. ブートキットは、ブート専用のNVRAM変数であるVbsPolicyDisableを最初に作成します。こちらで説明しているように、この変数は起動時にWindows OSローダーによって評価されます。この変数が定義されていると、HVCIやCredential GuardなどのVBSのコア機能が初期化されません。

5. 次のステップ(5. a-e)では、このブートキットはUEFIブートキットに共通するパターンを使用して処理を続けます。Windows Boot Manager、Windows OSローダー、Windows OSカーネルなど、Windowsを起動するときの一般的なフローで実行されるコンポーネントを妨害し、一部の関数をメモリーにフックします。また、Windows Defenderのいくつかのドライバーにパッチを適用して、Windows Defenderを無効化しようとします。これらはすべて、OSの起動プロセスの初期段階でペイロードを実行し、検出を回避するために行われています。フックされる関数とパッチが適用されるドライバーは以下の通りです。

  • bootmgfw.efiまたはbootmgr.efiのImgArchStartBootApplication:
    この関数は、ブートキットで一般にフックされ、Windows OSローダー(winload.efi)がメモリーにロードされたものの、実行されていないタイミング、つまりメモリー内でさらにパッチを適用する適切なタイミングを特定するために使用されます。
  • winload.efiのBlImgAllocateImageBuffer:
    悪意のあるカーネルドライバーのための追加のメモリーバッファを割り当てるために使用されます。
  • winload.efiのOslArchTransferToKernel:
    OSカーネルやシステムドライバーの一部がすでにメモリーにロードされているが、まだ実行されていないタイミング、つまりメモリー内でさらにパッチを適用する最適なタイミングを特定するためフックされます。このフックで、以下のドライバーにパッチが適用されます。メモリーで適切なドライバーを見つけるためのこのフックのコードを、図14に示します。
  • WdBoot.sysとWdFilter.sys:
    BlackLotusは、すぐに復帰できるように、Windows DefenderのELAMドライバーであるWdBoot.sysとWindows DefenderのファイルシステムフィルタドライバーであるWdFilter.sysのエントリポイントにパッチを適用します。
  • disk.sys:
    このブートキットは、disk.sysドライバーのエントリポイントをフックして、システム初期化の早期の段階でBlackLotusのカーネルドライバーを実行します。
図14. OslArchTransferToKernelフックをHex-Raysで逆コンパイルしたコード(このコードは、Windows Defenderドライバーにパッチを適用し、disk.sysのエントリポイントを検索します)

図14. OslArchTransferToKernelフックをHex-Raysで逆コンパイルしたコード(このコードは、Windows Defenderドライバーにパッチを適用し、disk.sysのエントリポイントを検索します)

6. 次に、OSカーネルがdisk.sysドライバーのエントリポイントを実行すると、インストールされたフックにより悪意のあるカーネルドライバーのエントリポイントに移動します。悪意のあるコードは、システムが正常に機能するように元のdisk.sysを復元し、winlogon.exeのプロセスが開始するまで待機します。

7. 悪意のあるドライバーは、winlogon.exeのプロセスが開始されたことを検知すると、最後のユーザーモードコンポーネントであるHTTPダウンローダーを挿入して実行します。

カーネルドライバー

このカーネルドライバーは、次の4つのタスクを主に実行します。

  • winlogon.exeにHTTPダウンローダーを挿入し、スレッドが終了した場合は再度挿入する。
  • ESPに展開されたブートキットファイルが削除されないように保護する。
  • ユーザーモードのWindows DefenderプロセスMsMpEngine.exeを解除する。
  • HTTPダウンローダーと通信し、必要な場合にはコマンドを実行する。

これらの各タスクについて説明します。

HTTPダウンローダーの常駐化

カーネルドライバーは、HTTPダウンローダーを展開します。ドライバーが起動すると、winlogon.exeのプロセスが起動するまで待機してから、他の操作を開始します。このプロセスが開始されると、ドライバーはHTTPダウンローダーのバイナリを復号し、winlogon.exeのアドレス空間に挿入して、新しいスレッドで実行します。その後、ドライバーはこのスレッドが実行されているかどうかを定期的にチェックし、必要に応じて挿入を繰り返します。ドライバーによってカーネルデバッガーが検出されると、HTTPダウンローダーは展開されません。

ESPにあるブートキットファイルが削除されないように保護する仕組み

ESPにあるブートキットファイルを保護するために、このカーネルドライバーは簡単な仕組みを取り入れています。保護するファイルをすべて開き、ハンドルを複製して保存し、カーネル関数ObSetHandleAttributesを使用して、HandleFlags(OBJECT_HANDLE_FLAG_INFORMATION)パラメータにあるProtectFromCloseフラグを1に指定して、他のプロセスによってハンドルが閉じられないように保護します。これにより、保護する対象のファイルの削除や変更を防止できます。以下のファイルが保護されます。

  • ESP:\EFI\Microsoft\Boot\winload.efi
  • ESP:\EFI\Microsoft\Boot\bootmgfw.efi
  • ESP:\EFI\Microsoft\Boot\grubx64.efi

保護の対象となっているこれらのファイルをユーザーが削除しようとすると、 図15に示すようなメッセージが返されます。

図15. BlackLotusドライバーで保護されているファイルを削除したときに返されるメッセージ

図15. BlackLotusドライバーで保護されているファイルを削除したときに返されるメッセージ

ユーザーやセキュリティソフトウェアが保護フラグを解除してハンドルを閉じることができた場合でも、このカーネルドライバーは常にハンドルを監視しており、ハンドルが存在しなくなると、KeBugCheck(INVALID_KERNEL_HANDLE)関数を呼び出してBSOD(ブルースクリーン)を発生させる保護機能も備えています。

Windows Defenderのメインプロセスの解除

カーネルドライバーは、Windows DefenderのメインプロセスであるMsMpEng.exeを解除する場合もあります。各プロセスにSE_PRIVILEGE_REMOVED属性を設定してすべてのプロセスのトークン権限を削除することで、メインプロセスを解除します。これにより、Defenderのプロセスは、ファイルのスキャンなどを適切に実行できなくなります。ただし、この機能の実装方法には問題があり、MsMpEng.exeのプロセスを再起動すれば、Defenderの本来の機能が再度実行されます。

HTTPダウンローダーとの通信

カーネルドライバーは、名前付きのイベントとセクションを使用してHTTPダウンローダーと通信できます。使用される名前付きオブジェクトは、標的ユーザーのネットワークアダプターのMACアドレス(イーサネット)を基準に生成されます。オクテットの値が16より小さい場合は、16が名前に追加されます。生成されるオブジェクト名の形式は、検体によって異なる場合があります。解析した検体の1つは、MACアドレスが00-1c-0b-cd-ef-34となっており、次の名前が生成されています。

  • \BaseNamedObjects\101c1b:名前付きセクション(MACの最初の3オクテットのみが使用されます)
  • \BaseNamedObjects\Z01c1b:名前付きイベント - セクションと同じですが、MACアドレスの最初の1桁がZで置換されています。

HTTPダウンローダーがカーネルドライバーにいくつかのコマンドを渡す必要がある場合、名前付きのセクションを作成し、そこにコマンドと関連データを書き込み、名前付きのイベントを作成してドライバーがトリガーするまで(シグナルを送信する)待機し、ドライバーがコマンドを処理するのを待機できます。

このドライバーは、以下のコマンドをサポートしています。

  • カーネルドライバーのインストール
  • BlackLotusのアンインストール

賢明な読者の方であれば、ここでBlackLotusの弱点に気づくかもしれません。ブートキットがコンポーネントを削除できないように保護していても、上記の名前のオブジェクトを作成してアンインストールコマンドを送信してブートキットを完全にアンインストールするように、カーネルドライバーを騙すことができます。

HTTPダウンローダー

最後のコンポーネントは、C&Cサーバーと通信し、受信したC&Cコマンドを実行します。ESETが検出したすべてのペイロードは3つのコマンドを含んでいます。これらのコマンドは非常にわかりやすく、さまざまな手法で主に別のペイロードをダウンロードし実行します。

C&Cとの通信

C&Cサーバーと通信するために、このHTTPローダーはHTTPSプロトコルを使用します。C&Cドメインや使用するHTTPリソースのパスなどの通信に必要な情報は、ダウンローダーのバイナリに直接埋め込まれています。C&Cサーバーとの通信間隔は、デフォルトで1分に設定されていますが、C&Cから受信するデータによって変更される場合もあります。C&Cとの通信セッションは、HTTP POSTのビーコンメッセージをC&Cに送信することから始まります。今回解析した検体では、HTTP POSTヘッダーに以下のHTTPリソースのパスが指定できるようになっています。

  • /network/API/hpb_gate[.]php
  • /API/hpb_gate[.]php
  • /gate[.]php
  • /hpb_gate[.]php

ビーコンメッセージデータの先頭にはcheckin=という文字列が付けられており、独自のマシン識別子(HWIDと呼ばれます)、UEFIセキュアブートの状態、さまざまなハードウェア情報、BlackLotusのビルド番号と思われる値など、侵害されたマシンに関する基本情報が含まれています。HWIDは、マシンのMACアドレス(イーサネット)とシステムボリュームのシリアル番号から生成されます。暗号化されるメッセージの形式を、図16に示します。

図16. ビーコンメッセージの形式

図16. ビーコンメッセージの形式

C&Cにメッセージを送信する前に、最初に埋め込まれたRSAキーでデータが暗号化された後で、URLセーフのbase64でエンコードされます。検体を解析した結果、2種類のRSAキーが使用されていることがわかりました。これらのHTTPビーコンリクエストの例を、図17に示します。

図17. HTTP POSTビーコンメッセージの例(VirusTotalの検体から生成されたメッセージ ‐ 実際のC&Cサーバーアドレスの代わりにローカルIPを使用)

図17. HTTP POSTビーコンメッセージの例(VirusTotalの検体から生成されたメッセージ ‐ 実際のC&Cサーバーアドレスの代わりにローカルIPを使用)

ビーコンメッセージの応答としてC&Cから受信したデータは、2バイトのマジック値HPで始まっている必要があります。これ以外の値で始まっている場合は、それ以上処理されません。マジック値が正しい場合、マジック値に続くデータが、上記のHWIDの文字列をキーとして、CBCモードの256bitAESで復号されます。

復号された後のメッセージはビーコンと同じようなJSON形式の文字列になっており、コマンド識別子(Typeと呼ばれます)と、以下のようなさまざまなパラメータが追加で指定されます。

  • C&Cとの通信間隔
  • 使用する実行方法
  • ペイロードのファイル名
  • ファイル拡張子に基づくペイロードタイプ(.sys、.exe、.dllに対応します)
  • ペイロードデータのダウンロードを要求するために使用される認証トークン
  • ペイロードデータの復号に使用するAESキー

サポートされているすべてのコマンドとその説明を、表 2に示します。

コマンドタイプ コマンドの説明
1 カーネルドライバー、DLL、または通常の実行ファイルをダウンロードして実行します。
2 ペイロードをダウンロードし、ブートキットをアンインストールし、ペイロードを実行します。ブートキットの更新に使用されると考えられます。
3 ブートキットをアンインストールして終了します。

表2. C&Cコマンド

C&Cは、これらのコマンドでペイロードを実行する前にまずディスクに展開するか、メモリー内で直接実行するか指定できます。ディスクに展開する場合は、OSボリュームにあるProgramDataフォルダーを保存先フォルダーとして使用し、ファイル名と拡張子はC&Cサーバーによって指定されます。メモリー内でファイルを直接実行する場合、svchost.exeが挿入先として使用されます。C&Cがカーネルドライバーを使用しなければならないコマンドを送信した場合や、カーネルモードでコードを実行する場合には、「HTTPダウンローダーとの通信」のセクションで説明されている方法が使用されます。

解析対策の仕組み

このマルウェアの作成者は、検出と解析を困難にするため、テキスト文字列、インポートするデータ、他の暗号化されない埋め込みデータなど、標準的なファイルアーティファクトができる限り残らないようにしています。解析を困難にするために使用される手法を以下に示します。

  • 文字列やデータの暗号化
    • 検体で使用されていたすべての文字列は、簡易な暗号で暗号化されています。
    • すべての埋め込みファイルは、CBCモードの256bitAESで暗号化されています。
    • 各ファイルの暗号化キーは、検体ごとに異なる場合があります。
    • AES暗号に加えて、一部のファイルはLZMSで圧縮されています。
  • 実行時のみのAPI解決
    • すべての検体で、Windows APIは常に実行時に排他的に解決されており、関数名の代わりに関数のハッシュを使用して、メモリー内の目的のAPI関数のアドレスを検索します。
    • 必要なシステム関数を呼び出すために、syscall命令を直接呼び出す場合もあります。
  • ネットワーク通信
    • HTTPSを使用して通信します。
    • HTTPダウンローダーがC&Cに送信するメッセージはすべて、埋め込まれたRSA公開キーで暗号化されます。
    • C&CからHTTPダウンローダーへ送信されるメッセージは、標的ユーザーのマシン環境から導出されるキー、またはC&Cが提供するAESキーで暗号化されます。
  • デバッグ対策機能や仮想マシン検出機能が使用される場合、通常はエントリポイントの最初に配置されます。簡単なサンドボックスやデバッガー検出手法のみが使用されます。

対策と修正

  • まず、システムとセキュリティ製品を常に最新の状態で維持することが大前提です。これにより、この脅威がOSで常駐化する前の早期の段階で阻止できる可能性が高くなります。
  • そして、UEFIセキュアブートを回避する脆弱なUEFIバイナリが使用されないようにするために必要となる重要なステップは、UEFI失効データベース(dbx)で該当するバイナリを失効することです(Windowsシステム)。dbxの更新は、Windowsアップデートによって配信する必要があります。
  • 広く使われているWindows UEFIバイナリを失効させると、何千もの旧式のシステム、リカバリーイメージ、またはバックアップを起動できなくなることから、失効に時間がかかりすぎるという問題が発生します。
  • なお、BlackLotusが使用するWindowsアプリケーションを失効させると、ブートキットをインストールできなくなりますが、インストーラーによって標的ユーザーのブートローダーが失効したものに置換されるため、システムが起動できなくなる恐れがあります。この場合には、OSを再インストールするか、単にESPをリカバリーすることで問題を解決できます。
  • BlackLotusが常駐した後に失効しても、ブートキットは常駐するために独自のMOKキーを登録した正規のshimを使用するため、そのまま常駐する可能性があります。この場合、最も安全な対策は、Windowsを再インストールし、mokutilユーティリティを使用して攻撃者が登録したMOKキーを削除することです。この操作を実行するには、起動中にMOKマネージャをユーザーが操作する必要があるため、マシンに物理的にアクセスしなければなりません。

重要なポイント

ここ数年、UEFIシステムのセキュリティに影響する重大な脆弱性が多く発見されています。残念ながら、UEFIのエコシステム全体は複雑であり、サプライチェーンの問題も関連していることから、これらの多くの脆弱性が修正された後でも、長きにわたって多くのシステムが危険な状態のままになっています。この1年間で、UEFIセキュアブートのバイパスを可能にする脆弱性へのパッチ適用や失効が失敗した具体的な例をいくつか紹介します。

  • 最初は、BlackLotusが悪用している脆弱性CVE-2022-21894です。この脆弱性が修正されてから1年が経過していますが、今でも、脆弱なUEFIバイナリが無効化されておらず、BlackLotusなどの脅威は、UEFIセキュアブートを有効にしたシステムでも秘密裏に動作しています。
  • 2022年初頭、ESET社は、UEFIセキュアブートを無効にするなど、セキュリティ上の脅威をもたらす複数のUEFIの脆弱性を公開しました。影響を受ける多くのデバイスは、脆弱性が公開された時点で3~5年しか経過しておらず、それほど旧式ではありませんが、OEMベンダーによってサポートされなくなっており、修正されていません。詳細は、ESET社のブログ「崩れた安全神話:Lenovoのホーム用ノートパソコンに、深刻なUEFIの脆弱性を発見」を参照してください。
  • その後、2022年にも複数のUEFIの脆弱性が発見されました。これらの脆弱性を攻撃されると、UEFIセキュアブートが簡単に無効化されます。Binarlyの上級研究者が指摘しているように、アドバイザリに記載されたいくつかのデバイスは、アドバイザリが公開されてから数ヶ月後が経過してもパッチが公開されていない、あるいは正しく適用されておらず、デバイスが脆弱なままになっています。CVE-2022-21894のケースと同様に、サポート期限を迎えているため、脆弱なまま放置されているデバイスもあります。

これらの危険な状況に付け込んで、UEFIセキュアブートを有効にしているシステムでも動作するUEFIブートキットを作成する攻撃者が出現するのは時間の問題だったと言えます。昨年、RSAのプレゼンテーションで、ESPシステムパーティションへの攻撃が現実的になっており、UEFIに対する脅威が迫っていることをESET社が発表しましたが、BlackLotusの存在がこれを裏付けることになりました。

IOC(セキュリティ侵害の痕跡)

ファイル

SHA-1 ファイル名 検出 説明

05846D5B1D37EE2D716140DE4F4F984CF1E631D1

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

A5A530A91100ED5F07A5D74698B15C646DD44E16

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

D82539BFC2CC7CB504BE74AC74DF696B13DB486A

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

16B12CEA54360AA42E1120E82C1E9BC0371CB635

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

DAE7E7C4EEC2AC0DC7963C44A5A4F47D930C5508

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

45701A83DEC1DC71A48268C9D6D205F31D9E7FFB

N/A

Win64/BlackLotus.A

BlackLotusのインストーラー

2CE056AE323B0380B0E87225EA0AE087A33CD316

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

5A0074203ABD5DEB464BA0A79E14B7541A033216

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

5DC9CBD75ABD830E83641A0265BFFDDD2F602815

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

97AEC21042DF47D39AC212761729C6BE484D064D

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

ADCEEC18FF009BED635D168E0B116E72096F18D2

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

DBC064F757C69EC43517EFF496146B43CBA949D1

N/A

EFI/BlackLotus.B

BlackLotus UEFIブートキット

06AF3016ACCDB3DFE1C23657BF1BF91C13BAA757

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

0C0E78BF97116E781DDE0E00A1CD0C29E68D623D

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

6D8CEE28DA8BCF25A4D232FEB0810452ACADA11D

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

74FF58FCE8F19083D16DF0109DC91D78C94342FA

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

ACC74217CBE3F2E727A826B34BDE482DCAE15BE6

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

111C4998F3264617A7A9D9BF662D4B1577445B20

N/A

Win64/BlackLotus.B

BlackLotus HTTPダウンローダー

17FA047C1F979B180644906FE9265F21AF5B0509

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

1F3799FED3CF43254FE30DCDFDB8DC02D82E662B

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

4B882748FAF2C6C360884C6812DD5BCBCE75EBFF

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

91F832F46E4C38ECC9335460D46F6F71352CFFED

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

994DC79255AEB662A672A1814280DE73D405617A

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

FFF4F28287677CAABC60C8AB36786C370226588D

N/A

Win64/BlackLotus.C

BlackLotusのカーネルドライバー

71559C3E2F3950D4EE016F24CA54DA17D28B9D82

N/A

EFI/BlackLotus.C

BlackLotusインストーラーが展開するBCD(ブート構成データ)ストア

D6D3F3151B188A9DA62DEB95EA1D1ABEFF257914

N/A

EFI/BlackLotus.C

BlackLotusインストーラーが展開するBCD(ブート構成データ)ストア

547FAA2D64B85BF883955B723B07635C0A09326B

N/A

EFI/BlackLotus.A

CVE-2022-21894を攻撃するBlackLotusのペイロードローダー

D1BBAA3D408E944C70B3815471EED7FA9AEE6425

N/A

EFI/BlackLotus.A

CVE-2022-21894を攻撃するBlackLotusのペイロードローダー

0E6DD7110C38464ECAA55EE4E2FA303ADA0EDEFB

N/A

EFI/BlackLotus.A

CVE-2022-21894を攻撃するBlackLotusのペイロード - MokInstaller EFIアプリ

D6BB89D8734B3E49725362DAE9A868AE681E8BD6

N/A

EFI/BlackLotus.A

CVE-2022-21894を攻撃するBlackLotusのペイロード - MokInstaller EFIアプリ

164BB587109CFB20824303AD1609A65ABB36C3E9

N/A

Win64/BlackLotus.D

BlackLotusインストーラーのUACバイパスモジュール

証明書

シリアルナンバー 570B5D22B723B4A442CC6EEEBC2580E8
サムプリント C8E6BF8B6FDA161BBFA5470BCC262B1BDC92A359
Subject CN When They Cry CA
Subject O N/A
Subject L N/A
Subject S N/A
Subject C N/A
有効期限の開始 2022-08-13 17:48:44
有効期限の終了 2032-08-13 17:58:44

ネットワーク

IP ドメイン ホスティングプロバイダー 最初に確認された日付 詳細

N/A

xrepositoryx[.]name

N/A

2022-10-17

BlackLotusのC&Cサーバー
https://xrepositoryx[.]name/network/API/hpb_gate.php

N/A

myrepositoryx[.]com

N/A

2022-10-16

BlackLotusのC&Cサーバー
https://myrepositoryx[.]com/network/API/hpb_gate.php

104.21.22[.]185

erdjknfweklsgwfmewfgref[.]com

Cloudflare, Inc.

2022-10-06

BlackLotusのC&Cサーバー。
https://erdjknfweklsgwfmewfgref[.]com/API/hpb_gate.php

164.90.172[.]211

harrysucksdick[.]com

DigitalOcean, LLC

2022-10-09

BlackLotusのC&Cサーバー
https://harrysucksdick[.]com/API/hpb_gate.php

185.145.245[.]123

heikickgn[.]com
frassirishiproc[.]com

SIA VEESP

2022-10-12

BlackLotusのC&Cサーバー
https://heikickgn[.]com/API/hpb_gate.php
https://frassirishiproc[.]com/API/hpb_gate.php

185.150.24[.]114

myrepository[.]name

SkyLink Data Center BV

2022-10-14

BlackLotusのC&Cサーバー
myrepository[.]name/network/API/hpb_gate.php

190.147.189[.]122

egscorp[.]net

Telmex Colombia S.A.

2022-08-24

BlackLotusのC&Cサーバー
https://egscorp[.]net/API/hpb_gate.php

MITRE ATT&CKの技術

この表は、MITRE ATT&CKフレームワークのバージョン12を使用して作成されています。

手法 ID 名前 説明

リソース開発

T1587.002

能力の開発コード署名証明書

一部のBlackLotusの検体は、自己署名証明書で署名されています

T1588.005

機能の取得:エクスプロイト

BlackLotusは、UEFIセキュアブートをバイパスするために、公開されているエクスプロイトを使用しています

実行

T1203

クライアントを実行するための攻撃

BlackLotusのインストーラーは、CVE-2022-21894を攻撃し、UEFIセキュアブートが有効なシステムで任意のコードを実行できます

T1559

プロセス間通信

BlackLotusのHTTPダウンローダーは、名前付きのセクションを使用してカーネルモードコンポーネントにコマンドを渡します

T1106

ネイティブAPI

BlackLotusのHTTPダウンローダーは、さまざまなWindowsネイティブAPIを使用して、侵害したマシンでコードを実行します

T1129

共有モジュール

BlackLotusのHTTPダウンローダーは、C&Cサーバーから受信したDLLをロードして実行できます

常駐化

T1542.003

OS起動前:ブートキット

BlackLotusブートキットは、EFIシステムパーティションに展開され、起動時に実行されます

権限昇格

T1548.002

権限制御機構の悪用:ユーザーアカウント制御のバイパス

BlackLotusのインストーラーは、ユーザーアカウント制御をバイパスして特権の昇格を試みます

T1134.002

アクセストークンの操作:トークンによるプロセスの作成

BlackLotusのHTTPダウンローダーは、WTSQueryUserTokenとCreateProcessAsUserWを使用して、ダウンロードしたペイロードをローカルシステムの特権で新しいプロセスで実行できます

防衛機能の回避

T1622

デバッガーの回避

BlackLotusのコンポーネントは、カーネルモードまたはユーザーモードのデバッガーが標的ユーザーのマシンで実行されているかどうかを検出するために、さまざまな手法を使用します

T1574

実行フローのハイジャック:

BlackLotusブートキットは、Windowsブートプロセスの初期段階で使用されるさまざまなコンポーネント(Windowsブートマネージャー、Windows OSローダー、Windowsカーネルおよび特定のドライバー)をハイジャックし、多くのWindowsセキュリティ機能(VBS、Windows Defender)を無効化して検出を回避し、カーネルモードおよびユーザーモードのコンポーネントを秘密裏に実行します

T1562

防御策の妨害

BlackLotusのコンポーネントは、検出を回避するためにBitLockerとWindows Defenderを無効化できます

T1070.004

攻撃の痕跡の削除:ファイルの削除

BlackLotusのインストーラーは、EFIシステムパーティションにファイルを展開した後で、自身を削除します。また、CVE-2022-21894の攻撃に成功すると、BlackLotusは攻撃チェーンで使用したすべてのファイルをEFIシステムパーティションから削除して、攻撃の痕跡を削除します

T1070.009

攻撃の痕跡の削除:常駐化の消去

BlackLotusは、ESPからすべてのブートキットファイルを削除し、被害者の元のWindowsブートマネージャーを復元して、自身をアンインストールできます

T1036.005

なりすまし:正規のモジュールの名前や場所を模倣する

BlackLotusは、grubx64.efi(侵害されたマシンでUEFIセキュアブートが有効な場合)またはbootmgfw.efi(UEFIセキュアブートが無効な場合)など、正規のファイル名を使用してESP上に展開したファイルを隠ぺいします

T1112

レジストリの変更

BlackLotusのインストーラーは、Windowsのレジストリを変更し、WindowsのHVCIセキュリティ機能を無効にします

T1027

ファイルや情報の難読化

BlackLotusコンポーネントに埋め込まれたほぼすべての文字列は、いくつかの暗号を組み合わせた独自の方法で暗号化され、必要なときに復号されます

T1027.007

ファイルや情報の難読化:動的なAPI解決

BlackLotusのコンポーネントは、名前の代わりにAPI名のハッシュを使用して、動的にAPIを解決します

T1027.009

ファイルや情報の難読化:ペイロードの埋め込み

BlackLotusコンポーネントに埋め込まれているほぼすべてのファイルは、AESを使用して暗号化されています

T1542.003

OS起動前:ブートキット

BlackLotusブートキットは、EFIシステムパーティションに展開され、OSを起動する早期の段階で実行されるため、OSの起動プロセスを制御し、検知を回避できます

T1055.012

プロセスインジェクション:ダイナミックリンクライブラリのインジェクション

BlackLotusのHTTPダウンローダーは、プロセスホローイングの手法により、新しく作成したsvchost.exeプロセスにDLLを挿入できます

T1055.002

プロセスインジェクション:PE(Portable Executable)の注入

BlackLotusのドライバーは、HTTPダウンローダーのPE(Portable Executable)をwinlogon.exeプロセスに挿入します

T1014

ルートキット

BlackLotusのカーネルドライバーは、ESPにあるブートキットファイルが削除されないように保護します

T1497.001

仮想化/サンドボックスの回避:システムチェック

BlackLotusは、サンドボックス固有のレジストリ値をチェックするなど、さまざまなシステムチェックを行い、仮想化環境や解析環境を検知して回避します

検出

T1622

デバッガーの回避

BlackLotusのコンポーネントは、カーネルモードまたはユーザーモードのデバッガーが標的ユーザーのマシンで実行されているかどうかを検出するために、さまざまな手法を使用します

T1082

システム情報の検出

BlackLotusは、侵害したホストのシステム情報(IP、GPU、CPU、メモリー、OSバージョン)を収集します

T1614

システムの場所の検出

BlackLotusは、侵害したホストで、ro-MD、ru-MD、ru-RU、uk-UA、be-BY、hy-AM、kk-KZのシステムロケールの1つが確認されると、実行を終了します

T1016

システムネットワーク構成の検出

BlackLotusのHTTPダウンローダーは、api.ipify[.]orgサービスをリクエストして、侵害したホストのパブリックIPを判断します

T1016.001

システムネットワーク構成の検出:インターネット接続の検出

BlackLotusのHTTPダウンローダーは、マイクロソフト社のwww.msftncsi[.]com/ncsi[.]txtに対してクエリを行い、インターネット接続を確認します

T1497.001

仮想化/サンドボックスの回避:システムチェック

BlackLotusは、サンドボックス固有のレジストリ値をチェックするなど、さまざまなシステムチェックを行い、仮想化環境や解析環境を検知して回避します

C&C(コマンド&コントロール)

T1071.001

アプリケーションレイヤープロトコル:Webプロトコル

BlackLotusは、C&Cとの通信にHTTPSを使用します

T1132.001

データのエンコーディング:標準エンコーディング

BlackLotusは、C&C通信で使用する暗号化したデータをURLセーフのbase64でエンコードします

T1573.001

暗号化されたチャンネル:対称暗号方式

BlackLotusは、C&Cから受信したメッセージを復号するために、CBCモードの256bitAESを使用します

T1573.002

暗号化されたチャンネル:非対称暗号方式

BlackLotusは、C&Cに送信するメッセージを暗号化するために、埋め込まれたRSA公開キーを使用します

この記事をシェア

サイバー攻撃のセキュリティ対策に

サイバーセキュリティ
情報局の最新情報を
チェック!