Anbieterhosting und Sicherheit

Die Eigenschaft HostingModel in der __Win32Provider-Instanz, die Ihren Anbieter repräsentiert, gibt das Hostingmodell des Anbieters an. Wenn diese Eigenschaft festgelegt wird, wird der Anbieter in einen freigegebenen Hostprozess geladen, der über eine bestimmte Berechtigungsstufe verfügt.

Hostprozess für gemeinsam genutzte Anbieter

WMI befindet sich in einem gemeinsam genutzten Servicehost mit mehreren anderen Services. Um zu vermeiden, dass alle Services beendet werden, wenn ein Anbieter ausfällt, werden Anbieter in einen separaten Hostprozess mit dem Namen „Wmiprvse.exe“ geladen. Es können mehrere Prozesse mit diesem Namen ausgeführt werden. Jeder kann unter einem anderen Konto mit unterschiedlicher Sicherheit ausgeführt werden. Beachten Sie, dass Sie ab Windows Vista den Befehl winmgmt verwenden, um WMI in einem separaten Prozess mithilfe eines festen Ports auszuführen. Weitere Informationen finden Sie unter Herstellen einer Remoteverbindung mit WMI ab Vista.

Der gemeinsam genutzte Host kann unter einem der folgenden Systemkonten in einem Wmiprvse.exe-Hostprozess ausgeführt werden:

Ein Anbieter kann auch ein lokaler COM-Server (.exe) oder selbst-gehostet sein, wobei kein WMI-Anbieterhost erforderlich ist.

Festlegen des Hostingmodells

Da LocalSystem ein privilegiertes Konto ist, wird empfohlen, HostingModel auf NetworkServiceHost zu setzen, wenn ein Anbieter in einem Wmiprvse.exe-Prozess ausgeführt wird. Das NetworkServiceHost-Konto ist für Services vorgesehen, die keine umfangreichen Berechtigungen erfordern, aber aus der Ferne mit anderen Systemen kommunizieren müssen.

Wenn Sie keinen Wert für die Eigenschaft HostingModel festlegen, setzt WMI den Standardwert NetworkServiceHostOrSelfHost. Wenn der Wert für HostingModel auf LocalSystemHost gesetzt ist, verwendet WMI die Ablaufverfolgung, um die Ereignisse 5603 und 5604 im Windows-Ereignisprotokoll zu generieren. Da das lokale LocalSystem-Konto hochgradig privilegiert ist, wird diese Einstellung nicht empfohlen. Sie können diese Ereignisse in der Ereignisanzeige anzeigen. Weitere Informationen finden Sie unter Nachverfolgung von WMI-Aktivitäten.

Legen Sie die Eigenschaft HostingModel für entkoppelte Anbieter als „Decoupled:Com“ fest. Anbieter, die durch Hinzufügen von Instrumentierungsklassen aus Microsoft.Management.Infrastructure im .NET Framework erstellt werden, sind entkoppelte Anbieter. (System.Management.Instrumentation wird nicht mehr unterstützt.) Weitere Informationen zum Erstellen eines entkoppelten Anbieters finden Sie unter Integrieren eines Anbieters in eine Anwendung.

Das Hostingmodell wird in der Eigenschaft HostingModel in der __Win32Provider-Instanz angegeben, die Ihren Anbieter repräsentiert.

So legen Sie das Hostingmodell für einen Anbieter fest

  1. Erstellen Sie in der MOF-Datei, die Ihren Anbieter definiert, eine Instanz von __Win32Provider.

  2. Weisen Sie dem Anbieter in der Eigenschaft Name einen Namen zu, und weisen Sie die CLSID (Class Identified) des COM-Objekts des Anbieters der Eigenschaft Clsid zu.

    Das folgende Codebeispiel weist einen Namen der Eigenschaft Name und die CSLID des COM-Objekts des Anbieters der Eigenschaft Clsid zu.

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Weisen Sie der Eigenschaft HostingModel den entsprechenden gemeinsam genutzten Host-Wert zu. Freigegebene Hostwerte wie „NetworkServiceHost“ werden in der Eigenschaft HostingSpecification der MSFT_Providers-Klasse definiert.

    Im folgenden Codebeispiel wird der Eigenschaft HostingModel ein gemeinsam genutzter Host-Wert zugewiesen.

    HostingModel = "NetworkServiceHost";
    

Im folgenden Codebeispiel wird gezeigt, wie ein Anbieter in NetworkServiceHost registriert wird.

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

Wenn Sie über mehrere Anbieter verfügen, können Sie sie in einem bestimmten Service-Host gruppieren, indem Sie Ihren Anbieter so registrieren, dass er sich in der jeweiligen Instanz befindet.

Im folgenden Codebeispiel wird auch ein Anbieter in NetworkServiceHost registriert. Die Klasse MSFT_Providers definiert Werte für die beiden Werte, die zum Erstellen der Eigenschaft __Win32Provider HostingModel kombiniert werden. Im Beispiel stammt der Wert „NetworkServiceHost“ aus der Eigenschaft HostingSpecification von MSFT_Providers und „LocalServiceHost“ aus der Eigenschaft HostingGroup.

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

Spezielle Entwicklungsprobleme bestehen für Anbieter, die nicht entkoppelt sind und im Wmiprvse-Prozess gehostet werden. Weitere Informationen finden Sie unter Debugging von Anbietern.

Wenn Sie einen Anbieter schreiben, der die Registrierung von Eigenschaften oder Klassenanbietern enthält, funktionieren nicht alle Threadingmodelle. Weitere Informationen finden Sie unter Auswählen der korrekten Registrierung.

HostingModel-Werte für In-Process-Anbieter

In der folgenden Liste sind die Anbieterhostingmodell-Werte zur Verwendung der __Win32Provider-Instanz für Anbieter aufgeführt, die in einem Wmiprvse.exe-Prozess ausgeführt werden.

Wert in __Win32Provider.HostingModel Beschreibung
SelfHost Der Anbieter beginnt mit der lokalen Serverimplementierung anstelle von In-Process. Der Sicherheitskontext des Prozesses, in dem der Anbieter ausgeführt wird, bestimmt den Sicherheitskontext des Anbieters.
LocalSystemHost Der Anbieter wird, wenn er als in-Process implementiert wird, in einen gemeinsam genutzten Anbieterhost geladen, der im LocalSystem-Kontext ausgeführt wird. Ab Windows Vista ist LocalSystemHost nicht mehr das Standardhostingmodell, wenn das HostingModel eines WMI-Anbieters (__Win32Provider.HostingModel-Eigenschaft) nicht angegeben ist. Weitere Informationen finden Sie unter Sicherheit von Hostingmodellen.
LocalSystemHostOrSelfHost Der Anbieter wird selbst gehostet oder in den Wmiprvse.exe Prozess geladen, der unter dem LocalSystem-Konto ausgeführt wird. Da LocalSystem ein Konto mit hohen Rechten ist, wird ein Eintrag im Sicherheits-NT-Ereignisprotokoll generiert, um Administratoren eines Anbieters zu benachrichtigen, der in diesem vertrauenswürdigen Status ausgeführt wird.
NetworkServiceHost Der Anbieter wird, wenn er als In-Process implementiert ist, in den Wmiprvse.exe Prozess geladen, der unter dem NetworkService-Konto ausgeführt wird. Ab Windows Vista ist dies das Standard-Hostingmodell, wenn das HostingModel eines WMI-Anbieters (__Win32Provider.HostingModel Eigenschaft) nicht angegeben ist. Weitere Informationen finden Sie unter Sicherheit von Hostingmodellen.
NetworkServiceHost verfügt über eingeschränkte Berechtigungen und reduziert daher die Möglichkeit eines Rechteerweiterungsangriffs. Wenn der Anbieter nur auf dem lokalen Computer arbeitet, legen Sie die Eigenschaft HostingModel auf LocalServiceHost fest.
NetworkServiceHostOrSelfHost Der Anbieter wird selbst gehostet oder in den WmiPrvse.exe Prozess geladen, der unter dem NetworkService-Konto ausgeführt wird. NetworkServiceHostOrSelfHost ist die Standardkonfiguration, wenn die Eigenschaft HostingModel in __Win32Provider NULL ist. Da NetworkServiceHostOrSelfHost die Standardeinstellung ist, können Anbieter von früheren Betriebssystemen weiterhin in Windows Vista, Windows Server 2008 und höher funktionieren.
LocalServiceHost Der Anbieter wird, wenn er als In-Process implementiert ist, in den Wmiprvse.exe Prozess geladen, der unter dem LocalService-Konto ausgeführt wird. Dies ist das empfohlene Hostingmodell für Services, da LocalService eingeschränkte Berechtigungen besitzt.

HostingModel-Werte für entkoppelte Anbieter

In der folgenden Liste sind die Anbieterhostingmodell-Werte für entkoppelte Anbieter aufgeführt.

Decoupled:Com

Der Anbieter ist ein entkoppelter Anbieter, der in einem separaten Prozess gehostet wird, bei dem es sich um einen Client für WMI handelt.

Das folgende Beispiel zeigt den FoldIdentity-Bezeichner für die Eigenschaft HostingModel mit Einstellung auf FALSE, was dem Anbieter erlaubt, als der Client aufzutreten.

Decoupled:Com:FoldIdentity(FALSE)

Wenn FoldIdentity nicht angegeben ist, wird der FoldIdentity-Wert standardmäßig auf TRUE festgelegt. Aus Sicherheitsgründen wird empfohlen, FoldIdentity(FALSE) nicht anzugeben, da sich eine nicht autorisierte Anwendung mit Identitätswechsel von Delegaten auf eine gesamte Domäne auswirken kann.

Das folgende Beispiel zeigt den HostingModel-Eigenschaftssatz auf die empfohlene Weise, die dem Festlegen von FoldIdentity(TRUE) entspricht.

Decoupled:Com

Decoupled:Noncom

Nur zur internen Verwendung. Nicht unterstützt.

Sicherheit von Hostingmodellen

Für die meisten Situationen ist LocalSystem nicht erforderlich, und der NetworkServiceHost-Kontext ist besser geeignet. Die meisten WMI-Anbieter müssen den Client-Sicherheitskontext imitieren, um angeforderte Vorgänge im Auftrag des WMI-Clients auszuführen. Ab Windows Vista wird ein WMI-Anbieter, der keine Hostingmodelldefinition aufweist und ausgeführt wird, als ob er unter LocalSystem ausgeführt würde, nicht korrekt ausgeführt. Um diese Situation zu korrigieren, ändern Sie das erwartete Hostingmodell, und stellen Sie sicher, dass der WMI-Anbietercode die Vorgänge im Client-Sicherheitskontext ausführt, indem Sie den WMI-Client imitieren. LocalSystem ist selten erforderlich. Wenn Ihr Anbieter über diese Berechtigungsstufe verfügen muss, geben Sie das Hostingmodell mit der folgenden Anweisung in der MOF-Datei an.

HostingModel=LocalSystemHost

Auswählen der korrekten Registrierung

Zugriff auf WMI-Namespaces

Schützen von WMI-Namespaces

Anbieterkonfiguration und Problembehandlungsklassen

MSFT_Providers

Gewährleisten der WMI-Sicherheit