powershell_securite

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
powershell_securite [2019/10/09 17:52] nekanpowershell_securite [2021/03/05 15:56] (Version actuelle) nekan
Ligne 1: Ligne 1:
-~~CLOSETOC~~ 
 ====== Politique de sécurité et signature de script ====== ====== Politique de sécurité et signature de script ======
 +<label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/03/28 20:50//
  
 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. 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.
Ligne 58: Ligne 58:
  
   * Obtenir la politique d'exécution   * Obtenir la politique d'exécution
-<code:ps1>Get-ExecutionPolicy +<sxh powershell>Get-ExecutionPolicy 
-AllSigned</code>+AllSigned</sxh>
  
   * Obtenir la politique d'exécution pour tous les périmètres d'activité   * Obtenir la politique d'exécution pour tous les périmètres d'activité
-<code:ps1>Get-ExecutionPolicy -List+<sxh powershell>Get-ExecutionPolicy -List
  
         Scope ExecutionPolicy         Scope ExecutionPolicy
Ligne 70: Ligne 70:
       Process       Undefined       Process       Undefined
   CurrentUser       Undefined   CurrentUser       Undefined
- LocalMachine       AllSigned</code>+ LocalMachine       AllSigned</sxh>
  
   * Définir la politique ''Restricted''   * Définir la politique ''Restricted''
-<code:ps1>Set-ExecutionPolicy -ExecutionPolicy Restricted</code>+<sxh powershell>Set-ExecutionPolicy -ExecutionPolicy Restricted</sxh>
  
   * Définir la politique ''Unrestricted'' sur le périmètre ''CurrentUser''   * Définir la politique ''Unrestricted'' sur le périmètre ''CurrentUser''
-<code:ps1>Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser</code>+<sxh powershell>Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser</sxh>
  
 ===== Signature des scripts ===== ===== Signature des scripts =====
Ligne 82: Ligne 82:
 Comme on vient de le voir, on peut renforcer la sécurité d'un script et de son exécution en le signant.  Comme on vient de le voir, on peut renforcer la sécurité d'un script et de son exécution en le signant. 
  
-<note tip>La signature d'un script le protège de toute modification. En effet, si le script est modifié après signature alors cette dernière sera corrompu et ne pourra pas être authentifiée par l'autorité de certification. Si vous voulez modifié un script signé, il faudra alors le signer à nouveau.</note>+<callout type="tip" icon="true" title="Sécurité">La signature d'un script le protège de toute modification. En effet, si le script est modifié après signature alors cette dernière sera corrompu et ne pourra pas être authentifiée par l'autorité de certification. Si vous voulez modifié un script signé, il faudra alors le signer à nouveau.</callout>
  
 Pour cela, la procédure est assez simple mais nécessite quelques prérequis tels que : Pour cela, la procédure est assez simple mais nécessite quelques prérequis tels que :
Ligne 90: Ligne 90:
  
 Si les prérequis sont remplis, alors la signature d'un script, par exemple un script ''Hello-World.ps1'' qui serait enregistré dans le dossier ''C:\Scripts\'', devient possible via les commandes suivantes : Si les prérequis sont remplis, alors la signature d'un script, par exemple un script ''Hello-World.ps1'' qui serait enregistré dans le dossier ''C:\Scripts\'', devient possible via les commandes suivantes :
-<code:ps1># On stocke les différentes informations nécessaires dans des variables+<sxh powershell># On stocke les différentes informations nécessaires dans des variables
 # D'abord le script à signer # D'abord le script à signer
-$Script = 'C:\Scripts\Hello-World.ps1+$Script = "C:\Scripts\Hello-World.ps1"
  
 # Ensuite le certificat # Ensuite le certificat
Ligne 104: Ligne 104:
 # Le retour console est alors : # Le retour console est alors :
  
-    Répertoire : C:\Scripts+    Répertoire : C:\Scripts
  
  
-SignerCertificate                         Status                                                Path                                                                                    +SignerCertificate                         Status                                                Path 
------------------                         ------                                                ----                                                                                    +-----------------                         ------                                                ---- 
-DDDDCD0C34FE6993EBDA34F436ADAF1EF3ADBF37  Valid                                                 Hello-World.ps1   +DDDDCD0C34FE6993EBDA34F436ADAF1EF3ADBF37  Valid                                                 Hello-World.ps1 
-</code>+</sxh>
  
-<note>A noter que lors de la première exécution du script signé, un avertissement sera émis afin de vous permettre de valider l'autorité en tant qu'autorité de confiance. Si bien sûr, cela n'a pas déjà été fait.</note>+<callout type="primary" icon="true" title="Autorisation">A noter que lors de la première exécution du script signé, un avertissement sera émis afin de vous permettre de valider l'autorité en tant qu'autorité de confiance. Si bien sûr, cela n'a pas déjà été fait.</callout>
  
-Ce script nouvellement signé pourra désormais être exécuté sur le système de manière sécurisée et ce, tant que sera valide la certificat utilisé pour la signature. Du coup, certains pourraient avoir envie de signer définitivement un script quelle que soit la durée de vie du certificat. Powershell nous en donne la possibilité via en ajoutant la variable ''-TimestampServer'' qui permet d'ajouter une date validé lors de la signature. Dans ce cas alors lorsque que la signature sera vérifié, elle le sera par rapport à la validité du certificat au moment de la signature. Cette variable nécessite de faire appel à un serveur spécifique, appelé ''Timestamp Server'', mais Powershell ne peut y accéder que via ''HTTP'' et non ''HTTPS'', ce qui à mon goût représente un risque. Cependant, une rapide recherche sur Internet permet de trouver des serveurs utilisables gratuitement.+Ce script nouvellement signé pourra désormais être exécuté sur le système de manière sécurisée et ce, tant que sera valide la certificat utilisé pour la signature. Du coup, certains pourraient avoir envie de signer définitivement un script quelle que soit la durée de vie du certificat. Powershell nous en donne la possibilité via la variable ''-TimestampServer'' qui permet d'ajouter une date validé lors de la signature. Dans ce cas alors lorsque que la signature sera vérifié, elle le sera par rapport à la validité du certificat au moment de la signature. Cette variable nécessite de faire appel à un serveur spécifique, appelé ''Timestamp Server'', mais Powershell ne peut y accéder que via ''HTTP'' et non ''HTTPS'', ce qui à mon goût représente un risque. Cependant, une rapide recherche sur Internet permet de trouver des serveurs utilisables gratuitement.
 La syntaxe devient alors : La syntaxe devient alors :
  
-<code:ps1># On stocke les différentes informations nécessaires dans des variables+<sxh powershell># On stocke les différentes informations nécessaires dans des variables
 # D'abord le script à signer # D'abord le script à signer
-$Script = 'C:\Scripts\Hello-World.ps1'+$Script = "C:\Scripts\Hello-World.ps1"
  
 # Ensuite le certificat # Ensuite le certificat
Ligne 137: Ligne 137:
  
  
-SignerCertificate                         Status                                                Path                                                                                    +SignerCertificate                         Status                                                Path 
------------------                         ------                                                ----                                                                                    +-----------------                         ------                                                ---- 
-DDDDCD0C34FE6993EBDA34F436ADAF1EF3ADBF37  Valid                                                 Hello-World.ps1   +DDDDCD0C34FE6993EBDA34F436ADAF1EF3ADBF37  Valid                                                 Hello-World.ps1 
-</code>+</sxh>
  
   * Référence pour ''Set-AuthenticodeSignature'' : [[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-authenticodesignature?view=powershell-6|Microsoft]]   * Référence pour ''Set-AuthenticodeSignature'' : [[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-authenticodesignature?view=powershell-6|Microsoft]]
-  * Recherche pour les serveur d'horodatage : [[https://stackoverflow.com/questions/25052925/does-anyone-know-a-freetrial-timestamp-server-service|Stack Overflow]] +  * Recherche pour les serveurs d'horodatage : [[https://stackoverflow.com/questions/25052925/does-anyone-know-a-freetrial-timestamp-server-service|Stack Overflow]]
- +
- --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/03/28 20:50//+
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • powershell_securite.1570636350.txt.gz
  • Dernière modification : 2019/10/09 15:52
  • (modification externe)