Définir le niveau de sécurité du processus par défaut avec VBScript

Un script peut utiliser les paramètres d’authentification et d’emprunt d’identité WMI par défaut. Toutefois, le script peut avoir besoin d’une connexion avec plus de sécurité ou peut se connecter à un espace de noms qui nécessite une connexion chiffrée. Pour plus d’informations, consultez Définition des descripteurs de sécurité namepace et Exigence d’une connexion chiffrée à un espace de noms.

Dans le cas le plus simple, un script peut utiliser les paramètres d’authentification et d’emprunt d’identité par défaut. WMI s’exécute normalement dans un hôte de service partagé et partage la même authentification que les autres processus de l’hôte. Si vous souhaitez exécuter le processus WMI avec un niveau d’authentification différent, exécutez WMI avec la commande winmgmt avec le commutateur /standalonehost et définissez le niveau d’authentification pour WMI en général. Pour plus d’informations, consultez Maintenance de la sécurité WMI.

Le script suivant utilise les paramètres par défaut pour les niveaux d’emprunt d’identité et d’authentification.

strComputer = "." 
Set objServices = GetObject("winmgmts:\\" _
    & strComputer & "\root\CIMV2") 
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

Vous pouvez également utiliser un moniker dans un appel à GetObject et définir les paramètres de sécurité par défaut, comme dans l’exemple suivant.

strComputer = "." 
Set objServices = GetObject( _
    "winmgmts:{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!root/cimv2")
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

Pour plus d’informations sur la définition de différents niveaux d’emprunt d’identité ou d’authentification dans un script, ou pour définir les valeurs par défaut d’un ordinateur, consultez les rubriques suivantes :

Modification des informations d’identification d’authentification par défaut à l’aide de VBScript

Vous pouvez modifier le niveau d’authentification dans un script à l’aide d’une chaîne moniker et des objets SWbemLocator et SWbemSecurity.

Le niveau d’authentification doit être défini en fonction des exigences du système d’exploitation cible auquel vous vous connectez. Pour plus d’informations, consultez Connexion entre différents systèmes d’exploitation.

L’exemple de code VBScript suivant montre comment modifier le niveau d’authentification dans un script qui obtient les données d’espace libre à partir d’un ordinateur distant nommé « Server1 ».

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{authenticationLevel=Pkt}!\\" _
    & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
    Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
        "FreeSpace: " & vbTab & objDisk.FreeSpace 
    NextstrComputer = "." 
    Set objServices = GetObject( "winmgmts:{impersonationLevel=impersonate," _
                               & "authenticationLevel=pktPrivacy}!root/cimv2")
    Set objProcessSet = objServices.ExecQuery("SELECT Name FROM Win32_Process",,48)
    For Each Process in objProcessSet
        WScript.Echo Process.Name
    Next
Next

Dans les connexions moniker de script à WMI, utilisez le nom court indiqué dans la colonne « Nom/description moniker » du tableau ci-dessous. Par exemple, dans le script suivant, le niveau d’authentification est défini sur WbemAuthenticationLevelPktIntegrity.

SetobjWMIService = GetObject( _
    "winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")

Le tableau suivant répertorie les niveaux d'authentification que vous pouvez définir. Ces niveaux sont définis dans Wbemdisp.tlb dans l’énumération WbemAuthenticationLevelEnum.

Nom/valeur Description
WbemAuthenticationLevelDefault
0
Moniker : par défaut
WMI utilise le paramètre d'authentification par défaut de Windows. Il s’agit du paramètre recommandé qui permet à WMI de négocier au niveau requis par le serveur retournant des données. Toutefois, si l’espace de noms nécessite un chiffrement, utilisez WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Moniker : Aucun
N’utilise aucune authentification.
WbemAuthenticationLevelConnect
2
Moniker : Se connecter
Spécifie que DCOM authentifie les informations d’identification du client uniquement quand le client établit une relation avec le serveur.
WbemAuthenticationLevelCall
3
Appeler
Authentifie les informations d’identification du client uniquement au début de chaque appel, lorsque le serveur reçoit la demande.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Authentifie que tous les paquets de données sont reçus du client attendu.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Spécifie que DCOM authentifie et vérifie qu’aucune des données transférées entre le client et le serveur n’a été modifiée.
WbemAuthenticationLevelPktPrivacy
6
Moniker: PktPrivacy
Spécifie que DCOM authentifie tous les niveaux précédents et chiffre la valeur d’argument de chaque appel de procédure distante. Utilisez ce paramètre si l’espace de noms auquel vous vous connectez nécessite une connexion chiffrée.

Pour déterminer un appel réussi, case activée la valeur de retour après avoir modifié le niveau d’authentification.

Par exemple, étant donné que les connexions locales ont toujours un niveau d’authentification wbemAuthenticationLevelPktPrivacy, l’exemple suivant ne parvient pas à définir le niveau d’authentification, car il se connecte à l’ordinateur local.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!" _
    & "\\" & strComputer & "\root\cimv2")

Un fournisseur peut définir la sécurité sur un espace de noms afin qu’aucune donnée ne soit retournée, sauf si vous utilisez la confidentialité des paquets (PktPrivacy) dans votre connexion à cet espace de noms. Cela garantit que les données sont chiffrées au fur et à mesure qu’elles traversent le réseau. Si vous essayez de définir un niveau d’authentification inférieur, vous obtiendrez un message d’accès refusé. Pour plus d’informations, consultez Sécurisation des espaces de noms WMI.

Modification des niveaux d’emprunt d’identité par défaut à l’aide de VBScript

Lorsque vous effectuez des appels à l’API script pour WMI, il est recommandé d’utiliser les valeurs par défaut que WMI fournit pour le niveau d’emprunt d’identité. Les appels distants et certains fournisseurs avec plusieurs tronçons réseau nécessitent un niveau d’emprunt d’identité supérieur à celui utilisé par WMI. Si le niveau d’emprunt d’identité n’est pas suffisant, un fournisseur peut refuser une demande ou fournir des informations incomplètes.

Si vous ne définissez pas le niveau d’emprunt d’identité dans un moniker ou en définissant SWbemSecurity.ImpersonationLevel sur un objet sécurisable, définissez le niveau d’emprunt d’identité DCOM par défaut pour le système d’exploitation. Le niveau d’emprunt d’identité doit être défini en fonction des exigences du système d’exploitation cible auquel vous vous connectez. Pour plus d’informations, consultez Connexion entre différents systèmes d’exploitation.

L’exemple de code VBScript suivant montre la modification du niveau d’emprunt d’identité dans le même script que celui indiqué ci-dessus.

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" _
                              & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
             "FreeSpace: " & vbTab & objDisk.FreeSpace 
Next

Le tableau suivant répertorie les niveaux d’authentification dans WbemImpersonationLevelEnum qui utilisent.

Nom/valeur Description
wbemImpersonationLevelAnonymous
1
Moniker : Anonyme
Masque les informations d'identification de l'appelant. Les appels à WMI peuvent échouer avec ce niveau d'emprunt d'identité.
wbemImpersonationLevelIdentify
2
Moniker : Identifier
Permet aux objets d'interroger les informations d'identification de l'appelant. Les appels à WMI peuvent échouer avec ce niveau d'emprunt d'identité.
wbemImpersonationLevelImpersonate
3
Moniker: Emprunt d’identité
Permet aux objets d'utiliser les informations d'identification de l'appelant. Ce niveau d'emprunt d'identité est recommandé pour les appels à WMI.
wbemImpersonationLevelDelegate
4
Moniker : Délégué
Permet aux objets d'autoriser d'autres objets à utiliser les informations d'identification de l'appelant. Cette emprunt d’identité fonctionne avec l’API script pour les appels WMI, mais peut constituer un risque de sécurité inutile.

L’exemple suivant montre comment définir l’emprunt d’identité dans une chaîne moniker lors de l’obtention d’une instance spécifique de Win32_Process.

Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")

Pour plus d’informations, consultez Création d’une application ou d’un script WMI.

Définition du niveau d’emprunt d’identité par défaut à l’aide du Registre

Si vous avez accès au Registre, vous pouvez également définir la clé de Registre de niveau d’emprunt d’identité par défaut. Cette clé spécifie le niveau d’emprunt d’identité utilisé par l’API script pour WMI, sauf indication contraire. Le chemin d’accès suivant identifie le chemin du Registre.

HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\WBEM\Script\Espace de noms par défaut

Par défaut, la clé de Registre est définie sur 3, en spécifiant le niveau d’emprunt d’identité. Certains fournisseurs peuvent nécessiter un niveau plus élevé d’emprunt d’identité.

Accès à l’objet SWbemSecurity dans VBScript

L’autre façon de définir le niveau d’emprunt d’identité est à partir de l’objet de sécurité SWbemSecurity, qui apparaît comme la propriété Security_ des objets SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath et SwbemLocator.

WMI transmet le paramètre de sécurité d’un objet parent aux descendants de l’objet d’origine. Par conséquent, vous pouvez définir le niveau d’emprunt d’identité d’un objet SWbemServices après vous être connecté à WMI et aux appels d’API à l’aide de cet objet ou d’objets créés à partir de celui-ci, tels que les objets de type SWbemObject.

Connexion à WMI sur un ordinateur distant

Sécurisation des clients de script