VBScript를 사용하여 기본 프로세스 보안 수준 설정

스크립트는 기본 WMI 인증 및 가장 설정을 사용할 수 있습니다. 그러나 스크립트에 보안이 강화된 연결이 필요하거나 암호화된 연결이 필요한 네임스페이스에 연결할 수 있습니다. 자세한 내용은 네임스페이스 보안 설명자 설정네임스페이스에 대한 암호화된 연결 필요를 참조하세요.

가장 간단한 경우 스크립트는 기본 인증 및 가장 설정을 사용할 수 있습니다. WMI는 일반적으로 공유 서비스 호스트에서 실행되며 호스트의 다른 프로세스와 동일한 인증을 공유합니다. 다른 수준의 인증으로 WMI 프로세스를 실행하려면 /standalonehost 스위치를 사용하여 winmgmt 명령으로 WMI를 실행하고 일반적으로 WMI에 대한 인증 수준을 설정합니다. 자세한 내용은 WMI 보안 유지 관리를 참조하세요.

다음 스크립트는 가장 및 인증 수준에 기본 설정을 사용합니다.

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

다음 예제와 같이 GetObject 호출에서 모니커를 사용하고 기본 보안 설정을 지정할 수도 있습니다.

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

스크립트에서 다른 가장 또는 인증 수준을 설정하거나 컴퓨터의 기본값을 설정하는 방법에 대한 자세한 내용은 다음 항목을 참조하세요.

VBScript를 사용하여 기본 인증 자격 증명 변경

모니커 문자열 및 SWbemLocatorSWbemSecurity 개체를 사용하여 스크립트에서 인증 수준을 변경할 수 있습니다.

연결하려는 대상 운영 체제의 요구 사항에 따라 인증 수준을 설정해야 합니다. 자세한 내용은 다른 운영 체제 간에 연결을 참조하세요.

다음 VBScript 코드 예제에서는 “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

WMI에 대한 스크립트 모니커 연결에서 아래 표의 “모니커 이름/설명” 열에 표시된 짧은 이름을 사용합니다. 예를 들어 다음 스크립트에서 인증 수준은 WbemAuthenticationLevelPktIntegrity로 설정됩니다.

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

다음 표에서는 설정 가능한 인증 수준을 나열합니다. 해당 수준은 WbemAuthenticationLevelEnum 열거형의 Wbemdisp.tlb에 정의됩니다.

이름/값 설명
WbemAuthenticationLevelDefault
0
모니커: 기본값
WMI에서는 기본 Windows 인증 설정을 사용합니다. WMI가 데이터를 반환하는 서버에서 요구하는 수준으로 협상할 수 있도록 하는 권장 설정입니다. 그러나 네임스페이스에 암호화가 필요한 경우 WbemAuthenticationLevelPktPrivacy를 사용합니다.
WbemAuthenticationLevelNone
1
모니커: 없음
인증을 사용하지 않습니다.
WbemAuthenticationLevelConnect
2
모니커: 연결
클라이언트 서버를 사용하여 관계를 설정하는 경우에 클라이언트의 자격 증명을 인증합니다.
WbemAuthenticationLevelCall
3
호출
서버에 요청이 있는 경우 각 호출 시작 시에만 인증합니다.
WbemAuthenticationLevelPkt
4
모니커: Pkt
받은 모든 데이터가 대상 클라이언트에서 보낸 것임을 인증합니다.
WbemAuthenticationLevelPktIntegrity
5
모니커: PktIntegrity
클라이언트와 서버 간에 전송되는 데이터가 수정되지 않았음을 인증합니다.
WbemAuthenticationLevelPktPrivacy
6
모니커: PktPrivacy
이전 가장 수준을 모두 인증하고 각 원격 프로시저 호출의 인수 값을 암호화합니다. 연결하는 네임스페이스에 암호화된 연결이 필요한 경우 이 설정을 사용합니다.

성공적인 호출을 확인하려면 인증 수준을 변경한 후 반환 값을 확인합니다.

예를 들어 로컬 연결에는 항상 wbemAuthenticationLevelPktPrivacy의 인증 수준이 있으므로 다음 예제에서는 로컬 컴퓨터에 연결하기 때문에 인증 수준을 설정하지 못합니다.

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

공급자는 네임스페이스에 대한 연결에서 패킷 개인 정보(PktPrivacy)를 사용하지 않는 한 데이터가 반환되지 않도록 네임스페이스에 대한 보안을 설정할 수 있습니다. 이렇게 하면 네트워크를 교차할 때 데이터가 암호화됩니다. 더 낮은 인증 수준을 설정하려고 하면 액세스 거부 메시지가 표시됩니다. 자세한 내용은 WMI 네임스페이스 보안을 참조하세요.

VBScript를 사용하여 기본 가장 수준 변경

WMI용 스크립팅 API를 호출하는 경우 WMI가 가장 수준에 제공하는 기본값을 사용하는 것이 좋습니다. 원격 호출 및 둘 이상의 네트워크 홉을 사용하는 일부 공급자는 WMI에서 사용하는 것보다 더 높은 가장 수준이 필요합니다. 가장 수준이 충분하지 않으면 공급자가 요청을 거부하거나 불완전한 정보를 제공할 수 있습니다.

모니커에서 또는 보안 개체에서 SWbemSecurity.ImpersonationLevel을 설정하여 가장 수준을 설정하지 않으면 운영 체제에 대한 기본 DCOM 가장 수준을 설정합니다. 가장 수준은 연결하는 대상 운영 체제의 요구 사항에 따라 설정해야 합니다. 자세한 내용은 다른 운영 체제 간에 연결을 참조하세요.

다음 VBScript 코드 예제에서는 위에 표시된 것과 동일한 스크립트에서 가장 수준을 변경하는 방법을 보여 줍니다.

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

다음 표에서는 사용하는 WbemImpersonationLevelEnum의 인증 수준을 나열합니다.

이름/값 설명
wbemImpersonationLevelAnonymous
1
모니커: 익명
호출자의 자격 증명을 숨깁니다. 이 가장 수준으로는 WMI에 대한 호출이 실패할 수 있습니다.
wbemImpersonationLevelIdentify
2
모니커: 식별
개체가 호출자의 자격 증명을 쿼리할 수 있습니다. 이 가장 수준으로는 WMI에 대한 호출이 실패할 수 있습니다.
wbemImpersonationLevelImpersonate
3
모니커: 가장
개체가 호출자의 자격 증명을 사용할 수 있습니다. WMI 호출의 스크립팅 API에 대한 권장 가장 수준입니다.
wbemImpersonationLevelDelegate
4
모니커: 대리인
개체가 다른 개체가 호출자의 자격 증명을 사용하도록 허용할 수 있습니다. 이 가장은 WMI 호출에 대한 스크립팅 API에서 작동하지만 불필요한 보안 위험을 구성할 수 있습니다.

다음 예제에서는 Win32_Process 특정 인스턴스를 가져올 때 모니커 문자열에서 가장을 설정하는 방법을 보여 줍니다.

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

자세한 내용은 WMI 애플리케이션 또는 스크립트 만들기를 참조하세요.

레지스트리를 사용하여 기본 가장 수준 설정

레지스트리에 액세스할 수 있는 경우 기본 가장 수준 레지스트리 키를 설정할 수도 있습니다. 이 키는 달리 지정하지 않는 한 WMI용 스크립팅 API에서 사용하는 가장 수준을 지정합니다. 다음 경로는 레지스트리 경로를 식별합니다.

Hkey_local_machine\소프트웨어\Microsoft\WBEM\스크립팅\기본 가장 수준

기본적으로 레지스트리 키는 Impersonate 가장 수준을 지정하여 3으로 설정됩니다. 일부 공급자는 더 높은 수준의 가장이 필요할 수 있습니다.

VBScript에서 SWbemSecurity 개체에 액세스

가장 수준을 설정할 수 있는 다른 방법은 SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPathSwbemLocator 개체의 Security_ 속성으로 표시되는 SWbemSecurity 보안 개체입니다.

WMI는 부모 개체의 보안 설정을 원래 개체의 하위 항목에 전달합니다. 따라서 이 개체를 사용하여 WMI 및 API 호출에 로그온한 후 SWbemServices 개체의 가장 수준을 설정하거나 SWbemObject 형식의 개체와 같이 이 개체에서 만든 개체를 설정할 수 있습니다.

원격 컴퓨터에서 WMI에 연결

스크립팅 클라이언트 보안