Por Infonova em 7/08/2017 em Artigo

O Windows Management Instrumentation Command-Line (WMIC) é o segredo mais zelosamente mantido pelo Windows. É uma ferramenta muito poderosa e complementa os utilitários e ferramentas de gerenciamento e administração existentes, como a linha de comando regular e o PowerShell, e é funcional em qualquer versão do Windows.

Com o WMIC, as instruções podem ser emitidas diretamente usando uma sintaxe parecida com o SQL ou através do Shell WMIC para executar comandos diretamente no console. O segundo método é mais útil quando o usuário deseja testar e ajustar seu trabalho antes de criar scripts automatizados para o gerenciamento de sistemas autônomos.   A versatilidade do WMIC é tamanha que permite executar tarefas tanto localmente, quanto remotamente.

Para iniciar o shell, digite wmic na linha de comando:

Para obter ajuda digite /? e obterá uma lista completa de opções e comandos globais disponíveis. Em seguida, expanda ainda mais digitando um dos switches ou comandos disponíveis com o sinalizador de ajuda para acessar suas opções.

A sintaxe de comando é simples, embora o usuário possa torná-lo tão complicado quanto for o nível da funcionalidade que deseja executar. Basicamente, chama-se o WMIObject seguido por uma lista de propriedades, comutadores e verbos, ação muito semelhante ao que ocorre nas operações com o SQL ou similar. Por exemplo:

wmic / node: status da lista de impressoras SERVER1

Este é o comando completo, e o que ele faz é verificar o status das impressoras conectadas a um host chamado SERVER1. A opção /node é usada para estabelecer conexão com o host e, em seguida, consultá-lo com o comando relevante. 

Nota: Em geral, letras maiúsculas são ignoradas, então o usuário deve usar apenas letras minúsculas se precisar. Dentro do Shell não é necessário usar o wmic, então o comando se torna:

/node: status da lista de impressoras SERVER1

Vejamos outros comandos muito úteis que foram extraídos dos guias da Microsoft.

Por exemplo, para ver informações sobre o sistema operacional e os hotfixes e patches instalados, digite os assoc:

Para obter informações na sua área de trabalho ou no CD-ROM:

Controlar as interfaces de rede:

Um dos recursos mais poderosos da WMIC é a capacidade de controlar o processo, obtendo uma lista completa com nomes e identificações de processo para enviar instruções e chamadas. Para exemplificarmos, digamos que haja a necessidade de encerrar um processo. Para isso, primeiro precisamos obter uma lista de todos os processos em execução.  Uma lista de processos simples já é o suficiente, no entanto, podemos personalizar os itens constantes nesta lista conforme o interesse:

process get nome, processid

Como exemplo, vamos terminar o Bloco de Notas. Observe que o PID é diferente agora, assim, utilizamos o seguinte comando, um tipo simples de declaração de frase, onde determinamos a condição e a ação, mais o valor de retorno para que o usuário possa verificar a sanidade e o sucesso do seu trabalho de administração.

process if processid = “1000” chamada terminar

Fora do Shell interativo, é possível chamar o WMIC em um modo não interativo. A funcionalidade é praticamente idêntica ao que vimos antes, exceto pelo fato de que, na criação do arquivo de lote, haverá a necessidade de muita atenção na criação da lógica completa com base na saída, além de não poder permitir nenhuma interação. Por exemplo, dentro do Shell, o usuário será solicitado a confirmar o encerramento de um processo; não é assim quando chamado o WMIC de um arquivo de lote, um trabalho agendado ou similar. Voltando ao exemplo da impressora:

wmic /node: status da lista de impressoras SERVER1

Segundo os Guias Microsoft sobre o WMIC, os principais comando de operação são os seguintes:

 

<Comando WMI>[<lista de opções globais>] <comando>
<lista de opções globais><opções globais> | <opções globais> <lista de opções globais>
<opções globais>(/NAMESPACE | /ROLE) [:<espaço para nome>] | /NODE [:<lista de identificações do computador>] | 

/IMPLEVEL [:<nível imp>] | 

/AUTHLEVEL [:<nível aut>] | 

/LOCALE [:<identificador de localidade>] | 

/PRIVILEGES [:<propriedade>] | 

/TRACE [:<opção>] | 

/RECORD [:<caminho do arquivo>] | 

/INTERACTIVE 

/USER [:<identificação do usuário>] | 

/PASSWORD [:<identificação da senha>] | 

/? [:<tipo de ajuda>]

<lista de identificações do computador><identificação do computador> | <identificação do computador> <lista de identificações do computador>
<comando >(<alias> [ <objeto WMI>] | [<alias>] <caminho where>) [<cláusula verb>] | 

EXIT | 

CLASS [<expressão de caminho da classe >] [<cláusula verb>] | 

RESTORE [ <caminho do arquivo de restauração>]

<caminho where>[PATH (<expressão do caminho> | <expressão do caminho da classe> )][ WHERE <cláusula where>]
<alias>!! nome do alias. O nome será exclusivo no contexto do espaço para nome no qual o alias é definido. Observe que CLASS, PATH, WHERE, RESTORE e EXIT não podem ser usados como nomes de alias quando aparecem no mesmo local da sintaxe.
<objeto WMI><parênteses> <parâmetros do alias> <parênteses> | <parâmetros do alias>
<expressão do caminho>!! Uma expressão de caminho WMI que inclui uma cláusula principal
<cláusula where>!! Uma cláusula where WQL que pode ser usada entre parênteses
<expressão do caminho da classe>!! Uma expressão de caminho WMI que não inclui uma cláusula principal
<parâmetros do alias>!! um ou mais literais delimitados por espaços que serão usados como substituições no valor PWhere do alias.
<cláusula verb>(<verbo> [<parâmetros do verbo>] | <verbo padrão>) [<opções do verbo>]
<verbo><nome da propriedade> | 

<identificador> | 

<nome do método>

<opções do verbo>/INTERACTIVE | 

/NOINTERACTIVE

<parâmetro do verbo><parâmetro real> | 

<parâmetro real> , <parâmetro do verbo>

<verbo padrão><verbo get> | 

<verbo list> | 

<verbo assoc> | 

<verbo call> | 

<verbo create-set> | 

<verbo delete>

<identificador><idhead> [<idrest>]
<idhead><letra>
<idrest><identificador> [<letra> | <dígito>]
<verbo get>GET [<lista de propriedades>] [<opções de get>]
<lista de propriedades><nome da propriedade> | 

<nome da propriedade>, <lista de propriedades>

<verbo list>LIST [<formato da lista>|<opções da lista>]
<verbo assoc>ASSOC [<especificador de formato>]
<verbo call>CALL <nome do método> [<lista de parâmetros reais>]
<lista de parâmetros reais><parâmetro real> | 

<parâmetro real>, <lista de parâmetros reais>

<verbo create-set>SET <lista de atribuições>| CREATE <lista de atribuições>
<lista de atribuições><nome da propriedade> = <valor da propriedade> | 

<nome da propriedade> = <valor da propriedade> <lista de atribuições>

<verbo delete>DELETE
<opções de get>/VALUE | 

/ALL | 

/TRANSLATE :<nome da tabela> | 

/EVERY :<intervalo> | 

/FORMAT [:<especificador de formato>] | 

/DESCRIPTION [:<página de código>]

<intervalo>!! valor numérico que indica a freqüência na qual os valores devem ser retornados
<especificador do formato>:<nome do arquivo xsl> | 

:TABLE | 

:MOF

<formato da lista>BRIEF | 

INSTANCE | 

SYSTEM | 

STATUS | 

FULL | 

<formato do usuário>

<opções de list>/TRANSLATE | 

/EVERY :<intervalo>| 

/FORMAT [:<especificador de formato>]

<tipo de ajuda>: BRIEF | 

: FULL

Vulnerabilidades

Apesar de o WMI ser uma ferramenta fabulosa, principalmente quando utilizada para o gerenciamento remoto, ela apresenta algumas sérias vulnerabilidades que podem trazer grandes dores de cabeça e algumas perdas irreparáveis, no entanto nada que não possa ser corrigido e adequado.

Uma forma de livrar o usuário das sessões tediosas com uma interface GUI e do atendimento local com administradores de sistemas, correndo indefinidamente e visitando máquinas para atualizar configurações, é escrever scripts para gerenciar esses sistemas remotamente. Esses scripts podem fazer isso através de chamadas para o WMI.

O WMI não oferece uma porta lógica para sistemas Windows. Ou seja, como em qualquer processo, as operações da ferramenta devem seguir o modelo de segurança do Windows implementado em seus sistemas. Reiterando, os scripts baseados em WMI devem seguir o modelo de segurança do Windows que foi implementado nos sistemas. Ele não permite que nenhum script WMI faça nada que o sistema operacional não permita. Caso os sistemas não tenham sido corrigidos ou se as políticas e os procedimentos comumente aceitos para proteger sistemas não foram observados adequadamente, o WMI poderá se tornar uma fonte autodestrutiva em sua rede. 

Primeiramente se faz necessário o entendimento dos três níveis de segurança do WMI, pois, fazendo uma analogia, assim como as companhias aéreas, não se deve cometer o equívoco de implementar qualquer novo serviço ou continuar com os antigos sem considerar as implicações de segurança.   Para evitar isso, o WMI apresenta:

  • O WMI deve obedecer às limitações de segurança do sistema operacional nativo. Ao compreender o modelo de segurança do Windows, incluindo controle de acesso e autenticação, poderá aproveitar esse conhecimento para usar com segurança essa ferramenta e bloquear o uso não autorizado. Sem esse plano de fundo, o usuário ficará continuamente frustrado e terminará concedendo acesso a todos os membros do grupo Administradores. Lembre-se, a administração não é apenas “fazer funcionar”, é fazer funcionar de maneira segura;
  • Como o WMI é um aplicativo DCOM, o DCOM – a implementação distribuída (ou seja, através da rede) do Modelo de Objeto Componente – pode ser configurado para aceitar ou rejeitar conexões WMI;
  • O serviço WMI autoriza as ações de script WMI com base nas credenciais do usuário atribuídas aos objetos WMI.

Níveis de segurança

Alguns níveis de segurança podem ser especificados na chamada WMI (uma instrução de script que chama o WMI). As chamadas WMI são consideradas o cliente no modelo de cliente / servidor DCOM. A segurança do servidor é ditada pelas configurações de registro do WMI na máquina. Se nenhuma configuração do WMI for feita e nenhum nível de segurança for especificado na chamada, os padrões prevalecerão. As configurações de registro do DCOM são configuradas na máquina local e não podem ser modificadas sem permissão explícita.

Além de obedecer às DACLs definidas em recursos, o WMI também deve operar dentro dos limites de privilégios atribuídos ao contexto de segurança sob o qual está operando. Portanto, por exemplo, se um usuário que faz uma chamada WMI quiser limpar o log de segurança para cobrir as faixas, ele deve ter esse privilégio, que normalmente é reservado aos administradores. Como precaução adicional, a especificação DCOM exige que a solicitação explícita para usar a maioria dos privilégios seja especificada na chamada do WMI.

Já o DCOM controla conexões entre aplicativos DCOM. WMI é um aplicativo DCOM; portanto, quando ao fazer chamadas para o WMI em seu script – se elas serão executadas em uma máquina local ou remota – o DCOM entra em ação. Caso o script WMI tente executar métodos WMI em uma máquina remota, ele deverá primeiro se conectar a essa máquina. Esta conexão é controlada pelas configurações do DCOM. É possível exibi-los ou modificá-los por meio do aplicativo dcomcnfg.exe ou acessando o componente WMI usando o MMC de serviços de componentes do Windows. Dcomcnfg.exe permite a configuração de configurações para todos os aplicativos DCOM. A página de propriedades padrão dcomcnfg.exe também pode ser exibida usando o MMC de Serviços de Componentes. A configuração específica do WMI ou de qualquer outro aplicativo DCOM é obtida selecionando-se os aplicativos na página Aplicativos do dcomdnfg.exe e clicando no botão Propriedades.

Configurações DCOM

Existem duas maneiras pelas quais as configurações do DCOM podem ter um efeito. Primeiro, um aplicativo DCOM pode ser executado usando vários níveis de representação. Segundo, os níveis de autenticação DCOM determinam se as credenciais de um chamador são verificadas e com qual frequência.   Os níveis de representação determinam o contexto de segurança sob o qual um aplicativo DCOM opera.

Um processo em execução no Win2K opera sob o contexto de segurança do usuário que o executa, portanto, o processo ou aplicativo só pode fazer o que a conta do usuário é permitida. O aplicativo só pode acessar os recursos (arquivos, impressoras, objetos) para os quais o usuário tem permissão. No caso de um serviço como o WMI, o contexto de segurança normal é o da conta atribuída ao serviço. Para o WMI, este é o sistema. Se isso não pudesse ser ajustado, todo script WMI operaria com a autoridade total do sistema. 

Quando um aplicativo DCOM como o WMI é executado, um nível de representação é solicitado. Em seguida, o DCOM altera o contexto de segurança sob o qual um aplicativo é executado. O script pode fazer coisas que o usuário não pode ou pode ser incapaz de fazer coisas que o usuário pode fazer. Isto é, naturalmente, tanto um benefício quanto um desastre esperando para acontecer. 

Embora o uso criterioso desse recurso permita que usuários não administrativos executem scripts projetados para permitir a responsabilidade de gerenciamento sobre máquinas designadas, o uso indevido permite que usuários não administrativos, não designados e potencialmente mal-intencionados executem scripts poderosos e possivelmente prejudiciais em sistemas locais e remotos.

Enquanto os níveis de representação do DCOM são definidos pelo script de chamada, o serviço WMI no sistema de recebimento é definido para responder aos níveis em um método que permite que usuários autorizados realizem tarefas, ao mesmo tempo em que fornece um limite de segurança capaz de desviar ataques. Conjuntos de permissões nos namespaces WMI (coleções de objetos WMI) determinam se as chamadas são bem-sucedidas. 

Os níveis de representação e as respostas WMI são:
  • Anônimo (nenhuma identificação do usuário chamador é exposta). A WMI não honrará esses pedidos; ele precisa saber quem está solicitando serviços para fazer verificações de segurança.
  • Identify (a identidade do usuário chamador é conhecida). O WMI usa suas configurações de segurança para determinar se o processo será executado. O WMI é executado no contexto de segurança da conta que executa o serviço WMI nessa máquina. O padrão é o sistema.
  • Representar (o WMI é solicitado a executar usando o contexto de segurança do chamador). O WMI usa suas configurações de segurança para determinar se o processo será executado. Se for executado, ele usa o contexto de segurança do chamador. Este é o nível de representação padrão para o WMI no Win2K.
  • Ao acessarmos, no Windows: Meu computador -> Computadores -> Serviços de Componentes -> Propriedades Padrão de Ferramentas Administrativas, temos acesso às configurações das propriedades padrão do DCOM. Para definir propriedades de segurança específicas para o WMI, execute dcomcnfg.exe em um prompt de comando e selecione Windows Management Instrumentation na guia Aplicativos e clique no botão Propriedades. O uso do dcomcnfg modifica as permissões no local Raiz das Classes HKEY para o aplicativo selecionado. Nos Serviços de Componentes, o DCOM é ativado por padrão.
  • O usuário pode desejar desativar o DCOM para impedir a administração remota usando o WMI e outros aplicativos DCOM em sistemas confidenciais. Lembre-se, no entanto, que isso bloqueará as tentativas de administração remota – até mesmo as suas. Observe que o nível de autenticação padrão é Connect, e o nível de autorização padrão é Identify.
  • Configurações soltas e potencialmente perigosas aqui seriam um nível de autenticação “Nenhum” (nenhuma credencial marcada) e um nível de autenticação de “Delegado” (gerenciamento remoto estendendo além deste sistema). Alguns sistemas Windows não são capazes de todos os níveis de delegação.
  • Delegar (conectar-se a um sistema remoto e usá-lo para conectar-se a serviços DCOM em máquinas remotas e usar o contexto de segurança do chamador). Usar esse nível de representação gera o maior risco. Um script WMI mal projetado pode causar estragos em sua rede. Deve-se observar que isso só é possível usando computadores Win2K para Win2K em um domínio do Active Directory. O nível de representação da delegação só é possível quando o Kerberos é usado como o mecanismo de autenticação.

Observe também que o COM Internet Services não está habilitado. Isso seria necessário caso o usuário queira implementar o controle remoto via Internet. Deposite uma atenção especial à guia Segurança, podendo configurar a restrição de quem pode acessar o WMI (Permitir ou Negar um grupo, mesmo que procure um WMI), iniciar (fazer chamadas WMI) e configurar o WMI (alterar essas configurações). 

Outro item que merece uma atenção especial é a configuração de quem tem o direito de configurar o WMI;   Um fato muito importante é aprender a respeitar todas as implicações de segurança do WMI, não ignorando nenhuma. Por fim, nos novos ajustes devem ser incluídos no SYSTEM!

Permissões e autorizações

O serviço WMI demanda níveis de autorização que são controlados pela configuração de DACLs em objetos WMI. Sem autorização, o operador não poderá fazer uma chamada WMI.   Essa configuração é realizada dentro do MMC de controle do WMI, que está embutido na ferramenta Administrativa de Gerenciamento do Computador ou, caso prefira, pode ser acessado carregando wmimgmt.msc.

 As permissões de autorização de serviço WMI de cada máquina aplicam-se apenas a essa máquina. Isso significa que, para manipular objetos em máquinas remotas, o usuário precisará da autorização do serviço WMI na máquina remota. Existem várias categorias de objetos WMI ou namespaces. Objetos relevantes para controle administrativo existem sob o namespace CIMV2. A configuração de segurança é semelhante à configuração de DACLs em arquivos, pastas e objetos do AD: Uma página de propriedades de segurança é aberta e a segurança é aplicada aos objetos, atribuindo permissões a grupos de usuários.

Lembre-se de que outros mecanismos de segurança impedem o uso indevido do WMI. Antes de remover grupos de permissões WMI, observe que as permissões padrão não permitem que grupos diferentes de administradores façam qualquer WMI remoto. Os usuários locais têm algum controle sobre os controles WMI específicos do Windows na máquina local. 

O WMIC é uma ferramenta muito poderosa e pouco conhecida. Pense em toda a flexibilidade e controle que ela viabiliza, tudo tão bem obscurecido pelo uso da GUI do sistema operacional Windows.  Dominar o WMIC é uma ótima maneira de aprimorar suas habilidades com o Windows e tornar a administração muito mais fácil. Ele também deve ajudá-lo a se livrar de todos os tipos de ferramentas de terceiros que atuam apenas como frontends sofisticados para uma tecnologia que já existe.