ライブラリーにひそむ侵入者: DLL ハイジャック探究

A pictorial representation of an adversary hijacking DLLs. A punching glove is blocked by an open hand in a stop gesture.

This post is also available in: English (英語)

概要

ダイナミック リンク ライブラリー (DLL) のハイジャックは最も古い手法の 1 つで、脅威アクターと攻撃的セキュリティ専門家の両方が今も使い続けています。DLL ハイジャックがよく使われる理由は、この手法を使うことで、検出回避に非常に有効な、ステルス性の高いマルウェア実行方法を得られるためです。DLL ハイジャックの根本は、オペレーティング システムをだまし、正規 DLL の代わりに悪意のあるバイナリーを実行させることです。

本稿は、脅威アクターがマルウェア攻撃において DLL ハイジャックをどのように利用するかを解説します。本稿は、以下の内容の提供により、読者の皆さんに役立ちます。

  • DLL ハイジャックの理解に必要な背景理論
  • 同手法をめぐる概念のわかりやすい解説
  • 野生でよく確認されているバリエーション
  • 持続的標的型攻撃 (APT) グループとサイバー犯罪者の両脅威アクターから得た実際のサンプル

本稿では、DLL ハイジャックをより適切に検出する方法に関するアイデアも提供し、攻撃リスクの緩和方法に関するベスト プラクティスも紹介します。

パロアルトネットワークスのお客様は、Advanced WildFireDNS SecurityAdvanced URL Filtering次世代ファイアウォール (NGFW) により、本稿で取り上げたマルウェアからより適切に保護されています。Cortex XDRXSIAM は既知および新規の DLL ハイジャック攻撃を検出します。Prisma Cloud Defender エージェントは DLL ハイジャック手法を使用するマルウェアの特定を支援できます。侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてお問い合わせください (ご相談は弊社製品のお客様には限定されません)。

目次

DLL ハイジャックとは
Windows DLL の検索順序
特別な検索場所
標準の検索場所
一般的な DLL ハイジャックの実装
DLL サイドローディング
DLL 検索順序のハイジャック
Phantom DLL ローディング
脅威アクターとキャンペーンの発見
国家支援型 APT 脅威アクターによる DLL ハイジャックの例
ToneShell のトリプル DLL サイドローディング
PlugX RAT による DLL サイドローディングを活用した検出回避
サイバー犯罪攻撃者による DLL ハイジャックの例
南米の組織を標的とする AsyncRAT フィッシング キャンペーンの解明
CatB ランサムウェアの Phantom DLL ローディング
Microsoft DLL の悪用から Dridex へ
DLL ハイジャックの効率的検出の原則
悪意のある DLL
脆弱なアプリケーション
ローディング イベント
DLL ハイジャックのアタック サーフェス緩和
結論
保護と緩和策
侵害指標 (IoC)

DLL ハイジャックとは

DLL ファイルは、Microsoft Windows 内で、ほかのプログラムによって実行されることが想定されているプログラムです。DLL ハイジャックにより、攻撃者は正規の Windows プログラムを騙し、悪意のある DLL をロードさせて実行させることができます。攻撃者は、防御の回避特権の昇格永続性の確保といったさまざまな目的で DLL ハイジャックを利用します。

DLL ハイジャックはここ数年進化を続け、さまざまなバリエーションが登場してきました。DLL ハイジャックを理解するには、まず Microsoft Windows の重要な機能である DLL の検索順序メカニズムを理解する必要があります。

Windows の DLL 検索順序

DLL ハイジャックは、Windows が DLL ファイルをロードするさいの DLL の検索順序に依存して行われます。検索順序というのは、プログラムが DLL をロードするさいにチェックする場所のシーケンス (並び) のことです。このシーケンスは、特別な検索場所と標準的な検索場所という 2 つの部分に分けられます。図 1 から、これら 2 つの部分で構成される検索順序を確認できます。

画像 1 は、Windows ダイナミック リンク ライブラリーの検索順序を示す図です。特別な検索場所は、DLL リダイレクト、API セット、SxS マニフェスト リダイレクト、ロードされたモジュールのリスト、既知の DLL、プロセスのパッケージ依存関係グラフです。標準の検索場所は、アプリケーション ディレクトリー、System32、System、Windows、現在のディレクトリー、PATH 変数にリストされているディレクトリーです。
図 1. Windows DLL 検索順序のフローチャート

特別な検索場所

特別な検索場所は標準の検索場所よりも先に考慮されます。この特別な検索場所には、DLL をロードするさいにどの場所を検索・使用の対象とするかをコントロールできる、さまざまな要素が含まれています。これらの場所は、アプリケーションとシステムの構成に基づいています。

  1. DLL のリダイレクトにより、その DLL ローダーがどの DLL をロードするかを指定できます。
  2. API セットにより、Windows のバージョンやさまざまな機能の可用性に基づき、関数呼び出しを適切な DLL に動的にルーティングできます。
  3. SxS マニフェストのリダイレクトは、アプリケーションのマニフェストを使用して DLL の読み込みをリダイレクトします。
  4. ロードされたモジュールのリストは、DLL がすでにメモリーにロードされているかどうかを確認します。
  5. 既知の DLL は、DLL 名とパスが Windows の既知の DLL リストと一致するかどうかをチェックします。このリストは HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs にあります。
  6. パッケージ アプリの一部として実行された場合はプロセスのパッケージ依存関係グラフを使います。

標準の検索場所

標準の検索場所は DLL ハイジャック手法と最も強く関連する場所で、通常これらは攻撃者によって使われます。Windows は次の順序で目的の DLL を検索します。

  1. アプリケーションのディレクトリー (その実行可能ファイルが含まれているディレクトリー)
  2. C:\Windows\System32
  3. C:\Windows\System
  4. C:\Windows
  5. 現在のディレクトリー (その実行可能ファイルを実行しているディレクトリー)
  6. PATH 環境変数にリストされているディレクトリ

この DLL 検索順序全体をハイジャックすることで、攻撃者は正当なアプリケーションのコンテキストで悪意のある DLL をロードし、ステルス的な実行を実現するオプションを得られます。これにあたって攻撃者は、正規 DLL に先立ち悪意のある DLL をロードするようにしむけたり、DLL を置き換えたり、順序 (とくに PATH 環境変数) を変更したりします。

DLL ハイジャックの利用は近年拡大する傾向にあり、その人気は高まり続けています。その理由は、正規実行可能ファイルの脆弱性発見や悪用がとくに難しいとはみなされていないことにあります。しかしながら、正規の実行可能ファイル内に悪意のある偽装 DLL をロードする攻撃者を検出することは、依然として難しい仕事です。

一般的な DLL ハイジャックの実装

DLL ハイジャックという概念は時間の経過とともに進化してきました。それにつれて脅威アクターらも進化しており、さまざまなアプローチで DLL ハイジャック攻撃をしかけるようになっています。私たちがこれまでに確認してきた最も一般的な手法は、DLL サイドローディング、DLL 検索順序ハイジャック、Phantom DLL ローディング の 3 つです。なかでもとりわけよく見られるのが DLL サイドローディングです。

DLL サイドローディング

この最もよく使われる DLL ハイジャック手法において、攻撃者は DLL ファイルの完全なディレクトリー パスを指定せず、ある特定の名前がつけられた DLL をロードする正規実行可能ファイルを取得します。DLL サイドローディングでは、正規の実行可能ファイルが本来ロードするはずの正規 DLL と同一のファイル名をつけられた悪意のある DLL が使用されます。攻撃者は、自らがアクセス権をもつディレクトリー内に、正規実行可能ファイルと、名前を変更された悪意のある DLL の両方をドロップします。

DLL サイドローディングにおいては、「実行可能ファイルの存在するディレクトリーは Windows が最初に検索する場所の 1 つである」という事実が利用されています。

私たちは最近の Unit 42 のブログで、この手法を使う攻撃者らの事例を調査しました。たとえば APT グループ Cloaked Ursa (別名 APT29) による事例や、私たちのスレット ハンティング シリーズなどもそうした調査の一例です。

DLL 検索順序のハイジャック

この実装は Windows の DLL 検索順序全般を本質的に悪用する例です。この手法は、攻撃者、レッドチーム、セキュリティ検証ソリューションなどによって使われています。

この手法は単に Windows DLL の検索順序を利用し、検索対象のいずれかの場所に悪意のある DLL をドロップすることによって、脆弱な正規プログラムに悪意のある DLL を実行させるというものです。攻撃者は、DLL の検索順序でより優先度の高い場所に悪意のある DLL を配置することにより、有効な DLL より先に悪意のある DLL を見つけさせることができます。これは DLL 検索順序のどの段階でも発生する可能性があります。たとえば攻撃者が悪意のある DLL をディレクトリー パスに含めておき、そのパスを追加して PATH 環境変数を変更することもそうした例のひとつです。

この手の攻撃例としては、悪意のある DLL を Python のインストール ディレクトリーにドロップし、DLL 検索順序をハイジャックすることが挙げられます。これはすでにさまざまなセキュリティ専門家が実証している実装です。

Python が Windows マシンにインストールされると、多くの場合、そのインストール ディレクトリーが PATH 環境変数 (通常は最初に検索される場所の 1 つ) に追加されます (図 2)。

画像 2 は、[Edit environment variable (環境変数の編集)] ウィンドウにリストされている Python フォルダーのスクリーンショットです。New (新規)、Edit (編集)、Browse (参照) というボタンが表示されています。
図 2. PATH 環境変数内の Python フォルダー
Windows ホストに Python をインストールすると、権限を緩めたディレクトリーが作成され、認証されたユーザー (特権をもたないユーザーを含む) は誰でもこの場所に書き込めるようになります。これにより、攻撃者から見れば、DLL 検索順序ハイジャック攻撃を実行して標的マシンに感染するための最高の条件が得られることになります。

Phantom DLL ローディング

この手法では、攻撃者が、存在しない (または欠落している) DLL をロードしようとするような実装上の不具合をもつ脆弱な実行可能ファイルを探します。次に攻撃者は、その存在しない DLL と同名の悪意のある DLL を、それが期待されている場所に植え付けておきます。

この手法のよく知られている例が Windows Search (WSearch) サービスの悪用です。このサービスは検索処理を担い、システム起動時に SYSTEM の権限で開始されます。

このサービスは起動時に SearchIndexer.exeSearchProtocolHost.exe を実行しますが、これらは両方とも System32 から msfte.dll をロードしようとします。デフォルトの Windows のインストールでは、このファイルはこの場所に存在しません。

攻撃者は、書き込めるのであれば System32 フォルダーに、そうでないならべつの DLL 検索順序の場所に、あるいは攻撃者が制御できる別の場所を PATH 環境変数に挿入することにより、悪意のある DLL を植え付けておきます。これにより彼らは SYSTEM 特権をもつステルスな実行経路と、対象マシン上で永続性を維持する手段を得られます。

脅威アクターとキャンペーンの発見

自社のテレメトリーを使って DLL ハイジャック攻撃をハンティングしてみると、そのバリエーションを含む大量の DLL ハイジャック攻撃試行が明らかになりました。以下のセクションでは、サイバー犯罪者や国家支援型 APT グループを含むさまざまな脅威アクターらが、DLL ハイジャックをどのように使っているのか、実例をあげて示します。

国家支援型 APT 脅威アクターによる DLL ハイジャックの例

ToneShell のトリプル DLL サイドローディング

2023 年 9 月、Unit 42 のリサーチャーは、DLL サイドローディングを使って ToneShell バックドアをインストールする攻撃者を発見しました。ToneShell の亜種を使用する攻撃は、Stately Taurus にリンクされています 。これらの攻撃キャンペーンは、図 3 が示す通り、連携して働く 3 つの DLL コンポーネントを使って組み立てられていました。この図では、各コンポーネントが Cortex 内の対応する Image Load イベントと対になっています。Action Type (アクション タイプ) は、これらの悪意のある DLL が各正規プロセスへとロードされたことを示しています。

画像 3 は、Cortex XDR のプロセス ツリーのスクリーンショットです。各アラートは、その Action Type (アクション タイプ) と対になっています。左から右に、Persistence (永続性) コンポーネント、Networking (ネットワーク) コンポーネント、Functionarilty (機能) コンポーネントです。
図 3. Cortex XDR の ToneShell プロセス ツリー

各 DLL コンポーネントには異なる目的があります。

  • Persistence (永続性) コンポーネント (nw.dll, nw_elf.dll): これらの DLL は、ほかのコンポーネントをディスクにドロップするだけでなく、バックドアの永続化も担当します。
  • Networking (ネットワーク) コンポーネント (rw32core.dll): この DLL はコマンド & コントロール (C2) 通信を担当します。
  • Functionality (機能) コンポーネント (secur32.dll): この DLL はバックドアのさまざまなコマンドの実行を担当します。

Persistence コンポーネント (nw.dll, nw_elf.dll) は PwmTower.exe によってサイドロードされます。この PwmTower.exe というのは、正規のセキュリティ ツールであるパスワード マネージャーのコンポーネントです。

Networking コンポーネント (rw32core.dll) は Brcc32.exe によってサイドロードされます。Brcc32.exe はアプリ開発ツールである Embarcadero のリソース コンパイラーです。

Functionality コンポーネント (secur32.dll) は Consent.exe によってサイドロードされます。Consent.exe は、「管理アプリケーション用の同意 UI」として説明されている Windows バイナリーです。

PlugX RAT による DLL サイドローディングを活用した検出回避

私たちの注意を引いた最近の DLL サイドローディング アラートのもう 1 つの例は、悪名高い PlugX バックドアを使用した攻撃でした。

PlugX はモジュール式のバックドアで、主に PKPLUG をはじめとするさまざまな中国系 APT グループによって使われています。PlugX の開発者はアンダーグラウンドのハッキング コミュニティを巡回しており、このマルウェアのバイナリーはオンラインで見つかることから、中国系以外の攻撃者も PlugX を使用できます。

以下の例では、PlugX が侵害された USB デバイス経由でマシンに感染しています。図 4 に USB デバイスの内容を示します。このデバイスには、History という名前のディレクトリーと Windows ショートカット (LNK) ファイルが含まれていました。History フォルダーの名前とアイコンは Windows History フォルダーに偽装されており、LNK ファイルはアイコンを使ってリムーバブル ディスクに見せかけてあります。

画像 4 は、悪意のある LNK ファイルを含む偽の History フォルダーのスクリーンショットです。名前、星型のアイコン、History、リムーバブルディスク(28GB) が表示されています。
図 4. 偽の History フォルダーと悪意のある LNK ファイル

偽の History フォルダーにはファイルが 3 つ含まれています。

  • 3.exe
    • 名前が変更された Acrobat.exe ファイル (Adobe Acrobat の正規コンポーネント)
  • Acrobat.dll
    • PlugX ローダー。名前を変更して正規 Adobe Acrobat ファイルのように見せかけてある
  • AcrobatDC.dat
    • PlugX ローダーがメモリー内で復号する悪意のあるペイロード

被害者がリムーバブル ディスクの LNK をクリックすると、それが 3.exeプロセスを起動します。次に 3.exe は、Acrobat.dll という名前がついたPlugX コンポーネントを DLL サイドローディング経由でロードします。

さらにこのマルウェアは、C:\ProgramData\AcroBat\AcrobatAey にディレクトリーを作成し、これら 3 つのファイルをこの場所にそれぞれ Acrobat.exeAcrobat.dllAcrobatDC.dat としてコピーします。

永続性を確保するため、この PlugX サンプルは、InternetUpdateTask という名前のスケジュール タスクを作成して、これが 30 分ごとに実行されるよう設定します。

図 5 は、Cortex XDR で初期の感染のプロセス ツリーを示したところです。

画像 5 は、Cortex XDR の PlugX のプロセス ツリーのスクリーンショットです。2 つのフレクサーと 3 つの異なる .exe ファイルがあります。
図 5. PlugX の初期実行プロセス ツリー

サイバー犯罪攻撃者による DLL ハイジャックの例

南米の組織を標的とする AsyncRAT フィッシング キャンペーンの解明

Cortex XDR Analysis で DLL サイドローディング アラートをハントしたところ、主にコロンビアとアルゼンチンの被害者をターゲットとし、AsyncRAT の配布を狙うフィッシング キャンペーンが発見されました。

AsyncRAT は、サイバー犯罪者らの間で非常に人気のあるオープンソース マルウェアです。このマルウェアを使えば、攻撃者はコマンド実行、画面キャプチャ、キー ロギングなどのさまざまな機能を得られます。

感染はスペイン語で書かれたフィッシング メールから始まり (図 6)、このメールには求められる法的措置についての説明が含まれています。

画像 6 は、AsyncRAT を配布するフィッシング メールのスクリーンショットです。メールの言語はスペイン語です。
図 6. AsyncRAT を配布するフィッシング メールのテキスト

これらのメールには、悪意のある ZIP アーカイブをホストしている Google ドライブ の URL へのリンクも含まれています。

これらのアーカイブ ファイルには、ZIP ファイル名と同じ名前の実行可能ファイルと、http_dll.dll という名前の悪意のある DLL ファイルが含まれています。

この実行可能ファイルは、実際には名前が変更された ESET HTTP Server サービス プロセスの正当なコンポーネントで、元の名前は EHttpSrv.exe です。被害者が名前を変更された EHttpSrv.exe を実行すると、これが DLL サイドローディングを介して悪意のある http_dll.dll ファイルを同じディレクトリーからロードします。この実行可能ファイルが http_dll.dll をロードすると、当該 DLL がメモリー内でアンパックされて AsyncRAT マルウェアをロードします。

図 7 は、Cortex XDR で感染チェーンを表示したところです。悪意のある ZIP アーカイブがダウンロードされ、7-Zip (7zG.exe) で展開され、名前の変更された EHttpSrv.exe が実行されます。

画像 7 は、Cortex XDR でアラートのツリー図を表示したスクリーンショットです。プロセス ツリーの順序は以下のようになっています。1. ユーザーが zip ファイルをダウンロードします。2. ユーザーが zip ファイルを展開します。3. ユーザーが、名前が変更された EHttpSrv.exe をクリックします。
図 7. Cortex XDR で AsyncRAT 感染を表示したところ

図 8 は、この一連のイベントに対して Cortex XDR が生成した「DLL サイドローディングの可能性」のアラートを示しています。

画像 8 は、DLL サイドローディングの可能性を示す Cortex XDR のアラートのスクリーンショットです。アラートのレベルは「Medium」です。ソースは XDR Analytics です。[Investigate (調査)] ボタンが表示されています。署名されたアクター プロセス #13「notification demanda en su Contra.EXE」により、http_dll.dll というモジュールがロードされました。このモジュールのハッシュは、過去 30 日間に組織内のホストで確認されたことはありません。
図 8. Cortex XDR で DLL サイドローディングの可能性を示すアラートを表示したところ

CatB ランサムウェアの Phantom DLL ローディング

CatB ランサムウェアが最初に確認されたのは 2022 年 12 月でした。それ以来、少なくとも 1 つのキャンペーンで、脅威アクターらは分散トランザクション コーディネーター (MSDTC) サービスを悪用し、CatB ランサムウェア用に Phantom DLL ローディングを実現していました。

この CatB ランサムウェア キャンペーンの核となるのが、ドロッパー DLL とランサムウェア DLL という 2 つのコンポーネントです。ドロッパー DLL は、さまざまなサンドボックス対策や仮想マシン (VM) 対策のチェックを実行し、ランサムウェア ペイロードをドロップしても安全な環境であることを確認します。

ドロッパー DLL がその環境を安全と判断すると、oci.dll という名前の 2 つめの DLL が C:\Windows\System32 ディレクトリーの下に書き込まれます。次にドロッパーは、以下の図 9 に示すように、msdtc.exe によって MSDTC プロセスを強制終了します。

画像 9 は Cortex XDR のスクリーンショットです。3 つの警告アイコンが 3 つの異なる .exe ファイルを示しています。
図 9. Cortex XDR でドロッパー DLL の実行を表示したところ

これは Phantom DLL ローディングの実装のために行われています。 msdtc.exe は、起動時に oci.dll という名前の DLL をロードしようとしますが、これは通常 System32 フォルダ内には存在していません。msdtc.exe が再起動すると、悪意のある oci.dll が読み込まれます。これがランサムウェアのペイロードです (図 10)。以下の図は、msdtc.exe プロセスが悪意のある oci.dll の Image Load イベントと対になっているようすを Cortex 上で表示したところです。

画像 10 は、Cortex XDR のプロセス図のスクリーンショットです。.exe が起動すると、悪意のある DLL モジュールがロードされます。
図 10. Msdtc.exe が悪意のある oci.dll モジュールをロードしたところを Cortex XDR で表示

図 11 に示すように、Cortex XDR は Phantom DLL ローディング試行のアラートを発報します。

画像 11 は、DLL ローディングの可能性を示す Cortex XDR のアラートのスクリーンショットです。アラートのレベルは「Medium」です。ソースは XDR Analytics です。[Investigate (調査)] ボタンが表示されています。oci.dll が msdtc.exe にロードされました。これは、悪意のあるコードを信頼できるプロセスにロードする攻撃者である可能性があります。この動作は、過去 30 日間に 0 台のホスト上で 0 日 (重複なし) 間発生しています。
図 11. Cortex XDR で Phantom DLL ローディングのアラートを表示したところ

Microsoft DLL の悪用から Dridex へ

脅威アクターらは、べつの著名なバンキング型トロイの木馬マルウェア、Dridex にも DLL サイドローディングを実装してきました。Dridex の初期感染ベクトルは、たいていの場合、悪意のある電子メールか Web トラフィックです。

実行時、Dridex ローダーは explorer.exe が使っているプロセス空間に AtomBombing を使ってコードをインジェクトします。次に、インジェクトされた explorer.exe プロセスが、.tmp というファイル名の Dridex DLL と、ランダムな名前のシェル スクリプトとを、ユーザーの Temp ディレクトリーに書き込みます。これらのファイルがディスクに書き込まれた例を図 12 に示します。

画像 12 は、Cortex XDR のアラート テーブルのスクリーンショットです。2 つの列は「ACTION_TYPE (アクション タイプ)」と「FILE_PATH (ファイル パス)」です。すべてのアクションが「File Write (ファイル書き込み)」です。
図 12. 悪意のあるファイルが explorer.exe によりディスクに書き込まれるようすを Cortex XDR で表示したところ

最大で 3 つのシェル スクリプトが出現する可能性があり、これらが被害ホスト上のランダムなディレクトリー パス以下の 3 つの異なる場所に、永続的な Dridex 感染を作成します。感染の持続に DLL サイドローディングが使われます。

これらのシェル スクリプトは、ランダムなディレクトリー パスの下にこれらのランダムな名前のディレクトリーを作成し、正規 Microsoft 実行可能ファイルをコピーし、DLL サイドローディング用に Dridex DLL .tmp ファイルの名前変更を行います。2 つのシェル スクリプトの例を以下の図 13 に示します。

画像 13 は、Dridex をコピーするシェル スクリプトのスクリーンショットです。コードは全部で 8 行あります。
図 13. Dridex をコピーするシェル スクリプト

その後、インジェクトされた explorer.exe プロセスは、最大 3 つの方法を使ってコピーされたバイナリーを永続化します。

  1. HKCU\SOFWARE\Microsoft\Windows\CurrentVersion\Run 以下のレジストリーの更新 (図 14 に例示)
  2. ユーザーの AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup フォルダー以下にある Windows ショートカット
  3. スケジュールされたタスク
画像 14 は、Cortex XDR のアラートです。一部の情報は割愛されています。2 つのファイル パスが含まれています。
図 14. Dridex に関する Cortex XDR アラート。永続化のためにスケジュールされたタスクを作成している

図 15 は、正規ファイルの DeviceEnroller.exe に対する Cortex XDR アラートを示しています。このファイルは悪意のある Dridex DLL をサイドローディングしています。

図 15 は、Cortex XDRのプロセス図のスクリーンショットです。アラート名は赤い四角形で強調表示されています。情報の一部は割愛してあります。
図 15. 正規の DeviceEnroller.exe が悪意のある Dridex DLL をサイドロードしているというアラート

DLL ハイジャックの効率的検出の原則

「ある実行可能ファイルが、名前は同じだがそれ以外の点で内容の異なる悪意のある DLL を予期せずロードしている」という事例を特定するのはかなり難しい作業です。こうした振る舞い上のアノマリー (異常) を大規模に検出するとなれば、その課題の難易度はさらにあがります。

本セクションでは、DLL ハイジャックを効果的に検出するためのいくつかの原則を、そのバリエーションも含めて説明します。これらの原則は、悪意のある DLL、脆弱なアプリケーション、および脆弱なアプリケーションが悪意のある DLL をロードするローディング イベントに焦点を当てています。

悪意のある DLL

悪意のある DLL は正規の DLL と同じ名前を持っているので、私たちは異常を探します。例を以下にあげます。

  • デジタル署名がない、あるいは窃取された署名である
  • ファイル サイズが異常
  • エントロピーが異常に高いまたは低い
  • 組織内でのベースラインとの比較でまれなファイル ハッシュをもつ
  • ロードしている側のアプリケーションのコンパイル日時と比べ、DLL のコンパイル日時が大幅に若い
  • 通常は DLL が存在しないようなパスに DLL が配置されている

脆弱なアプリケーション

この脆弱なアプリケーションとは通常、悪意のある DLL の実行をよりうまく偽装させてくれるような正規アプリケーションです。それを踏まえ、私たちは明確な特性を探すようにしています。

  • 通常、有効なデジタル署名をもつ
  • 標的にされやすい、信頼できるベンダー (ウイルス対策、ブラウザー、VPN、Microsoft アプリケーション) である
  • 悪用頻度の高いアプリケーション (ハッシュ別ないしバージョン別) である
  • DLL サイドローディングの場合
    • 通常、その組織ではあまり一般的ではないアプリケーションである
    • 通常、あまり一般的でないディレクトリー (たとえば C:\Users\<Username>\AppDataC:\ProgramData) を使っている

ローディング イベント

ローディング イベントからもさまざまな異常を見つけられます。例を以下にあげます。

  • 対象アプリケーションが疑わしい DLL 名ないし DLL ハッシュを初めてロードした
  • 対象アプリケーションは通常なら複数の DLL をロードするのに、今は単一の DLL しかロードしていない

DLL ハイジャックのアタック サーフェス緩和

DLL ハイジャック攻撃の可能性からアプリケーションを保護するには、開発者がこの攻撃手法を認識し、さまざまな保護手段を統合する必要があります。

Microsoft は DLL のセキュリティに関する記事を公開し、こうした取り組みにむけて開発者をサポートしてくれる、いくつかのベスト プラクティスを取り上げています。

  • DLL をロードするさい、または新たなプロセスの実行をトリガーするさいは、可能な限り完全修飾パスを指定すること。
  • DLL リダイレクトマニフェスト を利用し、アプリケーションの動作をより適切に制御すること。
  • ユーザーがアプリケーションを実行するさい、オペレーティング システムのバージョンを想定しないこと。すべての OS で意図どおりに処理されるアプリケーションを開発すること。

結論

本稿は、脅威アクターによる DLL ハイジャックの兵器化手法の理解にあたって求められる技術的背景を解説し、その実装でよく見られるバリエーションについて説明することにより、DLL ハイジャックを解説しました。

さらに、サイバー犯罪グループや国家支援型 APT グループを含むさまざまな脅威アクターらが、こうした手法をどのように利用し、みずからのオペレーションでステルス性や永続性を維持し、特権昇格を実現しているのかを、実例を使って示しました。

最後に、エンタープライズ環境において DLL ハイジャックを検出・緩和するためにとりうるアプローチについて解説しました。

保護と緩和策

パロアルトネットワークス製品をご利用のお客様には、弊社の製品・サービスを通じ、前述の脅威に関連する以下の対策が提供されています。

  • 次世代ファイアウォールAdvanced WildFire は既知のサンプルを悪意のあるものとして正確に識別します。
  • Advanced URL FilteringDNS Security は同脅威グループに関連付けられたドメインを悪意のあるものとして識別します。
  • Prisma Cloud
    • WildFire 統合と組み合わせると、Prisma Cloud Defender エージェントは、実行中のプロセスを分析するさい、悪意のあるバイナリーを特定・判定します。
    • XSIAM と組み合わせると、Prisma Cloud Defender が有効になり、クラウド環境内での悪意のあるプロセスの動作をブロック可能になります。
    • 既知の悪意のあるマルウェアの実行を防止するほか、Local Analysis (ローカル分析) モジュールにもとづく機械学習と Behavioral Threat Protection によって未知のマルウェアの実行も防止します。
  • Cortex XDRCortex XSIAM
    • 新しい汎用 Analytics DLL Hijacking タグを使用して、既知および新規の DLL ハイジャッキング攻撃を検出します。
    • 既知の悪意のあるマルウェアの実行を防止するほか、Local Analysis (ローカル分析) モジュールにもとづく機械学習と Behavioral Threat Protection によって未知のマルウェアの実行も防止します。
    • Cortex XDR 3.4 から利用可能になった新たな Credential Gathering Protection を使い、クレデンシャルを収集するツールや手法から保護します。
    • Cortex XDR バージョン 3.4 で新たにリリースされた Anti-Webshell Protection を使い、脅威による Web シェルからのコマンドのドロップや実行から保護します。
    • Anti-Exploitation モジュールと Behavioral Threat Protection を使い、 ProxyShell や ProxyLogon 含む、さまざまな脆弱性のエクスプロイトから保護します。
    • Cortex XDR Pro は振る舞い分析によりクレデンシャル ベース攻撃を含む、エクスプロイト後のアクティビティを検出します。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200

パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。

IoC (侵害指標)

以下は本稿で使ったサンプルからのファイルの SHA256 ハッシュです。

AsyncRAT ZIP

  • 26fc0efa8458326086266aae32ec31b512adddd1405f4dd4e1deed3f55f7b30d
  • 0709e3958f343346406c5a26029748f5d15101d3b7d8b8c1119f7642754ae64e
  • 5e50329c4bcb67a1220f157744e30203727f5a55e08081d1ae65c0db635ce59d
  • af8baffceafeda320eab814847dee4df74020cc4b96a4907816335ad9b03c889
  • c3ec461e8f3d386a8c49228a21767ff785840bc9ae53377f07ff52d0ccba1ccf
  • e00918a579ced5783cefc27b1e1f9f0bc5b0f93a32d4a7170c7466b34cc360df
  • e41f58d82394853fc49f2cccae07c06504cc1d1f3d49ba6bfd8f8762948b7c16
  • eadd74bbb7df21e45abc07c065876ba831978185c9e0845f19e86c151439020a

AsyncRAT

  • 54fc9f4699d8fb59ce1635df5aaa2994b5d924d7b4d7626e1b5d9a406bef899d
  • 10fec9bf8d695ab14b1329cc6ca6d303d87617ffa76e3e4cc46f8f542e062d70
  • 69985edc2510803cfd862bdf87c59cc963be1bde5e08a0f10c0fd109c2134eab
  • 2ea71c9cbb949e96da71716d8a431952632b954c7fc5ba87e6f84684957f07ef
  • a8b7aaede89c587525906fa24f392b1ce0b4a73c6193eb6db95b586ae378649c
  • 27b8bfe997400a956cd7ec9a3f68e198fe690562d909185b7d41b1e9ce31c53f
  • e4fdc02f196cedb98d2098b6993f6e28976abe9b5c8e9f9752dea493b9d1dcb9

PlugX ZIP

  • 86a5ce23cf54d75d9c8d9402e233d00f8f84a31324ae8e52da6172e987d9a87b
  • dca39474220575004159ecff70054bcf6239803fcf8d30f4e2e3907b5b97129c

PlugX ローダー

  • 12c584a685d9dffbee767d7ad867d5f3793518fb7d96ab11e3636edcc490e1bd

PlugX dat ファイル

  • 95205b92d597489b33854e70d86f16d46201803a1a9cb5379c0d6b7c0784dbc7

PlugX LNK ファイル

  • 515fd058af3dfd2d33d49b7c89c11c6ef04c6251190536ca735a27e5388aa7e7

Dridex

  • f101cc7885e44eee63713a71bba85baa7c135a9b1fe49480e05fc872f84993e7
  • 3f98a3e8ea69daf06e6da6e8d495bba42e575dbd0ba26f5e6035efb017545be1
  • 2f043922d42fbef8d1a08395bf0928d6181863c44b53bccc8c3806796db1c50e
  • 25085c4f707583052d7070ddb5473bb0684e588694279c7f85e4c17e36837074
  • 8a1c5858440a3eaa91f7442b7453127432f240637d22793dca6bfe5406776fbe
  • fbc4421f8454139f4e2ebd808ebb224c0d773b0d62f69ef2270da386a4aab3e7
  • 0d4a7b43b5dbe8b8492c51a3f7595c8e188d558390ee1ab0586d1315b98619c9
  • 98ebb3e797e19e0e6aeffc6d03e7ad5ce76f941a175c3cacc3a7f0056d224f95
  • 0989a9be27bdc8827008f1837e62d88a077f8541a7b080e367b08facd9382962
  • 4a6ebd82b30063c73283b5364e34fc735ad05b5dd62bfa77f38617e9b2937444

ToneShell の Persistence (永続性) コンポーネント

  • 2f5cf595ac4d6a59be78a781c5ba126c2ff6d6e5956dc0a7602e6ba8e6665694
  • 0f2f0458d2f1ac4233883e96fe1f4cc6db1551cdcfdd49c43311429af03a1cd5
  • 011fe9974f07cb12ba30e69e7a84e5cb489ce14a81bced59a11031fc0c3681b7
  • 3fc4d023d96f339945683f6dc7d9e19a9a62b901bef6dc26c5918ce9508be273
  • 3a429b8457ad611b7c3528e4b41e8923dd2aee32ccd2cc5cf5ff83e69c1253c2
  • f58d3d376c8e26b4ae3c2bbaa4ae76ca183f32823276e6432a945bcbc63266d9
  • 46c6ee9195f3bd30f51eb6611623aad1ba17f5e0cde0b5523ab51e0c5b641dbf
  • 86140e6770fbd0cc6988f025d52bb4f59c0d78213c75451b42c9f812fe1a9354

ToneShell の Networking (ネットワーク) コンポーネント

  • a08e0d1839b86d0d56a52d07123719211a3c3d43a6aa05aa34531a72ed1207dc
  • 19d07dbc58b8e076cafd98c25cae5d7ac6f007db1c8ec0fae4ce6c7254b8f073
  • 8e801d3a36decc5e4ce6fd3e8e45b098966aef8cbe7535ed0a789575775a68b6
  • df4ba449f30f3ed31a344931dc77233b27e06623355ece23855ee4fe8a75c267
  • 345ef3fb73aa75538fdcf780d2136642755a9f20dbd22d93bee26e93fb6ab8fd
  • 3a5e69786ac1c458e27d38a966425abb6fb493a41110393a4878c811557a3b5b

ToneShell の Functionality (機能) コンポーネント

  • 66b7983831cbb952ceeb1ffff608880f1805f1df0b062cef4c17b258b7f478ce
  • f2a6a326fb8937bbc32868965f7475f4af0f42f3792e80156cc57108fc09c034
  • dafa952aacf18beeb1ebf47620589639223a2e99fb2fa5ce2de1e7ef7a56caa0
  • 52cd066f498a66823107aed7eaa4635eee6b7914acded926864f1aae59571991

CatB ローダー

  • 3661ff2a050ad47fdc451aed18b88444646bb3eb6387b07f4e47d0306aac6642

CatB ペイロード

  • c8e0aa3b859ac505c2811eaa7e2004d6e3b351d004739e2a00a7a96f3d12430c
  • 83129ed45151a706dff8f4e7a3b0736557f7284769016c2fb00018d0d3932cfa
  • 35a273df61f4506cdb286ecc40415efaa5797379b16d44c240e3ca44714f945b
  • 9990388776daa57d2b06488f9e2209e35ef738fd0be1253be4c22a3ab7c3e1e2