Назад | Перейти на главную страницу

Как я могу определить, установлен ли антивирусный продукт?

У нас есть большая установка с более чем 15 000 станков. У них должна быть установлена ​​версия Trend Micro; однако мы этого точно не знаем.

Это все коробки Windows, которые включают XP с различными уровнями SP, Vista RTM и SP1, а также несколько серверов 2000 и 2003.

Как я могу определить:

  1. Установлен ли ЛЮБОЙ продукт AV?
  2. Какая версия продукта установлена?
  3. Какая версия файла выкройки находится на коробке?

Идеи?

Спасибо,

Поскольку вы говорите о 15 000 хостов, запросы к каждому из них из сети будут крайне неэффективными.

Тогда Right Thing To Do ™ - это запустить сторожевой таймер на каждом хосте, чтобы убедиться, что соответствующее программное обеспечение установлено и работает. Этот сторожевой таймер может быть частью программного обеспечения, работающего как служба, запланированным сценарием или даже аппаратным, если вы используете что-то вроде Intel vPro.

Чтобы проверить, установлено ли программное обеспечение AV, вы можете использовать следующую команду PowerShell -

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

Обратите внимание, что в конце у вас есть filter аргумент, который вы можете настроить, чтобы убедиться, что вы смотрите на правильный продукт.

Немного поиграв с like оператор, вы должны быть в состоянии прибить описание антивируса и незначительные вариации здесь и там. Обратите внимание, что мой пример выше (все, что содержит слово «антивирус») довольно упрощен. Вместо этого вам следует искать определенные шаблоны, соответствующие одобренному вами антивирусному программному обеспечению (например, «Trend Micro Antivirus%»).

В любом случае, приведенная выше команда вернет набор установленных продуктов, соответствующих вашему filter заявление. Отсюда вы можете проверить, $avSoftware.Count больше нуля, и в этом случае у вас установлено антивирусное программное обеспечение. В приведенном ниже примере перечислено все установленное антивирусное программное обеспечение -

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

Вместо того, чтобы просто печатать сообщение о том, что AV не обнаружено, вам, очевидно, следует сделать что-то более полезное, например

  • Уведомить администратора
  • Установить AV из сети

Вы также сказали, что хотите получить версию установленного AV. Для этого вы можете использовать Version собственность Win32_Process. Давайте изменим приведенный выше код таким образом, чтобы также напечатать номера версий для установленного программного обеспечения -

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

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

Что касается версии установленных файлов определений вирусов, вам придется полагаться на каждый конкретный интерфейс AV WMI. Для этого вам нужно обратиться к документации поставщика.

Еще одна вещь, о которой нужно помнить. Вероятно, недостаточно знать, что на хосте установлен AV, если AV не работает. После проверки того, какой AV установлен, вы должны убедиться, что его процесс запущен. Для этого вам нужно знать, каков соответствующий процесс для каждого вашего программного обеспечения AV, и искать их так:

$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 
}

В приведенном выше примере выполняется поиск процесса Spybot (не совсем AV, но вы понимаете), который называется "TeaTimer.exe". Измените его, чтобы вместо этого искать свой процесс.

Итак, все это говорит о том, что если вы имеете дело с тысячами подобных хостов, вам, вероятно, следует инвестировать в какой-нибудь инструмент управления (например, LANdesk, Microsoft System Center или Level Platforms). Эти инструменты сделают вашу жизнь намного проще.

В текущих версиях Windows (xp sp3 +, vista, win 7) вы можете запросить того же поставщика WMI, который использует Windows Security Center, чтобы узнать, установлен ли антивирусный продукт и обновлен ли он.

Вот пример:

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

Тем не менее, не все антивирусные продукты будут регистрировать поставщика WMI, но я подозреваю, что большинство популярных из них будут. Кроме того, неясно, поддерживается ли это официально Microsoft, поэтому в будущих версиях он может исчезнуть.

Вы можете попробовать это в сочетании с другими предложениями WMI здесь, вернувшись к сканированию установленных продуктов, если это не сработает.

Поскольку вы упомянули Trend Micro, а мы используем Trend, вот что мы делаем. Запланированная задача выполняет полное сканирование системы и помещает результаты в текстовый файл. Фактически, это файл журнала с датой в качестве имени файла ... например, 20090517.log в папке C: \ TRENDMICRO. Поскольку в нем есть только результаты сканирования, это небольшой файл.

В нашем случае с примерно 100 компьютерами сценарию PowerShell на сервере достаточно легко пройти через все компьютеры, объединить эти файлы и искать только те, у которых нет строки «Количество найденных вирусов (0) " в них. Очевидно, что если этого файла и фразы нет, значит, что-то не так: AV недавно не запускался, вирус обнаружен, AV не установлен и т.д.

Но разве нет корпоративных версий AV, которые все делают за вас, вместо версии моего бедняги?

+1 за Knox относительно корпоративной версии. Я согласен. Решение Trend для корпоративных настольных ПК имеет серверную часть, которая отслеживает клиентов, а также механизмы сканирования и шаблоны, которые у них есть в настоящее время. Он также позволяет вам развертывать. Я бы использовал это для достижения вашей цели. С его помощью разверните переустановку OfficeScan. Я бы даже не стал утруждать себя развертыванием скриптов, чтобы выяснить, где вы находитесь на данном этапе игры. Лучше всего начать сначала. Работайте с Trend над лицензированием, если у вас еще нет корпоративных инструментов (что меня действительно удивит). Если вы этого не сделаете, кто-то должен будет отчитаться за неправильные решения о покупке.

Я бы сделал сценарий входа в систему, который проверял бы различные записи или файлы реестра, чтобы определить, установлен ли продукт. Затем сценарий может создать журнал машин, которые работают или нет.

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

Не уверен, насколько это практично, учитывая 15 000 хостов, но если у вас есть список машин, которые вы хотите проверить, в текстовом файле, вы можете запросить ключ удаления в реестре и проанализировать результаты.

Текстовый файл с именем computers.txt с именем машины в каждой строке:

COMPUTER1
COMPUTER2

Пример с именем 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

Я понимаю, что это может быть небольшая информационная перегрузка в тексте, но это позволяет вам анализировать результаты для ЛЮБОГО программного обеспечения A / V, которое вы ищете, не зная записи реестра, в которой содержится информация об удалении каждого продукта.

Вы также можете настроить это для определенных записей реестра продукта, заменив запрос реестра для ключей реестра конкретного продукта.

Отвечая на ваши вопросы по очереди

  1. и 2.

Я бы написал сценарий, который будет запускаться в каждой системе. Вы запросите раздел реестра для удаления. Вам нужно будет просмотреть каждый подключ. В этом случае лучше всего использовать WMI. В этом ключе вы увидите название продукта и версию. Видеть этот пример для написания сценариев.

3.

Я бы использовал метод проб и ошибок, но в случае с Trend, я бы предположил, что они поместят свою версию определения в реестр в HKEY_LOCAL_MACHINE \ Software \ TrendMicro или в config или ini-файл в своем локальном каталоге.

Это будет учитывать только эту версию программного обеспечения AV. Вам придется сделать это для нескольких версий.