logo rss

Comment créer et exécuter des scripts PowerShell Auto-Signés

Par défaut et pour des raisons de sécurité il n'est pas possible d'exécuter des scripts PowerShell. Évidement, il est possible d'utiliser l'option -ExecutionPolicy Bypass mais si l'on souhaite améliorer la securité il peut être interessant de savoir comment n'autoriser que les scripts préalablement signés. Nous allons voir ici comment créer et n'autoriser que les scripts signés.

GPO pour autoriser uniquement les scripts signés

  • Ouvrir l'éditeur des stratégies de groupe :
Ouvrez la boîte de dialogue Exécuter et tapez gpedit.msc pour accéder à l'éditeur de stratégie de groupe de Windows.
  • Aller dans Configuration utilisateur > Modèle d'administration > Composants Windows > Windows PowerShell :
Capture d'écran de l'Éditeur de stratégie de groupe locale montrant l'option Activer l'exécution des scripts dans Windows PowerShell
  • Éditer la stratégie Activer l'exécution des scripts :
Fenêtre de configuration de la stratégie d'exécution des scripts dans l'Éditeur de stratégie de groupe locale, avec l'option Activer et Autoriser uniquement les scripts signés sélectionnées

Création du certificat

Pour signer nos scripts nous avons besoin d'un certificat. Nous allons voir ici comment en créer un auto-signé.

  • Ouvrir une console Windows PowerShell en administrateur :
Windows menu showing the Run as administrator option for PowerShell
  • Attribuer un nom à notre nouveau certificat dans la variable $CertificateName :
PS C:\Users\Administrator\Desktop> $CertificateName = "STD Certificate"
  • Définir l'endroit ou l'on souhaite créer le certificat :
PS C:\Users\Administrator\Desktop> $OutPutPFXFilePath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"
  • Définir un mot de passe à notre achive pfx :
PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
  • Enfin, créer le certificat avec une durée de vie de 10 ans et une taille de clé de 4096 bits :
PS C:\Users\Administrator\Desktop> New-SelfSignedCertificate -subject $CertificateName -Type CodeSigning -NotAfter (Get-Date).AddYears(10) -KeyLength 4096 | Export-PfxCertificate -FilePath $OutPutPFXFilePath -password $MyStrongPassword

Signer le script

  • Charger le certificat :
PS C:\Users\Administrator\Desktop> $MyCertFromPfx = Get-PfxCertificate -FilePath 'C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx' Enter password : ********
  • Signer le script :
PS C:\Users\Administrator\Desktop> Set-AuthenticodeSignature -PSPath 'C:\Users\administrator\Desktop\script.ps1' -Certificate $MyCertFromPfx Sortie de la commande PowerShell pour la signature d'un script avec Set-AuthenticodeSignature

Importer le Certificat

Pour être correctement reconnu, le certificat auto-signé à besoin d'être importé sur les ordinateurs sur lesquels nous voulons exécuter nos scripts PowerShell. Il faudra donc entrer les commandes suivants avec les droits administrateurs sur les machines cibles.

Définir les variables

  • Renseigner le mot de passe de l'archive pfx. et le chemin vers le certificat :
PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText PS C:\Users\Administrator\Desktop> $CertPath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"

Importer vers le magasin Autorités de certification racines de confiance

  • Importer le certificat vers le magasin local d'Autoritésde certification racines de confiance :
PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\Root" -Password $MyStrongPassword Vue des autorités de certification racines de confiance dans la console MMC, avec le certificat STD Certificate mis en surbrillance

Importer vers le magasin Éditeurs approuvés

  • Importer le certificat vers le magasin local des Éditeurs approuvés :
PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\TrustedPublisher" -Password $MyStrongPassword Certificat STD Certificate affiché dans le dossier Éditeurs de confiance de la console MMC

Vérifier la signature

  • Nous pouvons vérifier si le script est correctement signé avec la commande Get-AuthenticodeSignature :
PS C:\Users\Administrator\Desktop> Get-AuthenticodeSignature 'C:\Users\administrator\Desktop\script.ps1' Commande PowerShell pour valider la signature d'un script avec un statut valide
  • Si le script a été modifié après avoir été signé, HashMismacth apparaitra et le script ne poura être executé :
Commande PowerShell affichant une erreur de concordance de hachage lors de la validation de la signature du script

Références

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact