悪意のあるソフトウェアがそれ自体を隠して、その活動がタスクマネージャーのプロセスのリストに表示されないようにすることはできますか?自分自身を隠して、誰かがあなたのコンピュータを制御しているときに、タスクマネージャを開いたとしても、疑わしいアクティビティが表示されないようにできますか?
はいの場合、どのようにそれを行うことができますか?この方法で隠すにはどのようなテクニックを使用できますか?
はい。いくつかの方法があります。
AppInit_DLLs
)またはプロセスメモリにコードを挿入してスレッドを開始します(VirtualAllocEx
/WriteProcessMemory
/CreateRemoteThread
を使用)。Process32First
/Process32Next
列挙が実行されたときにプロセスを「スキップ」するすべてのプロセス(タスクマネージャを含む)の関数。CreateToolhelp32Snapshot
これにより、マップされたセクションのメモリ(スナップショットの動作については ここ を参照)が事前に変更されるため、Process32First
/Process32Next
偽のデータから読み取ることになります。ntdll.dll!NtQuerySystemInformation
およびSystemProcessInformation
が渡された場合、結果をパッチしてプロセスをスキップします。これは、上記の呼び出しよりも低いレベルのフックです。SystemProcessInformation
クエリのカーネルモードハンドラーをフックするカーネルモードドライバーをロードします。 Windowsではこれの本当の名前はわかりません(ドキュメントには記載されていません)が、基本的にはこの目的のためにNtQuerySystemInformation
が調べるハンドラーのテーブルがあり、正しいものをフックする必要があります。 こちら 実際のハンドラーのReactOS実装。これでは、返された構造体をいじって、プロセスが表示されないようにします。EPROCESS
構造を変更し、プロセスがカーネルから完全に隠されるようにします。カーネルは、FLink
およびBLink
フィールドをそれぞれフォワードポインターおよびバックワードポインターとして、実行中のすべてのプロセスを表す構造の循環リンクリストを維持します。これらのポインターを操作してプロセスを飛び越え、次にプロセスのポインターを操作して自分自身に戻ることにより、カーネルは列挙中にプロセスをスキップします。これは一般的なルートキット手法です。確かに-タスクマネージャから非表示にする方法はいくつかあります。最も簡単なのは、無害な名前のプロセスを使用して、見えないところに隠すことです。別のオプションは、表示されないサブプロセスとして非表示にすることです。
また、無害な名前でサービスとしてインストールすることもできます。サービスのリストには表示されますが、タスクリストには個別に表示されません。 Googleの検索で表示される他のより複雑な方法は確かにあります。