it-swarm-korea.com

바이러스 백신 제품이 설치되어 있는지 어떻게 확인할 수 있습니까?

우리는 15,000 대가 넘는 기계로 대규모 설치를하고 있습니다. Trend Micro 버전이 설치되어 있어야합니다. 그러나 우리는 그것을 확실히 알지 못합니다.

이들은 XP 다양한 SP 수준, Vista 모두 RTM 및 SP1 및 여러 2000 및 2003 서버.

어떻게 결정할 수 있습니까?

  1. AV 제품이 설치되어 있습니까?
  2. 어떤 버전의 제품이 설치되어 있습니까?
  3. 상자에있는 패턴 파일의 버전은 무엇입니까?

아이디어?

감사,

4
NotMe

15,000 개의 호스트에 대해 이야기하고 있으므로 네트워크에서 각각의 호스트를 쿼리하는 것은 매우 비효율적입니다.

올바른 일은 각 호스트에서 감시 장치를 실행하여 적절한 소프트웨어가 설치되어 실행되고 있는지 확인하는 것입니다. 이 감시 장치는 서비스로 실행되는 소프트웨어, 예약 된 스크립트 또는 Intel vPro와 같은 것을 사용하는 경우 하드웨어 기반 일 수 있습니다.

AV 소프트웨어가 설치되어 있는지 확인하려면 다음 PowerShell 명령을 사용할 수 있습니다.

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

마지막에는 올바른 제품을 찾고 있는지 확인하기 위해 사용자 지정할 수있는 filter 인수가 있습니다.

like 연산자를 조금 사용하면 여기저기서 바이러스 백신 설명과 사소한 변형을 확인할 수 있습니다. 위의 예 ( "antivirus"라는 단어가 포함 된 모든 것)는 매우 간단합니다. 대신 승인 된 바이러스 백신 소프트웨어와 일치하는 특정 패턴을 찾아야합니다 (예 : "Trend Micro Antivirus %")

어쨌든 위의 명령은 filter 문과 일치하는 설치된 제품 모음을 반환합니다. 여기에서 $avSoftware.Count가 0보다 큰지 테스트 할 수 있습니다.이 경우 바이러스 백신 소프트웨어가 설치되어 있습니다. 아래 예는 설치된 모든 바이러스 백신 소프트웨어를 나열합니다.

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

AV를 찾을 수 없다는 메시지를 인쇄하는 대신 분명히 더 유용한 작업을 수행해야합니다.

  • 관리자에게 알림
  • 네트워크에서 AV 설치

또한 설치된 AV의 버전을 받고 싶다고 말했습니다. 이를 위해 Win32_ProcessVersion 속성을 사용할 수 있습니다. 위의 코드를 이와 같이 수정하여 설치된 소프트웨어의 버전 번호도 인쇄 해 보겠습니다.

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

위의 예는 "TeaTimer.exe"라는 Spybot 프로세스 (정확히 AV는 아니지만 그림을 얻음)를 찾습니다. 대신 프로세스를 찾도록 수정하십시오.

이제는 이와 같은 수천 개의 호스트를 다루는 경우 아마도 일부 관리 도구 (예 : LANdesk, Microsoft System Center 또는 Level Platforms)에 투자해야 할 것입니다. 이러한 도구는 삶을 훨씬 더 쉽게 만들어 줄 것입니다.

7
Roberto Selbach

최신 버전의 Windows (xp sp3 +, Vista, win 7)에서는 Windows 보안 센터에서 사용하는 동일한 WMI 공급자를 쿼리하여 바이러스 백신 제품이 설치되어 있고 최신 상태인지 확인할 수 있습니다.

예를 들면 다음과 같습니다.

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 제안과 함께 시도해 볼 수 있으며, 이것이 작동하지 않으면 설치된 제품을 검색하는 것으로 돌아갈 수 있습니다.

3
Chris Sears

Trend Micro를 언급하고 우리는 Trend를 사용하므로 다음과 같은 작업을 수행합니다. 예약 된 작업은 시스템 전체를 검사하고 결과를 텍스트 파일에 저장합니다. 실제로 C :\TRENDMICRO 폴더의 20090517.log와 같이 파일 이름으로 날짜가있는 로그 파일입니다. 여기에는 스캔 결과가 있기 때문에 작은 파일입니다.

약 100 대의 컴퓨터를 사용하는 경우 서버의 powershell 스크립트가 모든 컴퓨터를 살펴보고 해당 파일을 연결하고 "Virus found count (0)"문자열이없는 파일 만 찾는 것이 쉽습니다. ". 분명히 그 파일과 문구가 없으면 뭔가 잘못된 것입니다. AV가 최근에 실행되지 않았거나, 바이러스가 발견되었고, AV가 설치되지 않았습니다. 확장하려면 좀 더 멋진 것이 필요할 것입니다.

하지만 내 가난한 사람의 버전 대신 당신을 위해 모든 것을 할 수있는 엔터프라이즈 버전의 AV가 있지 않습니까?

2
Knox

엔터프라이즈 버전과 관련하여 Knox의 경우 +1. 나는 동의한다. Trend의 엔터프라이즈 데스크탑 솔루션에는 클라이언트와 현재 보유한 스캔 엔진 및 패턴을 추적하는 서버가 있습니다. 또한 배포 할 수 있습니다. 나는 이것을 당신의 목표를 향해 일하기 위해 사용할 것입니다. 이를 사용하여 OfficeScan 재설치를 배포합니다. 게임에서 현재 위치를 파악하기 위해 스크립트를 배포하는 노력도 신경 쓰지 않을 것입니다. 다시 시작하는 것이 가장 좋습니다. 엔터프라이즈 도구가 아직없는 경우 라이선스에 대해 Trend와 협력하십시오 (정말 놀라움). 그렇지 않은 경우 누군가 잘못된 구매 결정을 설명해야합니다.

2
squillman

제품이 설치되었는지 확인하기 위해 다양한 레지스트리 항목이나 파일을 확인하는 로그온 스크립트를 만들었습니다. 그런 다음 스크립트는 수행하거나 수행하지 않는 시스템의 로그를 생성 할 수 있습니다.

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

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
romandas

차례로 질문에 답하기

  1. 그리고 2.

각 시스템에서 실행할 스크립트를 작성합니다. 제거 레지스트리 키를 쿼리합니다. 각 하위 키를 살펴 봐야합니다. 이 경우 WMI를 사용하는 것이 가장 좋은 방법입니다. 이 키에는 제품 이름과 버전이 표시됩니다. 스크립팅은 이 예 를 참조하십시오.

삼.

나는 시행 착오를 할 것이지만 Trend의 경우 정의 버전을 HKEY_LOCAL_MACHINE\Software\TrendMicro의 레지스트리 또는 로컬 디렉토리의 config 또는 ini 파일에 넣을 것이라고 생각합니다.

이는 해당 버전의 AV 소프트웨어에만 해당됩니다. 여러 버전에 대해 그렇게해야합니다.

1
Rob Haupt