Sicherheitsüberlegungen für Writer
Die VSS-Infrastruktur erfordert, dass Writerprozesse sowohl als COM-Clients als auch als Server funktionieren können.
Wenn VSS Writer als Server agieren, machen VSS-Writer COM-Schnittstellen verfügbar (z. B. die VSS-Ereignishandler wie CVssWriter::OnIdentify)und empfangen eingehende COM-Aufrufe von VSS-Prozessen (z. B. Anfordernde und den VSS-Dienst) oder RPC-Aufrufe von Prozessen, die außerhalb von VSS liegen, in der Regel, wenn diese Prozesse VSS-Ereignisse generieren (z. B. wenn ein An anfordernder Benutzer IVssBackupComponents::GatherWriterMetadataaufruft). Aus diesem Grund muss ein VSS Writer sicher verwalten, welche COM-Clients eingehende COM-Aufrufe in seinen Prozess tätigen können.
Auf ähnliche Weise können VSS Writer auch als COM-Clients fungieren und ausgehende COM-Aufrufe an Rückrufe senden, die von der VSS-Infrastruktur bereitgestellt werden, oder RPC-Aufrufe an Prozesse, die außerhalb von VSS liegen. Diese Rückrufe, die entweder von einer Sicherungsanwendung oder vom VSS-Dienst bereitgestellt werden, ermöglichen es dem Writer, Aufgaben wie das Aktualisieren des Sicherungskomponentendokuments über die IVssComponent-Schnittstelle auszuführen. Daher müssen VSS-Sicherheitseinstellungen es Writern ermöglichen, ausgehende COM-Aufrufe an andere VSS-Prozesse zu senden.
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 mitglied der Gruppe Administratoren oder der Gruppe Sicherungsoperatoren ist, oder er muss als lokales Systemkonto ausgeführt werden.
Wenn ein Writer als COM-Client agiert und nicht unter diesen Konten ausgeführt wird, werden alle com-Aufrufe, die er vor sich hat, standardmäßig mit E _ ACCESSDENIED abgelehnt, ohne dass sogar die COM-Methodenimplementierung verwendet wird.
Deaktivieren der COM-Ausnahmebehandlung
Legen Sie beim Entwickeln eines Writers das GLOBALE COMGLB EXCEPTION DONOT HANDLE-Flag für globale Optionen 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 dazu führen, dass der Prozess in einem instabilen und unvorhersehbaren Zustand bleibt, was zu Beschädigungen und Hängen führen kann. Weitere Informationen zu diesem Flag finden Sie unter IGlobalOptions.
Festlegen der STANDARDMÄßIGEN COM-Zugriffsüberprüfungsberechtigung für Writer
Writer müssen beachten, dass sie eingehende Aufrufe von anderen VSS-Teilnehmern zulassen müssen, wenn ihre Prozesse als Server fungieren (z. B. zur Handhabung von VSS-Ereignissen).
Standardmäßig lässt ein Prozess jedoch nur COM-Clients zu, die unter derselben Anmeldesitzung wie die SELF-SID oder unter dem lokalen Systemkonto ausgeführt werden. Dies ist ein potenzielles Problem, da diese Standardwerte nicht ausreichen, um die VSS-Infrastruktur zu unterstützen. An anfordernde Benutzer können beispielsweise als "Sicherungsoperator"-Benutzerkonto ausgeführt werden, das sich weder in derselben Anmeldesitzung wie der Writerprozess noch in einem lokalen Systemkonto befindet.
Um diese Art von Problem zu behandeln, kann jeder COM-Serverprozess weitere Kontrolle darüber übernehmen, ob ein RPC- oder COM-Client eine COM-Methode ausführen darf, die der Server (in diesem Fall ein Writer) implementiert, indem er CoInitializeSecurity verwendet, um eine prozessweite STANDARDMÄßIGE COM-Zugriffsüberprüfungsberechtigung zu festlegen.
Writer können explizit Folgendes tun:
Erlauben Sie allen Prozessen den Zugriff auf den Writer-Prozess.
Diese Option kann für viele Writer geeignet sein und wird von anderen COM-Servern verwendet. Beispielsweise verwenden alle SVCHOST-basierten Windows-Dienste diese Option bereits, ebenso wie alle COM+-Dienste standardmäßig.
Das Zulassen, dass alle Prozesse eingehende COM-Aufrufe ausführen, ist nicht notwendigerweise eine Sicherheitsschwäche. Ein Writer, der wie alle anderen COM-Server als COM-Server agiert, behält immer die Möglichkeit, seine Clients auf jeder COM-Methode zu autorisieren, die in seinem Prozess implementiert ist.
Um allen Prozessen 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 mindestens einmal aufgerufen werden muss. Weitere Informationen zu CoInitializeSecurity finden Sie in der COM-Dokumentation.)
Im Folgenden finden Sie ein Codebeispiel, das einen Aufruf von CoInitializeSecurity enthä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 Writers mit CoInitializeSecurityexplizit festlegen, sollten Sie folgende Schritte unternehmen:
Legen Sie die Authentifizierungsebene auf mindestens RPC _ C _ AUTHN _ LEVEL CONNECT _ fest.
Für eine bessere Sicherheit sollten Sie die Verwendung von RPC C _ _ AUTHN _ LEVEL _ PKT PRIVACY in Betracht _ ziehen.
Legen Sie die Identitätswechselebene auf RPC C IMP LEVEL IDENTIFY _ _ _ _ fest, es sei denn, der Writerprozess muss den Identitätswechsel für bestimmte RPC- oder COM-Aufrufe zulassen, die nicht mit VSS in Zusammenhang stehen.
Lassen Sie nur den Zugriff auf angegebene Prozesse zu, um den Writerprozess aufrufen zu können.
Ein COM-Server (z. B. ein Writer), der CoInitializeSecurity mit einem Nicht-NULL-Sicherheitsdeskriptor aufruft, kann den Deskriptor verwenden, um sich selbst so zu konfigurieren, dass eingehende Aufrufe nur von Benutzern akzeptiert werden, die zu einem bestimmten Satz von Konten gehören.
Ein Writer muss sicherstellen, dass COM-Clients, die unter gültigen Benutzern ausgeführt werden, zum Aufrufen des Prozesses autorisiert sind. Ein Writer, der einen Sicherheitsdeskriptor im ersten Parameter angibt, muss den folgenden Benutzern ermöglichen, eingehende Aufrufe im Anfordernden Prozess durchzuführen:
- Lokales System
- Mitglieder der lokalen Administratorgruppe
- Mitglieder der lokalen Gruppe "Sicherungsoperatoren"
- Das Konto, unter dem der Writer 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 oder unter den lokalen Gruppen Administratoren oder lokale Sicherungsoperatoren ausgeführt werden, möglicherweise zu restriktiv ist.
Beispielsweise muss ein Writerprozess (möglicherweise ein Nicht-Systemwriter eines Drittanbieters) normalerweise nicht unter einem Administrator- oder Sicherungsoperatorkonto ausgeführt werden. Aus Sicherheitsgründen ist es am besten, die Berechtigungen des Prozesses zur Unterstützung von VSS nicht künstlicher Art zu fördern.
In diesen Fällen muss der _ _ \ \ \ \ VSS \ VssAccessControl-Registrierungsschlüssel von HKEY LOCAL MACHINE SYSTEM CurrentControlSet Services geändert werden, um VSS anweisen zu können, dass ein angegebener Benutzer sicher ist, einen VSS Writer ausführen zu können.
Unter diesem Schlüssel müssen Sie einen Unterschlüssel erstellen, der denselben Namen wie das Konto hat, dem der Zugriff 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 Writer und an anfordernden Benutzer. |
| 1 | Gewähren Sie dem Benutzer Zugriff auf Ihren Writer. |
| 2 | Gewähren Sie dem Benutzer Zugriff auf Den Anfordernden. |
| 3 | Gewähren Sie dem Benutzer Zugriff auf Ihren Writer und an anfordernden Benutzer. |
Im folgenden Beispiel wird 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 explizit zu verhindern, dass ein Benutzer einen VSS Writer ausführen darf. Im folgenden Beispiel wird der Zugriff über das Konto "ThatDomain \ Administrator" beschrä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 kann keinen VSS Writer \ ausführen.