更新 : 2007 年 11 月
共通言語ランタイム (CLR: Common Language Runtime) のデバッグ API の使用に関するセキュリティ上の考慮事項は次のとおりです。
プロセスへのアタッチ。Windows NT および Windows 2000 の場合、デバッグ対象プロセスの作成には、デバッガに対してフル アクセスを許可するセキュリティ記述子を使用する必要があります。デバッグ プロセスは、SE_DEBUG_NAME アクセス許可が付与されていて、任意のプロセスをデバッグできる状態になっている必要があります。Windows NT または Windows 2000 の管理者には、既定でこのアクセス許可が与えられます。Windows 95、Windows 98、および Windows CE では、プロセスへのアタッチに関する特別な要件は設定されていないため、このセキュリティ レベルは存在しません。
動的コード挿入。アセンブリは、その読み込み時に検証されます。コードを動的に挿入する過程で、デバッガは一部のコードを変更し、移植可能な実行可能 (PE: Portable Executable) ファイルのデルタをデバッグ対象プロセスに送信します。デルタ PE は検証されません。更新されたメソッドは、Just-In-Time (JIT) コンパイラによるコンパイル後に検証されます。動的コード挿入の詳細については、「デバッグ API によるコードの動的な挿入」を参照してください。
署名されたアセンブリのメタデータの変更。アセンブリの整合性チェックが行われ、適切なアクセス許可が付与されるのは、署名されたアセンブリの読み込み時だけです。デバッガがデバッグ対象に関連付けられたメタデータを変更したことにより、実行中のコードが変更されると、この操作によってアセンブリの署名を計算するハッシュが変更されます。この操作では、その他のセキュリティ チェックは行われません。ランタイムによって割り当てられたアクセス許可は有効なままです。
悪意のあるプロセスのデバッグ。悪意を持っている可能性のあるプロセスのデバッグにデバッグ API を使用しないでください。これには主に 2 つの理由があります。第一に、デバッグ インフラストラクチャは、脆弱性を利用する巧妙なプロセスに対抗できるようには設計されていません。第二に、マネージのみのデバッグの実行中にプロセスを停止すると、実際に停止されるまでにずれが生じる可能性があります。したがって、特定のコード行が実行されないという保証がありません。