概要
DLLハイジャック(DLLプリロード攻撃とも呼ばれます)とは、Windowsアプリケーション内の正規で信頼されたダイナミックリンクライブラリ(DLL)ファイルが、悪意のあるファイルに置き換えられるセキュリティ上の脆弱性です。 DLLハイジャックは、データ窃取、システム侵害、マルウェアなど、複数のセキュリティリスクをもたらします。 ハイジャックを防ぐには、開発者とユーザーが、アプリケーションが信頼されたディレクトリからDLLを読み込むようにし、フルパスの使用、ファイル整合性チェックの実装、セキュリティソフトウェアの導入を徹底する必要があります。定期的な更新とパッチ管理も重要です。最近、CVE-2025-56383(2025年9月26日公開)をめぐって注目が集まっています。これはNotepad++ v8.8.3におけるハイジャックの脆弱性で、DLLファイルが差し替えられることで悪意のあるコードが実行される可能性があります。
このCVEについては複数の関係者から異議が唱えられていますが、ここではその是非についてコメントするものではありません。本稿では、DLLハイジャックに焦点を当て、組織に及ぼす現実的な脅威について解説します。DLLハイジャックとは何か、そしてDLLを安全に保つために取れる対策を見ていきましょう。
DLLハイジャックとは何か、どのように発生するのか
DLLハイジャック(DLLプリロード攻撃とも呼ばれます)とは、Windowsアプリケーション内の正規で信頼されたダイナミックリンクライブラリ(DLL)ファイルが、悪意のあるファイルに置き換えられるセキュリティ上の脆弱性です。
この手法は、複数のプログラムで使用されるコードやデータを含むDLLファイルをアプリケーションが読み込む仕組みを悪用します。悪意のあるDLLを読み込ませることで、脅威アクターは正規アプリケーションと同じ権限で独自のコードを実行でき、権限昇格、永続化、防御回避につながる可能性があります。
プログラムの起動時には、特定の機能を実行するために、通常は信頼されたシステムディレクトリから複数のDLLを読み込む必要があります。しかし、アプリケーションがDLLの検索場所を適切に管理していない場合、安全でない場所や予測可能な場所(現在の作業ディレクトリやネットワーク共有など)から悪意のあるDLLを読み込んでしまう可能性があります。これは、アプリケーションがDLLへのフルパスを指定していない場合や、攻撃者がアクセスまたは変更できるディレクトリ内でDLLを検索する場合に発生し得ます。

この種の攻撃は新しいものではありませんが、手法がシンプルであるため、現在も有効です。また、この特定の問題はWindowsアプリケーションに関するものですが、同様の脆弱性は他のオペレーティングシステム(共有ライブラリの動的読み込みを使用するLinuxやmacOSなど)にも影響する可能性がある点に注意が必要です。
DLLハイジャックは、次のような複数のセキュリティリスクをもたらします。
- データ窃取:悪意のあるDLLは、パスワードや個人情報などの機密データを傍受し、盗み出す可能性があります。
- システム侵害:攻撃者がシステムを制御し、さらなる攻撃や追加のマルウェアのインストールにつながる可能性があります。
- マルウェア:悪意のあるDLLがマルウェア拡散の経路となり、システムやネットワークの他の部分に感染を広げる可能性があります。
DLLはさまざまな方法でハイジャックされる可能性があります。代表的な手法は次のとおりです。
- 安全でないDLL検索順序:攻撃者は、正規DLLの場所よりも先に検索されるディレクトリに悪意のあるDLLを配置します。
- 相対パスの操作:アプリケーションが相対パスを使用する場合に、悪意のあるDLLが読み込まれます。
- DLLリダイレクト:パス操作などの手法により、DLLの読み込みプロセスをリダイレクトします。
- 脆弱な権限設定:攻撃者は、権限設定が不十分なディレクトリ内で正規DLLを悪意のあるDLLに置き換えます。
- ファントムDLLハイジャック:攻撃者は、存在しないDLLを読み込もうとするアプリケーションを悪用し、検索対象のディレクトリに同名の悪意のあるDLLを配置します。
こうした潜在的な脆弱性は、この種の攻撃を防ぐうえで、安全なコーディング手法とディレクトリ権限管理がいかに重要であるかを示しています。
DLLハイジャックを防ぎ、DLLを安全に保護する方法
DLLハイジャックは依然として脅威ですが、より安全でセキュアなIT環境を実現するために、リスクを軽減できるベストプラクティスを導入できます。

安全なDLL読み込み:
- フルパスを使用する:DLLを読み込む際は、必ずDLLへのフルパスを指定します。これにより、アプリケーションは安全でないディレクトリではなく、信頼された場所からDLLを読み込むようになります。
- 安全な検索パスを設定する:WindowsのSetDllDirectory関数を使用して、信頼されたディレクトリを検索パスに追加し、安全でないディレクトリを除外します。これにより、アプリケーションが想定外の場所からDLLを読み込むことを防ぎやすくなります。
ファイル整合性チェック:
- デジタル署名:DLLがデジタル署名されていることを確認し、DLLを読み込む前に署名を検証します。これにより、DLLが改ざんされていないことを確認しやすくなります。
- ハッシュ検証:暗号学的ハッシュ関数を使用して、DLLファイルの整合性を検証します。DLLのハッシュが期待値と一致しない場合、そのファイルは変更されている可能性があります。
ユーザー権限:
- 最小権限の原則:アプリケーションは必要最小限の権限で実行します。これにより、悪意のあるコードが有害な操作を実行するために使用できる権限が少なくなるため、DLLハイジャックによる潜在的な被害を抑えられます。
- ユーザーアカウント制御(UAC):WindowsシステムでUACを有効にし、昇格された権限でアプリケーションを実行する前にユーザーへ許可を求めるようにします。これにより、システムファイルへの不正な変更を防ぎやすくなります。
アプリケーション制御と権限管理:
- 既知で信頼されたアプリケーション:アプリケーション制御により、既知で信頼されたアプリケーションのみを起動可能にし、未承認アプリケーションが持ち込まれるリスクを排除します。
- 権限制御:効果的な権限管理は、DLLハイジャックを防ぐうえで重要です。アプリケーションが起動に必要な適切な権利と権限を持つようにすることで、未承認ユーザーが悪意のあるファイルを持ち込む能力を制限できます。この制御は重要な障壁として機能し、攻撃者がDLL検索メカニズムを悪用するために必要なアクセスを制限することで、環境のセキュリティを強化します。
セキュリティソフトウェア:
- アンチウイルスおよびアンチマルウェア:信頼できるアンチウイルスおよびアンチマルウェアソフトウェアを使用して、悪意のあるDLLの読み込みを検知・防止します。これらのツールは、既知の悪意のあるファイルや挙動をスキャンできます。
- 侵入検知システム(IDS):IDSを導入し、DLLファイルへの予期しない変更や、安全でない場所からDLLを読み込もうとする試みなど、通常とは異なるアクティビティを監視します。
パッチ管理:
- ソフトウェアを最新の状態に保つ:アプリケーションとオペレーティングシステムを最新のセキュリティパッチで定期的に更新します。多くのDLLハイジャック脆弱性は更新によって修正されるため、最新の状態を維持することで既知の脅威から保護しやすくなります。
- パッチ適用の自動化:すべてのシステムを手動介入なしで最新の状態に保つには、自動パッチ管理ツールを使用します。これにより、攻撃者が既知の脆弱性(DLLハイジャックに利用され得るものを含む)を悪用できる機会を減らせます。このプロアクティブなアプローチは、アプリケーションとオペレーティングシステムの整合性維持に役立ち、攻撃者が悪意のあるDLLを挿入することをはるかに困難にします。
これらのベストプラクティスを導入することで、DLLハイジャックのリスクを大幅に低減し、アプリケーションとシステム全体のセキュリティを強化できます。
適切なツールと対策を組み合わせてDLLハイジャックを防ぐ
DLLハイジャックは長年にわたって継続的に使われてきた攻撃手法であり、今なお有効であることから、今後も組織にとって課題であり続けるでしょう。
上記のベストプラクティスに、Ivanti Neurons for App Controlのような実績あるソリューションを組み合わせることで、組織を将来の脅威に備えさせ、DLLの保護を支援できます。Trusted Ownershipのような機能は、項目の所有者が承認済みの信頼できる所有者リストと一致することを確認し、ハイジャックされたDLLの実行を検知して拒否します。
また、アプリを最新の状態に保ち、既知の脆弱性への露出を抑えましょう。Ivanti Neurons for Patch Managementでパッチ適用を自動化することで、人為的ミスのリスクを排除し、システムが自動的に更新され保護されるようにします。
よくある質問
DLLハイジャックとは何ですか。なぜ危険なのですか。
DLLハイジャックとは、攻撃者が正規のダイナミックリンクライブラリ(DLL)を悪意のあるものに置き換える脆弱性です。これにより、攻撃者はアプリケーションと同じ権限で有害なコードを実行でき、データ窃取、マルウェア感染、システム全体の侵害といったリスクにつながります。
DLLハイジャックはどのように発生しますか。
アプリケーションが安全でない場所からDLLを読み込むと発生します。一般的な手法には次のものがあります。
- 安全でないDLL検索順序(信頼されたディレクトリより先に検索されるディレクトリから読み込む)。
- 相対パスの操作。
- PATH変更によるDLLリダイレクト。
- 脆弱なディレクトリ権限の悪用。
- ファントムDLLハイジャック(存在しないDLLが想定されている場所に悪意のあるDLLを配置する)。
自動パッチ管理は、DLLハイジャックのリスク低減にどのように役立ちますか。
パッチ適用を自動化することで、システムにセキュリティ更新が迅速に適用され、攻撃者が悪用する前に既知の脆弱性を解消できます。人為的ミスを減らし、アプリケーションとオペレーティングシステムを継続的に安全な状態に保ちます。
DLLハイジャック対策に役立つツールには何がありますか。
Ivanti Neurons for App Controlのようなソリューションは、Trusted Ownershipを適用して未承認のDLLをブロックします。一方、Ivanti Neurons for Patch Managementは更新を自動化し、脆弱性への露出を最小限に抑えます。