Anbieterhosting und -sicherheit

Die Eigenschaft HostingModel in der __Win32Provider-Instanz, die Ihren Anbieter darstellt, gibt das Anbieterhostingmodell an. Durch Festlegen dieser Eigenschaft wird der Anbieter in einen freigegebenen Hostprozess geladen, der über eine angegebene Berechtigungsebene verfügt.

Hostprozess des freigegebenen Anbieters

WMI befindet sich in einem freigegebenen Diensthost mit mehreren anderen Diensten. Um zu vermeiden, dass alle Dienste 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. Die einzelnen Prozesse können unter verschiedenen Konten mit unterschiedlicher Sicherheit ausgeführt werden. Beachten Sie, dass Sie ab Windows Vista den Winmgmt-Befehl verwenden, um WMI in einem separaten Prozess separat über einen festen Port auszuführen. Weitere Informationen finden Sie unter Herstellen einer Remoteverbindungen mit WMI ab Windows Vista.

Der freigegebene 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 selbstgehostet sein, wofür dann kein WMI-Anbieterhost erforderlich ist.

Festlegen des Hostingmodells

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

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

Legen Sie die Eigenschaft HostingModel für entkoppelte Anbieter auf „Decoupled:Com“ fest. Anbieter, die durch Hinzufügen von Instrumentierungsklassen aus Microsoft.Management.Infrastructure in .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 festgelegt, die Ihren Anbieter darstellt.

So legen Sie das Hostingmodell für einen Anbieter fest

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

  2. Weisen Sie dem Anbieter in der Eigenschaft Name einen Namen und der Eigenschaft Clsid den Klassenbezeichner (CLSID) des Anbieter-COM-Objekts zu.

    Im folgenden Codebeispiel wird der Name-Eigenschaft ein Name und der Clsid-Eigenschaft der CSLID des COM-Objekts des Anbieters zugewiesen.

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Weisen Sie der HostingModel-Eigenschaft den entsprechenden Wert für den freigegebenen Host zu. Die Werte für freigegebenes Hosts wie „NetworkServiceHost“ werden in der Eigenschaft HostingSpecification der MSFT_Providers-Klasse definiert.

    Im folgenden Codebeispiel wird der Eigenschaft HostingModel ein Wert für den freigegebenen Host zugewiesen.

    HostingModel = "NetworkServiceHost";
    

Das folgende Codebeispiel zeigt, wie Sie einen Anbieter in „NetworkServiceHost“ registrieren.

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

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

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

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

Besondere Entwicklungsprobleme bestehen für nicht entkoppelte Anbieter, die im Wmiprvse-Prozess gehostet werden. Weitere Informationen finden Sie unter Debuggen von Anbietern.

Wenn Sie einen Anbieter mit einer Eigenschaft- oder Klassenanbieterregistrierung schreiben, funktionieren nicht alle Threadingmodelle. Weitere Informationen finden Sie unter Auswählen der richtigen Registrierung.

HostingModel-Werte für In-Process-Anbieter

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

Wert in __Win32Provider.HostingModel BESCHREIBUNG
SelfHost Der Anbieter beginnt mit der Verwendung der lokalen anstelle der prozessinternen Serverimplementierung (In-Process). Der Sicherheitskontext des Prozesses, in dem der Anbieter ausgeführt wird, bestimmt den Sicherheitskontext des Anbieters.
LocalSystemHost Wenn der Anbieter als prozessintern implementiert wird, wird er in einen unter dem LocalSystem-Kontext ausgeführten Host des freigegebenen Anbieters geladen. 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 selbstgehostet oder in den Wmiprvse.exe-Prozess geladen, der unter dem LocalSystem-Konto ausgeführt wird. Da das LocalSystem-Konto ein hoch privilegiertes Konto ist, wird im Sicherheits-NT-Ereignisprotokoll ein Eintrag generiert, um Administratoren über einen Anbieter zu benachrichtigen, der in diesem vertrauenswürdigen Status ausgeführt wird.
NetworkServiceHost Wenn der Anbieter als prozessintern implementiert wird, wird er in den unter dem NetworkService-Konto ausgeführten Wmiprvse.exe-Prozess geladen. Ab Windows Vista ist dies das Standardhostingmodell, wenn die HostingModel-Eigenschaft 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 verringert daher das Risiko eines Angriffs durch unbefugte Rechteerweiterung. Wenn der Anbieter nur auf dem lokalen Computer arbeitet, legen Sie die Eigenschaft HostingModel auf LocalServiceHost fest.
NetworkServiceHostOrSelfHost Der Anbieter wird selbstgehostet 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 auf NULL festgelegt ist. Da NetworkServiceHostOrSelfHost die Standardeinstellung ist, können Anbieter auf früheren Betriebssystemen unter Windows Vista, Windows Server 2008 und höheren Betriebssystemen weiterhin verwendet werden.
LocalServiceHost Wenn der Anbieter als prozessintern implementiert wird, wird er in den unter dem LocalService-Konto ausgeführten Wmiprvse.exe-Prozess geladen. Dies ist das empfohlene Hostingmodell für Dienste, da LocalService über eingeschränkte Berechtigungen verfügt.

HostingModel-Werte für entkoppelte Anbieter

In der folgenden Liste sind die Werte des Anbieterhostingmodells für entkoppelte Anbieter aufgeführt.

Decoupled:Com

Der Anbieter ist ein entkoppelter Anbieter, der in einem separaten Prozess gehostet wird, der ein Client für WMI ist.

Im folgenden Beispiel wird der FoldIdentity-Spezifizierer für die Eigenschaft HostingModel auf FALSE festgelegt, sodass der Anbieter die Identität des Clients annehmen kann.

Decoupled:Com:FoldIdentity(FALSE)

Ist „FoldIdentity“ nicht festgelegt, wird der FoldIdentity-Wert standardmäßig auf TRUE gesetzt. Aus Sicherheitsgründen wird empfohlen, nicht „FoldIdentity(FALSE)“ anzugeben, da sich eine Rogue-Anwendung, die sich als „Delegate“ ausgibt, eine ganze Domäne beeinträchtigen kann.

Im folgenden Beispiel wird die Eigenschaft HostingModel in der empfohlenen Weise festgelegt, die dem Festlegen von „FoldIdentity(TRUE)“ entspricht.

Decoupled:Com

Decoupled:Noncom

Nur zur internen Verwendung. Wird nicht unterstützt.

Sicherheit von Hostingmodellen

In den meisten Situationen ist LocalSystem nicht erforderlich und der NetworkServiceHost-Kontext besser geeignet. Die meisten WMI-Anbieter müssen die Identität des Clientsicherheitskontexts annehmen, um angeforderte Vorgänge im Namen des WMI-Clients auszuführen. Ab Windows Vista werden WMI-Anbieter ohne Hostingmodelldefinition, die ausgeführt werden, als ob sie unter LocalSystem laufen, nicht ordnungsgemäß ausgeführt. Um diese Situation zu korrigieren, ändern Sie das erwartete Hostingmodell, und stellen Sie sicher, dass der WMI-Anbietercode die Vorgänge im Clientsicherheitskontext ausführt, indem er die Identität des WMI-Clients annimmt. „LocalSystem“ ist selten eine Voraussetzung. Wenn Ihr Anbieter über diese Berechtigungsebene verfügen muss, geben Sie das Hostingmodell mit der folgenden Anweisung in der MOF-Datei an.

HostingModel=LocalSystemHost

Auswählen der ordnungsgemäßen Registrierung

Zugriff auf WMI-Namespaces

Schützen von WMI-Namespaces

Anbieterkonfigurations- und Problembehandlungsklassen

MSFT_Providers

Aufrechterhalten der WMI-Sicherheit