web-dev-qa-db-ja.com

別のプロセスにバイトを注入してリモートスレッドを作成する、無害な使用例は何ですか?

あなたがAVを開発していて、別のプロセスへの挿入(たとえば、それを開いてそれに書き込む)をマークし、悪意のあるリモートスレッドを作成しているとしましょう。

もしそうなら、偽陽性のいくつかは何ですか?通常のアプリをインストールしてWebを閲覧するだけの通常のユーザーは影響を受けますか?

無害なアプリでこれを行う必要がある理由がわかりません。そしてそれはどのくらい一般的ですか?たとえば、これを実行するのが10億の無害なアプリの1つだけである場合、なぜそれを許可するのでしょうか。

4
Max

このアプローチの問題は、ネイティブのWindowsアプリケーションでも使用されるWinAPIを使用してインジェクションが行われることです。しばらく出回っている非常に一般的なチェーンは次のとおりです。

OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread

とバリアント。上記のすべての関数がWinAPIの一部であることに気付いた場合。次に、これらの各関数が正確に何を行うかを調べます。 [〜#〜] msdn [〜#〜]ドキュメントから:

OpenProcess :既存のローカルプロセスオブジェクトを開きます。プロセスオブジェクトへのアクセス。このアクセス権は、プロセスのセキュリティ記述子に対してチェックされます。

したがって、これは単純な関数であり、適切な権限があれば、アプリケーションがハンドルを取得して別のプロセスとやり取りできるようにします。これは、さまざまなアプリケーションのウィンドウで発生することが非常に一般的です。

VirtualAllocEx :指定されたプロセスの仮想アドレス空間内のメモリ領域の状態を予約、コミット、または変更します。この関数は、割り当てるメモリをゼロに初期化します。

したがって、この関数を使用して、たとえば次のような場合に役立つメモリ空間を割り当てることができます。誰かがアプリケーションのカスタムメモリマネージャーを作成したいと考えています。コアでC/C++プログラミングで頻繁に使用されるmallocでも、VirtualAllocExとバリアントを使用します。

WriteProcessMemory :指定したプロセスのメモリ領域にデータを書き込みます。書き込まれる領域全体がアクセス可能でなければなりません。アクセスできない場合、操作は失敗します。

さて、あなたがそれに書き込むことができない場合(あなたがもちろん適切な特権/権利を持っているなら)スペースを割り当てることのポイントは何ですか?.

CreateRemoteThread :別のプロセスの仮想アドレス空間で実行されるスレッドを作成します。

スレッドの作成は多くの理由で役立ちます。この場合-これは、上からOpenProcessを使用して、すでにハンドルを持っているプロセスを実行できる方法です。

さらに、上記のルーチンのバリアントは、DLLインジェクション/フックなどにも使用されます。これは、ソフトウェアデバッガなどで使用されます。

ご覧のとおり、この手法は悪意のあるコードの挿入によく使用されますが、組み込みアプリケーションでも使用されます。このため、マルウェアの感染/挿入を防ぐための他の手法(例:コード署名など...)があります。悪いニュースは、残念ながらこれらのテクニックのいくつかをバイパスする方法もあるということです。

4
game0ver