Sécurité du service et droits d’accès
Le modèle de sécurité Windows vous permet de contrôler l’accès au gestionnaire de contrôle de service (SCM) et aux objets de service. Les sections suivantes fournissent des informations détaillées :
Droits d’accès pour le Gestionnaire de contrôle de service
Voici les droits d’accès spécifiques pour le SCM.
Droit d’accès | Description |
---|---|
SC_MANAGER_ALL_ACCESS (0xF003F) | Inclut STANDARD_RIGHTS_REQUIRED, en plus de tous les droits d’accès dans ce tableau. |
SC_MANAGER_CREATE_SERVICE (0x0002) | Obligatoire pour appeler la fonction CreateService pour créer un objet de service et l’ajouter à la base de données. |
SC_MANAGER_CONNECT (0x0001) | Obligatoire pour se connecter au gestionnaire de contrôle de service. |
SC_MANAGER_ENUMERATE_SERVICE (0x0004) | Obligatoire pour appeler la fonction EnumServicesStatus ou EnumServicesStatusEx pour répertorier les services qui se trouvent dans la base de données. Obligatoire pour appeler la fonction NotifyServiceStatusChange pour recevoir une notification lors de la création ou de la suppression d’un service. |
SC_MANAGER_LOCK (0x0008) | Obligatoire pour appeler la fonction LockServiceDatabase pour acquérir un verrou sur la base de données. |
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) | Obligatoire pour appeler la fonction NotifyBootConfigStatus . |
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) | Obligatoire pour appeler la fonction QueryServiceLockStatus pour récupérer les informations de verrouillage status de la base de données. |
Voici les droits d’accès génériques pour le SCM.
Droit d’accès | Description |
---|---|
GENERIC_READ |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
Un processus disposant des droits d’accès appropriés peut ouvrir un handle au SCM qui peut être utilisé dans les fonctions OpenService, EnumServicesStatusEx et QueryServiceLockStatus . Seuls les processus disposant de privilèges d’administrateur peuvent ouvrir des handles au SCM qui peuvent être utilisés par les fonctions CreateService et LockServiceDatabase .
Le système crée le descripteur de sécurité pour le SCM. Pour obtenir ou définir le descripteur de sécurité pour le SCM, utilisez les fonctions QueryServiceObjectSecurity et SetServiceObjectSecurity avec un handle de l’objet SCManager.
Windows Server 2003 et Windows XP : Contrairement à la plupart des autres objets sécurisables, le descripteur de sécurité du SCM ne peut pas être modifié. Ce comportement a changé à partir de Windows Server 2003 avec Service Pack 1 (SP1).
Les droits d’accès suivants sont accordés.
Compte | Droits d’accès |
---|---|
Utilisateurs authentifiés à distance |
|
Utilisateurs authentifiés locaux (y compris LocalService et NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Administrateurs |
|
Notez que les utilisateurs distants authentifiés sur le réseau mais qui ne sont pas connectés de manière interactive peuvent se connecter au SCM, mais pas effectuer d’opérations qui nécessitent d’autres droits d’accès. Pour effectuer ces opérations, l’utilisateur doit être connecté de manière interactive ou le service doit utiliser l’un des comptes de service.
Windows Server 2003 et Windows XP : Les utilisateurs authentifiés à distance bénéficient des droits d’accès SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS et STANDARD_RIGHTS_READ . Ces droits d’accès sont restreints comme décrit dans le tableau précédent à partir de Windows Server 2003 avec SP1
Lorsqu’un processus utilise la fonction OpenSCManager pour ouvrir un handle à une base de données de services installés, il peut demander des droits d’accès. Le système effectue une case activée de sécurité sur le descripteur de sécurité du SCM avant d’accorder les droits d’accès demandés.
Droits d’accès pour un service
Voici les droits d’accès spécifiques d’un service.
Droit d’accès | Description |
---|---|
SERVICE_ALL_ACCESS (0xF01FF) | Inclut STANDARD_RIGHTS_REQUIRED en plus de tous les droits d’accès dans ce tableau. |
SERVICE_CHANGE_CONFIG (0x0002) | Obligatoire pour appeler la fonction ChangeServiceConfig ou ChangeServiceConfig2 pour modifier la configuration du service. Étant donné que cela accorde à l’appelant le droit de modifier le fichier exécutable que le système exécute, il ne doit être accordé qu’aux administrateurs. |
SERVICE_ENUMERATE_DEPENDENTS (0x0008) | Obligatoire pour appeler la fonction EnumDependentServices pour énumérer tous les services dépendant du service. |
SERVICE_INTERROGATE (0x0080) | Obligatoire pour appeler la fonction ControlService pour demander au service de signaler immédiatement ses status. |
SERVICE_PAUSE_CONTINUE (0x0040) | Obligatoire pour appeler la fonction ControlService pour suspendre ou continuer le service. |
SERVICE_QUERY_CONFIG (0x0001) | Obligatoire pour appeler les fonctions QueryServiceConfig et QueryServiceConfig2 pour interroger la configuration du service. |
SERVICE_QUERY_STATUS (0x0004) | Obligatoire pour appeler la fonction QueryServiceStatus ou QueryServiceStatusEx pour demander au gestionnaire de contrôle de service la status du service. Obligatoire pour appeler la fonction NotifyServiceStatusChange pour recevoir une notification lorsqu’un service change status. |
SERVICE_START (0x0010) | Obligatoire pour appeler la fonction StartService pour démarrer le service. |
SERVICE_STOP (0x0020) | Obligatoire pour appeler la fonction ControlService pour arrêter le service. |
SERVICE_USER_DEFINED_CONTROL(0x0100) | Obligatoire pour appeler la fonction ControlService pour spécifier un code de contrôle défini par l’utilisateur. |
Voici les droits d’accès standard pour un service.
Droit d’accès | Description |
---|---|
ACCESS_SYSTEM_SECURITY | Requis pour appeler la fonction QueryServiceObjectSecurity ou SetServiceObjectSecurity pour accéder à la SACL. La bonne façon d’obtenir cet accès consiste à activer le privilègeSE_SECURITY_NAME dans le jeton d’accès actuel de l’appelant, à ouvrir le handle pour l’accès ACCESS_SYSTEM_SECURITY, puis à désactiver le privilège. |
DELETE (0x10000) | Requis pour appeler la fonction DeleteService pour supprimer le service. |
READ_CONTROL (0x20000) | Requis pour appeler la fonction QueryServiceObjectSecurity pour interroger le descripteur de sécurité de l’objet de service. |
WRITE_DAC (0x40000) | Requis pour appeler la fonction SetServiceObjectSecurity pour modifier le membre Dacl du descripteur de sécurité de l’objet de service. |
WRITE_OWNER (0x80000) | Requis pour appeler la fonction SetServiceObjectSecurity pour modifier les membres Owner et Group du descripteur de sécurité de l’objet de service. |
Voici les droits d’accès génériques pour un service.
Droit d’accès | Description |
---|---|
GENERIC_READ |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_EXECUTE |
SERVICE_START SERVICE_STOP SERVICE_PAUSE_CONTINUE SERVICE_USER_DEFINED_CONTROL |
Le SCM crée le descripteur de sécurité d’un objet de service lorsque le service est installé par la fonction CreateService . Le descripteur de sécurité par défaut d’un objet de service accorde l’accès suivant.
Compte | Droits d’accès |
---|---|
Utilisateurs authentifiés à distance | Non accordé par défaut. Windows Server 2003 avec SP1 : SERVICE_USER_DEFINED_CONTROL Windows Server 2003 et Windows XP : Les droits d’accès pour les utilisateurs authentifiés à distance sont les mêmes que pour les utilisateurs authentifiés locaux. |
Utilisateurs locaux authentifiés (y compris LocalService et NetworkService) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Administrateurs |
READ_CONTROL SERVICE_ALL_ACCESS WRITE_DAC WRITE_OWNER |
Pour effectuer des opérations, l’utilisateur doit être connecté de manière interactive ou le service doit utiliser l’un des comptes de service.
Pour obtenir ou définir le descripteur de sécurité d’un objet de service, utilisez les fonctions QueryServiceObjectSecurity et SetServiceObjectSecurity . Pour plus d’informations, consultez Modification de la liste DACL pour un service.
Lorsqu’un processus utilise la fonction OpenService , le système vérifie les droits d’accès demandés par rapport au descripteur de sécurité pour l’objet de service.
L’octroi de certains droits d’accès à des utilisateurs non approuvés (tels que SERVICE_CHANGE_CONFIG ou SERVICE_STOP) peut leur permettre d’interférer avec l’exécution de votre service et éventuellement de leur permettre d’exécuter des applications sous le compte LocalSystem.
Lorsque la fonction EnumServicesStatusEx est appelée, si l’appelant n’a pas le droit d’accès SERVICE_QUERY_STATUS à un service, le service est omis en mode silencieux de la liste des services retournés au client.