Delen via


Het standaardniveau voor procesbeveiliging instellen met VBScript

Een script kan gebruikmaken van de standaardinstellingen voor WMI-verificatie en imitatie. Het script heeft echter mogelijk een verbinding met meer beveiliging nodig of kan verbinding maken met een naamruimte waarvoor een versleutelde verbinding is vereist. Zie Beveiligingsbeschrijvingen voor namespace instellen en Een versleutelde verbinding met een namespace vereisenvoor meer informatie.

In het eenvoudigste geval kan een script de standaardinstellingen voor verificatie en imitatie gebruiken. WMI wordt normaal gesproken uitgevoerd in een gedeelde servicehost en deelt dezelfde verificatie als andere processen in de host. Als u het WMI-proces met een ander verificatieniveau wilt uitvoeren, voert u WMI uit met de opdracht winmgmt met de switch /standalonehost en stelt u het verificatieniveau voor WMI in het algemeen in. Zie WMI-beveiliging onderhoudenvoor meer informatie.

In het volgende script worden standaardinstellingen gebruikt voor imitatie- en verificatieniveaus.

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

U kunt ook een moniker- gebruiken in een aanroep voor GetObject-en de standaardbeveiligingsinstellingen instellen, zoals in het volgende voorbeeld.

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

Zie de volgende onderwerpen voor meer informatie over het instellen van verschillende imitatie- of verificatieniveaus in een script of voor het instellen van de standaardwaarden voor een computer:

De standaardverificatiereferenties wijzigen met VBScript

U kunt het verificatieniveau in een script wijzigen met behulp van een moniker tekenreeks en de SWbemLocator-- en SWbemSecurity--objecten.

Het verificatieniveau moet worden ingesteld op basis van de vereisten van het doelbesturingssysteem waarmee u verbinding maakt. Zie Verbinding maken tussen verschillende besturingssystemenvoor meer informatie.

In het volgende VOORBEELD van VBScript-code ziet u hoe u het verificatieniveau in een script wijzigt waarmee de vrije ruimtegegevens worden opgehaald van een externe computer met de naam 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

Gebruik in script monikerverbindingen met WMI de korte naam die wordt weergegeven in de kolom 'Moniker name/description' van de onderstaande tabel. In het volgende script is het verificatieniveau bijvoorbeeld ingesteld op WbemAuthenticationLevelPktIntegrity.

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

De volgende tabel bevat de verificatieniveaus die u kunt instellen. Deze niveaus worden gedefinieerd in Wbemdisp.tlb in de opsomming WbemAuthenticationLevelEnum.

Naam/waarde Beschrijving
WbemAuthenticationLevelDefault
0
Moniker: standaardinstelling
WMI maakt gebruik van de standaardinstelling voor Windows-verificatie. Dit is de aanbevolen instelling waarmee WMI kan onderhandelen over het niveau dat is vereist door de server die gegevens retourneert. Als de naamruimte echter versleuteling vereist, gebruikt u WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Moniker: Geen
Maakt geen gebruik van verificatie.
WbemAuthenticationLevelConnect
2
Moniker: Verbinding maken
Hiermee worden de referenties van de client alleen geverifieerd wanneer de client verbinding maakt met de server.
WbemAuthenticationLevelCall
3
Bellen
Verifieert alleen aan het begin van elke aanroep wanneer de server de aanvraag ontvangt.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Verifieert dat alle ontvangen gegevens afkomstig zijn van de verwachte client.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Authenticeert en verifieert dat geen van de gegevens die zijn overgedragen tussen de client en de server is gewijzigd.
WbemAuthenticationLevelPktPrivacy
6
Moniker: PktPrivacy
Verifieert alle vorige imitatieniveaus en versleutelt de argumentwaarde van elke externe procedure-aanroep. Gebruik deze instelling als voor de naamruimte waarmee u verbinding maakt een versleutelde verbinding is vereist.

Als u een geslaagde aanroep wilt bepalen, controleert u de retourwaarde nadat u het verificatieniveau hebt gewijzigd.

Omdat lokale verbindingen bijvoorbeeld altijd een verificatieniveau hebben van wbemAuthenticationLevelPktPrivacy, kan het volgende voorbeeld het verificatieniveau niet instellen omdat het verbinding maakt met de lokale computer.

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

Een provider kan de beveiliging voor een naamruimte zo instellen dat er geen gegevens worden geretourneerd, tenzij u pakketprivacy (PktPrivacy) gebruikt in uw verbinding met die naamruimte. Dit zorgt ervoor dat gegevens worden versleuteld wanneer deze het netwerk kruisen. Als u een lager verificatieniveau probeert in te stellen, krijgt u een bericht dat de toegang is geweigerd. Voor meer informatie, zie WMI-naamruimten beveiligen.

De standaard-imitatieniveaus wijzigen met VBScript

Wanneer u aanroepen uitvoert naar de Scripting-API voor WMI, wordt u aangeraden de standaardinstellingen te gebruiken die WMI biedt voor het imitatieniveau. Externe aanroepen en sommige providers met meer dan één netwerkhop vereisen een hoger imitatieniveau dan WMI gebruikt. Als het imitatieniveau niet voldoende is, kan een provider een aanvraag weigeren of onvolledige informatie verstrekken.

Als u het imitatieniveau niet instelt in een moniker of door SWbemSecurity.ImpersonationLevel in te stellen op een beveiligbaar object, stelt u vervolgens het standaard-DCOM-imitatieniveau voor het besturingssysteem in. Het imitatieniveau moet worden ingesteld op basis van de vereisten van het doelbesturingssysteem waarmee u verbinding maakt. Zie Verbinding maken tussen verschillende besturingssystemenvoor meer informatie.

In het volgende VBScript-codevoorbeeld ziet u hoe u het imitatieniveau wijzigt in hetzelfde script dat hierboven wordt weergegeven.

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

De volgende tabel bevat de verificatieniveaus in WbemImpersonationLevelEnum die worden gebruikt.

Naam/waarde Beschrijving
wbemImpersonationLevelAnonymous
1
Moniker: Anoniem
Verbergt de referenties van de beller. Aanroepen naar WMI kunnen mislukken met dit niveau van nabootsing.
wbemImpersonationLevelIdentify
2
Moniker: Identificeren
Hiermee kunnen objecten vragen stellen over de inloggegevens van de aanroeper. Oproepen naar WMI kunnen mislukken met dit impersonatieniveau.
wbemImpersonationLevelImpersonate
3
Moniker: imiteren
Hiermee kunnen objecten de referenties van de aanroeper gebruiken. Dit is het aanbevolen imitatieniveau voor script-API voor WMI-aanroepen.
wbemImpersonationLevelDelegate
4
Moniker: Gemachtigde
Hiermee kunnen objecten andere objecten toestaan om de referenties van de aanroeper te gebruiken. Deze imitatie werkt met script-API voor WMI-aanroepen, maar kan een onnodig beveiligingsrisico vormen.

In het volgende voorbeeld ziet u hoe u de impersonatie instelt in een moniker-tekenreeks om een specifieke instantie van Win32_Processte verkrijgen.

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

Zie Een WMI-toepassing of -script makenvoor meer informatie.

Het standaard-imitatieniveau instellen met behulp van het register

Als u toegang heeft tot het register, kunt u ook de standaard registersleutel voor het imitatieniveau instellen. Met deze sleutel geeft u op welk imitatieniveau de Scripting-API voor WMI wordt gebruikt, tenzij anders is opgegeven. Het volgende pad identificeert het registerpad.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Impersonation Level

Standaard is de registersleutel ingesteld op 3, waarmee het impersonatieniveau wordt opgegeven. Voor sommige providers is mogelijk een hoger imitatieniveau vereist.

Het SWbemSecurity-object openen in VBScript

De andere manier waarop u het imitatieniveau kunt instellen, is afkomstig van het SWbemSecurity beveiligingsobject, dat wordt weergegeven als de eigenschap Security_ van de SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath, en SwbemLocator objecten.

WMI geeft de beveiligingsinstelling van een bovenliggend object door aan de afstammelingen van het oorspronkelijke object. Daarom kunt u het imitatieniveau van een SWbemServices object instellen nadat u zich hebt aangemeld bij WMI en API-aanroepen met behulp van dit object of de API-aanroepen die ermee zijn gemaakt, zoals objecten van het type SWbemObject.

verbinding maken met WMI op een externe computer

scriptclients beveiligen