DLLハイジャックは、「バイナリプランティング」とも呼ばれるサイバー攻撃技術で、Windowsの動的リンクライブラリ(DLL)の検索およびロードプロセスを悪用します。この攻撃では、攻撃者が偽のDLLファイルを正当なファイルに偽装して戦略的に配置し、オペレーティングシステムが本物のDLLよりも優先的に読み込むようにします。その結果、システムがDLLをロードしようとする際に、攻撃者が埋め込んだ未承認のコードを誤って実行してしまいます。
DLLハイジャックのプロセスは通常、次のステップを含みます。
脆弱なアプリケーションの特定: 攻撃者はリコンネサンスを行い、必要なDLLのフルパスを指定していないアプリケーションを特定します。これらのアプリケーションは、必要なDLLを見つけてロードするためにシステムの検索順序に依存しています。
悪意のあるDLLの配置: 脆弱なアプリケーションが特定されたら、攻撃者は本物のDLLと同じ名前の悪意のあるDLLを、システムの検索順序で優先される場所に配置します。一般的な場所には、アプリケーションのディレクトリ、Windowsシステムディレクトリ、または現在の作業ディレクトリが含まれます。
実行の誘発: 脆弱なアプリケーションが起動されると、オペレーティングシステムは検索順序に従ってDLLの検索とロードを開始します。残念ながら、悪意あるDLLの配置のため、システムは意図された正当なDLLの代わりに攻撃者のコードをロードし実行してしまいます。
この攻撃手法は、脅威アクターがターゲットとするアプリケーションのコンテキスト内で任意のコードを実行し、セキュリティ対策を回避してシステムの整合性と機密性を損なう可能性があります。
DLLハイジャック攻撃のリスクを軽減するために、次の予防策を考慮してください。
フルパス指定: 開発者はDLLのロードに必要なフルパスを明示的に指定し、システムの検索順序に依存しないようにするべきです。完全なパスを提供することで、開発者は意図したDLLがロードされることを保証し、攻撃者がシステムを悪意のあるDLLにリダイレクトする可能性を排除します。
コード署名: コード署名の実践を導入することで、アプリケーションがロードするDLLの整合性と真正性を高めます。コード署名は、信頼できる証明書機関(CA)でDLLをデジタル署名することで、システムがDLLの整合性と出所をロード前に検証できるようにするものです。この実践は、改ざんされたDLLや悪意のあるDLLの実行を防ぐのに役立ちます。
ユーザー権限: ユーザー権限を制限することは、未承認のユーザーがDLLを操作したり、ハイジャックされてもおかしくない場所に配置したりするのを防ぐ上で重要な役割を果たします。適切なアクセス制御を実施することで、組織はDLLハイジャック攻撃のリスクを低減できます。
自動ロードの無効化: 自動的なDLL検索とロード機能を無効にすることは、DLLハイジャックへの有効な防御策となります。これは、現在の作業ディレクトリをシステムの検索パスから削除することで実現できます。こうすることで、システムはフルパスが明示的に指定されたDLLのみをロードし、意図しないDLLの実行のリスクを最小限に抑えます。
組織はDLLハイジャックからアプリケーションやシステムを保護することを優先し、これらの予防策を実施して潜在的なリスクを軽減することが重要です。
関連用語
DLL Injection: DLLインジェクションは、プロセスに動的リンクライブラリ(DLL)を強制的にロードさせる行為です。この技術は、機能拡張などの正当な目的で使用されることもありますが、サイバー攻撃の手段としても使われることができます。
Rootkit: ルートキットは、検出を回避しながらコンピュータシステムへの無許可のアクセスと制御を得るために設計された悪意のあるソフトウェアの一種です。ルートキットは特権を持って動作し、自身の存在を隠すとともに、攻撃者がシステムを妥協させたり、機密情報を収集したりするための隠れたプラットフォームを提供します。