Le problème
Un utilisateur standard n’a aucune raison légitime d’ouvrir une console PowerShell ou une invite de commandes. Lui en laisser l’accès, c’est laisser une porte ouverte : un attaquant qui obtient une session utilisateur peut utiliser PowerShell comme outil de reconnaissance, de mouvement latéral ou d’exécution. Fermer cette porte réduit la surface d’attaque.
Soyons clairs sur le périmètre : cette GPO ne protège pas contre les ransomwares. Un crypto-locker moderne embarque son propre moteur d’exécution et ne dépend pas de powershell.exe ou cmd.exe présents sur la machine. Bloquer la console est une mesure de durcissement (réduction de surface d’attaque, defense-in-depth), pas un rempart anti-malware. La vraie protection anti-ransomware passe par le retrait des droits admin locaux, le whitelisting applicatif complet, et des sauvegardes hors-ligne.
Cela dit, réduire la surface d’attaque a du sens en soi. C’est l’objectif de cette GPO.
SRP est mort, vive AppLocker
Historiquement, on bloquait des exécutables via les Software Restriction Policies (SRP). Sur Windows 11 récent (24H2), ce n’est plus une option : Microsoft a déprécié SRP depuis Windows 10 build 1803 et l’a largement neutralisé sur les versions modernes. Compter dessus aujourd’hui, c’est compter sur une fonctionnalité morte.
La solution moderne, c’est AppLocker. Officiellement réservé aux éditions Enterprise et Education, il fonctionne en pratique sur Windows 11 Pro via GPO — Microsoft ne le supporte pas officiellement sur Pro, mais ça marche. Le point d’attention principal : AppLocker dépend du service Identité de l’application (AppIDSvc), qui doit tourner sur les machines.
L’avantage d’AppLocker sur les méthodes naïves
Une approche courante mais faillible consiste à utiliser le paramètre “Ne pas exécuter les applications Windows spécifiées” pour bloquer powershell.exe et cmd.exe. Le problème : sur Windows 11, le terminal par défaut est Windows Terminal (wt.exe), qui héberge PowerShell et CMD. Bloquer powershell.exe par cette méthode n’empêche pas de le lancer depuis Windows Terminal.
AppLocker, lui, bloque l’exécutable quel que soit son conteneur. Que powershell.exe soit lancé directement, depuis le menu Démarrer ou depuis Windows Terminal, AppLocker l’intercepte. C’est la bonne méthode.
Création de la GPO
Dans la GPMC :
Clic droit sur l'OU cible → Create a GPO in this domain and link it here
Nom : Block Console Non-Admins
Lier sur STATIONS.
Étape 1 — Activer le service Identité de l’application
AppLocker ne fait rien si ce service ne tourne pas. On le force en démarrage automatique via la GPO :
Computer Configuration → Policies → Windows Settings → Security Settings → System Services
→ "Identité de l'application" (Application Identity)
→ Définir ce paramètre de stratégie → Automatique
Étape 2 — Créer les règles par défaut AppLocker
Avant toute règle de blocage, il faut les règles par défaut, sinon AppLocker bloque tout Windows.
Computer Configuration → Policies → Windows Settings → Security Settings
→ Application Control Policies → AppLocker → Executable Rules
→ Clic droit → Créer des règles par défaut
Cela crée trois règles d’autorisation : tout le monde peut exécuter ce qui est dans Program Files et Windows, et les administrateurs peuvent tout exécuter. Ces règles sont indispensables — sans elles, AppLocker passe en mode “tout est bloqué sauf ce qui est explicitement autorisé” et casse le système.
Étape 3 — Créer les règles Deny
Pour chaque exécutable à bloquer, clic droit sur Règles de l'exécutable → Créer une règle :
- Autorisations :
Refuser, groupeUtilisateurs du domaine(Domain Users) — cible tous les non-admins - Conditions :
Chemin d'accès
Quatre règles à créer :
| Exécutable | Chemin |
|---|---|
| PowerShell | %SYSTEM32%\WindowsPowerShell\v1.0\powershell.exe |
| PowerShell ISE | %SYSTEM32%\WindowsPowerShell\v1.0\powershell_ise.exe |
| Invite de commandes | %SYSTEM32%\cmd.exe |
| PowerShell 7 | %PROGRAMFILES%\PowerShell\7\pwsh.exe |
Pourquoi cibler “Utilisateurs du domaine” et non “Tout le monde” : une règle Deny l’emporte toujours sur une règle Allow dans AppLocker. En ciblant uniquement Domain Users, les administrateurs (qui ne sont pas dans ce blocage et bénéficient de la règle par défaut “Administrateurs → tout autoriser”) conservent l’accès aux consoles. Les non-admins sont bloqués, les admins passent.
La règle PowerShell 7 (
pwsh.exe) est préventive si tu n’as pas PowerShell 7 déployé — elle ne gêne rien et couvre le cas où il serait installé plus tard.
Limites connues d’AppLocker
Soyons honnêtes sur ce que cette protection vaut. AppLocker basé sur les chemins peut être contourné : un utilisateur qui copie powershell.exe ailleurs et le renomme échappe à une règle de chemin. Pour une protection plus robuste, on utiliserait des règles basées sur l’éditeur (signature) ou le hash. Mais pour de la réduction de surface d’attaque face à un usage opportuniste, le blocage par chemin est suffisant et simple à maintenir.
Et le rappel qui vaut la peine d’être répété : la mesure la plus efficace reste de ne pas donner de droits admin locaux aux utilisateurs. AppLocker est un complément, pas un substitut.
Vérification post-déploiement
Après gpupdate /force et reboot sur une machine de test, connecté en utilisateur standard :
Tenter d’ouvrir PowerShell ou CMD doit afficher un message de blocage par stratégie de groupe. Côté admin, vérifier les tentatives bloquées :
Get-AppLockerFileInformation -EventLog -EventType Denied -Statistics
Vérifier aussi que le service tourne :
Get-Service AppIDSvc | Select-Object Name, Status, StartType
Récapitulatif
| Composant | Détail |
|---|---|
| GPO Name | Block Console Non-Admins |
| Méthode | AppLocker (SRP déprécié sur Win11) |
| Prérequis | Service Identité de l’application en Automatique |
| Règles par défaut | Obligatoires avant tout Deny |
| Règles Deny | powershell.exe, powershell_ise.exe, cmd.exe, pwsh.exe |
| Cible du Deny | Utilisateurs du domaine (admins épargnés) |
| Couvre Windows Terminal | Oui (blocage au niveau exécutable) |
| Cible | STATIONS |
Bibliothèque GPO — retour à l’index