\r\n\r\n

ウィンドウズでのコードインジェクションとは?

コードインジェクションは、ウィンドウズでは非常に一般的です。アプリケーションは、実行中の他のプロセスに自身のコードの一部を「注入」して、その動作を変更します。この手法は良くも悪くも使えますが、どちらにしても問題が発生する可能性があります...。

Windowsでは、コードインジェクションが非常によく行われます。アプリケーションは、実行中の他のプロセスに自身のコードの一部を「注入」して、その動作を変更します。この手法は良くも悪くも使えるが、どちらにしても問題を引き起こす可能性がある。

コードインジェクションは、通常DLL(Dynamic Link Library)ファイルの形で注入されるため、DLLインジェクションとも呼ばれる。しかし、アプリケーションは、他の種類の非llコードをプロセスに注入することもできます。

コードインジェクションの用途は?

コードインジェクションは、Windows上で様々なトリックや機能を実行するために使用されます。正規のプログラムはこれを使用し、マルウェアはこれを使用します。

  • アンチウィルスプログラムは、しばしばウェブブラウザにコードを注入し、ネットワークトラフィックを監視して危険なウェブコンテンツをブロックするなどの目的で使用することができます。
  • 悪意のあるプログラムは、お客様のウェブブラウザにコードを追加して、お客様の閲覧状況をより良く追跡したり、パスワードやクレジットカード番号などの保護情報を盗んだり、お客様のブラウザの設定を変更したりすることがあります。
  • StardockのWindowBlindsは、デスクトップのテーマを設定し、ウィンドウの描画方法を変更するコードを注入します。
  • Stardock社のFencesは、Windowsのデスクトップの動作方法を変更するコードを注入する。
  • AutoHotkeyはスクリプトを作成し、システム全体のホットキーを割り当てることができ、そのためのコードを注入することができます。
  • NVIDIAのprojectdllのようなグラフィックスドライバは、グラフィックスに関する様々なタスクを実行します。
  • プログラムによっては、アプリケーションに追加のメニューオプションを追加するためにDLLを注入するものもあります。
  • コンピュータゲームの不正行為ツールは、ゲームにコードを注入してゲームの動作を変更し、他のプレイヤーよりも不当に有利になることがよくあります。

コードインジェクションは悪なのか?

この手法は、Windows上の様々なアプリケーションでよく使われています。さまざまな仕事をこなすには、これが唯一の現実的な方法なのです。WindowsデスクトップがApple iOSやGoogle Androidのような最新のモバイルプラットフォームと比較して非常に強力なのは、このような柔軟性を開発者に提供するためです。

このパワーには、当然ながら危険も伴う。コードインジェクションは、アプリケーションに問題やバグを引き起こす可能性があります。 Googleによると、WindowsユーザーがChromeにコードを注入すると、Chromeがクラッシュする可能性が15%高くなるそうで、これを阻止するためにGoogleが取り組んでいます。マイクロソフトは、悪意のあるアプリケーションがコードインジェクションを利用してブラウザの設定を改ざんする可能性があると指摘しており、Edgeでブロックされている理由の1つとなっています。

マイクロソフトは、サードパーティのDLLがMicrosoft Outlookのクラッシュを大量に引き起こす可能性があるとして、Microsoft Outlookにロードされているかどうかをチェックする手順さえ提供しています。

マイクロソフトのある社員は、2004年の開発者向けブログでこう述べている。

DLLインジェクションは決して安全ではありません。あなたは、プロセスの作者によって設計も構築もテストもされていないプロセスにコードを流し込んで、そのコードを実行するためにスレッドを共同利用したり作成したりすることを話しているのです。タイミングや同期、リソースなど、以前はなかった問題が発生したり、あった問題が悪化したりする危険性があるのです。

つまり、コードインジェクションはダーティハックなのです。理想的な世界では、潜在的な不安定さを引き起こすことなく、より安全にこれを実現する方法があるはずです。しかし、コードインジェクションは、今日のWindowsアプリケーションプラットフォームでは当たり前のことに過ぎません。Windowsコンピュータのバックグラウンドで発生することが多い。必要悪と言えるかもしれません。

注入されたDLLを確認する方法

マイクロソフトの強力なアプリケーションであるProcess Explorerを使用すると、システム上のコードインジェクションを確認することができます。基本的にはタスクマネージャの進化版であり、追加機能が含まれています。

必要であれば、Process Explorerをダウンロードして起動し、[表示] > [下部ペイン表示] > [DLL]をクリックするか、Ctrl+Dを押してください。

上のペインでプロセスを選択し、下のペインでロードされたDLLを表示します。 会社名の列は、このリストをフィルタリングするのに便利な方法を提供します。

例えば、Windowsの一部である「Microsoft」が制作した各種DLLをここで見ることは珍しいことではありません。下のスクリーンショットでは、Chromeの「Google」など、同じ会社が制作したDLLであることも確認することができます。

また、ここには「AVAST Software」**製のDLLもいくつか見受けられ、我々のシステム上のAvastアンチマルウェアが「Avast Script Blocking Filter Library」のようなコードをChromeに注入していることを示しています。

コードインジェクションを発見した場合、コードを注入したプログラムをアンインストールして問題を起こさないようにする以外に、できることはほとんどありません。例えば、Chromeが頻繁にクラッシュする場合、Chromeにコードを注入しているプログラムがないか確認し、それらをアンインストールしてChromeのプロセスが改ざんされないようにすることが考えられます。

コードインジェクションの仕組みは?

コードインジェクションは、ディスク上の基礎となるアプリケーションを変更することはありません。その代わり、アプリケーションが実行されるのを待ち、実行中のプロセスに追加のコードを注入して、実行方法を変更するのです。

Windowsには、コードインジェクションに利用できる様々なアプリケーションプログラミングインターフェース(api)があります。Windowsは、このようにコンピュータ上のプロセスが互いに干渉し合うことを防ぐことはできません。

より技術的な情報については、開発者がDLLを注入する方法について説明したこのブログの記事をご覧ください。

例えば、PCゲームに付属するDLLファイルを改造したDLLファイルに置き換えて、不正行為や海賊版を可能にするなど、ディスク上の基礎的なコードを誰かが変更する場合もある。技術的には、これは「コードインジェクション」ではなく、実行中のプロセスにコードを注入するのではなく、プログラムを騙して同じ名前の別のDLLを読み込ませるというものです。

写真提供:Lukatme/Shutterstock.com website.

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ