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, sammelt das System eine Datenmenge, die den Benutzer während des Authentifizierungsprozesses eindeutig identifiziert, 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 dem Prozess oder dem Benutzerkonto zugewiesen wurden, das den Prozess erstellt hat.
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 CreateProcess, CreateProcessAsUser-oder CreateProcessWithLogonW-Funktion aufrufen. Wenn Sie NULL-angeben, erhält der Prozess einen Standardsicherheitsdeskriptor. Die ACLs im Standardsicherheitsdeskriptor für einen Prozess stammen aus dem primären Oder Identitätswechseltoken des Erstellers.
Rufen Sie zum Abrufen der Sicherheitsbeschreibung eines Prozesses die GetSecurityInfo-Funktion auf. Rufen Sie zum Ändern der Sicherheitsbeschreibung eines Prozesses die SetSecurityInfo--Funktion auf.
Zu den gültigen Zugriffsrechten für Prozessobjekte gehören 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. |
READ_CONTROL (0x00020000L) | Erforderlich zum Lesen von Informationen im Sicherheitsdeskriptor für das Objekt, nicht einschließlich der Informationen in der SACL. Um die SACL zu lesen oder zu schreiben, müssen Sie das ACCESS_SYSTEM_SECURITY Zugriffsrecht 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. |
WRITE_DAC (0x00040000L) | Erforderlich, um die DACL im Sicherheitsdeskriptor für das Objekt zu ändern. |
WRITE_OWNER (0x00080000L) | Erforderlich, um den Besitzer im Sicherheitsdeskriptor für das Objekt zu ändern. |
In der folgenden Tabelle sind die prozessspezifischen Zugriffsrechte aufgeführt.
Wert | Bedeutung |
---|---|
PROCESS_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 unter Windows Server 2008 und Windows Vista erhöht. Wenn eine für Windows Server 2008 und Windows Vista kompilierte Anwendung unter Windows Server 2003 oder Windows XP ausgeführt wird, ist das PROCESS_ALL_ACCESS Flag zu groß, und die Funktion, die dieses Flag angibt, schlägt mit ERROR_ACCESS_DENIEDfehl. 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 für Ihre Anwendung fest (z. B. #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Weitere Informationen finden Sie unter Verwenden der Windows-Header. |
PROCESS_CREATE_PROCESS (0x0080) | Erforderlich, um diesen Prozess als übergeordneter Prozess mit PROC_THREAD_ATTRIBUTE_PARENT_PROCESSzu verwenden. |
PROCESS_CREATE_THREAD (0x0002) | Erforderlich, um einen Thread im Prozess zu erstellen. |
PROCESS_DUP_HANDLE (0x0040) | Erforderlich, um ein Handle mit DuplicateHandle-zu duplizieren. |
PROCESS_QUERY_INFORMATION (0x0400) | Erforderlich zum Abrufen bestimmter Informationen zu einem Prozess, z. B. token, Beendigungscode und Prioritätsklasse (siehe OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Erforderlich zum Abrufen bestimmter Informationen zu einem Prozess (siehe GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Ein Handle mit dem PROCESS_QUERY_INFORMATION Zugriffsrecht wird automatisch PROCESS_QUERY_LIMITED_INFORMATIONgewährt.Windows Server 2003 und Windows XP: Dieses Zugriffsrecht wird nicht unterstützt. |
PROCESS_SET_INFORMATION (0x0200) | Erforderlich, um bestimmte Informationen zu einem Prozess festzulegen, z. B. seine Prioritätsklasse (siehe SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100) | Erforderlich, um Speicherbeschränkungen mithilfe von SetProcessWorkingSetSizefestzulegen. |
PROCESS_SUSPEND_RESUME (0x0800) | Erforderlich zum Anhalten oder Fortsetzen eines Prozesses. |
PROCESS_TERMINATE (0x0001) | Erforderlich, um einen Prozess mit TerminateProcesszu beenden. |
PROCESS_VM_OPERATION (0x0008) | Erforderlich zum Ausführen eines Vorgangs im Adressraum eines Prozesses (siehe VirtualProtectEx und WriteProcessMemory). |
PROCESS_VM_READ (0x0010) | Erforderlich zum Lesen des Arbeitsspeichers in einem Prozess mithilfe ReadProcessMemory-. |
PROCESS_VM_WRITE (0x0020) | Erforderlich zum Schreiben in den Arbeitsspeicher in einem Prozess mithilfe WriteProcessMemory. |
SYNCHRONIZE (0x00100000L) | Erforderlich, um zu warten, bis der Prozess mit den Wartefunktionenbeendet wird. |
Um ein Handle für einen anderen Prozess zu öffnen und Vollzugriffsrechte zu erhalten, müssen Sie das SeDebugPrivilege-Berechtigung aktivieren. Weitere Informationen finden Sie unter Ändern von Berechtigungen in einem Token-.
Das von der CreateProcess-Funktion zurückgegebene Handle hat PROCESS_ALL_ACCESS Zugriff auf das Prozessobjekt. Wenn Sie die OpenProcess--Funktion aufrufen, überprüft das System die angeforderten Zugriffsrechte für die DACL im Sicherheitsdeskriptor des Prozesses. Wenn Sie die GetCurrentProcess--Funktion aufrufen, gibt das System eine Pseudohandle mit dem maximalen Zugriff zurück, den die DACL dem Aufrufer zulässt.
Sie können das ACCESS_SYSTEM_SECURITY Zugriffsrecht auf ein Prozessobjekt anfordern, wenn Sie die SACL des Objekts lesen oder schreiben möchten. Weitere Informationen finden Sie unter Access-Control Listen (ACLs) und SACL Access Right.
Warnung
Ein Prozess, der über einige der hier aufgeführten 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 er den Pseudohandle für Prozess B duplizieren. Dadurch wird ein Handle erstellt, das maximalen Zugriff auf Prozess B hat. Weitere Informationen zu Pseudohandles finden Sie unter GetCurrentProcess.
Geschützte Prozesse
Windows Vista führt geschützten Prozesse ein, um die Unterstützung für digital Rights Management zu verbessern. Das System beschränkt den Zugriff auf geschützte Prozesse und die Threads geschützter Prozesse.
Die folgenden Standardzugriffsrechte sind von einem Prozess zu einem geschützten Prozess nicht zulässig:
- DELETE-
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Die folgenden speziellen Zugriffsrechte sind von einem Prozess zu einem geschützten Prozess nicht zulässig:
- PROCESS_ALL_ACCESS
- PROCESS_CREATE_PROCESS
- PROCESS_CREATE_THREAD
- PROCESS_DUP_HANDLE
- PROCESS_QUERY_INFORMATION
- PROCESS_SET_INFORMATION
- PROCESS_SET_QUOTA
- PROCESS_VM_OPERATION
- PROCESS_VM_READ
- PROCESS_VM_WRITE
Das PROCESS_QUERY_LIMITED_INFORMATION Recht wurde eingeführt, um den Zugriff auf eine Teilmenge der über PROCESS_QUERY_INFORMATIONverfügbaren Informationen zu ermöglichen.