「BlackLotus」 UEFIブートキット:いま、そこにある現実の危機

最新の状態にしたUEFIシステムであっても、UEFIセキュアブートをバイパスする初のUEFIブートキットが実環境で悪用されていることが確認されました。

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

先に述べたように、このブートキットは少なくとも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つの部分から構成されています。

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

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

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

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

インストールプロセス

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

このインストーラの目的は明確であり、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\Bootgrubx64.efiBlackLotusブートキット、自己署名された悪意のあるUEFIアプリケーション。
bootload.efiマイクロソフトが署名した正規のshimバイナリ(これは一時的な名前であり、CVE-2022-21894の脆弱性が攻撃されて、bootmgfw.efiに変更されます)。
bootmgfw.efi脆弱性がある(CVE-2022-21894)正規のWindowsブートマネージャーのバイナリ。インストーラに組み込まれているか、Microsoftシンボルストアから直接ダウンロードされます。
BCDCVE-2022-21894の攻撃チェーンで使用される攻撃者独自のブート構成データ(BCD)ストア
BCDR標的ユーザーの元のBCDストアのバックアップ。
ESP:\system32hvloader.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.dllMustang Pandaの既知のKorplugローダー。
BCDMustang 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の値をゼロに設定します。

ステップ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つの重要なステップから構成されています。

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

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

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)使用)を指定すれば、この制約を回避できます。

  1. 次のステップでは、実行されたESP:\system32\bootmgr.efiがESP:\system32\bcdにある別のBCDをロードします。この別のBCDを解析した内容を、図8に示します。
  1. 図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に自己署名したコードを実行させることができます。
  2. この処理では、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を示す)に指定し、さらにシステムルートをこのデバイスのルート(\)ディレクトリに指定しているために、この処理が実行されています。
  1. これで、攻撃者が署名したmcupdate*.dllがロードされ実行され、このチェーンの最後のコンポーネントである組み込みのMokInstaller(UEFIアプリケーション)が実行されます。この詳細については、図10を参照してください。

ブートキットの常駐化

これで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に実行させることができます。

  1. 図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\フォルダから攻撃に関するすべてのファイルを削除します。
  2. 最終的にマシンを再起動し、展開したshimが、インストーラによって\EFI\Microsoft\Boot\grubx64.efiに展開された自己署名付きのブートキットを実行するようにします。grubx64.efiは、通常、x86-64システムでshimによって実行されるデフォルトのセカンドステージのブートローダーです。

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

BLACKLOTUS UEFIブートキット

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

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

  • HTTPダウンローダーの機能:
    • C&Cと通信する。
    • C&Cから受信したコマンドを実行する。
    • C&Cから受信したペイロードをダウンロードして実行する(カーネルペイロードとユーザーモードペイロードの両方に対応)。

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

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

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

ユーザーやセキュリティソフトウェアが保護フラグを解除してハンドルを閉じることができた場合でも、このカーネルドライバは常にハンドルを監視しており、ハンドルが存在しなくなると、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に示します。

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

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

復号化された後のメッセージはビーコンと同じような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モードの256ビットAESで暗号化されています。
    • 各ファイルの暗号化キーは、検体ごとに異なる場合があります。
    • 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 CNWhen They Cry CA
Subject ON/A
Subject LN/A
Subject SN/A
Subject CN/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モードの256ビットAESを使用します。

T1573.002

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

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