Zabezpieczenia procesów i prawa dostępu
Model zabezpieczeń systemu Microsoft Windows umożliwia kontrolowanie dostępu do obiektów przetwarzania. Aby uzyskać więcej informacji na temat zabezpieczeń, zobacz Access-Control Model.
Gdy użytkownik loguje się, system zbiera zestaw danych, który jednoznacznie identyfikuje użytkownika podczas procesu uwierzytelniania i przechowuje go w tokenie dostępu . Ten token dostępu opisuje kontekst zabezpieczeń wszystkich procesów skojarzonych z użytkownikiem. Kontekst zabezpieczeń procesu to zestaw poświadczeń przekazanych procesowi lub konto użytkownika, które utworzyło proces.
Token umożliwia określenie bieżącego kontekstu zabezpieczeń dla procesu przy użyciu funkcji CreateProcessWithTokenW. Deskryptor zabezpieczeń można określić procesu podczas wywoływania funkcji CreateProcess, CreateProcessAsUserlub CreateProcessWithLogonW. Jeśli określisz o wartości NULL, proces otrzyma domyślny deskryptor zabezpieczeń. Listy ACL w domyślnym deskryptorze zabezpieczeń dla procesu pochodzą z podstawowego lub personifikacyjnego tokenu twórcy.
Aby pobrać deskryptor zabezpieczeń procesu, wywołaj funkcję GetSecurityInfo. Aby zmienić deskryptor zabezpieczeń procesu, wywołaj funkcję SetSecurityInfo.
Prawidłowe prawa dostępu do obiektów procesu obejmują standardowe prawa dostępu i niektóre prawa dostępu specyficzne dla procesu. W poniższej tabeli wymieniono standardowe prawa dostępu używane przez wszystkie obiekty.
Wartość | Znaczenie |
---|---|
DELETE (0x00010000L) | Wymagane do usunięcia obiektu. |
READ_CONTROL (0x00020000L) | Wymagane do odczytu informacji w deskryptorze zabezpieczeń dla obiektu, a nie w tym informacji w SACL. Aby odczytać lub zapisać SACL, musisz zażądać ACCESS_SYSTEM_SECURITY prawa dostępu. Aby uzyskać więcej informacji, zobacz SACL Access Right. |
SYNC (0x00100000L) | Prawo do używania obiektu do synchronizacji. Dzięki temu wątek może czekać, aż obiekt będzie w stanie sygnału. |
WRITE_DAC (0x00040000L) | Wymagane do zmodyfikowania listy DACL w deskryptorze zabezpieczeń dla obiektu. |
WRITE_OWNER (0x000800000L) | Wymagane do zmiany właściciela w deskryptorze zabezpieczeń dla obiektu. |
W poniższej tabeli wymieniono prawa dostępu specyficzne dla procesu.
Wartość | Znaczenie |
---|---|
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNC (0x00100000L) | 0xFFFF) | Wszystkie możliwe prawa dostępu dla obiektu procesu.Windows Server 2003 i Windows XP: Rozmiar flagi PROCESS_ALL_ACCESS wzrosła w systemach Windows Server 2008 i Windows Vista. Jeśli aplikacja skompilowana dla systemu Windows Server 2008 i Windows Vista jest uruchomiona w systemie Windows Server 2003 lub Windows XP, flaga PROCESS_ALL_ACCESS jest zbyt duża, a funkcja określająca tę flagę kończy się niepowodzeniem z ERROR_ACCESS_DENIED. Aby uniknąć tego problemu, określ minimalny zestaw praw dostępu wymaganych do operacji. Jeśli PROCESS_ALL_ACCESS należy użyć, ustaw _WIN32_WINNT na minimalny system operacyjny przeznaczony dla aplikacji (na przykład #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Aby uzyskać więcej informacji, zobacz Using the Windows Headers. |
PROCESS_CREATE_PROCESS (0x0080) | Wymagany do użycia tego procesu jako procesu nadrzędnego z PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
PROCESS_CREATE_THREAD (0x0002) | Wymagane do utworzenia wątku w procesie. |
PROCESS_DUP_HANDLE (0x0040) | Wymagane do zduplikowania uchwytu przy użyciu DuplicateHandle. |
PROCESS_QUERY_INFORMATION (0x0400) | Wymagane do pobrania pewnych informacji o procesie, takich jak token, kod zakończenia i klasa priorytetu (zobacz OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Wymagane do pobrania pewnych informacji o procesie (zobacz GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Dojście z prawem dostępu PROCESS_QUERY_INFORMATION jest automatycznie przyznawane PROCESS_QUERY_LIMITED_INFORMATION.Windows Server 2003 i Windows XP: To prawo dostępu nie jest obsługiwane. |
PROCESS_SET_INFORMATION (0x0200) | Wymagane do ustawienia pewnych informacji o procesie, takich jak jego klasa priorytetu (zobacz SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100) | Wymagane do ustawienia limitów pamięci przy użyciu SetProcessWorkingSetSize. |
PROCESS_SUSPEND_RESUME (0x0800) | Wymagane do wstrzymania lub wznowienia procesu. |
PROCESS_TERMINATE (0x0001) | Wymagane do zakończenia procesu przy użyciu TerminateProcess. |
PROCESS_VM_OPERATION (0x0008) | Wymagane do wykonania operacji w przestrzeni adresowej procesu (zobacz VirtualProtectEx i WriteProcessMemory). |
PROCESS_VM_READ (0x0010) | Wymagane do odczytu pamięci w procesie przy użyciu ReadProcessMemory. |
PROCESS_VM_WRITE (0x0020) | Wymagane do zapisu w pamięci w procesie przy użyciu WriteProcessMemory. |
SYNC (0x00100000L) | Wymagane do oczekiwania na zakończenie procesu przy użyciu funkcji oczekiwania . |
Aby otworzyć dojście do innego procesu i uzyskać pełne prawa dostępu, musisz włączyć uprawnienia SeDebugPrivilege. Aby uzyskać więcej informacji, zobacz Zmienianie uprawnień w tokenie.
Dojście zwrócone przez funkcję CreateProcess ma PROCESS_ALL_ACCESS dostęp do obiektu procesu. Po wywołaniu funkcji OpenProcess system sprawdza żądane prawa dostępu względem listy DACL w deskryptorze zabezpieczeń procesu. Po wywołaniu funkcji GetCurrentProcess system zwraca pseudohandle z maksymalnym dostępem, który daCL zezwala na obiekt wywołujący.
Możesz zażądać ACCESS_SYSTEM_SECURITY prawa dostępu do obiektu procesu, jeśli chcesz odczytać lub zapisać SACL obiektu. Aby uzyskać więcej informacji, zobacz listAccess-Control list (ACL) i SACL Access Right.
Ostrzeżenie
Proces, który ma niektóre prawa dostępu zanotowany tutaj, może użyć ich do uzyskania innych praw dostępu. Jeśli na przykład proces A ma dojście do przetwarzania B z dostępem PROCESS_DUP_HANDLE, może zduplikować pseudojazd dla procesu B. Spowoduje to utworzenie uchwytu, który ma maksymalny dostęp do procesu B. Aby uzyskać więcej informacji na temat pseudo dojść, zobacz GetCurrentProcess.
Chronione procesy
System Windows Vista wprowadza chronionych procesów w celu zwiększenia obsługi usługi Digital Rights Management. System ogranicza dostęp do chronionych procesów i wątków chronionych procesów.
Następujące standardowe prawa dostępu nie są dozwolone z procesu do chronionego procesu:
- DELETE
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Następujące określone prawa dostępu nie są dozwolone z procesu do chronionego procesu:
- 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
Prawo PROCESS_QUERY_LIMITED_INFORMATION zostało wprowadzone w celu zapewnienia dostępu do podzestawu informacji dostępnych za pośrednictwem PROCESS_QUERY_INFORMATION.