Droits d’accès et de sécurité des processus

Le modèle de sécurité Microsoft Windows vous permet de contrôler l’accès aux objets de processus. Pour plus d’informations sur la sécurité, consultez Modèle de contrôle d’accès.

Lorsqu’un utilisateur se connecte, le système collecte un ensemble de données qui identifie l’utilisateur de manière unique pendant le processus d’authentification et le stocke dans un jeton d’accès. Ce jeton d’accès décrit le contexte de sécurité de tous les processus associés à l’utilisateur. Le contexte de sécurité d’un processus est l’ensemble des informations d’identification fournies au processus ou au compte d’utilisateur qui a créé le processus.

Vous pouvez utiliser un jeton pour spécifier le contexte de sécurité actuel d’un processus à l’aide de la fonction CreateProcessWithTokenW . Vous pouvez spécifier un descripteur de sécurité pour un processus lorsque vous appelez la fonction CreateProcess, CreateProcessAsUser ou CreateProcessWithLogonW . Si vous spécifiez NULL, le processus obtient un descripteur de sécurité par défaut. Les listes de contrôle d’accès dans le descripteur de sécurité par défaut d’un processus proviennent du jeton principal ou d’emprunt d’identité du créateur.

Pour récupérer le descripteur de sécurité d’un processus, appelez la fonction GetSecurityInfo . Pour modifier le descripteur de sécurité d’un processus, appelez la fonction SetSecurityInfo .

Les droits d’accès valides pour les objets de processus incluent les droits d’accès standard et certains droits d’accès spécifiques au processus. Le tableau suivant répertorie les droits d’accès standard utilisés par tous les objets.

Valeur Signification
DELETE (0x00010000L) Requis pour supprimer l’objet.
READ_CONTROL (0x00020000L) Obligatoire pour lire les informations dans le descripteur de sécurité de l’objet, sans inclure les informations dans la liste SACL. Pour lire ou écrire la SACL, vous devez demander le droit d’accès ACCESS_SYSTEM_SECURITY . Pour plus d’informations, consultez Droit d’accès SACL.
SYNCHRONIZE (0x00100000L) Droit d'utiliser l'objet pour la synchronisation. Cela permet à un thread d’attendre que l’objet soit dans l’état signalé.
WRITE_DAC (0x00040000L) Obligatoire pour modifier le dacl dans le descripteur de sécurité de l’objet .
WRITE_OWNER (0x00080000L) Obligatoire pour modifier le propriétaire dans le descripteur de sécurité de l’objet .

 

Le tableau suivant répertorie les droits d’accès spécifiques au processus.

Valeur Signification
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNCHRONIZE (0x00100000L) | 0xFFFF) Tous les droits d’accès possibles pour un objet de processus. Windows Server 2003 et Windows XP : La taille de l’indicateur PROCESS_ALL_ACCESS a augmenté sur Windows Server 2008 et Windows Vista. Si une application compilée pour Windows Server 2008 et Windows Vista est exécutée sur Windows Server 2003 ou Windows XP, l’indicateur PROCESS_ALL_ACCESS est trop grand et la fonction spécifiant cet indicateur échoue avec ERROR_ACCESS_DENIED. Pour éviter ce problème, spécifiez l’ensemble minimal de droits d’accès requis pour l’opération. Si PROCESS_ALL_ACCESS doit être utilisé, définissez _WIN32_WINNT sur le système d’exploitation minimal ciblé par votre application (par exemple, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Pour plus d’informations, consultez Utilisation des en-têtes Windows.
PROCESS_CREATE_PROCESS (0x0080) Requis pour utiliser ce processus en tant que processus parent avec PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.
PROCESS_CREATE_THREAD (0x0002) Requis pour créer un thread dans le processus.
PROCESS_DUP_HANDLE (0x0040) Obligatoire pour dupliquer un handle à l’aide de DuplicateHandle.
PROCESS_QUERY_INFORMATION (0x0400) Requis pour récupérer certaines informations sur un processus, telles que son jeton, son code de sortie et sa classe de priorité (voir OpenProcessToken).
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Requis pour récupérer certaines informations sur un processus (voir GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Un handle disposant du droit d’accès PROCESS_QUERY_INFORMATION est automatiquement accordé PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 et Windows XP : Ce droit d’accès n’est pas pris en charge.
PROCESS_SET_INFORMATION (0x0200) Obligatoire pour définir certaines informations sur un processus, telles que sa classe de priorité (voir SetPriorityClass).
PROCESS_SET_QUOTA (0x0100) Requis pour définir des limites de mémoire à l’aide de SetProcessWorkingSetSize.
PROCESS_SUSPEND_RESUME (0x0800) Requis pour suspendre ou reprendre un processus.
PROCESS_TERMINATE (0x0001) Requis pour arrêter un processus à l’aide de TerminateProcess.
PROCESS_VM_OPERATION (0x0008) Requis pour effectuer une opération sur l’espace d’adressage d’un processus (voir VirtualProtectEx et WriteProcessMemory).
PROCESS_VM_READ (0x0010) Obligatoire pour lire la mémoire dans un processus à l’aide de ReadProcessMemory.
PROCESS_VM_WRITE (0x0020) Requis pour écrire en mémoire dans un processus à l’aide de WriteProcessMemory.
SYNCHRONIZE (0x00100000L) Vous devez attendre que le processus se termine à l’aide des fonctions d’attente.

 

Pour ouvrir un handle à un autre processus et obtenir des droits d’accès complets, vous devez activer le privilège SeDebugPrivilege . Pour plus d’informations, consultez Modification des privilèges dans un jeton.

Le handle retourné par la fonction CreateProcess a PROCESS_ALL_ACCESS accès à l’objet de processus. Lorsque vous appelez la fonction OpenProcess , le système vérifie les droits d’accès demandés par rapport au DACL dans le descripteur de sécurité du processus. Lorsque vous appelez la fonction GetCurrentProcess , le système retourne un pseudohandle avec l’accès maximal que la LISTE DACL autorise à l’appelant.

Vous pouvez demander le droit d’accès ACCESS_SYSTEM_SECURITY à un objet de processus si vous souhaitez lire ou écrire la SACL de l’objet. Pour plus d’informations, consultez Listes de contrôle d’accès (ACL) et Droit d’accès SACL.

Avertissement

Un processus qui a certains des droits d’accès indiqués ici peut les utiliser pour obtenir d’autres droits d’accès. Par exemple, si le processus A a un handle pour traiter B avec un accès PROCESS_DUP_HANDLE , il peut dupliquer le pseudo-handle pour le processus B. Cela crée un handle qui a un accès maximal au processus B. Pour plus d’informations sur les pseudo-handles, consultez GetCurrentProcess.

 

Processus protégés

Windows Vista introduit des processus protégés pour améliorer la prise en charge de Digital Rights Management. Le système limite l’accès aux processus protégés et aux threads des processus protégés.

Les droits d’accès standard suivants ne sont pas autorisés d’un processus à un processus protégé :

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

Les droits d’accès spécifiques suivants ne sont pas autorisés d’un processus à un processus protégé :

  • 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

Le droit PROCESS_QUERY_LIMITED_INFORMATION a été introduit pour permettre l’accès à un sous-ensemble de l’information disponible via PROCESS_QUERY_INFORMATION.