Comment bloquer PowerShell pour les utilisateurs ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à bloquer / désactiver PowerShell sur les machines Windows afin qu'il soit inaccessible pour les utilisateurs standards. Cette configuration est fortement recommandée pour renforcer la sécurité de ses postes de travail et serveur.
PowerShell est un très bon outil d'administration, très puissant et qui permet de réaliser énormément de choses. Le problème, c'est qu'il est aussi beaucoup utilisé par les pirates informatiques par l'intermédiaire des logiciels malveillants (malwares). Je pourrais même être plus précis en affirmant que, depuis plusieurs années, certains ransomwares s'appuient sur PowerShell. Puisque Windows PowerShell est intégré à Windows, c'est une opportunité intéressante. Même si la politique d'exécution de scripts PowerShell est un premier rempart, cela n'est pas suffisant.
L'utilisation de la console PowerShell, de PowerShell ISE et l'exécution de scripts doit être limitée à certains comptes, notamment ceux associés aux membres du service informatique. Par exemple, lorsqu'un technicien intervient sur un poste de travail, il y a des chances qu'il ait besoin d'accéder à PowerShell. À l'inverse, l'utilisateur standard, usager de la machine au quotidien, il y a peu de chances qu'il utilise PowerShell, et si c'est le cas on peut considérer que c'est anormal.
A. Avertissement au sujet des scripts PowerShell exécutés par GPO
Dans certaines entreprises, on s'appuie sur les stratégies de groupe pour exécuter des scripts PowerShell à l'ouverture de session (ou à la fermeture de session) dans le contexte de l'utilisateur. Si vous appliquez la méthode détaillée dans cet article, ces scripts ne pourront plus s'exécuter, car l'utilisateur ne peut plus accéder à l'exécutable de PowerShell. Par contre, les scripts PowerShell exécutés dans le contexte de la machine (paramètre de configuration ordinateur) continueront de fonctionner.
B. Ce que nous allons faire...
Dans un premier temps, nous allons créer une GPO nommée "Restreindre-Acces-PowerShell" qui va s'appliquer sur l'OU "Personnel" de mon Active Directory. Cette OU contient tous les salariés de l'entreprise, à part les membres du service informatique. Tous les membres de cette OU ne pourront plus utiliser PowerShell. Cette GPO s'appuie sur les stratégies de restriction logicielle.
Dans un second temps, nous verrons comment créer une exception afin d'autoriser certains utilisateurs à exécuter PowerShell grâce à un groupe de sécurité AD. Par exemple, vous pouvez cibler tous les comptes de votre annuaire Active Directory et ajouter les membres du service informatique à ce groupe afin de les autoriser à exécuter PowerShell.
II. Bloquer PowerShell pour les utilisateurs standards
À partir de la console de Gestion des stratégies de groupe, je vais créer une GPO nommée "Restreindre-Acces-PowerShell" et la lier à l'OU "Personnel". Ensuite, il faut modifier cette GPO et parcourir les paramètres comme ceci :
Configuration utilisateur > Stratégies > Paramètres Windows > Paramètres de sécurité > Stratégies de restriction logicielle
Effectuez un clic droit sur "Stratégies de restriction logicielle" et cliquez sur "Nouvelles stratégies de restriction logicielle".
Afin de créer de nouvelles règles, effectuez un clic droit sur "Règles supplémentaires" puis cliquez sur "Nouvelle règle de chemin d'accès".
Par défaut, Windows PowerShell est installé à l'emplacement suivant sur Windows : "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe". Le chemin d'accès sera donc ce chemin. Ensuite, pour le paramètre "Niveau de sécurité", choisissez "Non autorisé".
Sur une machine Windows, il y a Windows PowerShell à deux emplacements pour les versions 32 et 64 bits, ainsi que l'éditeur de scripts PowerShell ISE, en version 32 et 64 bits également. En complément, on peut aussi trouver PowerShell 7 (PowerShell Core) qu'il faudra installer soi-même. Afin d'assurer une protection efficace, il faut bloquer l'ensemble de ces exécutables, sinon la configuration sera incomplète.
Répétez l'opération afin de créer une règle pour l'ensemble des chemins suivants :
# PowerShell 7 - 64 bits C:\Program Files\PowerShell\7\pwsh.exe # Windows PowerShell - 64 bits C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe # Windows PowerShell - 32 bits C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe # Windows PowerShell ISE - 64 bits C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe # Windows PowerShell ISE - 32 bits C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe
Vous allez obtenir ceci :
Notre configuration est prête ! Vous pouvez fermer la GPO, et tester sur un poste client en vous connectant avec un utilisateur sur lequel s'applique la GPO. Si vous essayez d'exécuter PowerShell de différentes façons, vous verrez que le message "Cette application a été bloquée par votre administrateur système" s'affiche.
Bien joué ! PowerShell est bloqué, y compris si on l'exécute via une autre application comme Windows Terminal.
Note : sachez que si vous souhaitez complètement désactiver PowerShell sur la machine, peu importe l'utilisateur, c'est possible en utilisant la même méthode via un paramètre de configuration ordinateur plutôt qu'utilisateur. La GPO devra alors cibler des objets ordinateurs.
III. Autoriser PowerShell pour certains utilisateurs
Maintenant, nous allons voir comment gérer une exception afin que tous les membres d'un groupe de sécurité Active Directory soient en mesure de passer outre la restriction. Au sein de l'annuaire Active Directory, créez un groupe de sécurité. Pour ma part, il se nomme "GG-Autoriser-PowerShell" et contient deux utilisateurs. L'utilisateur "Guy Mauve" est normalement un utilisateur lambda, mais pour les besoins de cette démo il aura le droit d'utiliser PowerShell. 😉
Dès lors que le groupe de sécurité est prêt, nous devons retourner dans la console de gestion des GPO. Sélectionnez la GPO dans la liste, cliquez sur l'onglet "Délégation" en haut à droite puis sur le bouton "Ajouter" en bas.
Sélectionnez le groupe "GG-Autoriser-PowerShell" et validez. Ensuite, cliquez sur "OK" en veillant à ce que l'autorisation soit positionnée sur "Lecture".
Toujours dans l'onglet "Délégation", nous devons affiner les droits pour refuser l'application de la GPO sur ce groupe. En bas à droite, cliquez sur "Avancé...".
Dans la liste, sélectionnez le groupe "GG-Autoriser-PowerShell" et vérifiez que la permission "Lecture" soit bien autorisée et cochez la colonne "Refuser" pour la permission "Appliquer la stratégie de groupe".
Voilà, l'exclusion est en place : Guy Mauve va pouvoir profiter de PowerShell sur sa session. Je vous encourage à mettre en place cette mesure de sécurité sur votre infrastructure !
En complément, je vous recommande de bloquer l'accès à l'Invite de commande via le paramètre de GPO prévu à cet effet. Voici quelques liens utiles :
Bonjour Florian,
j’ai testé et malheureusement si on fait un copier coller de powershell.exe sur le bureau le blocage n’est plus fonctionnel :/
Bonjour Emmanuel,
Ah, effectivement je viens d’essayer… Je pensais que cette action demanderait les droits admin, mais visiblement non. Je pense que la GPO reste tout de même pertinente car dans une grande majorité de cas, la première tentative sera effectuée via les chemins par défaut, notamment si c’est un logiciel malveillant qui exécute PowerShell automatiquement dans son processus.
Je viens d’essayer d’autres règles, en bloquant par exemple le dossier racine de PowerShell mais cela n’empêche pas de le copier-coller ailleurs non plus. Avec une règle basée sur le hachage du fichier « powershell.exe », idem ça passe.
Il faudrait que j’effectue quelques tests avec AppLocker pour voir si c’est plus efficace.
A+
Florian
salut florian. Pourrais tu expliquer comment effectuer cette manip en passant par REGEDIT plutôt que GPEDIT? merci d’avance
Bonjour Florian,
Apres avoir galerer sur le sujet, je tiens a partager une petite solution que je trouve tres interessante et plus simple surtout, qui, par ailleurs m’a permis de régler certains problèmes :
configuration Utilisateur > Modele d’administration > Système > Ne pas executer les applications windows spécifiées .
Activez la stratégie et ajoutez simplement « powershell.exe » et « powershell_ise.exe »
Si ça peux en aider certains 😉
Bonjour,
Si je souhaite executer powershell avec un compte admin sur la session d’un utilisateur qui a n’a pas le droit. Est-ce possible de l’executer en tant qu’administrateur ou aurais-je une restriction ?