Hébergement et sécurité du fournisseur

La propriété HostingModel dans l’instance __Win32Provider qui représente votre fournisseur spécifie le modèle d’hébergement du fournisseur. La définition de cette propriété entraîne le chargement du fournisseur dans un processus hôte partagé qui a un niveau de privilège spécifié.

Processus d’hôte du fournisseur partagé

WMI réside dans un hôte de service partagé avec plusieurs autres services. Pour éviter d’arrêter tous les services en cas d’échec d’un fournisseur, les fournisseurs sont chargés dans un processus hôte distinct nommé « Wmiprvse.exe ». Plusieurs processus portant ce nom peuvent être en cours d’exécution. Chacun peut s’exécuter sous un compte différent avec une sécurité variable. N’oubliez pas, à compter de Windows Vista, d’utiliser la commande winmgmt pour exécuter WMI dans un processus distinct à l’aide d’un port fixe. Pour plus d’informations, consultez Connexion à WMI à distance avec Windows Vista.

L’hôte partagé peut s’exécuter sous l’un des comptes système suivants dans un processus hôte Wmiprvse.exe :

Un fournisseur peut également être un serveur COM local (.exe) ou auto-hébergé, ce qui ne nécessite pas d’hôte de fournisseur WMI.

Définition du modèle d’hébergement

Étant donné que LocalSystem est un compte privilégié, il est recommandé de définir HostingModel sur NetworkServiceHost lorsqu’un fournisseur s’exécute dans un processus Wmiprvse.exe. Le compte NetworkServiceHost est destiné aux services qui ne nécessitent pas de privilèges étendus, mais qui doivent communiquer à distance avec d’autres systèmes.

Si vous ne définissez pas de valeur pour la propriété HostingModel, WMI définit une valeur par défaut NetworkServiceHostOrSelfHost. Si la valeur HostingModel est définie sur LocalSystemHost, WMI utilise le suivi pour générer les événements 5603 et 5604 dans le journal des événements Windows. Étant donné que le compte LocalSystem local dispose de privilèges élevés, ce paramètre n’est pas recommandé. Vous pouvez afficher ces événements dans l’observateur d’événements. Pour plus d’informations, consultez Traçage de l’activité WMI.

Définissez la propriété HostingModel pour les fournisseurs découplés sur « Decoupled:Com ». Les fournisseurs créés en ajoutant des classes d’instrumentation à partir de Microsoft.Management.Infrastructure dans le .NET Framework sont des fournisseurs découplés. (System.Management.Instrumentation n’est plus pris en charge.) Pour plus d’informations sur la création d’un fournisseur découplé, consultez Incorporation d’un fournisseur dans une application.

Le modèle d’hébergement est spécifié dans la propriété HostingModel de l’instance __Win32Provider qui représente votre fournisseur.

Pour définir le modèle d’hébergement d’un fournisseur

  1. Dans le fichier MOF qui définit votre fournisseur, créez une instance de __Win32Provider.

  2. Attribuez un nom au fournisseur dans la propriété Nom et affectez l’identificateur de classe (CLSID) de l’objet COM du fournisseur à la propriété Clsid .

    L’exemple de code suivant attribue un nom à la propriété Nom et le CSLID de l’objet COM du fournisseur à la propriété Clsid .

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Affectez la valeur d’hôte partagé appropriée à la propriété HostingModel. Les valeurs d’hôte partagé telles que « NetworkServiceHost » sont définies dans la propriété HostingSpecification de la classeMSFT_Providers.

    L’exemple de code suivant affecte une valeur d’hôte partagé à la propriété HostingModel.

    HostingModel = "NetworkServiceHost";
    

L’exemple de code suivant montre comment inscrire un fournisseur dans NetworkServiceHost.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

Si vous avez plusieurs fournisseurs, vous pouvez les regrouper dans un hôte de service spécifique en inscrivant votre fournisseur afin qu’il réside dans l’instance spécifique.

L’exemple de code suivant montre comment inscrire un fournisseur dans NetworkServiceHost. La classe MSFT_Providers définit les valeurs des deux valeurs qui se combinent pour créer la propriété HostingModel__Win32Provider. Dans l’exemple, la valeur « NetworkServiceHost » provient de la propriété HostingSpecification de MSFT_Providers et « LocalServiceHost » provient de la propriété HostingGroup .

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

Des problèmes de développement spéciaux existent pour les fournisseurs qui ne sont pas découplés et sont hébergés dans le processus Wmiprvse. Pour plus d’informations, consultez Débogage des fournisseurs.

Si vous écrivez un fournisseur qui contient l’inscription de fournisseurs de propriétés ou de classes, tous les modèles de thread ne fonctionnent pas. Pour plus d’informations, consultez Choix de l’inscription correcte.

Valeurs HostingModel pour les fournisseurs de In-Process

La liste suivante répertorie les valeurs du modèle d’hébergement de fournisseur à utiliser dans l’instance __Win32Provider pour les fournisseurs qui s’exécutent dans un processus Wmiprvse.exe.

Valeur dans __Win32Provider.HostingModel Description
Auto-hébergement Le fournisseur commence à utiliser l’implémentation du serveur local au lieu de l’implémentation in-process. Le contexte de sécurité du processus dans lequel le fournisseur s’exécute détermine le contexte de sécurité du fournisseur.
LocalSystemHost Le fournisseur, s’il est implémenté comme in-process, est chargé dans un hôte de fournisseur partagé s’exécutant dans le contexte LocalSystem. À compter de Windows Vista, LocalSystemHost n’est plus le modèle d’hébergement par défaut si le HostingModel d’un fournisseur WMI (__Win32Provider. La propriété HostingModel) n’est pas spécifié. Pour plus d’informations, consultez Sécurité des modèles d’hébergement.
LocalSystemHostOrSelfHost Le fournisseur est auto-hébergé ou chargé dans le processus Wmiprvse.exe s’exécutant sous le compte LocalSystem . Étant donné que LocalSystem est un compte à privilèges élevés, une entrée est générée dans le journal des événements Security NT pour informer les administrateurs d’un fournisseur s’exécutant dans cet état approuvé.
NetworkServiceHost Le fournisseur, s’il est implémenté comme in-process, est chargé dans le processus Wmiprvse.exe s’exécutant sous le compte NetworkService. À compter de Windows Vista, il s’agit du modèle d’hébergement par défaut si l’HostingModel d’un fournisseur WMI (__Win32Provider.propriété HostingModel) n’est pas spécifié. Pour plus d’informations, consultez Sécurité des modèles d’hébergement.
NetworkServiceHost a des privilèges limités et réduit par conséquent la possibilité d’une attaque par élévation de privilèges. Si le fournisseur fonctionne uniquement sur l’ordinateur local, définissez la propriété HostingModel sur LocalServiceHost.
NetworkServiceHostOrSelfHost Le fournisseur est auto-hébergé ou chargé dans le processus WmiPrvse.exe s’exécutant sous le compte NetworkService. NetworkServiceHostOrSelfHost est la configuration par défaut lorsque la propriété HostingModel dans __Win32Provider a la valeur NULL Étant donné que NetworkServiceHostOrSelfHost est la valeur par défaut, les fournisseurs des systèmes d’exploitation antérieurs peuvent continuer à fonctionner dans Windows Vista, Windows Server 2008 et les systèmes d’exploitation ultérieurs.
LocalServiceHost Le fournisseur, s’il est implémenté comme in-process, est chargé dans le processus Wmiprvse.exe s’exécutant sous le compte LocalService. Il s’agit du modèle d’hébergement recommandé pour les services, car LocalService a des privilèges limités.

Valeurs HostingModel pour les fournisseurs découplés

La liste suivante répertorie les valeurs du modèle d’hébergement de fournisseur pour les fournisseurs découplés.

Decoupled:Com

Le fournisseur est un fournisseur découplé hébergé dans un processus distinct qui est un client pour WMI.

L’exemple suivant montre le spécificateur FoldIdentity pour la propriété HostingModel définie sur FALSE, ce qui permet au fournisseur d’emprunter l’identité du client.

Decoupled:Com:FoldIdentity(FALSE)

Si FoldIdentity n’est pas spécifié, la valeur FoldIdentity est définie sur TRUE par défaut. Pour des raisons de sécurité, il est recommandé de ne pas spécifier FoldIdentity(FALSE), car une application non autorisée avec emprunt d’identité de délégué peut affecter un domaine entier.

L’exemple suivant montre la propriété HostingModel définie de la manière recommandée, qui équivaut à définir FoldIdentity(TRUE).

Decoupled:Com

Découplé : Noncom

À usage interne uniquement. Non pris en charge.

Sécurité des modèles d’hébergement

Dans la plupart des cas, LocalSystem est inutile et le contexte NetworkServiceHost est plus approprié. La plupart des fournisseurs WMI doivent emprunter l’identité du contexte de sécurité du client pour effectuer les opérations demandées pour le compte du client WMI. À compter de Windows Vista, un fournisseur WMI qui n’a pas de définition de modèle d’hébergement et qui s’exécute comme s’il s’exécutait sous LocalSystem ne s’exécutera pas correctement. Pour corriger cette situation, modifiez le modèle d’hébergement attendu et assurez-vous que le code du fournisseur WMI effectue les opérations dans le contexte de sécurité du client en empruntant l’identité du client WMI. LocalSystem est rarement une exigence. Si votre fournisseur doit avoir ce niveau de privilège, spécifiez le modèle d’hébergement avec l’instruction suivante dans le fichier MOF.

HostingModel=LocalSystemHost

Choix de l’inscription correcte

Accès aux espaces de noms WMI

Sécurisation des espaces de noms WMI

Classes de configuration et de résolution des problèmes du fournisseur

MSFT_Providers

Maintenance de la sécurité WMI