DLLインジェクション【DLL injection】
概要

通常のプログラムは、起動時や実行中に必要なDLLを自ら読み込み、その中に含まれる関数を呼び出して機能を利用する。DLLインジェクションはこの仕組みを利用して、対象のプログラムが本来読み込む予定のなかったDLLを、外部から強制的に組み込ませる手法である。
実現方法にはいくつかの種類がある。対象プロセスのメモリ領域にDLLのパスを書き込み、別のスレッドを生成して読み込ませる方法が広く知られているほか、レジストリへの設定追加やフック機構、DLLの探索順序を利用する方法などもある。いずれもオペレーティングシステム(OS)が標準で備える仕組みを利用しており、特殊な脆弱性を突くものではない。
DLLが対象プロセスに読み込まれると、その中の初期化処理を通じて外部のコードが動作し始める。これにより、対象プロセスが持つ画面表示や通信、ファイル操作、メモリ内のデータなどに外部から介入したり、関数の呼び出しを横取りして処理内容を書き換えたりすることが可能になる。対象プログラム自体を改変する必要はない。
正当な用途としては、デバッグ支援ツールや性能測定ツール、既存ソフトウェアの機能を拡張するアドインなどが挙げられる。ウイルス対策ソフトが他のプロセスの挙動を監視する際にも、同様の仕組みが使われることがある。また、オンラインゲームでは、プログラムを外部から書き換えて利用者に有利な状態を作り出す不正行為の手段としても用いられてきた。
一方、マルウェアが悪用する場合、信頼性の高い正規のシステムプロセスにコードを注入することで、セキュリティソフトからの検知を逃れようとすることが多い。正規プロセスが持つ通信の権限を利用して外部と不正な通信を行ったり、認証情報やキーボード入力を監視したりする手口も知られている。こうした挙動は正常な処理と見分けにくいため、現代のOSではコード署名の検証やメモリ保護機能、権限管理など、不正なDLLの読み込みを防ぐ仕組みが導入されており、セキュリティ製品もプロセス間の操作を監視の対象としている。