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 einen Satz von Daten, der 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, das den Prozess erstellt hat, zugewiesen wurden.

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, CreateProcessAsUser oder CreateProcessWithLogonW aufrufen. Wenn Sie NULL angeben, erhält der Prozess eine Standardsicherheitsbeschreibung. Die ACLs im Standardsicherheitsdeskriptor für einen Prozess stammen vom primären Token oder identitätswechsel des Erstellers.

Um die Sicherheitsbeschreibung eines Prozesses abzurufen, rufen Sie die GetSecurityInfo-Funktion auf. Um die Sicherheitsbeschreibung eines Prozesses zu ändern, rufen Sie 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, um Informationen im Sicherheitsdeskriptor für das Objekt zu lesen, ohne 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-Zugriffsberechtigung.
SYNCHRONIZE (0x00100000L) Das Recht, das Objekt für die Synchronisierung zu verwenden. Dadurch kann ein Thread warten, bis sich das Objekt im signalierten 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 (0x000F000L) | 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_DENIED fehl. Um dieses Problem zu vermeiden, geben Sie den Mindestsatz von Zugriffsrechten an, die für den Vorgang erforderlich sind. Wenn PROCESS_ALL_ACCESS verwendet werden muss, legen Sie _WIN32_WINNT auf das Mindestbetriebssystem ihrer 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 übergeordneten Prozess mit PROC_THREAD_ATTRIBUTE_PARENT_PROCESS zu 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, um bestimmte Informationen zu einem Prozess abzurufen, z. B. token, Exitcode und Prioritätsklasse (siehe OpenProcessToken).
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Erforderlich, um bestimmte Informationen zu einem Prozess abzurufen (siehe GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Ein Handle, das über das PROCESS_QUERY_INFORMATION-Zugriffsrecht verfügt, wird automatisch PROCESS_QUERY_LIMITED_INFORMATION gewä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 Speichergrenzwerte mithilfe von SetProcessWorkingSetSize festzulegen.
PROCESS_SUSPEND_RESUME (0x0800) Erforderlich zum Anhalten oder Fortsetzen eines Prozesses.
PROCESS_TERMINATE (0x0001) Erforderlich, um einen Prozess mit TerminateProcess zu beenden.
PROCESS_VM_OPERATION (0x0008) Erforderlich, um einen Vorgang im Adressraum eines Prozesses auszuführen (siehe VirtualProtectEx und WriteProcessMemory).
PROCESS_VM_READ (0x0010) Erforderlich, um Arbeitsspeicher in einem Prozess mithilfe von ReadProcessMemory zu lesen.
PROCESS_VM_WRITE (0x0020) Erforderlich, um in einen Prozess mit WriteProcessMemory in den Arbeitsspeicher zu schreiben.
SYNCHRONIZE (0x00100000L) Muss mit den Wartefunktionen warten, bis der Prozess beendet wird.

 

Um ein Handle für einen anderen Prozess zu öffnen und vollständige Zugriffsrechte zu erhalten, müssen Sie das SeDebugPrivilege-Recht 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 einen Pseudohandle mit dem maximalen Zugriff zurück, den die DACL auf den 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 Zugriffssteuerungslisten (Access-Control Lists, ACLs) und SACL-Zugriffsberechtigung.

Warnung

Ein Prozess, der über einige der hier aufgeführten Zugriffsrechte verfügt, kann diese verwenden, um andere Zugriffsrechte zu erhalten. Wenn Prozess A beispielsweise über ein Handle zum Verarbeiten von B mit PROCESS_DUP_HANDLE Zugriff verfügt, kann er das 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ützte Prozesse ein, um die Unterstützung für Digital Rights Management zu verbessern. Das System schränkt den Zugriff auf geschützte Prozesse und die Threads geschützter Prozesse ein.

Die folgenden Standardzugriffsrechte sind von einem Prozess auf einen geschützten Prozess nicht zulässig:

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

Die folgenden spezifischen Zugriffsrechte sind von einem Prozess auf einen 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_INFORMATION verfügbaren Informationen zu ermöglichen.