Sicherheitsüberlegungen für Autoren
Die VSS-Infrastruktur erfordert Writer-Prozesse, um sowohl als COM-Clients als auch als Server funktionieren zu können.
Wenn VSS-Autoren als Server fungieren, machen VSS-Autoren COM-Schnittstellen (z. B. die VSS-Ereignishandler wie CVssWriter::OnIdentify) verfügbar und empfangen eingehende COM-Aufrufe von VSS-Prozessen (z. B. Anforderer und vsS-Dienst) oder RPC-Aufrufe von Prozessen, die sich außerhalb von VSS befinden, in der Regel, wenn diese Prozesse VSS-Ereignisse generieren (z. B. wenn ein Anforderer IVssBackupComponents::GatherWriterMetadata) aufruft. Daher muss ein VSS Writer sicher verwalten, welche COM-Clients eingehende COM-Aufrufe in seinen Prozess tätigen können.
Ebenso können VSS-Autoren auch als COM-Clients fungieren und ausgehende COM-Aufrufe an Rückrufe tätigen, die von der VSS-Infrastruktur oder RPC-Aufrufen an Prozesse bereitgestellt werden, die sich außerhalb von VSS befinden. Diese Rückrufe, die entweder von einer Sicherungsanwendung oder vom VSS-Dienst bereitgestellt werden, ermöglichen es dem Writer, Aufgaben auszuführen, z. B. das Aktualisieren des Sicherungskomponentendokuments über die IVssComponent Schnittstelle. Daher müssen VSS-Sicherheitseinstellungen autoren erlauben, ausgehende COM-Aufrufe in andere VSS-Prozesse zu tätigen.
Der einfachste Mechanismus zum Verwalten von Writer-Sicherheitsproblemen umfasst die richtige Auswahl des Benutzerkontos, unter dem es ausgeführt wird. Ein Writer muss in der Regel unter einem Benutzer ausgeführt werden, der entweder Mitglied der Gruppe "Administratoren" oder der Gruppe "Sicherungsoperatoren" ist oder als lokales Systemkonto ausgeführt werden muss.
Wenn ein Writer standardmäßig als COM-Client fungiert, wird ein COM-Aufruf, der nicht unter diesen Konten ausgeführt wird, automatisch mit E_ACCESSDENIED abgelehnt, ohne die COM-Methodenimplementierung aufzurufen.
Deaktivieren der COM-Ausnahmebehandlung
Legen Sie beim Entwickeln eines Writers das COM-COMGLB_EXCEPTION_DONOT_HANDLE globale Optionskennzeichnung fest, um die COM-Ausnahmebehandlung zu deaktivieren. Dies ist wichtig, da die COM-Ausnahmebehandlung schwerwiegende Fehler in einer VSS-Anwendung maskieren kann. Der maskierte Fehler kann den Prozess in einem instabilen und unvorhersehbaren Zustand hinterlassen, der zu Beschädigungen und Blockaden führen kann. Weitere Informationen zu diesem Flag finden Sie unter IGlobalOptions.
Festlegen der Standardmäßigen COM-Zugriffsüberprüfungsberechtigung für Writer
Autoren müssen beachten, dass sie eingehende Anrufe von anderen VSS-Teilnehmern zulassen müssen, wenn ihre Prozesse als Server fungieren (z. B. zum Behandeln von VSS-Ereignissen).
Standardmäßig lässt ein Prozess jedoch nur COM-Clients zu, die unter derselben Anmeldesitzung ausgeführt werden, die SELF SID) oder unter dem lokalen Systemkonto ausgeführt wird. Dies ist ein potenzielles Problem, da diese Standardwerte nicht ausreichen, um die VSS-Infrastruktur zu unterstützen. Beispielsweise können Anforderer als "Sicherungsoperator"-Benutzerkonto ausgeführt werden, das sich weder in derselben Anmeldesitzung wie der Writer-Prozess noch als lokales Systemkonto befindet.
Um diese Art von Problem zu behandeln, kann jeder COM-Serverprozess weitere Kontrolle darüber ausüben, ob ein RPC- oder COM-Client eine COM-Methode ausführen darf, die der Server (in diesem Fall ein Writer in diesem Fall) implementiert, indem CoInitializeSecurity verwendet wird, um eine prozessweite Standardberechtigung für die COM-Zugriffsüberprüfung festzulegen.
Autoren können die folgenden Aktionen explizit ausführen:
Zugriff auf alle Prozesse zulassen, um den Writer-Prozess aufzurufen.
Diese Option eignet sich möglicherweise für viele Autoren und wird von anderen COM-Servern verwendet, z. B. alle SVCHOST-basierten Windows-Dienste verwenden diese Option bereits, wie alle COM+-Dienste standardmäßig.
Das Zulassen aller Prozesse zum Ausführen eingehender COM-Aufrufe ist nicht notwendigerweise eine Sicherheitsschwäche. Ein Writer, der wie alle anderen COM-Server als COM-Server fungiert, behält immer die Möglichkeit, seine Clients für jede com-Methode zu autorisieren, die in seinem Prozess implementiert ist.
Um allen Prozessen den COM-Zugriff auf einen Writer zu ermöglichen, können Sie einen NULL- Sicherheitsdeskriptor als ersten Parameter von CoInitializeSecurityübergeben. (Beachten Sie, dass CoInitializeSecurity für den gesamten Prozess höchstens einmal aufgerufen werden muss. Weitere Informationen zu CoInitializeSecurityfinden Sie in der COM-Dokumentation.)
Es folgt ein Codebeispiel, das einen Aufruf von CoInitializeSecurityenthält:
// Initialize COM security. hr = CoInitializeSecurity( NULL, // PSECURITY_DESCRIPTOR pSecDesc, -1, // LONG cAuthSvc, NULL, // SOLE_AUTHENTICATION_SERVICE *asAuthSvc, NULL, // void *pReserved1, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // DWORD dwAuthnLevel, RPC_C_IMP_LEVEL_IDENTIFY, // DWORD dwImpLevel, NULL, // void *pAuthList, EOAC_NONE, // DWORD dwCapabilities, NULL // void *pReserved3 );
Wenn Sie die SICHERHEIT auf COM-Ebene eines Autors explizit mit CoInitializeSecurityfestlegen, sollten Sie folgendes tun:
Legen Sie die Authentifizierungsebene auf mindestens RPC_C_AUTHN_LEVEL_CONNECTfest.
Um eine bessere Sicherheit zu gewährleisten, sollten Sie RPC_C_AUTHN_LEVEL_PKT_PRIVACYverwenden.
Legen Sie die Identitätswechselstufe auf RPC_C_IMP_LEVEL_IDENTIFY fest, es sei denn, der Writer-Prozess muss den Identitätswechsel für bestimmte RPC- oder COM-Aufrufe zulassen, die nicht mit VSS verbunden sind.
Lassen Sie nur den Zugriff auf bestimmte Prozesse zu, um den Writer-Prozess aufzurufen.
Ein COM-Server (z. B. ein Writer), der CoInitializeSecurity mit einem nichtNULL- Sicherheitsdeskriptor aufruft, kann den Deskriptor verwenden, um eingehende Anrufe nur von Benutzern zu akzeptieren, die zu einer bestimmten Gruppe von Konten gehören.
Ein Autor muss sicherstellen, dass COM-Clients, die unter gültigen Benutzern ausgeführt werden, berechtigt sind, seinen Prozess aufzurufen. Ein Writer, der einen Sicherheitsdeskriptor im ersten Parameter angibt, muss es den folgenden Benutzern ermöglichen, eingehende Aufrufe in den Anfordererprozess auszuführen:
- Lokales System
- Mitglieder der lokalen Gruppe "Administratoren"
- Mitglieder der lokalen Gruppe "Sicherungsoperatoren"
- Das Konto, unter dem der Autor ausgeführt wird
Explizites Steuern des Benutzerkontozugriffs auf einen Writer
Es gibt Fälle, in denen das Einschränken des Zugriffs auf einen Writer auf Prozesse, die als lokales System ausgeführt werden, oder unter den lokalen Administratoren oder lokalen Sicherungsoperatoren lokalen Gruppen zu restriktiv sein kann.
Ein Writer-Prozess (z. B. ein Nicht-System-Writer eines Drittanbieters) muss z. B. nicht ordnungsgemäß unter einem Administrator- oder Sicherungsoperatorkonto ausgeführt werden. Aus Sicherheitsgründen wäre es am besten, die Rechte des Prozesses zur Unterstützung von VSS künstlich zu fördern.
In diesen Fällen muss das HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS\VssAccessControl Registrierungsschlüssel geändert werden, um VSS anzuweisen, dass ein angegebener Benutzer sicher ist, einen VSS Writer auszuführen.
Unter diesem Schlüssel müssen Sie einen Unterschlüssel erstellen, der denselben Namen wie das Konto hat, das gewährt oder verweigert werden soll. Dieser Unterschlüssel muss auf einen der Werte in der folgenden Tabelle festgelegt werden.
Wert | Bedeutung |
---|---|
0 | Verweigern Sie dem Benutzer den Zugriff auf Ihren Autor und den Antragsteller. |
1 | Gewähren Sie dem Benutzer Zugriff auf Ihren Autor. |
2 | Gewähren Sie dem Benutzer Zugriff auf Ihren Antragsteller. |
3 | Gewähren Sie dem Benutzer Zugriff auf Ihren Autor und Antragsteller. |
Im folgenden Beispiel wird der Zugriff auf das Konto "MyDomain\MyUser" gewährt:
HKEY_LOCAL_MACHINE
SYSTEM
CurrentControlSet
Services
VSS
VssAccessControl
MyDomain\MyUser = 1<dl>
<dt>
Data type
</dt>
<dd> REG_DWORD</dd>
</dl>
Dieser Mechanismus kann auch verwendet werden, um einen andernfalls zulässigen Benutzer explizit auf die Ausführung eines VSS Writers zu beschränken. Im folgenden Beispiel wird der Zugriff vom Konto "ThatDomain\Administrator" eingeschränkt:
HKEY_LOCAL_MACHINE
SYSTEM
CurrentControlSet
Services
VSS
VssAccessControl
ThatDomain\Administrator = 0<dl>
<dt>
Data type
</dt>
<dd> REG_DWORD</dd>
</dl>
Der Benutzer ThatDomain\Administrator konnte keinen VSS Writer ausführen.