공급자 호스팅 및 보안

공급자를 나타내는 __Win32Provider 인스턴스의 HostingModel 속성은 공급자 호스팅 모델을 지정합니다. 이 속성을 설정하면 지정된 수준의 권한이 있는 공유 호스트 프로세스에 공급자가 로드됩니다.

공유 공급자 호스트 프로세스

WMI는 다른 여러 서비스가 있는 공유 서비스 호스트에 상주합니다. 공급자가 실패할 때 모든 서비스를 중지되지 않도록 공급자는 "Wmiprvse.exe"라는 별도의 호스트 프로세스에 로드됩니다. 이 이름의 프로세스가 두 개 이상 실행될 수 있습니다. 각각 보안이 서로 다른 계정으로 실행할 수 있습니다. Windows Vista부터 winmgmt 명령을 사용하여 고정 포트를 사용하여 별도의 프로세스에서 WMI를 실행합니다. 자세한 내용은 Vista에서 원격으로 시작하여 WMI에 연결을 참조하세요.

공유 호스트는 Wmiprvse.exe 호스트 프로세스에서 다음 시스템 계정 중 하나로 실행할 수 있습니다.

공급자는 WMI 공급자 호스트가 필요하지 않은 로컬 COM 서버(.exe)이거나 자체 호스팅될 수도 있습니다.

호스팅 모델 설정

LocalSystem은 권한 있는 계정이므로 공급자가 Wmiprvse.exe 프로세스에서 실행 중일 때 HostingModelNetworkServiceHost로 설정하는 것이 좋습니다. NetworkServiceHost 계정은 광범위한 권한이 필요하지 않지만 다른 시스템과 원격으로 통신해야 하는 서비스를 위한 것입니다.

HostingModel 속성에 대한 값을 설정하지 않으면 WMI는 NetworkServiceHostOrSelfHost의 기본값을 설정합니다. HostingModel 값을 LocalSystemHost로 설정하면 WMI는 추적을 사용하여 Windows 이벤트 로그에 이벤트 5603 및 5604를 생성합니다. 로컬 LocalSystem 계정은 높은 권한이 있으므로 이 설정은 권장되지 않습니다. 이벤트 뷰어서 이러한 이벤트를 볼 수 있습니다. 자세한 내용은 WMI 활동 추적을 참조하세요.

분리된 공급자에 대한 HostingModel 속성을 "Decoupled:Com"으로 설정합니다. .NET Framework의 Microsoft.Management.Infrastructure에서 계측 클래스를 추가하여 만든 공급자는 분리된 공급자입니다. (System.Management.Instrumentation은 더 이상 지원되지 않습니다.) 분리된 공급자를 만드는 방법에 관한 자세한 내용은 애플리케이션에서 공급자 통합을 참조하세요.

호스팅 모델은 공급자를 나타내는 __Win32Provider 인스턴스의 HostingModel 속성에 지정됩니다.

공급자에 대한 호스팅 모델을 설정하려면

  1. 공급자를 정의하는 MOF 파일에서 __Win32Provider 인스턴스를 만듭니다.

  2. Name 속성에서 공급자에 이름을 할당하고 공급자 COM 개체의 CLSID(클래스 식별자)를 Clsid 속성에 할당합니다.

    다음 코드 예제에서는 Name 속성에 이름을 할당하고 공급자 COM 개체의 CSLID를 Clsid 속성에 할당합니다.

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. HostingModel 속성에 적절한 공유 호스트 값을 할당합니다. "NetworkServiceHost" 같은 공유 호스트 값은 MSFT_Providers 클래스의 HostingSpecification 속성에 정의됩니다.

    다음 코드 예제에서는 공유 호스트 값을 HostingModel 속성에 할당합니다.

    HostingModel = "NetworkServiceHost";
    

다음 코드 예제에서는 NetworkServiceHost에 공급자를 등록하는 방법을 보여줍니다.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

여러 공급자가 있는 경우 특정 인스턴스에 상주할 수 있도록 공급자를 등록하여 특정 서비스 호스트로 그룹화할 수 있습니다.

다음 코드 예제에서는 NetworkServiceHost에 공급자도 등록합니다. MSFT_Providers 클래스는 __Win32Provider HostingModel 속성을 만들기 위해 결합되는 두 값에 대한 값을 정의합니다. 이 예제에서 "NetworkServiceHost" 값은 MSFT_ProvidersHostingSpecification 속성에서 제공되며 "LocalServiceHost"는 HostingGroup 속성에서 제공됩니다.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

분리되지 않고 Wmiprvse 프로세스에서 호스트되는 공급자는 특별한 개발 문제가 있습니다. 자세한 내용은 공급자 디버깅을 참조하세요.

속성 또는 클래스 공급자 등록이 포함된 공급자를 작성하는 경우 일부 스레딩 모델이 작동하지 않습니다. 자세한 내용은 른 등록 선택을 참조하세요.

In-Process 공급자에 대한 HostingModel 값

다음 목록에는 Wmiprvse.exe 프로세스에서 실행되는 공급자에 대해 __Win32Provider 인스턴스에서 사용할 공급자 호스팅 모델 값이 나열되어 있습니다.

__Win32Provider.HostingModel의 값 설명
SelfHost 공급자는 in-process 대신 로컬 서버 구현을 사용하기 시작합니다. 공급자가 실행되는 프로세스의 보안 컨텍스트로 공급자 보안 컨텍스트가 결정됩니다.
LocalSystemHost 공급자가 In-process로 구현되는 경우 LocalSystem 컨텍스트에서 실행되는 공유 공급자 호스트에 로드됩니다. Windows Vista부터는 WMI 공급자의 HostingModel(__Win32Provider.HostingModel 속성)이 지정되지 않으면 LocalSystemHost가 더 이상 기본 호스팅 모델이 아닙니다. 자세한 내용은 팅 모델 보안을 참조하세요.
LocalSystemHostOrSelfHost 공급자가 자체 호스팅되거나 LocalSystem 계정으로 실행되는 Wmiprvse.exe 프로세스에 로드됩니다. LocalSystem은 권한이 높은 계정이므로 보안 NT 이벤트 로그에 항목이 생성되어 관리자에게 이 신뢰할 수 있는 상태에서 실행되는 공급자를 알립니다.
NetworkServiceHost 공급자가 in-process로 구현되는 경우 NetworkService 계정으로 실행되는 Wmiprvse.exe 프로세스에 로드됩니다. Windows Vista부터는 WMI 공급자의 HostingModel(__Win32Provider.HostingModel 속성)이 지정되지 않으면 이것이 더 이상 기본 호스팅 모델이 아닙니다. 자세한 내용은 팅 모델 보안을 참조하세요.
NetworkServiceHost에는 제한된 권한이 있어 권한 상승 공격의 가능성이 적습니다. 공급자가 로컬 컴퓨터 내에서만 작동하는 경우 HostingModel 속성을 LocalServiceHost로 설정합니다.
NetworkServiceHostOrSelfHost 공급자가 자체 호스팅되거나 NetworkService 계정으로 실행되는 Wmiprvse.exe 프로세스에 로드됩니다. NetworkServiceHostOrSelfHost__Win32ProviderHostingModel 속성이 NULL인 경우 기본 구성입니다. NetworkServiceHostOrSelfHost가 기본값이므로 이전 운영 체제의 공급자는 Windows Vista, Windows Server 2008 이상 운영 체제에서 계속 작동할 수 있습니다.
LocalServiceHost 공급자가 in-process로 구현되는 경우 LocalService 계정으로 실행되는 Wmiprvse.exe 프로세스에 로드됩니다. 이것은 LocalService에는 제한된 권한이 있기 때문에 서비스에 권장되는 호스팅 모델입니다.

분리된 공급자에 대한 HostingModel 값

다음 목록에는 분리된 공급자에 대한 모델 값을 호스팅하는 공급자가 나열되어 있습니다.

Decoupled:Com

이 공급자는 WMI에 클라이언트인 별도의 프로세스에서 호스트되는 분리된 공급자입니다.

다음 예제는 공급자가 클라이언트를 가장할 수 있도록 HostingModel 속성이 FALSE로 설정된 FoldIdentity 지정자를 보여줍니다.

Decoupled:Com:FoldIdentity(FALSE)

FoldIdentity를 지정하지 않으면 FoldIdentity 값이 기본적으로 TRUE로 설정됩니다. 대리자를 가장한 불량 애플리케이션이 전체 도메인에 영향을 줄 수 있으므로 보안을 위해서는 FoldIdentity(FALSE)를 지정하지 않는 것이 좋습니다.

다음 예제는 FoldIdentity(TRUE)를 설정하는 것과 동일한 권장 방식으로 설정된 HostingModel 속성을 보여줍니다.

Decoupled:Com

Decoupled:Noncom

내부 전용입니다. 지원 안 됨

호스팅 모델의 보안

대부분의 경우 LocalSystem은 필요하지 않으며 NetworkServiceHost 컨텍스트가 더 적합합니다. 대부분의 WMI 공급자는 WMI 클라이언트를 대신하여 요청된 작업을 수행하려면 클라이언트 보안 컨텍스트를 가장해야 합니다. Windows Vista부터는 호스팅 모델 정의가 없고 LocalSystem에서 실행되는 것처럼 실행되는 WMI 공급자가 제대로 실행되지 않습니다. 이 상황을 해결하려면 예상되는 호스팅 모델을 변경하고 WMI 공급자 코드가 WMI 클라이언트를 가장하여 클라이언트 보안 컨텍스트에서 작업을 수행하는지 확인합니다. LocalSystem은 요구 사항이 아닙니다. 공급자에 해당 수준의 권한이 있어야 하는 경우 MOF 파일에서 다음 문을 사용하여 호스팅 모델을 지정합니다.

HostingModel=LocalSystemHost

올바른 등록 선택

WMI 네임스페이스에 대한 액세스

WMI 네임스페이스 보안

공급자 구성 및 문제 해결 클래스

MSFT_Providers

WMI 보안 유지 관리