web-dev-qa-db-ja.com

スレッドにプロセスがない場合、Windowsはどのようにスレッドをスケジュールしますか?

一部のルートキットは、プロセスオブジェクトを破棄して自分自身を隠そうとしていると聞きました(nt!_EPROCESS?)しかし、スレッドを存続させます(nt!_ETHREAD?)。そうすれば、プロセスを表示するタスクマネージャーやProcessExplorerなどのツールには表示されません。

スレッドの全体的な優先度は、次の2つの部分から計算されることを知っています。

  1. プロセスの優先順位、例: CreateProcess()(MSDN) 、パラメータdwCreationFlagsを介して定義されます Priority
  2. スレッドの優先度、例: SetThreadPriority()(MSDN) を介して設定

さて、優先度情報を含むプロセスオブジェクトがルートキットによって破壊された場合、その隠されたルートキットスレッドの合計優先度を計算しようとすると、Windowsカーネルは失敗しませんか?

3
Thomas Weller

AFAIK、プロセスのすべてのスレッドは同じコードとデータセグメントを共有します。 programはいつでも、そのThreadIdとProcessIdを要求できます。そして、プロセスは、すべてのスレッドが終了したときにのみ実際に終了します。

しかし、マルウェアはその活動をrundll32プロセスの背後に隠すことができます。これは、たとえば、サービスが実行可能ファイルではなくDLL)を介してのみ実装される場合に使用される単なるシステムプロセスです。このようなプロセスは、タスクマネージャのリストによくあるため、推測するのは困難です。悪意のある活動が背後に隠されている場所。

1
Serge Ballesta