PowerShell
Omgaan met geheimen en referenties
Zoeken…
Invoering
Om te voorkomen dat het wachtwoord in duidelijke tekst wordt opgeslagen, gebruiken we in Powershell verschillende coderingsmethoden en slaan deze op als veilige tekenreeks. Als u geen sleutel of beveiligingssleutel opgeeft, werkt dit alleen voor dezelfde gebruiker op dezelfde computer en kan de gecodeerde string worden gedecodeerd als u geen Keys / SecureKeys gebruikt. Elk proces dat onder dezelfde gebruikersaccount wordt uitgevoerd, kan die gecodeerde string op diezelfde machine ontsleutelen.
Vragen om referenties
Om naar referenties te vragen, moet u bijna altijd de cmdlet Get-Credential
:
$credential = Get-Credential
Voorgevulde gebruikersnaam:
$credential = Get-Credential -UserName 'myUser'
Voeg een aangepast promptbericht toe:
$credential = Get-Credential -Message 'Please enter your company email address and password.'
Toegang krijgen tot het platte wachtwoord
Het wachtwoord in een referentieobject is een gecodeerde [SecureString]
. De meest eenvoudige manier is om een [NetworkCredential]
waarin het wachtwoord niet versleuteld wordt opgeslagen:
$credential = Get-Credential
$plainPass = $credential.GetNetworkCredential().Password
De .GetNetworkCredential()
( .GetNetworkCredential()
) bestaat alleen op [PSCredential]
-objecten.
Gebruik .NET-methoden om rechtstreeks met een [SecureString]
om te gaan:
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secStr)
$plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
Werken met opgeslagen referenties
Gebruik de ingebouwde XML-serialisatie (Clixml) van PowerShell om eenvoudig gecodeerde gegevens op te slaan en op te halen:
$credential = Get-Credential
$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'
Om opnieuw te importeren:
$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'
Het belangrijkste om te onthouden is dat dit standaard de Windows-gegevensbeschermings-API gebruikt en dat de sleutel die wordt gebruikt om het wachtwoord te coderen, specifiek is voor zowel de gebruiker als de computer waarop de code wordt uitgevoerd.
Als gevolg hiervan kan de gecodeerde referentie niet door een andere gebruiker of dezelfde gebruiker op een andere computer worden geïmporteerd.
Door verschillende versies van dezelfde gegevens met verschillende actieve gebruikers en op verschillende computers te coderen, kunt u hetzelfde geheim voor meerdere gebruikers beschikbaar hebben.
Door de gebruikersnaam en de computernaam in de bestandsnaam te plaatsen, kunt u alle gecodeerde geheimen opslaan op een manier waarmee dezelfde code ze kan gebruiken zonder iets te coderen:
Encrypter
# run as each user, and on each computer
$credential = Get-Credential
$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
De code die de opgeslagen referenties gebruikt:
$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
De juiste versie van het bestand voor de actieve gebruiker wordt automatisch geladen (of mislukt omdat het bestand niet bestaat).
De referenties opslaan in gecodeerde vorm en doorgeven als parameter wanneer vereist
$username = "[email protected]"
$pwdTxt = Get-Content "C:\temp\Stored_Password.txt"
$securePwd = $pwdTxt | ConvertTo-SecureString
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored and you can pass it wherever you want.
## Import Password with AES
$username = "[email protected]"
$AESKey = Get-Content $AESKeyFilePath
$pwdTxt = Get-Content $SecurePwdFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored with AES Key and you can pass it wherever you want.