Comment modifier les autorisations de registre avec PowerShell

Le registre Windows peut être une mine d’or pour les attaquants et les employés désemparés. Il n’y a pas d’endroit mieux adapté pour introduire des vulnérabilités de sécurité ou complètement visser un système Windows que le registre.

Pour contrôler les autorisations des clés de registre à des fins de sécurité et de dépannage, vous pouvez utiliser plusieurs méthodes différentes. Dans cet article, vous apprendrez PowerShell. En utilisant quelques applets de commande PowerShell et un peu.NET magic, vous pouvez lire et manipuler les autorisations de registre à votre discrétion.

Qu’est-ce qu’une autorisation de registre ?

Pour cet article, une autorisation de registre est un ensemble d’entrées de contrôle d’accès (ACEs) qui constituent une liste de contrôle d’accès (ACL). Ces listes de contrôle d’accès s’appliquent ensuite à une clé de registre.

Les ACL sont un terme courant parmi de nombreuses entités qui s’y trouvent, et les ACL attribuées aux clés de registre ne sont pas différentes. L’ACL définit quoi et comment un compte peut accéder à cette clé de registre.

Une autorisation de registre (ACL) définit le compte qui peut accéder à une clé de registre particulière et le type d’autorisations dont dispose ce compte.

Recherche des autorisations de clé de registre existantes

Commencez par rechercher une clé de registre sur laquelle vous souhaitez modifier les autorisations. Je vais en choisir un au hasard avec le chemin de *HKCU:. Vous pouvez choisir n’importe quelle clé que vous souhaitez essayer.

Avant de changer quoi que ce soit, c’est une bonne idée de voir quelle est l’ACL actuelle et de faire une sauvegarde si les choses tournent mal. PowerShell fournit une applet de commande appelée Get-Acl qui fera exactement cela.

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--

Maintenant que l’ACL existante est capturée, vous pouvez la modifier. Si vous êtes concerné, vous pouvez même enregistrer l’ACL dans le système de fichiers à l’aide de l’applet de commande Export-CliXml, mais c’est pour un autre jour.

Vous pouvez voir un exemple d’utilisation de l’applet de commande Export-CliXml pour enregistrer des objets sur le disque ici.

Création d’une ACL avec PowerShell

Dans la section ci-dessus, vous avez capturé une ACL avec Get-Acl. Puisque vous utilisez le registre, cette LCA particulière capturée ne fonctionne qu’avec le registre. Pour mettre à jour l’ACL, vous devrez ajouter une règle (ACE) à l’ACL destinée au registre.

Lorsque vous définissez des autorisations pour le registre Windows avec PowerShell, vous devez créer un système.Sécurité.Contrôle d’accès.Objet RegistryAccessRule. Cet objet permet de définir des critères comme le principal (utilisateur, groupe, etc.) auquel cet ACE s’applique, niveau d’accès, et si vous allez autoriser ou refuser cet accès.

Définition du droit

La première étape consiste à attribuer les droits appropriés à la clé de registre. Il y a 14 droits différents à choisir. Consultez le tableau de ce document Microsoft pour découvrir le droit que vous recherchez.

Vous pouvez découvrir tous les droits possibles en tapant :: et en appuyant sur la touche tab. PowerShell parcourra tous les droits disponibles.

Création de l’objet RegistryAccessRule

Une fois que vous avez le bon nom, vous devrez ensuite créer l’objet RegistryAccessRule. Cet objet a trois arguments que vous devrez lui transmettre:

  • Une identité (un compte Windows)
  • Le droit (a plusieurs objets différents pour le créer)
  • Autoriser ou refuser ce droit

Tout d’abord, créez l’identité en créant un système.Sécurité.Principal.Objet NTAccount passant dans la référence d’identité comme indiqué ci-dessous.

$idRef = ("HOSTNAME\username")

Ensuite, créez un système.Sécurité.Contrôle d’accès.Objet RegistryRights en utilisant l’un des droits du tableau ci-dessus.

$regRights = ::FullControl

Définissez maintenant les indicateurs d’héritage et de propagation. Ici, vous pouvez choisir entre None, ContainerInherit ou ObjectInherit. Vous trouverez plus d’informations sur ces options ici.

Le paramètre d’héritage de l’extrait suivant est défini sur None, ce qui signifie qu’il n’héritera aucune autorisation de sa clé de registre parent.

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

Une fois que vous avez défini les indicateurs d’héritage et de propagation, définissez le type de contrôle d’accès enum.

$acType = ::Allow

Enfin, créez l’objet RegistryAccessRule en utilisant tous les objets que vous venez de collecter.

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

Vous avez maintenant un RegistryAccessRule défini dans la variablerulerule. Vous en aurez besoin dans la section suivante.

Ajout de l’ACL

L’étape suivante consiste à ajouter le RegistryAccessRule que vous avez créé dans la section précédente à l’ACL en cours à l’aide de la méthode AddAccessRule() sur l’objet ACL que vous avez saisi précédemment.

PS> $acl.AddAccessRule($rule)

Écrasement d’une ACL existante

Alternativement, vous pouvez également écraser complètement l’ACL existante en utilisant la méthode SetAccessRule().

PS> $acl.SetAccessRule($rule)

Assigner l’ACL

Mais vous n’avez pas encore terminé ! Vous n’avez pas réellement validé le nouvel ACL dans la clé de registre. Pour appliquer la nouvelle liste ACL à la clé de registre, utilisez la commande Set-Acl. Pour utiliser la commande Set-Acl, passez l’ACL enregistrée dans Setacl directement à Set-Acl tout en pointant vers la clé à laquelle vous souhaitez l’appliquer.

Vous souhaitez définir l’ACL sur la même clé à partir de laquelle vous avez rassemblé l’ACL d’origine. Passez ce chemin de clé au paramètre Path de Set-Acl pour l’appliquer.

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

L’ACL avec la règle d’accès au registre ajoutée a été appliquée à la clé de registre d’origine. Vous pouvez maintenant vérifier que la modification a été effectuée en appelant à nouveau Get-Acl et en vous assurant que les propriétés IdentityReference, RegistryRights et AccessControlType sont conformes à vos attentes.

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

Résumé

Dans cet article de blog, vous avez appris à capturer, modifier et valider des ACEs dans des listes de contrôle d’accès de clé de registre. Vous avez utilisé l’applet de commande Get-Acl PowerShell pour trouver les ACL existantes et l’applet de commande Set-Acl pour les modifier. L’utilisation de ces deux applets de commande est à peu près tout ce dont vous avez besoin pour travailler avec les autorisations de registre dans PowerShell.

Leave a Reply

Votre adresse e-mail ne sera pas publiée.