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 :
Windows | exécuter gpedit.msc
  • Aller dans Configuration utilisateur > Modèle d'administration > Composants Windows > Windows PowerShell :
GPO | Stratégies Windows PowerShell
  • Éditer la stratégie Activer l'exécution des scripts :
GPO | stratégie Activer l'exécution des scripts

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 :
PowerShell | Ouvrir une console PowerShell en tant qu'administrateur
  • 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
PowerShell | Signer un script avec la commande 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
PowerShell | import vers le magasin Autorités de certification racines de confiance

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
PowerShell | import vers le magasin Autorités de certification racines de confiance

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'
PowerShell | Vérifier si le script est correctement signé avec Get-AuthenticodeSignature
  • Si le script a été modifié après avoir été signé, HashMismacth apparaitra et le script ne poura être executé :
PowerShell | Le fichier ne peut être chargé.

Références

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

Contact :