Sto scrivendo uno script PowerShell che richiede un account privilegiato per fare qualcosa. Naturalmente, non includerò la password di questo account nel file .ps1 in testo chiaro, quindi seguirò questa guida per creare un modo più sicuro di fare ciò: link
Ecco il codice che genera la chiave e crittografa la password:
$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)
Tuttavia, la parte inferiore dell'articolo menziona quanto segue:
Be sure to protect that AES key as if it were your password. Anybody who can read the AES key can decrypt anything that was encrypted with it.
Ovviamente, chiunque abbia accesso a entrambi i file .ps1, che è di default testo, e il file chiave AES può semplicemente leggere il codice e utilizzare il nome dell'account e i file per creare un oggetto PSCredential con cui fare cose. Ma possono usare il file chiave per decodificare il contenuto del file Password.txt e ottenere la password dell'account in chiaro? Ho provato a farlo da solo con ConvertFrom-SecureString, ma senza alcun risultato che, immagino, ha senso?
Nota aggiuntiva: il codice deve funzionare su più computer, quindi non è possibile utilizzare qui i meccanismi di crittografia "solo macchine locali", come spesso accade con Powershell.