Partager via


Traiter les droits de sécurité et d’accès

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

Lorsqu’un utilisateur se connecte, le système collecte un ensemble de données qui identifie de façon unique l’utilisateur 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 d’informations d’identification données 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 le CreateProcess, CreateProcessAsUserou fonction 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) Obligatoire pour supprimer l’objet.
READ_CONTROL (0x00020000L) Requis pour lire les informations dans le descripteur de sécurité de l’objet, sans inclure les informations dans la liste de contrôle d’accès partagé. Pour lire ou écrire la liste de contrôle d’accès partagé, vous devez demander le droit d’accès ACCESS_SYSTEM_SECURITY. Pour plus d’informations, consultez accès SACL Right.
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 la liste dacl dans le descripteur de sécurité de l’objet.
WRITE_OWNER (0x00080000L) Requis 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 (0x0000F0000L) | 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 de 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 volumineux 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 devez ê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) Obligatoire pour utiliser ce processus comme processus parent avec PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.
PROCESS_CREATE_THREAD (0x0002) Obligatoire pour créer un thread dans le processus.
PROCESS_DUP_HANDLE (0x0040) Requis pour dupliquer un handle à l’aide de DuplicateHandle.
PROCESS_QUERY_INFORMATION (0x0400) Obligatoire 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) Obligatoire pour récupérer certaines informations sur un processus (voir GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Un handle qui a le 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) Obligatoire pour définir des limites de mémoire à l’aide de SetProcessWorkingSetSize.
PROCESS_SUSPEND_RESUME (0x0800) Obligatoire pour suspendre ou reprendre un processus.
PROCESS_TERMINATE (0x0001) Obligatoire pour terminer un processus à l’aide de TerminateProcess.
PROCESS_VM_OPERATION (0x0008) Obligatoire pour effectuer une opération sur l’espace d’adressage d’un processus (consultez VirtualProtectEx et WriteProcessMemory).
PROCESS_VM_READ (0x0010) Requis pour lire la mémoire dans un processus à l’aide de readProcessMemory.
PROCESS_VM_WRITE (0x0020) Requis pour écrire dans la mémoire dans un processus à l’aide de WriteProcessMemory.
SYNCHRONIZE (0x00100000L) Obligatoire pour attendre que le processus se termine à l’aide des fonctions d’attente .

 

Pour ouvrir un handle vers 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 unde jeton.

Le handle retourné par la fonction CreateProcessa 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 à la liste de contrôle d’accès du processus 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 au ACCESS_SYSTEM_SECURITY droit d’accès à un objet de processus si vous souhaitez lire ou écrire la liste de contrôle d’accès de l’objet. Pour plus d’informations, consultez Access-Control listes de contrôle d’accès (ACL) et accès SACL Right.

Avertissement

Un processus comportant 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 PROCESS_DUP_HANDLE accès, 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 processus protégés pour améliorer la prise en charge de Digital Rights Management. Le système restreint 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 fournir l’accès à un sous-ensemble des informations disponibles via PROCESS_QUERY_INFORMATION.