Cómo Cambiar los permisos del Registro con PowerShell

El registro de Windows puede ser una mina de oro para atacantes y empleados despistados. No hay lugar más adecuado para introducir vulnerabilidades de seguridad o arruinar por completo un sistema Windows que el registro.

Para controlar los permisos de las claves de registro con fines de seguridad y resolución de problemas, puede utilizar varios métodos diferentes. En este artículo, aprenderá PowerShell. Usar un par de cmdlets de PowerShell y un poco .NET magic, puede leer y manipular los permisos de registro a su discreción.

¿Qué es un permiso de Registro?

Para este artículo, un permiso de registro es un conjunto de entradas de control de acceso (ACEs) que forman una lista de control de acceso (ACL). Estas ACLs se aplican a una clave de registro.

Las ACL son un término común entre muchas entidades, y las ACL asignadas a claves de registro no son diferentes. La ACL define qué y cómo una cuenta puede acceder a esa clave de registro.

Un permiso de registro (ACL) define qué cuenta puede acceder a una clave de registro en particular y qué tipo de permisos tiene esa cuenta.

Encontrar permisos de Clave de Registro existentes

Comience buscando una clave de registro en la que desee cambiar los permisos. Elegiré al azar uno con la ruta de * HKCU:. Puedes elegir cualquier llave que quieras para probar esto.

Antes de cambiar algo, es una buena idea ver cuál es la ACL actual y hacer una copia de seguridad si las cosas salen mal. PowerShell proporciona un cmdlet llamado Get-Acl que hará precisamente eso.

PS> $acl = Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
PS> $acl.Access
RegistryRights : ReadKey
AccessControlType : Allow
IdentityReference : APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES
IsInherited : False
InheritanceFlags : ContainerInherit
PropagationFlags : None
--snip--

Ahora que tiene capturada la ACL existente, puede cambiarla. Si le preocupa, incluso podría guardar la ACL en el sistema de archivos mediante el cmdlet Export-CliXml, pero eso es para otro día.

Puede ver un ejemplo de uso del cmdlet Export-CliXml para guardar objetos en el disco aquí.

Creación de una ACL con PowerShell

En la sección anterior, capturó una ACL con Get-Acl. Dado que está utilizando el registro, esta ACL capturada en particular solo funciona con el registro. Para actualizar la ACL, tendrás que agregar una regla (ACE) a la ACL destinada al registro.

Al definir permisos para el registro de Windows con PowerShell, deberá crear un sistema.Seguridad.Control de acceso.RegistryAccessRule objeto. Este objeto le permite definir criterios como el principal (usuario, grupo, etc.).) al que se aplica este AS, nivel de acceso, y si va a permitir o denegar ese acceso.

Definir el derecho

El primer paso es asignar los derechos apropiados a la clave del registro. Hay 14 derechos diferentes para elegir. Echa un vistazo a la tabla de este documento de Microsoft para descubrir el derecho que estás buscando.

Puede descubrir todos los derechos posibles escribiendo :: y pulsando la tecla tab. PowerShell recorrerá todos los derechos disponibles.

Crear el objeto RegistryAccessRule

Una vez que tenga el nombre correcto, deberá crear el objeto RegistryAccessRule. Este objeto tiene tres argumentos que tendrás que pasarle:

  • Una identidad (una cuenta de Windows)
  • El derecho (tiene varios objetos diferentes para crear esto)
  • Permitir o Denegar ese derecho

Primero, cree la identidad creando un Sistema.Seguridad.Principal.Paso de objeto NTAccount en la referencia de identidad como se muestra a continuación.

$idRef = ("HOSTNAME\username")

A continuación, cree un sistema.Seguridad.Control de acceso.Objeto Derechos de registro que utiliza uno de los derechos de la tabla anterior.

$regRights = ::FullControl

Ahora defina los indicadores de herencia y propagación. Aquí puede elegir entre None, ContainerInherit u ObjectInherit. Puede encontrar más información sobre estas opciones aquí.

La configuración de herencia del siguiente fragmento está establecida en Ninguno, lo que significa que no heredará ningún permiso de su clave de registro principal.

$inhFlags = ::None
$prFlags = ::None

Una vez que haya establecido los indicadores de herencia y propagación, configure el tipo de control de acceso enum.

$acType = ::Allow

Finalmente, cree el objeto RegistryAccessRule utilizando todos los objetos que acaba de recopilar.

$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)

Ahora tiene una regla de acceso al registro definida en la variable rule rule. Necesitarás esto en la siguiente sección.

Agregar la ACL

El siguiente paso es agregar el RegistryAccessRule que creó en la sección anterior a la ACL actual utilizando el método AddAccessRule() en el objeto ACL que tomó anteriormente.

PS> $acl.AddAccessRule($rule)

Sobrescribir una ACL existente

Alternativamente, también puede sobrescribir completamente la ACL existente utilizando el método SetAccessRule ().

PS> $acl.SetAccessRule($rule)

Asignar la ACL

¡Pero aún no ha terminado! En realidad, no ha comprometido la nueva ACL a la clave del registro. Para aplicar la nueva ACL a la clave del registro, utilice el comando Set-Acl. Para usar el comando Set-Acl, pase la ACL guardada en Set acl directamente a Set-Acl mientras apunta a la tecla a la que desea aplicarla.

Desea establecer la ACL en la misma clave de la que recopiló la ACL original. Pase esa ruta de acceso de clave al parámetro Path de Set-Acl para aplicarla.

$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'

La ACL con la regla de acceso al registro agregada se ha aplicado a la clave de registro original. Ahora puede verificar que el cambio se realizó llamando de nuevo a Get-Acl y asegurándose de que las propiedades IdentityReference, RegistryRights y AccessControlType son las que espera.

PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None

Resumen

En esta publicación de blog, aprendiste a capturar, cambiar y confirmar ASEs en ACL de claves de registro. Se utilizó el cmdlet Get-Acl de PowerShell para buscar las ACL existentes y el cmdlet Set-Acl para cambiarlas. El uso de estos dos cmdlets es prácticamente todo lo que necesita para trabajar con permisos de registro en PowerShell.

Leave a Reply

Tu dirección de correo electrónico no será publicada.