ESet アンチウイルスを使用していますが、最近その GUI フロントエンド egui.exe がハングし、CPU の 50% (つまり、1 つのコアの 100%) を使用していました。驚くべきことに、デバッグ権限が有効になっていても、それを強制終了できないことがわかりました。
今、私は興味があります: 彼らはどのようにそのような防御を実装しているのでしょうか? また、カーネル ドライバーを書く以外にそれを無効にする方法はありますか?
egui.exe プロセスは通常のユーザー (非管理者) で実行され、管理者アカウントを使用してさまざまな方法で強制終了しようとしています。これが私が試したものです。
- タスクマネージャからそれを殺すことはできません
- pskill を使用してそれを殺すことはできません
- プロセス エクスプローラーを使用して強制終了することも、デバッガーをアタッチすることもできません。
次に、プログラミングを開始したところ、次のことがわかりました。
非特権ユーザーでは、PROSESS_TERMINATE アクセスで開くことができますが、TerminateProcess() への実際の呼び出しはエラー 5 で失敗します。
管理者アカウントでは、(もちろんデバッグ権限を有効にした後) 必要なアクセス権で開くことができますが、TerminateProcess()、GetKernelObjectSecurity()、SetKernelObjectSecurity() の呼び出しはすべてエラー 5 で失敗します。
Terminate が DACL にない場合、そもそも PROCESS_TERMINATE を使用してプロセスを開くことができないため、これはプロセス DACL を設定するだけでなく、なんらかの操作を行っていることを明確に示しています。彼らは実際に Win32 API 呼び出しをインターセプトしていますか? はいの場合、どのように?低レベルのシステム プログラミングを行うのは久しぶりなので、私の無知を許してください。