コードインジェクションはWindowsでは一般的です。アプリケーションは、独自のコードの一部を別の実行中のプロセスに「注入」して、その動作を変更します。この手法は善にも悪にも使用できますが、どちらの方法でも問題が発生する可能性があります。
コードインジェクションは、インジェクションされたコードが多くの場合、DLLインジェクションの形式であるため、一般にDLLインジェクションとも呼ばれます。 DLL(ダイナミックリンクライブラリ)ファイル 。ただし、アプリケーションは、DLLではない他のタイプのコードをプロセスに挿入することもできます。
コードインジェクションの用途
コードインジェクションは、Windowsであらゆる種類のトリックや機能を実行するために使用されます。正当なプログラムがそれを使用しますが、マルウェアによっても使用されます。例えば:
- ウイルス対策プログラムは、多くの場合、Webブラウザにコードを挿入します。たとえば、ネットワークトラフィックを監視し、危険なWebコンテンツをブロックするために使用できます。
- 悪意のあるプログラムがWebブラウザにコードを追加して、ブラウジングをより適切に追跡し、パスワードやクレジットカード番号などの保護された情報を盗み、ブラウザの設定を変更する可能性があります。
- デスクトップをテーマにしたStardockのWindowBlindsは、 ウィンドウの描画方法を変更する 。
- Stardock’sFencesはコードを Windowsデスクトップの動作方法を変更する 。
- AutoHotkeyを使用すると、 スクリプトを作成し、システム全体のホットキーをそれらに割り当てます 、これを実現するためのコードを挿入します。
- グラフィックドライバは、NVIDIAの注入DLLのようなもので、さまざまなグラフィック関連のタスクを実行します。
- 一部のプログラムは、DLLを挿入して、アプリケーションにメニューオプションを追加します。
- PCゲームのチートツールは、多くの場合、ゲームにコードを挿入して、ゲームの動作を変更し、他のプレーヤーに対して不当な優位性を獲得します。
コードインジェクションは悪いですか?
この手法は、Windows上のさまざまなアプリケーションで常に使用されています。これは、さまざまなタスクを実行するための唯一の実際の方法です。 AppleのiOSやGoogleのAndroidなどの最新のモバイルプラットフォームと比較すると、Windowsデスクトップは、開発者にこの種の柔軟性を提供するため、非常に強力です。
もちろん、そのすべての力にはいくつかの危険が伴います。コードインジェクションは、アプリケーションで問題やバグを引き起こす可能性があります。 Googleによると、Chromeブラウザにコードを挿入したWindowsユーザーはChromeのクラッシュを経験する可能性が15%高いため、Googleはこれをブロックするよう取り組んでいます。 Microsoftは、悪意のあるアプリケーションがコードインジェクションを使用してブラウザの設定を改ざんする可能性があると指摘しています。これは、Edgeですでにブロックされている理由の1つです。
マイクロソフトのイベントは提供します 指示 サードパーティのDLLがMicrosoftOutlookにロードされているかどうかを確認するため。これは、非常に多くのOutlookのクラッシュを引き起こすためです。
マイクロソフトの従業員として、 開発者ブログ 2004年から:
DLLインジェクションは決して安全ではありません。あなたは、プロセスの作成者によって設計、構築、またはテストされたことのないプロセスにコードを吹き込み、そのコードを実行するためのスレッドを採用または作成することについて話しています。以前は存在しなかったタイミング、同期、またはリソースの問題を作成したり、存在した問題を悪化させたりするリスクがあります。
言い換えれば、コードインジェクションは一種の汚いハックです。理想的な世界では、潜在的な不安定性を引き起こさずにこれを達成するためのより安全な方法があります。ただし、コードインジェクションは、今日のWindowsアプリケーションプラットフォームの通常の部分にすぎません。これは、WindowsPCのバックグラウンドで常に発生しています。あなたはそれを必要悪と呼ぶかもしれません。
インジェクションされたDLLをチェックする方法
Microsoftの強力な機能を使用して、システムへのコードインジェクションを確認できます プロセスエクスプローラー 応用。これは基本的に、追加機能が満載のタスクマネージャーの高度なバージョンです。
これを行う場合は、ProcessExplorerをダウンロードして実行します。 [表示]> [下部ペインビュー]> [DLL]をクリックするか、Ctrl + Dを押します。
上部のペインでプロセスを選択し、下部のペインでロードされているDLLを確認します。 「会社名」列は、このリストをフィルタリングするための便利な方法を提供します。
たとえば、「Microsoft Corporation」によって作成されたさまざまなDLLは、Windowsの一部であるため、ここに表示されるのは普通のことです。問題のプロセスと同じ会社である「GoogleInc。」によって作成されたDLLを見るのも普通です。下のスクリーンショットのChromeの場合。
「AVASTSoftware」で作成されたDLLもここにいくつかあります。これは、システム上のアバストアンチウイルスソフトウェアが「アバストスクリプトブロッキングフィルターライブラリ」のようなコードをChromeに挿入していることを示しています。
システムにコードインジェクションが見つかった場合、問題の発生を防ぐためにコードをインジェクションするプログラムをアンインストールする以外に、できることはあまりありません。たとえば、Chromeが定期的にクラッシュする場合は、Chromeにコードを挿入するプログラムがあるかどうかを確認し、それらをアンインストールして、Chromeのプロセスが改ざんされないようにすることができます。
コードインジェクションはどのように機能しますか?
コードインジェクションは、ディスク上の基盤となるアプリケーションを変更しません。代わりに、そのアプリケーションが実行されるのを待ち、その実行中のプロセスに追加のコードを挿入して、その機能を変更します。
Windowsにはさまざまなものが含まれています アプリケーションプログラミングインターフェイス(API) コードインジェクションに使用できます。プロセスは、それ自体をターゲットプロセスにアタッチし、メモリを割り当て、DLLまたはその他のコードをそのメモリに書き込んでから、ターゲットプロセスにコードを実行するように指示できます。 Windowsは、コンピューター上のプロセスがこのように相互に干渉するのを防ぎません。
詳細な技術情報については、このブログ投稿で説明しています。 開発者がDLLを挿入する方法 そしてこれを見て Windowsでの他のタイプのコードインジェクション 。
場合によっては、誰かがディスク上の基になるコードを変更する可能性があります。たとえば、PCゲームに付属のDLLファイルを、不正行為や著作権侵害を有効にするために変更されたファイルに置き換えるなどです。これは技術的には「コードインジェクション」ではありません。コードは実行中のプロセスに挿入されていませんが、代わりにプログラムがだまされて同じ名前の別のDLLをロードしています。
画像クレジット: ルカトメ /しゅってrsとck。こm。