C# で WPF に基づくプログラムがあり、アプリケーションをデバッグするためのユーザーの特権 (SeDebugPrivilege) を (少なくともリリース モードで) 削除したいと考えています。これについて最善の方法は何ですか?アンマネージ コードへの安全でない呼び出しを必要とするコードでそれを行う方法をいくつか見つけました。これを純粋に C# で行うか、アプリケーション マニフェストを介して行うか、アプリケーションの実行中にユーザーが SeDebugPrivilege をまったく取得できないようにする他の手段を使用することをお勧めします。Windows グループを宣言し、グループ全体の特権を取り消す方法はありますか? これの動機は、最小特権の原則に従うことで、アプリケーションをより安全に保護するためのプッシュの一部です。後で削除したい権限は他にもありますが、
1 に答える
などの特権の効果を誤解している可能性があると思いますSeDebugPrivilege
。を使用してプロセス トークンから特権を確実に削除できますがAdjustTokenPrivileges
、これによってアプリケーションのデバッグが妨げられることはなく、アプリケーション自体が特定のデバッグ アクションを実行できなくなります。ただし、これを使用して、特権を必要とする手段を介して他のプロセスに影響を与えないようにすることで、アプリケーションの潜在的な脆弱性の影響を軽減できます。
デフォルトでは、ユーザーは自分で起動したアプリケーションをデバッグできることに注意してくださいSeDebugPrivilege
.
もちろん、デバッガーが接続されているかどうかを検出しようとするアプリケーションの例は数多くあり、さまざまなレベルの成功を収めています。せいぜい、アプリケーションのデバッグを難しくすることはできますが、ユーザーのマシンで実行している場合、完全に防ぐことはできません。
おそらく定期的に をチェックSystem.Diagnostics.Debugger.IsAttached
し、値が の場合はなんらかのアクションを実行できますがtrue
、アプリケーションをデバッグしようと決心した人にとっては比較的簡単に克服できます。