Questo tipo di crittografia è a senso unico?

0

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.

    
posta Matthias 28.06.2018 - 09:29
fonte

1 risposta

4

Innanzitutto, l'algoritmo di crittografia simmetrica AES (che sembra utilizzare la Converti-SecureString) non è sicuramente "a senso unico". Puoi sempre recuperare la password semplice se hai la chiave, altrimenti anche il campione suggerito non funzionerebbe.

La fonte del tuo problema sembra essere che questo codice di esempio assomiglia ad un serio uso improprio dell'API PS / .NET. Lo scopo degli oggetti SecureString è fare in -Memory attacca più difficile nascondendo / cancellando informazioni sensibili se non è in uso. Per raggiungere questo obiettivo SecureStrings può utilizzare la crittografia, ma questo è un dettaglio di implementazione, non un servizio pensato per questo tipo di uso "pubblico". L'esempio potrebbe comunque funzionare, è necessario notare che la crittografia (controintuitivamente) viene eseguita tramite ConvertFrom-cmdlet, mentre la decrittografia viene eseguita con ConvertTo-.

Se si desidera un'API corretta per l'encrpytion, avviare qui .

    
risposta data 28.06.2018 - 09:59
fonte

Leggi altre domande sui tag