どのプロセスが別のプロセスを開始したかを調べる

どのプロセスが別のプロセスを開始したかを調べる

たとえば、プロセス エクスプローラーで、実行中のアプリがあることが表示されているとしますEvilAppsRUs.exe

強制終了しても、また起動してしまいます。サービスがないことを確認しました (プロセス エクスプローラーで右クリックして [プロパティ] を選択します)。

DisplayDriver.exeしたがって、別のプロセス ( のような無害な名前のプロセスかもしれません) が起動 (および再起動) していると確信していますEvilAppsRUs.exe

悪意のあるプロセスを再起動しているプロセスの名前を調べるにはどうすればよいでしょうか?

答え1

Windows では、プロセス モニターを使用すると役立つ場合があります。プロセス ツリー ツール ( Ctrl+ T) には、プロセス間の関係が表示されます。

こちらからダウンロードしてすぐに試すことができます。公式ページ

非常に便利でリアルタイムなプロセス モニターです。

答え2

要約:プロセス ツリーを表示する通常のツールによって提示されるこの情報は信頼しないでください。

このようなツールがなければ、言及された プロセスモニターあるいはそれと多少関連のあるシステムモン あなたはこれを知ることはできないそれぞれのツールがプロセス作成のイベントをキャプチャし、それを使用している限り、理論的には可能です。それプロセスツリーを(再)構築するためにキャプチャされた情報。

しかし、親プロセスと子プロセスの関係は関連するWindows でも Unix と同様です。Unix では、子プロセスがゾンビにならないように、親プロセスは子プロセスの終了ステータスを収集する必要があります。これは重要な情報です。なぜWindows では、一般的な Unix ほど親子プロセスの関係を重視しません。Windows の親プロセスは、子プロセスの終了ステータスを収集する必要はありません。

さらに悪いことに、プロセスの作成中に、親プロセスを偽装することができます。PROC_THREAD_ATTRIBUTE_PARENT_PROCESS一般的に、プロセスツリーがどの程度信頼できるかを知る手がかりとなるはずです。冒険者(ヒント:そうではありません)。この情報はまた操作を行うプロセスが操作対象のプロセスに対して適切なレベルのアクセス権を持っている限り、実行中のプロセスに対して偽装することができます。

プロセスモニターの利点は、理論的には、プロセスの作成を監視でき、抽出できる情報に頼る必要がないことです。事後にそれぞれのプロセスから(偽装できる)情報を取得できます。ただし、その情報がプロセスツリーに入力されるかどうかはわかりません。使用されていないようです。プロセスツリーはキャプチャする前に表示できることを考えると、どれでもProcess Monitorのイベントは、Process Explorerに似ているため、この情報も信頼できない

PROC_THREAD_ATTRIBUTE_PARENT_PROCESS親子プロセスの関係は Windows 7 あたりで初めて導入されましたが、それ以前のバージョンの Windows でもあまり重要ではありませんでした。


参考文献:

tlhelp32PS: 従来のツールでは、文書化された(CreateToolhelp32Snapshotet. al.)を使用するか、PROCESSENTRY32W::th32ParentProcessID) 機能または NT ネイティブ APINtQuerySystemInformation何かでのように SystemProcessInformation(Nebbett はそれを と呼びましたSystemProcessesAndThreadsInformation)。つまり、偽造された可能性のある親 PID が返されることになります。

関連情報