Passwörter in PowerShell Skripten benutzen -Prolog

Passwörter in PowerShell Skripten benutzen -Prolog

Link Teil 1 PowerShell Skript zum Erstellen des verschlüsselten Passwortes
Link Teil 2 PowerShell Skript Klartextpasswort sichtbar machen

Bei meiner Arbeit kommt immer wieder die Frage auf, wie sollen Passwörter innerhalb eines Skriptes abgelegt werden. Möglichst natürlich gar nicht, das lässt sich aber leider nicht immer vermeiden. Deshalb möchte ich eine Methode vorstellen, welche es zumindest erlaubt das Passwort mit AES256 bit Verschlüsselung abzulegen. In diesem Artikel wird kurz erklärt wie es möglich ist ein Passwort mit einem einzigartigen AES256 bit Schlüssel zu verschlüsseln. Um das Passwort dann für diverse Authentifizierungen zu verwenden wird eine Schlüsseldatei und eine Passwortdatei benötigt, dazu später mehr. Diese Methode kann auch verwendet werden um Passwörter auf Netzwerkfreigaben abzulegen, sodass diese von diversen Skripten auf verschiedenen Servern genutzt werden können.
ACHTUNG:
Wer beide Dateien hat, kann das Passwort auf jeden Fall verwenden und auch wieder komplett sichtbar machen.
Sollte die Verschlüsselungsdatei verloren oder manipuliert werden, kann das Passwort nicht mehr herausgefunden werden. Deshalb sollten beide Dateien mit speziellen NTFS Berechtigungen geschützt werden.

Legen wir los mit einigen Grundlagen:

$aeskeypath = ".\aeskey.key"
$AESKey = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
Set-Content $aeskeypath $AESKey 

Dieser Code generiert einen einzigartigen AES 256 Bit Schlüssel und speichert diesen in der Datei „aeskey.key“ ( es ist nicht notwendig die Datei. key zu nennen, ich mache das hier lediglich der Übersicht halber)
Weitere Informationen zur Verschlüsselung:
https://docs.microsoft.com/de-de/dotnet/standard/security/cryptography-model

Passwortverschlüsselung mit der Verschlüsselungsdatei

Nun können wir ein Passwort mit Hilfe der generierten Datei verschlüsseln. Schauen wir uns das mal an.

$pw = Read-Host "type in a password!"-AsSecureString
$pw
$key = Get-Content .\aeskey.key
$encryptpw = $pw | ConvertFrom-SecureString -Key $key
#copy content to file 
Set-Content .\cred.txt $encryptpw

Die Variable $encryptpw enthält das eingegebene Passwort, welches dann mit der Verschlüsselungsdatei in einen Text umgewandelt wird. Gar nicht so schlecht.

Diese Grundlagen nutze ich um diesen Prozess zu automatisieren.
HINWEIS: sollte ein Buchstabe oder das Format der Datei geändert werden, bekommt man das Passwort nicht wieder zurück.
Außerdem möchte ich gerne zeigen, wie die beiden Dateien verwendet werden können um sich gegen diverse Dienste zu authentifizieren.

$username = Read-Host "Type Username!" 
$AESKey = Get-Content .\aeskey.key
$pwdTxt = Get-Content .\cred.txt
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
$creds

Verwendung des Credential Objektes

Wir können nun die Variable $creds verwenden um uns gegen Exchange Online zu authentifizieren. Es sind auch andere Microsoft Dienste und lokale Dienste im Netzwerk möglich.

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $creds -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking -Verbose

Es sollte nun klar sein, dass diese Methode beliebig ausbaubar ist und in vielen Skripten Anwendung finden kann. Ich habe in den folgenden Artikeln ein Skript erstellt, welches die Konvertierung vornimmt und die beiden Dateien automatisch erstellt. Sollte euch der Artikel gefallen haben, drückt bitte auf „Helpful“. Freue mich auch über Kommentare und Anregungen.

Link Teil 1 PowerShell Skript zum Erstellen des verschlüsselten Passwortes
Link Teil 2 PowerShell Skript Klartextpasswort sichtbar machen

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no

One thought on “Passwörter in PowerShell Skripten benutzen -Prolog

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.