プロセスのセキュリティとアクセス権

Microsoft Windows セキュリティ モデルを使用すると、プロセス オブジェクトへのアクセスを制御できます。 セキュリティの詳細については、「 アクセス制御モデル」を参照してください。

ユーザーがログインすると、システムは認証プロセス中にユーザーを一意に識別する一連のデータを収集し、 アクセス トークンに格納します。 このアクセス トークンは、ユーザーに関連付けられているすべてのプロセスのセキュリティ コンテキストを記述します。 プロセスのセキュリティ コンテキストは、プロセスまたはプロセスを作成したユーザー アカウントに与えられた資格情報のセットです。

トークンを使用して、 CreateProcessWithTokenW 関数を使用してプロセスの現在のセキュリティ コンテキストを指定できます。 CreateProcess、CreateProcessAsUser、または CreateProcessWithLogonW 関数を呼び出すときに、プロセスのセキュリティ記述子を指定できます。 NULL を指定すると、プロセスは既定のセキュリティ記述子を取得します。 プロセスの既定のセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。

プロセスのセキュリティ記述子を取得するには、 GetSecurityInfo 関数を呼び出します。 プロセスのセキュリティ記述子を変更するには、 SetSecurityInfo 関数を呼び出します。

プロセス オブジェクトの有効なアクセス権には、 標準のアクセス権 と、プロセス固有のアクセス権が含まれます。 次の表に、すべてのオブジェクトで使用される標準アクセス権を示します。

意味
DELETE (0x00010000L) オブジェクトを削除するために必要です。
READ_CONTROL (0x00020000L) SACL に情報を含めず、オブジェクトのセキュリティ記述子の情報を読み取るために必要です。 SACL の読み取りまたは書き込みを行うには、 ACCESS_SYSTEM_SECURITY アクセス権を要求する必要があります。 詳細については、「 SACL アクセス権」を参照してください。
SYNCHRONIZE (0x00100000L) 同期にオブジェクトを使用する権限。 これにより、スレッドはオブジェクトがシグナル状態になるまで待機できます。
WRITE_DAC (0x00040000L) オブジェクトのセキュリティ記述子で DACL を変更するために必要です。
WRITE_OWNER (0x00080000L) オブジェクトのセキュリティ記述子の所有者を変更するために必要です。

 

次の表に、プロセス固有のアクセス権を示します。

意味
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) |SYNCHRONIZE (0x00100000L) |0xFFFF) プロセス オブジェクトに対して可能なすべてのアクセス権。Windows Server 2003 および Windows XP:Windows Server 2008 および Windows Vista でPROCESS_ALL_ACCESS フラグのサイズが増加しました。 Windows Server 2008 および Windows Vista 用にコンパイルされたアプリケーションが Windows Server 2003 または Windows XP で実行されている場合、PROCESS_ALL_ACCESS フラグが大きすぎて、このフラグを指定する関数はERROR_ACCESS_DENIEDで失敗します。 この問題を回避するには、操作に必要なアクセス権の最小セットを指定します。 PROCESS_ALL_ACCESS使用する必要がある場合は、_WIN32_WINNTアプリケーションの対象となる最小オペレーティング システム (たとえば) #define _WIN32_WINNT _WIN32_WINNT_WINXPに設定します。 詳細については、「Windows ヘッダーの使用」を参照してください。
PROCESS_CREATE_PROCESS (0x0080) このプロセスを PROC_THREAD_ATTRIBUTE_PARENT_PROCESSの親プロセスとして使用するために必要です。
PROCESS_CREATE_THREAD (0x0002) プロセスでスレッドを作成するために必要です。
PROCESS_DUP_HANDLE (0x0040) DuplicateHandle を使用してハンドルを複製するために必要です。
PROCESS_QUERY_INFORMATION (0x0400) トークン、終了コード、優先度クラスなど、プロセスに関する特定の情報を取得するために必要です ( OpenProcessToken を参照)。
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) プロセスに関する特定の情報を取得するために必要です ( GetExitCodeProcessGetPriorityClassIsProcessInJobQueryFullProcessImageName を参照)。 PROCESS_QUERY_INFORMATIONアクセス権を持つハンドルには、PROCESS_QUERY_LIMITED_INFORMATIONが自動的に付与されますWindows Server 2003 および Windows XP: このアクセス権はサポートされていません。
PROCESS_SET_INFORMATION (0x0200) 優先順位クラスなど、プロセスに関する特定の情報を設定するために必要です ( SetPriorityClass を参照)。
PROCESS_SET_QUOTA (0x0100) SetProcessWorkingSetSize を使用してメモリ制限を設定するために必要です。
PROCESS_SUSPEND_RESUME (0x0800) プロセスを中断または再開するために必要です。
PROCESS_TERMINATE (0x0001) TerminateProcess を使用してプロセスを終了するために必要です。
PROCESS_VM_OPERATION (0x0008) プロセスのアドレス空間に対して操作を実行するために必要です ( VirtualProtectExWriteProcessMemory を参照)。
PROCESS_VM_READ (0x0010) ReadProcessMemory を使用してプロセス内のメモリを読み取るために必要です。
PROCESS_VM_WRITE (0x0020) WriteProcessMemory を使用してプロセス内のメモリに 書き込むには必要です。
SYNCHRONIZE (0x00100000L) 待機関数を使用してプロセスが終了するのを 待機するために必要です。

 

別のプロセスへのハンドルを開いてフル アクセス権を取得するには、 SeDebugPrivilege 特権を有効にする必要があります。 詳細については、「 トークン内の権限の変更」を参照してください。

CreateProcess 関数によって返されるハンドルは、プロセス オブジェクトにPROCESS_ALL_ACCESSアクセスできます。 OpenProcess 関数を呼び出すと、要求されたアクセス権がプロセスのセキュリティ記述子の DACL に対してチェックされます。 GetCurrentProcess 関数を呼び出すと、DACL が呼び出し元に許可する最大アクセス権を持つ擬似ハンドルが返されます。

オブジェクトの SACL の読み取 または書き込みを行う場合は、プロセス オブジェクトへのACCESS_SYSTEM_SECURITYアクセス権を要求できます。 詳細については、「アクセス制御リスト (ACL)」および「SACL アクセス権限」を参照してください。

警告

ここに示されているアクセス権の一部を持つプロセスは、それらを使用して他のアクセス権を取得できます。 たとえば、プロセス A に PROCESS_DUP_HANDLE アクセス権 を持つプロセス B のハンドルがある場合、プロセス B の擬似ハンドルを複製できます。これにより、プロセス B への最大アクセス権を持つハンドルが作成されます。擬似ハンドルの詳細については、「 GetCurrentProcess」を参照してください。

 

保護されたプロセス

Windows Vista では、デジタル Rights Managementのサポートを強化するための保護されたプロセスが導入されています。 システムは、保護されたプロセスと保護されたプロセスのスレッドへのアクセスを制限します。

次の標準アクセス権は、プロセスから保護されたプロセスに対して許可されていません。

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

次の特定のアクセス権は、プロセスから保護されたプロセスに対して許可されません。

  • PROCESS_ALL_ACCESS
  • PROCESS_CREATE_PROCESS
  • PROCESS_CREATE_THREAD
  • PROCESS_DUP_HANDLE
  • PROCESS_QUERY_INFORMATION
  • PROCESS_SET_INFORMATION
  • PROCESS_SET_QUOTA
  • PROCESS_VM_OPERATION
  • PROCESS_VM_READ
  • PROCESS_VM_WRITE

PROCESS_QUERY_INFORMATIONを通じて利用可能な情報のサブセットへのアクセスを提供するために、PROCESS_QUERY_LIMITED_INFORMATION権限が導入されました。