Chiffrer / Protéger des Credentials pour les scripts Powershell

Aujourd’hui nous abordons la problématique des logins/ passwords valables pour des credentials AD, O365, exchange ou base de données…..
De base, il n’y a pas de solution simple, efficace et portable pour stocker des credentials avec Powershell. Certaines fonctions systèmes intégrées existent mais si le fichier est changé de contexte utilisateur ou de machine (sur un même domaine), le fichier devient non valide et inexploitable.

Heureusement un module de chiffrement / déchiffrement évolué a été développé par “bitsofinfo”.
Original_Sources

Le module de base ci-dessus est pleinement opérationnel et permet de chiffrer un couple de login/ Pass dans un fichier texte en AES et en levant les contraintes ci-dessous. Pour les tests et les transferts de script du mode qualification à production, on peut réutiliser les mêmes fichiers facilement.
On peut créer aussi des fichiers de pools de credentials facilement (ex: admin01 , admin02 , admin0X….) afin de faire du multireading facilement sur un pool de comptes dédiés.

Les restrictions se font maintenant au niveau des ACLSs que vous positionnez au niveau des fichiers : seul le compte de service du script et l’équipe d’administrateur devraient avoir le droit de lire les fichiers générés.

J’ai modifié/ habillé les scripts pour revoir certaines choses par rapport au code original :
1. Dans la version originale les logins / passwords d’input sont passés via un terminal ,
Maintenant ce sont deux fichiers TXT purs à remplir et supprimer après utilisation.
Permet de régler le problème de read-host défaillant sur certaines versions de PS
Permet d’aller beaucoup plus vite quand on génère pleins de credentials (pour un pool par exemple)

2. Ajout d’un dossier fixé (modifiable dans les scripts) comprenant les fichiers logins et key de déchiffrement : “FilesToUse”

3. Ajout d’une fonction simple permettant d’avoir directement un objetSystem.Management.Automation.PSCredential utilisable par des fonctions communes : get-crendetials, connect-msolservice . Donc rapidement adaptable dans vos scripts.

4. Ajout d’un fichier d’exemple (commande Exchange online et Azure AD) simple d’utilisation pour migrer rapidement vos scripts vers ce format.

Comment ca marche?

  • Avoir Powershell 5 minimum
  • Téléchargez le Zip du script : Metsysblog3_EncryptLoginPass et dézippez le
  • Lisez le code source original du module, lisez mes versions modifiées
  • Remplir le fichier login.txt avec UN seul login à chiffrer au format DOM\user ou UPN ou mail (ou autre mais comme vous le saisirez avec une commande get-credential)
  • Remplir le fichier pass.txt avec le login à chiffrer en clair (on l’effacera après)
  • Lancer Powershell et executer le fichier : .\credentialEncryptor.ps1
  • –> 2 fichiers sont générés dans FilesToUse
  • Si ce sont des credentials Office 365 ou Azure, lancer directement .\main_useCaseEncryptionTest.ps1 pour vérifier si tout est OK
  • Sinon créez un fichier PS1 de test permettant de déchiffrer et d’authentifier simplement votre application en utilisant l’exemple de main_useCaseEncryptionTest.ps1
  • Une fois tout opérationnel, vous pouvez supprimer les 2 fichiers.txt sources
  • Incoporez le module (seulement le fichier moduleDecryptUtil.ps1) dans vos scripts
  • N’oubliez pas de sécuriser les 2 fichiers générés avec des ACLS restrictifs !

Le code n’est pas parfaitement commenté mais il est opérationnel.

A vos tests, à vos retours !
Damien CHARBONNEL

About the Author

Damien CHARBONNEL

Manager de la BU Core Infrastructure

One Comment

Laisser un commentaire

This blog is kept spam free by WP-SpamFree.