Derechos de seguridad y acceso de procesos

El modelo de seguridad de Microsoft Windows permite controlar el acceso a los objetos de proceso. Para obtener más información sobre la seguridad, vea Modelo de control de acceso.

Cuando un usuario inicia sesión, el sistema recopila un conjunto de datos que identifica de forma única al usuario durante el proceso de autenticación y lo almacena en un token de acceso. Este token de acceso describe el contexto de seguridad de todos los procesos asociados al usuario. El contexto de seguridad de un proceso es el conjunto de credenciales dadas al proceso o a la cuenta de usuario que creó el proceso.

Puede usar un token para especificar el contexto de seguridad actual de un proceso mediante la función CreateProcessWithTokenW . Puede especificar un descriptor de seguridad para un proceso al llamar a la función CreateProcess, CreateProcessAsUser o CreateProcessWithLogonW . Si especifica NULL, el proceso obtiene un descriptor de seguridad predeterminado. Las ACL del descriptor de seguridad predeterminado para un proceso proceden del token principal o de suplantación del creador.

Para recuperar el descriptor de seguridad de un proceso, llame a la función GetSecurityInfo . Para cambiar el descriptor de seguridad de un proceso, llame a la función SetSecurityInfo .

Los derechos de acceso válidos para los objetos de proceso incluyen los derechos de acceso estándar y algunos derechos de acceso específicos del proceso. En la tabla siguiente se enumeran los derechos de acceso estándar utilizados por todos los objetos.

Value Significado
DELETE (0x00010000L) Necesario para eliminar el objeto.
READ_CONTROL (0x00020000L) Se requiere para leer información en el descriptor de seguridad del objeto, sin incluir la información en sacl. Para leer o escribir la SACL, debe solicitar el derecho de acceso ACCESS_SYSTEM_SECURITY . Para obtener más información, consulte Derecho de acceso SACL.
SYNCHRONIZE (0x00100000L) Derecho a utilizar el objeto para la sincronización. Esto permite que un subproceso espere hasta que el objeto esté en estado señalado.
WRITE_DAC (0x00040000L) Necesario para modificar la DACL en el descriptor de seguridad del objeto .
WRITE_OWNER (0x00080000L) Necesario para cambiar el propietario en el descriptor de seguridad del objeto.

 

En la tabla siguiente se enumeran los derechos de acceso específicos del proceso.

Value Significado
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNCHRONIZE (0x00100000L) | 0xFFFF) Todos los derechos de acceso posibles para un objeto de proceso. Windows Server 2003 y Windows XP: el tamaño de la marca PROCESS_ALL_ACCESS aumentó en Windows Server 2008 y Windows Vista. Si una aplicación compilada para Windows Server 2008 y Windows Vista se ejecuta en Windows Server 2003 o Windows XP, la marca PROCESS_ALL_ACCESS es demasiado grande y la función que especifica esta marca produce un error ERROR_ACCESS_DENIED. Para evitar este problema, especifique el conjunto mínimo de derechos de acceso necesarios para la operación. Si se debe usar PROCESS_ALL_ACCESS, establezca _WIN32_WINNT en el sistema operativo mínimo de destino de la aplicación (por ejemplo, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Para obtener más información, vea Uso de los encabezados de Windows.
PROCESS_CREATE_PROCESS (0x0080) Necesario para usar este proceso como proceso primario con PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.
PROCESS_CREATE_THREAD (0x0002) Necesario para crear un subproceso en el proceso.
PROCESS_DUP_HANDLE (0x0040) Necesario para duplicar un identificador mediante DuplicateHandle.
PROCESS_QUERY_INFORMATION (0x0400) Necesario para recuperar cierta información sobre un proceso, como su token, código de salida y clase de prioridad (consulte OpenProcessToken).
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Necesario para recuperar cierta información sobre un proceso (vea GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). A un identificador que tiene el derecho de acceso PROCESS_QUERY_INFORMATION se le concede automáticamente PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 y Windows XP: este derecho de acceso no se admite.
PROCESS_SET_INFORMATION (0x0200) Necesario para establecer cierta información sobre un proceso, como su clase de prioridad (consulte SetPriorityClass).
PROCESS_SET_QUOTA (0x0100) Se requiere para establecer límites de memoria mediante SetProcessWorkingSetSize.
PROCESS_SUSPEND_RESUME (0x0800) Necesario para suspender o reanudar un proceso.
PROCESS_TERMINATE (0x0001) Necesario para finalizar un proceso mediante TerminateProcess.
PROCESS_VM_OPERATION (0x0008) Necesario para realizar una operación en el espacio de direcciones de un proceso (consulte VirtualProtectEx y WriteProcessMemory).
PROCESS_VM_READ (0x0010) Se requiere para leer la memoria en un proceso mediante ReadProcessMemory.
PROCESS_VM_WRITE (0x0020) Necesario para escribir en memoria en un proceso mediante WriteProcessMemory.
SYNCHRONIZE (0x00100000L) Necesario para esperar a que el proceso finalice mediante las funciones de espera.

 

Para abrir un identificador en otro proceso y obtener derechos de acceso completos, debe habilitar el privilegio SeDebugPrivilege . Para obtener más información, consulte Cambio de privilegios en un token.

El identificador devuelto por la función CreateProcess tiene PROCESS_ALL_ACCESS acceso al objeto de proceso. Al llamar a la función OpenProcess , el sistema comprueba los derechos de acceso solicitados en la DACL en el descriptor de seguridad del proceso. Cuando se llama a la función GetCurrentProcess , el sistema devuelve un pseudohandle con el acceso máximo que daCL permite al autor de la llamada.

Puede solicitar el derecho de acceso ACCESS_SYSTEM_SECURITY a un objeto de proceso si desea leer o escribir la SACL del objeto. Para obtener más información, consulte Listas de control de acceso (ACL) y Derecho de acceso SACL.

Advertencia

Un proceso que tenga algunos de los derechos de acceso indicados aquí puede usarlos para obtener otros derechos de acceso. Por ejemplo, si el proceso A tiene un identificador para procesar B con PROCESS_DUP_HANDLE acceso, puede duplicar el pseudo identificador para el proceso B. Esto crea un identificador que tiene acceso máximo al proceso B. Para obtener más información sobre los pseudo handles, consulte GetCurrentProcess.

 

Procesos protegidos

Windows Vista presenta procesos protegidos para mejorar la compatibilidad con digitales Rights Management. El sistema restringe el acceso a los procesos protegidos y a los subprocesos de los procesos protegidos.

No se permiten los siguientes derechos de acceso estándar desde un proceso a un proceso protegido:

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

No se permiten los siguientes derechos de acceso específicos de un proceso a un proceso protegido:

  • 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

El PROCESS_QUERY_LIMITED_INFORMATION derecho se introdujo para proporcionar acceso a un subconjunto de la información disponible a través de PROCESS_QUERY_INFORMATION.