Ceci est une ancienne révision du document !


~~CLOSETOC~~

Sécurisation d'un mot de passe

On peut être amené à fournir un mot de passe dans un script afin de d'obtenir les droits d'exécution ou tout simplement pour s'authentifier pour envoyer un mail. On pourrait écrire le mot de passe en clair dans le script mais en terme de sécurité, c'est pas terrible. En effet, n'importe qui visionnant le script pourra le voir et donc l'exploiter. Pour palier à ce problème, Powershell nous met à disposition les objets de type SecureString.

  • Référence ConvertFrom-SecureString : Microsoft
  • Référence ConvertTo-SecureString : Microsoft

Les cmdlets afférents à SecureString permettent de chiffrer une chaîne de caractères, ce qui nous permet de la stocker dans un fichier pour un déchiffrement ultérieur. Le chiffrement englobe l'identifiant de l'utilisateur qui exécute le chiffrement ainsi que l'identifiant de la machine sur laquelle le chiffrement est effectué. De cette manière, le fichier ne peut être décrypté que par le même utilisateur sur la même machine. Même si de l'aveu de Microsoft, ce n'est pas une sécurité absolue, dans le cadre d'une protection plus globale, cela est suffisant.

# On demande à d'entrer un mot de passe.
# On le convertit.
# On sauvegarde le tout dans un fichier. Le nom est purement arbitraire.
 
Read-Host "Entrez le mot de passe" -AsSecureString | ConvertFrom-SecureString | Out-File ".\data.crypt"

A noter que l'on peut renforcer le chiffrement au niveau AES-192 en utilisant le paramètre -Key avec une table de 24 entier compris entre 0 et 255. La syntaxe est alors :

$Key = (3,4,2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43)
Read-Host "Entrez le mot de passe" -AsSecureString | ConvertFrom-SecureString -Key $Key | Out-File ".\data.crypt"

Évidement, on peut aussi stocker notre table d'encryption dans un SecureString intermédiaire et la déchiffrer avant de l'utiliser pour chiffrer le mot de passe.

Chiffrer, c'est bien beau mais il faut pouvoir déchiffrer ensuite pour pouvoir utiliser le contenu protégé. pour cela, on utilisera la cmdlet ConvertTo-SecureString :

# Dans le cas d'une encryption simple
$MDPCryptFile = ".\data.crypt"
$SecureStringPassword = Get-Content -Path $MDPCryptFile | ConvertTo-SecureString
 
# Dans le cas d'une encryption avec AES-192
$MDPCryptFile = ".\data.crypt"
$Key = (3,4,2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43)
$SecureStringPassword = Get-Content -Path $MDPCryptFile | ConvertTo-SecureString -Key $Key
 
# Dans les deux cas, le mot de passe crypté précédemment sera décrypté et stocké dans la variable $SecureStringPassword sous la forme d'un objet SecureString

A noter aussi qu'un objet SecureString peut être crypté à l'aide d'un certificat, ce qui renforce d'autant plus sa sécurité.

Nicolas THOREZ 2019/02/24 18:38

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • powershell_password.1574417951.txt.gz
  • Dernière modification : 2019/11/22 09:19
  • (modification externe)