Windowsでのコードインジェクションとは何ですか?
コードインジェクションはWindowsで一般的です。アプリケーションは、自身のコードの一部を他の実行中のプロセスに「注入」して、その動作を変更します。このテクニックは善と悪のどちらにも使用できますが、どちらの方法でも問題を引き起こす可能性があります。.
注入されたコードは多くの場合DLL(ダイナミックリンクライブラリ)ファイルの形式であるため、コード注入は一般にDLL注入とも呼ばれます。ただし、アプリケーションはDLLではない他の種類のコードをプロセスに挿入することもできます。.
どのようなコードインジェクションが使用されていますか
コードインジェクションは、Windows上であらゆる種類のトリックと機能を実現するために使用されます。合法的なプログラムがそれを使用していますが、それはマルウェアによっても使用されています。例えば:
- ウイルス対策プログラムは多くの場合、Webブラウザにコードを挿入します。彼らはそれを使用して、ネットワークトラフィックを監視し、危険なWebコンテンツをブロックすることができます。.
- 悪意のあるプログラムは、ブラウジングをよりよく追跡し、パスワードやクレジットカード番号などの保護された情報を盗み取り、ブラウザの設定を変更するためのコードをWebブラウザに追加する可能性があります。.
- デスクトップをテーマにしたStardockのWindowBlindsは、ウィンドウの描画方法を変更するためのコードを注入します。.
- Stardock's Fencesは、Windowsデスクトップの機能を変更するためのコードを注入します。.
- スクリプトを作成してシステム全体のホットキーを割り当てることができるAutoHotkeyは、これを達成するためのコードを注入します。.
- NVIDIAのようなグラフィックスドライバは、さまざまなグラフィックス関連のタスクを達成するためにDLLをインジェクトします。.
- アプリケーションにメニューオプションを追加するためにDLLを注入するプログラムもあります。.
- PCゲームの不正行為ツールは、ゲームの動作を変更し、他のプレイヤーよりも不当な優位性を得るためにゲームにコードを注入することがよくあります。.
コードインジェクションが悪いですか?
この手法は、Windows上のさまざまなアプリケーションで常に使用されています。それはさまざまなタスクを達成するための唯一の本当の方法です。 AppleのiOSやGoogleのAndroidのような現代のモバイルプラットフォームと比較すると、Windowsデスクトップは非常に強力です。開発者にこの種の柔軟性を提供するのであれば.
もちろん、そのすべての力でいくつかの危険があります。コードインジェクションは、アプリケーションに問題やバグを引き起こす可能性があります。 Googleは、Chromeブラウザにコードを注入したWindowsユーザーの方が、Chromeがクラッシュする可能性が15%高くなると言っています。そのため、Googleはこれをブロックしています。マイクロソフトは、悪意のあるアプリケーションがブラウザの設定を改ざんするためにコードインジェクションを使用する可能性があると述べています。これが、Edgeで既にブロックされている理由の1つです。.
Microsoftは、サードパーティのDLLがMicrosoft Outlookにロードされているかどうかを確認する方法についても説明しています。.
マイクロソフトの従業員として、2004年から開発者ブログにそれを入れました:
DLLインジェクションは決して安全ではありません。プロセスの作成者によって設計、構築、またはテストされたことがないプロセスにコードを潮吹きさせ、そのコードを実行するスレッドを選択または作成することについて話しています。あなたは、以前にはなかったタイミング、同期、またはリソースの問題を引き起こしたり、そこにあった問題を悪化させる危険を冒します。.
言い換えれば、コードインジェクションは一種の汚いハックです。理想的な世界では、これを達成するためのより安全な方法があり、それは潜在的な不安定性を引き起こさなかったでしょう。しかし、コードインジェクションは、今日のWindowsアプリケーションプラットフォームの単なる正常な部分です。それはあなたのWindows PCのバックグラウンドで常に起こっています。あなたはそれを必要悪と呼ぶかもしれません.
注入されたDLLを確認する方法
Microsoftの強力なProcess Explorerアプリケーションを使用して、システムにコードインジェクションがあるかどうかを確認できます。それは基本的に追加の機能が満載のタスクマネージャの高度なバージョンです.
これを行うには、Process Explorerをダウンロードして実行してください。 View> Lower Pane View> DLLをクリックするか、Ctrl + Dを押します。.
上部ペインでプロセスを選択し、下部ペインを見て、ロードされているDLLを確認します。 「会社名」列は、このリストをフィルタリングするための便利な方法を提供します。.
たとえば、Windowsの一部であるため、ここで「Microsoft Corporation」によって作成されたさまざまなDLLを見るのが普通です。下記のスクリーンショットでは、問題のプロセスと同じ会社で作成されたDLL(Chromeの場合は「Google Inc.」)も表示されます。.
「AVAST Software」によって作成されたいくつかのDLLもここで見つけることができます。これは、当社のシステム上のAvastマルウェア対策ソフトウェアが「Avastスクリプトブロックフィルタライブラリ」のようなコードをChromeに注入していることを示しています。.
あなたがあなたのシステムでコードインジェクションを見つけたならばあなたがすることができる多くはありません - 問題を引き起こさないようにそれを防ぐためにコードをインジェクトするプログラムをアンインストールすること以外は別に。たとえば、Chromeが定期的にクラッシュした場合は、Chromeにコードをインジェクトするプログラムがあるかどうかを確認し、それらをアンインストールしてChromeのプロセスが改ざんされるのを防ぐことができます。.
コードインジェクションの仕組み?
コードインジェクションは、ディスク上の基礎となるアプリケーションを変更しません。代わりに、そのアプリケーションが実行されるのを待ち、その実行プロセスに追加のコードを注入して機能を変更します。.
Windowsには、コードインジェクションに使用できるさまざまなアプリケーションプログラミングインターフェイス(API)が含まれています。プロセスは、自分自身をターゲットプロセスにアタッチし、メモリを割り当て、そのメモリにDLLまたはその他のコードを書き込み、次にターゲットプロセスにそのコードを実行するように指示することができます。 Windowsはあなたのコンピュータ上のプロセスがこのように互いに干渉するのを防ぎません.
より技術的な情報については、開発者がどのようにDLLをインジェクトすることができるかを説明しているこのブログ記事をチェックしてください。.
場合によっては、誰かがディスク上の基本コードを変更する可能性があります。たとえば、不正行為や海賊行為を可能にするために、PCゲームに付属のDLLファイルを修正されたものに置き換えることによってです。これは技術的には「コードインジェクション」ではありません。コードは実行中のプロセスにインジェクトされていませんが、プログラムは同じ名前の別のDLLをロードするように仕向けられています。.
画像クレジット:Lukatme / Shutterstock.com.