Prozesssicherheit und Zugriffsrechte
Mit dem Microsoft Windows-Sicherheitsmodell können Sie den Zugriff auf Prozessobjekte steuern. Weitere Informationen zur Sicherheit finden Sie unter Access-Control Model.
Wenn sich ein Benutzer anmeldet, erfasst das System einen Satz von Daten, die den Benutzer während des Authentifizierungsprozesses eindeutig identifizieren, und speichert ihn in einem Zugriffstoken. Dieses Zugriffstoken beschreibt den Sicherheitskontext aller Prozesse, die dem Benutzer zugeordnet sind. Der Sicherheitskontext eines Prozesses ist der Satz von Anmeldeinformationen, die für den Prozess oder das Benutzerkonto angegeben werden, mit dem der Prozess erstellt wurde.
Sie können ein Token verwenden, um den aktuellen Sicherheitskontext für einen Prozess mithilfe der CreateProcessWithTokenW-Funktion anzugeben. Sie können einen Sicherheitsdeskriptor für einen Prozess angeben, wenn Sie die Funktion CreateProcess, CreateProcessAsUseroder CreateProcessWithLogonW aufrufen. Wenn Sie NULL angeben, ruft der Prozess einen Standardsicherheitsdeskriptor ab. Die ACLs in der Standardsicherheitsbeschreibung für einen Prozess stammen vom primären Token oder Identitätswechseltoken des Erstellers.
Rufen Sie die GetSecurityInfo-Funktion auf, um den Sicherheitsdeskriptor eines Prozesses abzurufen. Um den Sicherheitsdeskriptor eines Prozesses zu ändern, rufen Sie die Funktion SetSecurityInfo auf.
Die gültigen Zugriffsrechte für Prozessobjekte umfassen die Standardzugriffsrechte und einige prozessspezifische Zugriffsrechte. In der folgenden Tabelle sind die Standardzugriffsrechte aufgeführt, die von allen -Objekten verwendet werden.
| Wert | Bedeutung |
|---|---|
| DELETE (0x00010000L) | Erforderlich, um das Objekt zu löschen. |
| LESEN _ CONTROL (0x00020000L) | Erforderlich, um Informationen in der Sicherheitsbeschreibung für das Objekt zu lesen, nicht die Informationen in der SACL. Zum Lesen oder Schreiben der SACL müssen Sie das Zugriffsrecht ACCESS _ SYSTEM _ SECURITY anfordern. Weitere Informationen finden Sie unter SACL Access Right. |
| SYNCHRONIZE (0x00100000L) | Das Recht, das Objekt für die Synchronisierung zu verwenden. Dadurch kann ein Thread warten, bis sich das Objekt im signalisierten Zustand befindet. |
| SCHREIBEN _ DAC (0x00040000L) | Erforderlich, um die DACL in der Sicherheitsbeschreibung für das Objekt zu ändern. |
| SCHREIBEN _ OWNER (0x00080000L) | Erforderlich, um den Besitzer in der Sicherheitsbeschreibung für das Objekt zu ändern. |
In der folgenden Tabelle sind die prozessspezifischen Zugriffsrechte aufgeführt.
| Wert | Bedeutung |
|---|---|
| PROZESS _ ALL _ ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNCHRONIZE (0x00100000L) | 0xFFFF) | Alle möglichen Zugriffsrechte für ein Prozessobjekt. Windows Server 2003 und Windows XP: Die Größe des PROCESS ALL _ _ ACCESS-Flags wurde auf Windows Server 2008 und Windows Vista erhöht. Wenn eine anwendung, die für Windows Server 2008 und Windows Vista kompiliert wurde, auf Windows Server 2003 oder Windows XP ausgeführt wird, ist das PROCESS _ ALL _ ACCESS-Flag zu groß, und die Funktion, die dieses Flag anklagt, schlägt mit ERROR ACCESS _ _ DENIED fehl. Um dieses Problem zu vermeiden, geben Sie den mindesten Satz von Zugriffsrechten an, die für den Vorgang erforderlich sind. Wenn PROCESS _ ALL _ ACCESS verwendet werden muss, legen Sie WIN32 WINNT auf das Mindestbetriebssystem fest, auf das Ihre Anwendung ausgerichtet ist _ _ (z. B. #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Weitere Informationen finden Sie unter Using the Windows Headers. |
| PROZESS _ CREATE _ PROCESS (0x0080) | Erforderlich, um diesen Prozess als übergeordneten Prozess mit PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
| PROZESS _ CREATE _ THREAD (0x0002) | Erforderlich, um einen Thread im Prozess zu erstellen. |
| PROZESS _ DUP _ HANDLE (0x0040) | Erforderlich, um ein Handle mit DuplicateHandle zu duplizieren. |
| PROZESS _ _ABFRAGEINFORMATIONEN (0x0400) | Erforderlich, um bestimmte Informationen zu einem Prozess abzurufen, z. B. das Token, den Exitcode und die Prioritätsklasse (siehe OpenProcessToken). |
| PROZESS _ ABFRAGEN _ _ EINGESCHRÄNKTER INFORMATIONEN (0X1000) | Erforderlich, um bestimmte Informationen zu einem Prozess abzurufen (siehe GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Einem Handle mit dem Zugriffsrecht PROCESS _ QUERY _ INFORMATION wird **automatisch PROCESS QUERY LIMITED INFORMATION _ _ _ erteilt.**Windows Server 2003 und Windows XP: Dieses Zugriffsrecht wird nicht unterstützt. |
| PROZESS _ SET _ INFORMATION (0x0200) | Erforderlich, um bestimmte Informationen zu einem Prozess, z. B. dessen Prioritätsklasse, festlegen zu können (siehe SetPriorityClass). |
| PROZESS _ SET _ QUOTA (0x0100) | Erforderlich zum Festlegen von Arbeitsspeicherlimits mit SetProcessWorkingSetSize. |
| PROZESS _ SUSPEND _ RESUME (0x0800) | Erforderlich, um einen Prozess an- oder wieder aufzunehmen. |
| PROZESS _ TERMINATE (0x0001) | Erforderlich, um einen Prozess mit TerminateProcess zu beenden. |
| PROZESS _ _VM-VORGANG (0x0008) | Erforderlich, um einen Vorgang für den Adressraum eines Prozesses durchzuführen (siehe VirtualProtectEx und WriteProcessMemory). |
| PROZESS _ VM _ READ (0x0010) | Erforderlich, um Arbeitsspeicher in einem Prozess mit ReadProcessMemory zu lesen. |
| PROZESS _ VM _ WRITE (0x0020) | Erforderlich, um in einem Prozess mit WriteProcessMemoryin den Arbeitsspeicher zu schreiben. |
| SYNCHRONIZE (0x00100000L) | Erforderlich, um mithilfe der Wartefunktionen auf das Beenden des Prozesses zu warten. |
Um ein Handle für einen anderen Prozess zu öffnen und Vollzugriffsrechte zu erhalten, müssen Sie die Berechtigung SeDebugPrivilege aktivieren. Weitere Informationen finden Sie unter Ändern von Berechtigungen in einem Token.
Das von der CreateProcess-Funktion zurückgegebene Handle verfügt über PROCESS ALL _ _ ACCESS-Zugriff auf das Prozessobjekt. Wenn Sie die OpenProcess-Funktion aufrufen, überprüft das System die angeforderten Zugriffsrechte mit der DACL im Sicherheitsdeskriptor des Prozesses. Wenn Sie die GetCurrentProcess-Funktion aufrufen, gibt das System ein Pseudohandle mit dem maximalen Zugriff zurück, den die DACL dem Aufrufer zulässt.
Sie können das Zugriffsrecht ACCESS _ SYSTEM _ SECURITY für ein Prozessobjekt anfordern, wenn Sie die SACL des Objekts lesen oder schreiben möchten. Weitere Informationen finden Sie unter Zugriffssteuerungslisten (ACCESS-Control Lists, ACLs) und SACL Access Right.
Warnung
Ein Prozess, der über einige der hier genannten Zugriffsrechte verfügt, kann sie verwenden, um andere Zugriffsrechte zu erhalten. Wenn z. B. Prozess A über ein Handle zum Verarbeiten von B mit PROCESS _ DUP _ HANDLE-Zugriff verfügt, kann das Pseudohand handle für Prozess B dupliziert werden. Dadurch wird ein Handle erstellt, das über maximalen Zugriff auf Prozess B verfügt. Weitere Informationen zu Pseudohandles finden Sie unter GetCurrentProcess.
Geschützte Prozesse
Windows Vista führt geschützte Prozesse ein, um die Unterstützung für Digital Rights Management. Das System schränkt den Zugriff auf geschützte Prozesse und die Threads geschützter Prozesse ein.
Die folgenden Standardzugriffsrechte sind von einem Prozess in einen geschützten Prozess nicht zulässig:
- DELETE
- _READ-STEUERELEMENT
- _SCHREIB-DAC
- WRITE _ OWNER
Die folgenden spezifischen Zugriffsrechte sind von einem Prozess in einen geschützten Prozess nicht zulässig:
- ALLE _ _ ZUGRIFFE VERARBEITEN
- PROCESS _ CREATE _ PROCESS
- PROCESS _ CREATE _ THREAD
- _PROZESS-DUP-HANDLE _
- VERARBEITEN _ VON _ ABFRAGEINFORMATIONEN
- PROCESS _ SET _ INFORMATION
- KONTINGENT _ FÜR _ PROZESSSATZ
- _ _ PROZESS-VM-VORGANG
- VERARBEITEN VON _ _ VM-LESEVORGANG
- VERARBEITEN DES _ _ VM-SCHREIBVORGANGS
Das Recht PROCESS QUERY LIMITED _ _ _ INFORMATION wurde eingeführt, um Zugriff auf eine Teilmenge der Informationen zu ermöglichen, die über PROCESS QUERY INFORMATION verfügbar _ _ sind.