Partilhar via


Definir o nível de segurança de processo padrão com VBScript

Um script pode usar as configurações padrão de autenticação e impersonação WMI. No entanto, o script pode precisar de uma conexão com mais segurança ou pode se conectar a um namespace que requer uma conexão criptografada. Para obter mais informações, consulte Definindo descritores de segurança de namespace e Exigindo uma conexão criptografada com um namespace.

No caso mais simples, um script pode usar as configurações padrão de autenticação e representação. O WMI normalmente é executado em um host de serviço compartilhado e compartilha a mesma autenticação que outros processos no host. Se você quiser executar o processo WMI com um nível diferente de autenticação, execute o WMI com o comando winmgmt com a opção de /standalonehost e defina o nível de autenticação para o WMI em geral. Para obter mais informações, consulte Mantendo a segurança do WMI.

O script a seguir usa configurações padrão para níveis de representação e autenticação.

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

Você também pode usar um de moniker em uma chamada para GetObjecte definir as configurações de segurança padrão, como no exemplo a seguir.

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

Para obter mais informações sobre como definir diferentes níveis de representação ou autenticação em um script ou para definir os valores padrão para um computador, consulte os seguintes tópicos:

Alterando as credenciais de autenticação padrão usando o VBScript

Você pode alterar o nível de autenticação em um script usando um moniker cadeia de caracteres e os objetos SWbemLocator e SWbemSecurity.

O nível de autenticação deve ser definido de acordo com os requisitos do sistema operacional de destino ao qual você está se conectando. Para obter mais informações, consulte Conectando entre diferentes sistemas operacionais.

O exemplo de código VBScript a seguir mostra como alterar o nível de autenticação em um script que obtém os dados de espaço livre de um computador remoto chamado "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

Em conexões de moniker de script para WMI, use o nome curto mostrado na coluna "Nome do moniker/descrição" da tabela abaixo. Por exemplo, no script a seguir, o nível de autenticação é definido como WbemAuthenticationLevelPktIntegrity.

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

A tabela a seguir lista os níveis de autenticação que você pode definir. Esses níveis são definidos em Wbemdisp.tlb na enumeração WbemAuthenticationLevelEnum.

Nome/valor Descrição
WbemAuthenticationLevelDefault
0
Moniker: Padrão
O WMI usa a configuração de autenticação padrão do Windows. Essa é a configuração recomendada que permite que o WMI negocie até o nível exigido pelo servidor que retorna dados. No entanto, se o namespace exigir criptografia, use WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Apelido: Nenhum
Não usa autenticação.
WbemAuthenticationLevelConnect
2
Apelido: Conectar
Autentica as credenciais do cliente somente quando o cliente estabelece um relacionamento com o servidor.
WbemAuthenticationLevelCall
3
Ligar
Autentica somente no início de cada chamada quando o servidor recebe a solicitação.
WbemAuthenticationLevelPkt
4
Apelido: Pkt
Autentica que todos os dados recebidos são do cliente esperado.
WbemAuthenticationLevelPktIntegrity
5
Apelido: PktIntegrity
Autentica e verifica se nenhum dos dados transferidos entre cliente e servidor foi modificado.
WbemAuthenticationLevelPktPrivacy
6
Pseudónimo: PktPrivacy
Autentica todos os níveis de impersonação anteriores e cifra o valor do argumento de cada chamada de procedimento remoto. Use essa configuração se o namespace ao qual você está se conectando exigir uma conexão criptografada.

Para determinar uma chamada bem-sucedida, verifique o valor de retorno depois de alterar o nível de autenticação.

Por exemplo, como as conexões locais sempre têm um nível de autenticação de wbemAuthenticationLevelPktPrivacy, o exemplo a seguir não consegue definir o nível de autenticação porque ele se conecta ao computador local.

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

Um provedor pode definir a segurança em um namespace para que nenhum dado seja retornado, a menos que você use a privacidade de pacotes (PktPrivacy) em sua conexão com esse namespace. Isso garante que os dados sejam criptografados à medida que atravessam a rede. Se você tentar definir um nível de autenticação mais baixo, receberá uma mensagem de acesso negado. Para obter mais informações, consulte Protegendo namespaces WMI.

Alterando os níveis de representação padrão usando VBScript

Quando você faz chamadas para a API de script para WMI, é recomendável usar os padrões que o WMI fornece para o nível de representação. Chamadas remotas e alguns fornecedores com mais de um salto de rede exigem um nível de impersonação mais alto do que o WMI utiliza. Se o nível de representação não for suficiente, um provedor pode recusar uma solicitação ou fornecer informações incompletas.

Se não definir o nível de representação num moniker ou ao definir SWbemSecurity.ImpersonationLevel num objeto que pode ser protegido, então defina o nível de representação DCOM padrão para o sistema operativo. O nível de representação deve ser definido de acordo com os requisitos do sistema operacional de destino ao qual você está se conectando. Para obter mais informações, consulte Conectando entre diferentes sistemas operacionais.

O exemplo de código VBScript a seguir mostra a alteração do nível de representação no mesmo script mostrado acima.

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

A tabela a seguir lista os níveis de autenticação em WbemImpersonationLevelEnum que usam.

Nome/valor Descrição
wbemImpersonationLevelAnonymous
1
Apelido: Anónimo
Oculta as credenciais do chamador. As chamadas para WMI podem falhar com esse nível de representação.
wbemImpersonationLevelIdentify
2
Apelido: Identificar
Permite que os objetos consultem as credenciais do chamador. As chamadas para WMI podem falhar com esse nível de representação.
wbemImpersonationLevelImpersonate
3
Apelido: Imitar
Permite que os objetos usem as credenciais do chamador. Este é o nível de personificação recomendado para a API de scripting para chamadas WMI.
wbemImpersonationLevelDelegate
4
Denominação: Delegado
Permite que outros objetos usem as credenciais do chamador. Essa representação funcionará com a API de script para chamadas WMI, mas pode constituir um risco de segurança desnecessário.

O exemplo a seguir demonstra como configurar a representação numa string de moniker ao obter uma instância específica de Win32_Process.

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

Para obter mais informações, consulte Criando um aplicativo WMI ou um script.

Definindo o nível de representação padrão usando o Registro

Se tiveres acesso ao registo, também podes definir a chave do registo de nível de representação padrão. Esta chave especifica qual nível de impersonação a API de Scripting para WMI usa, a menos que seja especificado de outra forma. O caminho indicado identifica o caminho do registo.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Nível de representação padrão

Por padrão, a chave do Registro é definida como 3, especificando o nível de impersonação Representar. Alguns provedores podem exigir um nível mais alto de falsificação de identidade.

Acessando o objeto SWbemSecurity no VBScript

A outra forma de definir o nível de representação é a partir do objeto de segurança SWbemSecurity, que aparece como a propriedade Security_ dos objetos SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPathe SwbemLocator.

O WMI passa a configuração de segurança de um objeto pai para os descendentes do objeto original. Portanto, é possível definir o nível de representação de um objeto SWbemServicesapós iniciar sessão no WMI, utilizando este objeto ou objetos criados a partir dele em chamadas API, como objetos do tipo SWbemObject.

Conectando-se ao WMI em um computador remoto

Proteção de Clientes de Script