Utilizar de forma segura la información de contraseña en scripts de Powershell
Cuando se utilizan scripts basados en la automatización de Powershell, en la mayoría de los escenarios es necesario pasar credenciales sin el script para que el enlace de verificación funcione correctamente. Muchos administradores están acostumbrados a usar contraseñas de texto sin cifrar en sus scripts, pero si. El script de prueba es irrelevante. Si se trata de un script utilizado en un entorno de producción, este comportamiento no solo es malo, sino que también es terrible. Los camaradas con malas intenciones lo obtendrán feliz y fácilmente y causarán algún daño leve o grave. Sin embargo, si utiliza correctamente la función de cifrado de contraseña proporcionada por PowerShell, puede resolver este problema fácilmente.
En PowerShell, se proporcionan dos formas de generar credenciales: Get-Credential y Read-Host
Get-Credential
El comando Get-Credential se utiliza para cree un objeto PSCredential y guárdelo en una variable, y asegúrese de que no se muestre en la pantalla de la siguiente manera
El comando anterior guarda la información de la credencial en la variable $crd, que se puede usar fácilmente para acceder los cmdlets requeridos que especifican las credenciales
Read-Host
El uso de Read-Host también puede proteger la visualización de contraseñas de texto sin formato de la siguiente manera: -AsSecureString puede almacenar contraseñas de texto sin formato en una cadena de contraseña cifrada objetos, los objetos SecureString se pueden usar con comandos que aceptan parámetros de este tipo, y el objeto se puede pasar al comando definiendo variables y canalizando la salida.
ConvertTo-SecureString
ConvertTo-SecureString se usa para cifrar contraseñas y otras cadenas. Puede aceptar cadenas y luego generarlas como objetos SecureString que se pueden usar para aceptar este tipo. Parámetros de un comando, este objeto se puede pasar al comando definiendo variables y canalizando la salida.
La sintaxis es la siguiente:
Cuando el parámetro -Key o -SecureKey no es aplicable, PowerShell llamará a la API de protección de datos de Windows (DPAPI) para cifrar/descifrar la cadena. Pero esto hará que el objeto SecureString generado se utilice en otras computadoras.
Lo siguiente convertirá "Contraseña" de texto sin formato en SecureString
Aunque este método puede convertir caracteres de texto sin formato en objetos SecureString, no se puede almacenar como un archivo para su uso posterior. Debe convertirse en una cadena cifrada estándar. Para lograr este propósito, utilice el comando ConvertFrom-SecureString.
ConvertFrom-SecureString
Utilice el comando ConvertFrom-SecureString para almacenar el objeto SecureString como una cadena cifrada estándar. Esto se puede lograr pasando el objeto SecureString o el objeto SecureString generado por. comando a través de una tubería
Sintaxis:
El objeto SecureString generado por el ejemplo anterior se puede utilizar aquí para convertirlo en una cadena cifrada estándar
Combinando Con los comandos anteriores, podemos hacer que los siguientes métodos conviertan SecureString en una cadena cifrada estándar y la almacenen en un archivo txt mediante el comando Out-File
Exportar el objeto SecureString generado en modo de texto sin formato
Exportar el generado por el objeto Get-Credential SecureString
Exportar el objeto SecureString generado por Read-Host
Convertir el archivo de cadena cifrado estándar almacenado anteriormente nuevamente a SecureString y usarlo para crear PSCredential
Como se mencionó anteriormente Cuando se usa ConvertTo-SecureString y ConvertFrom-SecureString para cifrar credenciales, si no se usa -Key o -SecureKey, PowerShell llamará a DPAPI para cifrar y descifrar, porque no se puede usar en máquinas distintas a la creada, de la siguiente manera
El mismo host
Utilice el mismo archivo de texto anterior en diferentes hosts
Utilice Key o SecureKey para implementar cifrado archivos entre máquinas
Utilice el parámetro -Key Cree un archivo que guarde la cadena cifrada estándar. La clase de Windows "System.Security.Cryptography.RNGCryptoServiceProvider" se utilizará a continuación para crear datos aleatorios para llenar la matriz. es el valor del parámetro de -Key
Usar datos aleatorios para crear una clave AES y exportar a un archivo
Crear un objeto SecureString
Crear credenciales
En otra máquina
El contenido anterior está completo. Puede ayudarnos a cifrar contraseñas en scripts de PowerShell. Si tiene alguna otra pregunta, deje un mensaje.