Estoy escribiendo un script de Powershell que requiere una cuenta privilegiada para hacer algo. Por supuesto, no voy a incluir la contraseña de esta cuenta en el archivo .ps1 en texto claro, así que estoy siguiendo esta guía para crear una forma más segura de hacerlo: enlace
Aquí está el código que genera la clave y encripta la contraseña:
$KeyFile = "\Machine1\SharedPath\AES.key"
$Key = New-Object Byte[] 16 # You can use 16, 24, or 32 for AES
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | out-file $KeyFile
$PasswordFile = "\Machine1\SharedPath\Password.txt"
$KeyFile = "\Machine1\SharedPath\AES.key"
$Key = Get-Content $KeyFile
$Password = "P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
$Password | ConvertFrom-SecureString -key $Key | Out-File $PasswordFile
$User = "MyUserName"
$PasswordFile = "\Machine1\SharedPath\Password.txt"
$KeyFile = "\Machine1\SharedPath\AES.key"
$key = Get-Content $KeyFile
$MyCredential = New-Object -TypeName System.Management.Automation.PSCredential '
-ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)
Sin embargo, la parte inferior del artículo menciona lo siguiente:
Asegúrese de proteger esa clave AES como si fuera su contraseña. Nadie quién puede leer la clave AES puede descifrar cualquier cosa que haya sido cifrada con it.
Por supuesto, cualquier persona con acceso tanto al archivo .ps1, que es texto claro de forma predeterminada, como al archivo de la clave AES, simplemente puede leer el código y usar el nombre de la cuenta y los archivos para crear un objeto PSCredential para hacer cosas. ¿Pero pueden usar el archivo de clave para descifrar el contenido del archivo Password.txt y obtener la contraseña de la cuenta en texto sin cifrar? Intenté hacer esto yo mismo con ConvertFrom-SecureString, pero fue en vano lo que, supongo, tiene sentido?
Observación adicional: el código debe funcionar en varias computadoras, por lo que no se pueden usar aquí mecanismos de encriptación "solo para máquinas locales" como se ve a menudo con Powershell.