Constrained Language Mode
adDéfinition
Le Constrained Language Mode est un mode de fonctionnement restreint de PowerShell limitant l'accès aux fonctionnalités les plus puissantes et potentiellement dangereuses du langage, notamment l'appel direct à des API Windows via .NET, la manipulation de types COM, et l'exécution de code compilé dynamiquement, tout en conservant la disponibilité des cmdlets PowerShell standards nécessaires aux tâches d'administration courantes. Ce mode constitue une mesure de durcissement particulièrement efficace contre de nombreux outils offensifs distribués sous forme de scripts PowerShell, comme certaines versions historiques de PowerView ou de Mimikatz portées en PowerShell, ces outils s'appuyant fréquemment sur des appels directs à des API Windows bas niveau pour manipuler la mémoire ou interagir avec des structures système sensibles, des opérations bloquées lorsque le Constrained Language Mode est activement appliqué. Son déploiement s'articule généralement avec AppLocker ou Windows Defender Application Control (WDAC), qui déterminent automatiquement le niveau de langage appliqué à une session PowerShell en fonction des règles de confiance définies pour l'utilisateur ou le système concerné, un utilisateur non privilégié se voyant typiquement restreint à ce mode tandis qu'un administrateur de confiance conserve l'accès complet au Full Language Mode. Cette restriction reste contournable par des techniques de bypass documentées, d'où son intégration dans une défense en profondeur plutôt qu'une mesure isolée.
Fonctionnement technique
CLM est activé automatiquement quand AppLocker est actif sur un système. En CLM, les types .NET complexes, les méthodes statiques, et les blocs de script sont restreints. $ExecutionContext.SessionState.LanguageMode retourne 'ConstrainedLanguage'. PowerShell IEX (Invoke-Expression), Add-Type, [System.Reflection.Assembly]::Load() sont bloqués ou restreints.
Impact sur les outils offensifs
- PowerView : Fonctionnel en partie, mais certaines fonctions bloquées
- Empire : Agents PowerShell bloqués
- Bypass : PowerShell 2.0 (sans CLM), .NET direct, C# compiled
Déploiement
- AppLocker : configurer Publisher/Path rules pour déclencher CLM
- WDAC : contrôle plus robuste qu'AppLocker
- Combiner avec ScriptBlock Logging (Event ID 4104)
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h