Elaborare diritti di sicurezza e accesso
Il modello di sicurezza di Microsoft Windows consente di controllare l'accesso agli oggetti di elaborazione. Per altre informazioni sulla sicurezza, vedere Modello di controllo di accesso.
Quando un utente accede, il sistema raccoglie un set di dati che identifica in modo univoco l'utente durante il processo di autenticazione e lo archivia in un token di accesso. Questo token di accesso descrive il contesto di sicurezza di tutti i processi associati all'utente. Il contesto di sicurezza di un processo è il set di credenziali assegnato al processo o all'account utente che ha creato il processo.
È possibile usare un token per specificare il contesto di sicurezza corrente per un processo usando la funzione CreateProcessWithTokenW . È possibile specificare un descrittore di sicurezza per un processo quando si chiama la funzione CreateProcess, CreateProcessAsUser o CreateProcessWithLogonW. Se si specifica NULL, il processo ottiene un descrittore di sicurezza predefinito. Gli ACL nel descrittore di sicurezza predefinito per un processo provengono dal token primario o di rappresentazione del creatore.
Per recuperare il descrittore di sicurezza di un processo, chiamare la funzione GetSecurityInfo . Per modificare il descrittore di sicurezza di un processo, chiamare la funzione SetSecurityInfo .
I diritti di accesso validi per gli oggetti processo includono i diritti di accesso standard e alcuni diritti di accesso specifici del processo. Nella tabella seguente sono elencati i diritti di accesso standard usati da tutti gli oggetti.
Valore | Significato |
---|---|
DELETE (0x00010000L) | Obbligatorio per eliminare l'oggetto. |
READ_CONTROL (0x00020000L) | Necessario per leggere le informazioni nel descrittore di sicurezza per l'oggetto, non incluse le informazioni contenute in SACL. Per leggere o scrivere SACL, è necessario richiedere il diritto di accesso ACCESS_SYSTEM_SECURITY . Per altre informazioni, vedere SACL Access Right. |
SYNC (0x00100000L) | Diritto di utilizzare l'oggetto per la sincronizzazione. Ciò consente a un thread di attendere fino a quando l'oggetto non si trova nello stato segnalato. |
WRITE_DAC (0x00040000L) | Obbligatorio modificare l'elenco dati nel descrittore di sicurezza per l'oggetto. |
WRITE_OWNER (0x00080000L) | Obbligatorio per modificare il proprietario nel descrittore di sicurezza per l'oggetto. |
Nella tabella seguente sono elencati i diritti di accesso specifici del processo.
Valore | Significato |
---|---|
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F000L) | SYNC (0x00100000L) | 0xFFFF) | Tutti i diritti di accesso possibili per un oggetto processo. Windows Server 2003 e Windows XP: Le dimensioni del flag di PROCESS_ALL_ACCESS aumentano in Windows Server 2008 e Windows Vista. Se un'applicazione compilata per Windows Server 2008 e Windows Vista viene eseguita in Windows Server 2003 o Windows XP, il flag di PROCESS_ALL_ACCESS è troppo grande e la funzione che specifica questo flag non riesce con ERROR_ACCESS_DENIED. Per evitare questo problema, specificare il set minimo di diritti di accesso necessari per l'operazione. Se PROCESS_ALL_ACCESS deve essere usato, impostare _WIN32_WINNT sul sistema operativo minimo di destinazione dell'applicazione, ad esempio #define _WIN32_WINNT _WIN32_WINNT_WINXP . Per altre informazioni, vedere Uso delle intestazioni di Windows. |
PROCESS_CREATE_PROCESS (0x0080 ) | Obbligatorio usare questo processo come processo padre con PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
PROCESS_CREATE_THREAD (0x0002 ) | Obbligatorio per creare un thread nel processo. |
PROCESS_DUP_HANDLE (0x0040 ) | Necessario per duplicare un handle usando DuplicateHandle. |
PROCESS_QUERY_INFORMATION (0x0400 ) | Obbligatorio per recuperare determinate informazioni su un processo, ad esempio il token, il codice di uscita e la classe priorità (vedere OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000 ) | Obbligatorio per recuperare determinate informazioni su un processo (vedere GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Un handle con il diritto di accesso PROCESS_QUERY_INFORMATION viene concesso automaticamente PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 e Windows XP: Questo diritto di accesso non è supportato. |
PROCESS_SET_INFORMATION (0x0200 ) | Obbligatorio per impostare determinate informazioni su un processo, ad esempio la relativa classe di priorità (vedere SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100 ) | Obbligatorio per impostare i limiti di memoria usando SetProcessWorkingSetSize. |
PROCESS_SUSPEND_RESUME (0x0800 ) | Obbligatorio per sospendere o riprendere un processo. |
PROCESS_TERMINATE (0x0001 ) | Obbligatorio per terminare un processo usando TerminateProcess. |
PROCESS_VM_OPERATION (0x0008 ) | Necessario per eseguire un'operazione sullo spazio indirizzi di un processo (vedere VirtualProtectEx e WriteProcessMemory). |
PROCESS_VM_READ (0x0010 ) | Necessario per leggere la memoria in un processo usando ReadProcessMemory. |
PROCESS_VM_WRITE (0x0020 ) | Necessario scrivere in memoria in un processo usando WriteProcessMemory. |
SYNC (0x00100000L) | Necessario attendere che il processo venga terminato usando le funzioni di attesa. |
Per aprire un handle a un altro processo e ottenere diritti di accesso completi, è necessario abilitare il privilegio SeDebugPrivilege . Per altre informazioni, vedere Modifica dei privilegi in un token.
L'handle restituito dalla funzione CreateProcess ha PROCESS_ALL_ACCESS accesso all'oggetto process. Quando si chiama la funzione OpenProcess , il sistema controlla i diritti di accesso richiesti rispetto al descrittore di sicurezza del processo. Quando si chiama la funzione GetCurrentProcess , il sistema restituisce uno pseudohandle con l'accesso massimo consentito al chiamante.
È possibile richiedere il diritto di accesso ACCESS_SYSTEM_SECURITY a un oggetto processo se si vuole leggere o scrivere l'oggetto SACL. Per altre informazioni, vedere Elenchi di controllo di accesso (ACL) e SACL Access Right.
Avviso
Un processo con alcuni dei diritti di accesso annotati qui può usarli per ottenere altri diritti di accesso. Ad esempio, se il processo A ha un handle per elaborare B con accesso PROCESS_DUP_HANDLE , può duplicare lo pseudo handle per il processo B. In questo modo viene creato un handle con accesso massimo al processo B. Per altre informazioni sugli handle pseudo, vedere GetCurrentProcess.
Processi protetti
Windows Vista introduce processi protetti per migliorare il supporto per Digital Rights Management. Il sistema limita l'accesso ai processi protetti e ai thread dei processi protetti.
I diritti di accesso standard seguenti non sono consentiti da un processo a un processo protetto:
- DELETE
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
I diritti di accesso specifici seguenti non sono consentiti da un processo a un processo protetto:
- 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
Il diritto PROCESS_QUERY_LIMITED_INFORMATION è stato introdotto per fornire l'accesso a un subset delle informazioni disponibili tramite PROCESS_QUERY_INFORMATION.