DLLハイジャッキングとは、サイバー攻撃者が悪意のあるコードをアプリケーションに挿入して、ダイナミックリンクライブラリ(DLL)のロード方法を感染させることです。複数の米国政府部門に侵入し、ロシアと関連性がある可能性が高い、米国連邦機関を標的にした過去最大規模のハイジャッキングの1つにも、DLLハイジャッキングが使用されていました。DLLハイジャッキングは、1つの感染ファイルからシステム全体を侵害する可能性のある、Windowsプラットフォームを悪用します。セキュアコーディングのプラクティスは、DLLハイジャッキングの防止に役立ちます。DLLハイジャッキングを特定してテストする方法を理解することも、脅威によるハイジャッキングの防止に役立ちます。強力なセキュリティネットワークと従業員に対する十分な教育は、サイバーハッカーによるシステムへの侵入を防止する上で役立ちます。
DLLハイジャッキングとは?
攻撃者が感染ファイルをマシンに送り込み、DLLハイジャッキングに対して脆弱なアプリケーションが実行されると、このファイルが実行されます。DLLハイジャッキングは、感染ファイルをアプリケーションの検索パラメータに挿入するサイバー攻撃の方法です。ユーザーが次に、そのディレクトリからファイルをロードしようとすると、感染したDLLファイルが代わりにロードされます。この感染ファイルが、アプリケーションのロード時にいくつかの手順を実行します。DLLファイルは多くの場合に、コンピュータにあらかじめロードされています。DLLファイルを含む多くのアプリケーションが起動時に自動的にロードされることで、コンピュータ全体が侵害され、悪意のあるコードを含むファイルがロードされることでハッカーがアクセスを手に入れます。
DLLファイルとは?
DLLファイルはMicrosoftオペレーティングシステムだけに存在する、アプリケーションの正常な実行に必要なリソースを保持するファイルです。Windowsオペレーティングシステムの機能の多くはダイナミックリンクライブラリにより提供されると、Microsoftは説明しています。DLLファイルは通常、アプリケーションのロード時に開かれます。DLLファイルは、プログラムの実行やハードドライブ領域の効率的な使用に役立ちます。DLLファイルが複数のプログラムを実行することも多いため、DLLハイジャッキングを使用する1つのサイバー攻撃で1つのファイルを感染させるだけで、複数のプログラムを妨害し、侵害する可能性があります。
DLLハイジャッキングの仕組み
Windowsアプリケーションは、DLL検索プロトコルを使用して正常に実行されます。標的にするアプリケーションのディレクトリにペイロードDLLを入れることで、正規のファイルではなく、感染ファイルをロードするようにアプリケーションを誘導できます。MicrosoftアプリケーションのDLL検索順序は公開されているため、その既知である検索順序が悪用される可能性があります。アプリケーションは起動時に見つかったファイルを最初に実行するため、攻撃者は、標的のアプリケーションが正規のDLLファイルの前に感染ファイルを検索するようにする必要があります。以下の方法でこれが可能になります。
- 攻撃者が、正規のライブラリの前に検索されるディレクトリにトロイの木馬のDLLファイルを埋め込む。
- DLLをプリロードすると、検索条件があいまいに指定されたDLLと同じ名前の悪意のある感染DLLが最初に検索される。
- DLLリダイレクトでDLL検索順序を直接変更することで、正規のDLLではなく悪意のあるDLLをプログラムが実行するようにする。
- 感染DLLファイルが、サプライチェーン攻撃、フィッシング、ソーシャルエンジニアリングを通じて送られる可能性がある。ファイルが置かれた場所の権限レベルが高いほど、攻撃者はシステムに対してより高いアクセス権を手に入れることになります。
関連付けられたDLLファイルの完全パスが指定されていない場合、Windowsアプリケーションは特定のDLL検索プロトコルをデフォルトで使用し、アプリケーションがロードされるディレクトリが最初に検索されます。DLLハイジャッキングは、感染DLLファイルをこの場所に置くことで、システムディレクトリの前に検索され、使用されるようにします。これが、DLL検索順序ハイジャッキングと呼ばれるものです。悪意のあるDLLファイルは多くの場合、標的とするアプリケーションに見せかけたデジタル署名を使用し、正規のファイルであるようにすることで、検知を回避し、感染DLLファイルの転送が許可され、サプライチェーンを通じて送られるようにします。
DLLハイジャッキング攻撃を特定する方法
Process Explorerと呼ばれるWindowsプログラムは、DLLハイジャッキングの試行を特定できます。これは、ロードされるすべてのファイルシステムをリアルタイムで表示することで機能します。フィルターを正しく使用することで、ユーザーは属さないDLLファイルを識別できます。次の手順を使用します。
- Process Explorerをインストールしてロードします。
- DLLハイジャッキングが疑われる攻撃が標的にしているアプリケーションを検索します。
- Ctrl+Lを押し、[Add]、[Apply]の順にクリックして、パスが.dllで終わるアクティブファイルだけが表示されるようにフィルターを適用します。
- Ctrl+Lを押し、ディレクトリ「NAME NOT FOUND」に絞り込みます。条件を「Result: NAME NOT FOUND」に設定し、次に[Add]、[Apply]の順にクリックして、システムディレクトリの外部でロードされるファイルを表示します。
- Ctrl+Lキーを押し、追加フィルターを適用します。条件を「Path is [パスのアドレス]」に設定し、次に[Add]、[Apply]の順にクリックして、アプリケーションのディレクトリ内のDDLファイルだけを表示します。
DLLハイジャッキングを防止する方法
DLLハイジャッキングを防止する最良の方法としては、まず、すべてのDLLファイルの正確な場所を指定できるソフトウェア開発者が、デフォルトDLL検索パスプロトコルをWindowsが使用しないように設定します。また、アンチウイルスソフトウェアを常に最新の状態にすることも重要です。もちろん、DLLインジェクションの試行が検知されないことは多いものの、優れたアンチウイルスソフトウェアは、少なくとも一部のDLLハイジャッキングの試行をブロックできる重要な防衛線です。自社のサイバーセキュリティに常に気を配り、ネットワークとエコシステムの脆弱性のチェックとスキャンを定期的に実行します。Windows DLLハイジャッキングは、感染ファイルがエコシステムに持ち込まれることで初めて可能になり、多くの場合、従業員がマルウェアを開いてしまうことで、意図しない形で拡散します。従業員教育でフィッシング攻撃やソーシャルエンジニアリングの警戒サインを周知することで、DLL攻撃による侵害を防止できます。セキュリティのベストプラクティスを以下に紹介します。
- 情報セキュリティポリシーを確立し、維持する。
- 不審なメールを開いたり使用したりする前にセキュリティ担当者に問い合わせる。
- ログインで多要素認証を有効にする。
- ベンダーのリスク管理ソリューションを実装する。
手順の例
攻撃者は、DLLハイジャッキングを実装する目的でDLLの脆弱性を探しますが、アプリケーションにDLLが指定されていないことが脆弱性となっているケースが少なくありません。一般的には、DLLの検索は以下の順序で行われます。
- アプリケーションがロードされる元のディレクトリを検索する。
- 現在のディレクトリを検索する。
- システムディレクトリを検索する。
- windowsディレクトリを検索する。
- PATH環境にあるディレクトリを検索する。
DLLハイジャッキングは次に、正規のDLLファイルの前に、これらのディレクトリのいずれかに悪意のあるファイルを入れます。あるいは、AppInit DLLを使用してカスタムDLLを作成する方法もあります。このDLLは、以下の方法で事実上どこにでもロードできます。
- 悪意のあるDLLを生成する。
- LoadAppInit_DLLs設定をTRUEに設定する。
- AppInitで悪意のあるDLLを指定する。
- DLLを挿入するプロセス