it-swarm-pt.tech

Como posso determinar se um produto antivírus está instalado?

Temos uma grande instalação com mais de 15.000 máquinas. Eles devem ter uma versão do Trend Micro instalada; no entanto, não temos certeza disso.

Estas são todas as caixas do Windows que incluem XP com vários níveis SP níveis, Vista ambos RTM e SP1, e vários 2000 e Servidores de 2003.

Como posso determinar:

  1. Se ALGUM produto AV está instalado?
  2. Qual versão do produto está instalada?
  3. Qual versão do arquivo de padrão está na caixa?

Ideias?

Obrigado,

4
NotMe

Já que você está falando de 15.000 hosts, consultar cada um deles na rede será altamente ineficiente.

O Right Thing To Do ™ então é ter um watchdog rodando em cada Host para garantir que o software apropriado esteja instalado e rodando. Este watchdog pode ser um pedaço de software rodando como um serviço, um script programado ou mesmo baseado em hardware se você usar algo como Intel vPro.

Para verificar se um software AV está instalado, você pode usar o seguinte comando do PowerShell -

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
              -computername "." -filter "Name like '%antivirus%'"

Observe que, no final, você tem um argumento filter que pode ser personalizado para ter certeza de que está procurando o produto certo.

Depois de brincar um pouco com o operador like, você deve ser capaz de acertar a descrição do antivírus e pequenas variações aqui e ali. Observe que meu exemplo acima (qualquer coisa que contenha a palavra "antivírus") é bastante simplista. Em vez disso, você deve procurar padrões específicos que correspondam ao seu software antivírus aprovado (por exemplo, "Trend Micro Antivirus%")

De qualquer forma, o comando acima retornará uma coleção de produtos instalados que correspondem à sua instrução filter. A partir daqui, você pode testar se $avSoftware.Count é maior que zero e, nesse caso, você tem um software antivírus instalado. O exemplo abaixo lista todos os softwares antivírus instalados -

if ($avSoftware.Count -gt 0) {
    foreach ($av in $avSoftware) {
        write-Host $p.Name
    }
} else {
    write-Host "No AV software found"
}

Em vez de apenas imprimir uma mensagem dizendo que nenhum AV foi encontrado, você deve obviamente fazer algo mais útil, por exemplo,.

  • Notificar um administrador
  • Instale um AV da rede

Você também disse que gostaria de obter a versão do AV instalado. Para fazer isso, você pode usar a propriedade Version do Win32_Process. Vamos modificar o código acima assim para imprimir também os números da versão do software instalado -

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
              -computername "." -filter "Name like '%antivirus%'"

foreach ($av in $avSoftware) {
    write-Host $av.Name, $av.Version
}

Quanto à versão dos arquivos de definição de vírus instalados, você teria que confiar em cada interface específica do AV WMI. Você terá que consultar a documentação do fornecedor para isso.

Mais uma coisa para lembrar. Provavelmente não é suficiente saber que o Host tem AV instalado se o AV não estiver em execução. Após verificar qual AV está instalado, certifique-se de que seu processo esteja em execução. Para fazer isso, você terá que saber qual é o processo apropriado para cada um de seus softwares AV e procurá-los assim -

$processes = get-wmiobject -class "Win32_Process" -namespace "root\cimv2" `
             -computername "." -filter "Name = 'TeaTimer.exe'"

if ($processes.Count -gt 0) {
    foreach ($p in $processes) {
        write-Host $p.Name
} else {
    # AV not running. Launch it here or notify someone 
}

O exemplo acima procura o processo do Spybot (não exatamente AV, mas você entendeu), que é chamado de "TeaTimer.exe". Modifique-o para procurar seu processo.

Agora, com tudo isso dito, se você está lidando com milhares de hosts como esse, provavelmente deve investir em alguma ferramenta de gerenciamento (por exemplo, LANdesk, Microsoft System Center ou Level Platforms). Essas ferramentas tornariam sua vida muito mais fácil.

7
Roberto Selbach

Nas versões atuais do Windows (xp sp3 +, Vista, win 7), você pode consultar o mesmo provedor WMI que o Windows Security Center usa para saber se um produto antivírus está instalado e atualizado.

Aqui está um exemplo:

Set objSWbemServices = GetObject("winmgmts:\\.\root\SecurityCenter")
Set colFirewall = objSWbemServices.ExecQuery("Select * From antivirusProduct",,48)
For Each objAntiVirusProduct In colFirewall
  WScript.Echo "companyName: " & objAntiVirusProduct.companyName
  WScript.Echo "displayName: " & objAntiVirusProduct.displayName
  WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid
  WScript.Echo "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled
  WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate
  WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber
Next

Dito isso, nem todos os produtos antivírus registram um provedor WMI, mas suspeito que a maioria dos mais populares o fará. Além disso, não está claro se isso é oficialmente suportado pela Microsoft, portanto, pode desaparecer em versões futuras.

Você pode tentar em combinação com as outras sugestões de WMI aqui, voltando para a digitalização dos produtos instalados se isso não funcionar.

3
Chris Sears

Já que você mencionou a Trend Micro e nós usamos a Trend, aqui está o que fazemos. Uma tarefa agendada faz uma verificação completa do sistema e coloca os resultados em um arquivo de texto. Na verdade, é um arquivo de log com a data como nome do arquivo ... como 20090517.log na pasta C:\TRENDMICRO. Como contém apenas os resultados da verificação, é um arquivo pequeno.

Em nosso caso, com cerca de 100 computadores, é fácil o suficiente para um script do PowerShell no servidor percorrer todos os computadores e concatenar esses arquivos e procurar apenas aqueles que não têm a string "Contagem de vírus encontrado (0) " neles. Obviamente, se esse arquivo e essa frase não estiverem lá, algo está errado: o AV não foi executado recentemente, o vírus foi encontrado, o AV não foi instalado, etc. Você provavelmente precisa de algo um pouco mais sofisticado para aumentá-lo.

Mas não existem versões empresariais do AV que fazem tudo por você, em vez da versão do meu pobre?

2
Knox

1 para Knox em relação à versão empresarial. Concordo. A solução de desktop empresarial da Trend tem um servidor que mantém o controle dos clientes e quais mecanismos de varredura e padrões eles possuem atualmente. Ele também permite implantar. Eu usaria isso para trabalhar em direção ao seu objetivo. Implante uma reinstalação do OfficeScan usando isso. Eu nem me preocuparia com o esforço de implantar scripts para descobrir onde você está neste ponto do jogo. Melhor começar de novo. Trabalhe com a Trend no licenciamento se você ainda não tem as ferramentas corporativas (o que realmente me surpreenderia). Se você não fizer isso, alguém precisará se responsabilizar pelas más decisões de compra.

2
squillman

Eu faria um script de logon que verificava várias entradas de registro ou arquivos para determinar se um produto foi instalado. Em seguida, o script pode criar um log de máquinas que fazem ou não.

Dim WSHShell,strRegKey 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
strRegKey="HKLM\Software\Symantec\Version" 
WSHShell.RegRead(strRegKey) 
Wscript.quit(0) 
1
Jack B Nimble

Não tenho certeza de como isso é prático, dados 15.000 hosts, mas se você tiver uma lista das máquinas que deseja verificar em um arquivo de texto, pode consultar a chave de desinstalação no registro e analisar os resultados.

Arquivo de texto denominado computers.txt com um nome de máquina por linha:

COMPUTER1
COMPUTER2

Exemplo chamado batch.bat:

@echo off

for /F %%i in (computers.txt) do call :SUB %%i

GOTO :EOF

:SUB
echo %1
reg query "\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s

Sei que isso pode ser um pouco de sobrecarga de informações no texto, mas permite que você analise os resultados de QUALQUER software A/V que esteja procurando, sem saber a entrada do registro em que cada informação de desinstalação do produto está contida.

Você também pode personalizar isso para entradas de registro de produtos específicos, substituindo a consulta de registro pelas chaves de registro do produto específico.

1
romandas

Respondendo suas perguntas por vez

  1. e 2.

Gostaria de escrever um script para ser executado em cada sistema. Você consultará a chave de registro de desinstalação. Você terá que examinar cada subchave. Usar o WMI é o melhor método neste caso. Nessa chave, você verá o nome do produto e a versão. Consulte este exemplo para scripts.

3 -.

Eu faria tentativa e erro, mas no caso do Trend, imagino que eles colocariam sua versão de definição no registro em HKEY_LOCAL_MACHINE\Software\TrendMicro ou em um arquivo config ou ini em seu diretório local.

Isso representaria apenas essa versão do software AV. Você terá que fazer isso para várias versões.

1
Rob Haupt