Encryption-Variable aus Setup.inf in der Deploy-Application.ps1 nutzen

Moin,

für unser bisheriges Setup.inf-Paket für Dell Command Update hab ich ein BIOS-Passwort mit der EMC verschlüsselt und dann unter [Encryption] einer Variable „BiosPassword“ zugewiesen, um’s im Post-Install-Bereich für die Konfiguration der Settings nutzen zu können. Wenn ich das Paket nun mit PSADT nachbauen wollte - wie bekäme ich das dort hin, so dass ich die CustomInstallAndReinstallAndSoftMigrationEnd nutzen kann und dort an besagtes codiertes BIOS-Passwort zu kommen? Gibt’s da Mechanismen?

Grüßle

1 „Gefällt mir“

Hallo @kniaf,

an dieser Stelle würde ich nicht auf Setup.inf sondern auf die Powershell Mechanismen zurückgreifen.

z.B. kannst du über folgende Befehle verschlüsselte Credentials in eine XML Datei schreiben die du dann über dein Paket wieder ausließt, entschlüsselst und verwendest.

Befehle zum erzeugen:
$creds=Get-Credential
$creds|Export-Clixml -Path $PSScriptRoot\creds.clixml

Befehle um die Credentials wieder einzulesen und zu nutzen:
$creds = Import-Clixml -Path $PSScriptRoot\creds.clixml

Hilft dir das weiter?

Viele Grüße
Michael

Moin,

ich befürchte dass das so ohne weiteres nicht gehen wird - ich bin ja nicht immer im gleichen User- und Maschinenkontext unterwegs; und wenn ich einen Key ablege (um das mit ConvertTo-SecureString abzuhandeln) dann muss der irgendwo liegen und drauf zugegriffen werden. Deswegen hatte das in der Setup.inf ja schon so seinen Charme.

Grüße

Moin zusammen,

ich spare mir Mal hier ausführlich zu erläutern, warum die „Verschlüsselung“ in der Setup.inf NICHT sicher ist, sondern nur den Paketierer in falscher Sicherheit wiegt.

In PowerShell gibt es die Möglichkeit Strings beispielsweise mit Hilfe eines AES-Schlüssels sicher zu verschlüsseln.
Hier ein Beispiel, in dem ein Passwort AES-verschlüsselt und anschließend in einem Credentials-Objekt gespeichert wird:

* ### Step 1: Creating Securestring encrypted with AES Key
* $AESKey = New-Object Byte[] 32
* [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
* $AESKey | Out-File .\Desktop\aes.key
* $password = Read-Host -AsSecureString
* $password | ConvertFrom-SecureString -Key $AESKey | Out-File .\Desktop\password.txt
* ### Step 2: Using Securestring and AES Key in Scripts
* $username = "Administrator"
* $AESKey = Get-Content .\Desktop\aes.key
* $password = Get-Content .\Desktop\password.txt | ConvertTo-SecureString -Key $AESKey
* $credentials = New-Object System.Management.Automation.PSCredential (“$username”, $password

Die Datei mit dem AES-Key (hier „aes.key“ aus „Step 1“ oben) könnte man nun beispielsweise auf einem sicheren Server-Share speichern und nur der Gruppe der Domänencomputer (Domain Computers; SID: S-1-5-21-<Domäne>-515) Leserechte auf den entsprechenden Pfad geben.

Dann kann ich das Passwort, welches mit dem „Step 1“ aus dem Beispiel oben verschlüsselt und in der „password.txt“ gespeichert worden ist, im Skriptverlauf entschlüsseln lassen. Hier ein Beispiel für ein Deinstallationspasswort einer Sicherheitssoftware:

$global:PackageConfig.UninstPara = $global:PackageConfig.UninstPara -replace "%PASSWORD%",[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String "VerschlüsseltesPasswort" -Key (Get-Content "PfadZurAES_SchlüsselDatei"))))

Hier wird dann der Platzhalter „%PASSWORD%“ in den Deinstallationsparametern für die Anwendung durch das entschlüsselte Passwort ersetzt.

Ich hoffe, dass ich damit weiter helfen konnte.

1 „Gefällt mir“

Moin, in die Richtung hatte ich auch gedacht; damit kann ich etwas anfangen. Danke für die ausführliche Antwort!

1 „Gefällt mir“