Ceci est une ancienne révision du document !
Politique de sécurité et signature de script
La sécurisation de l'exécution de script est importante. En effet, les scripts sont utilisés pour automatiser des actions et surtout les exécuter sans nécessiter la présence de l'utilisateur. Cela entraîne invariablement des dérives et si le processus est très exploité par des administrateurs dans leur tâches quotidiennes, il l'est aussi par des pirates et autres. A ce titre, il faut pouvoir contrôler l'exécution d'un script sur nos infrastructures.
Politique d'exécution
En Powershell, la politique d'exécution est gérer par les commandes Get-ExecutionPolicy et Set-ExecutionPolicy.
Les différentes politiques
L'exécution de Get-ExecutionPolicy nous retournera la politique de sécurité actuelle sur le poste. Parmi ces politiques, nous trouverons :
- AllSigned
- Permet l'exécution des scripts.
- Nécessite que tous les scripts et les fichiers de configuration qu'ils utilisent soient signés par une autorité de confiance, même en local.
- Interroge l'utilisateur lors de l'exécution d'un script signé par une autorité non reconnue. Nécessite des droits d'administrateur pour valider l'autorité.
- Présente un risque d'exécution de code malicieux signé.
- Bypass
- Aucun blocage, ni aucun avertissement.
- Ce mode est surtout conçu pour les tests de scripts et les environnements sécurisés faisant appel à des routines en Powershell.
- Default
- Applique les règles de sécurité par défaut.
Restrictedpour les postes de travail.RemoteSignedpour les serveurs.
- RemoteSigned
- Permet l'exécution des scripts
- Nécessite que tous les scripts extérieurs soient signés par une autorité de confiance.
- Par conséquent, les scripts créés en local n'ont pas besoin de signature.
- Permet d'exécuter des scripts extérieurs si ces derniers ont été débloqués en local avec la commande
Unblock-File. - Risque d'exécution de script malicieux signés et non signés.
- Restricted
- Permet d'exécuter des commandes Powershell.
- Interdit l'exécution de scripts, de modules et de pages de configuration Powershell.
- Undefined
- Aucune politique particulière n'est appliquée
- Si
Undefinedest défini sur tous les périmètres d'activité, alors la politiqueRestricteds'applique.
- Unrestricted
- Permet l'exécution des scripts.
- Affiche un avertissement concernant l'exécution de scripts en provenance d'une source extérieure.
Les différents périmètres
Les différentes politiques peuvent s'appliquer à différents périmètres d'activité, indépendants les uns des autres. Parmi ces périmètres, nous avons :
- MachinePolicy : Tous les utilisateurs d'un poste.
- UserPolicy : L'utilisateur actuel du poste.
- Process : La politique n'est appliqué qu'au processus Powershell actuel. Dès que ce processus se termine, la politique globale se réapplique à tous les autres processus Powershell.
- CurentUser : Equivalent à
UserPolicymais avec inscription de la politique en base de registre (HKCU). - LocalMachine : Equivalent à
MachinePolicymais avec inscription de la politique en base de registre (HKLM). C'est le périmètre par défaut.
- Référence pour
ExecutionPolicy: Microsoft
Exemple de manipulation
- Obtenir la politique d'exécution
Get-ExecutionPolicy AllSigned
- Obtenir la politique d'exécution pour tous les périmètres d'activité
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine AllSigned
- Définir la politique
Restricted
Set-ExecutionPolicy -ExecutionPolicy Restricted
- Définir la politique
Unrestrictedsur le périmètreCurentUser
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
Discussion