Sensible Daten in der PowerShell schützen 10 Tipps zur Verschlüsselung von Daten mit der PowerShell
Anbieter zum Thema
In der PowerShell lässt sich der Umgang mit sensiblen Daten durch Verschlüsselung optimieren. Kennwörter, Zertifikate und andere heikle Bereiche lassen sich dadurch sicherer nutzen. Die Möglichkeiten dazu sind in der PowerShell integriert.

Wenn in PowerShell-Skripten oder Cmdlets sensible Informationen, wie das Kennwörter, Zertifikate, Schlüssel und andere Dinge zum Einsatz kommen, sollten diese nicht in Klartext gespeichert werden. Hier bietet es sich an mit Verschlüsselung zu arbeiten. Das ist in der PowerShell sogar mit Bordmitteln möglich. Sichere Daten, die in Skripten eingesetzt werden, sollten niemals in Klartext angegeben werden, sondern immer über den Inhalt einer verschlüsselten Datei oder eine sichere Umgebungsvariable. Wir zeigen nachfolgend beide Möglichkeiten.
10 wichtige Tipps wie man mit der PowerShell Daten ganz einfach verschlüsselt, zeigen wir im Video und in der Bildergalerie
Tipp 1: Sichere Zufalls-Benutzerkennwörter erstellen
Beim Anlegen von neuen Benutzern oder beim Ändern von Kennwörtern, ist es sinnvoll kein Einmal-Kennwort zu verwenden, dass ohnehin jeder kennt, sondern in der PowerShell ein Kennwort erstellen zu lassen. Ein Beispiel dazu ist:
[System.IO.Path]::GetRandomFileName() -replace '\.', [String]::Empty | Write-Warning
Ein weiteres Beispiel dazu ist:
(1..100 | Get-Random -Count 3 | ForEach-Object { '{0:00}' -f $_ }) -join [String]::Empty | Write-Warning
Das erstellte Kennwort lässt sich danach in Skripte einbinden, um Benutzerkonten nach dem Anlegen oder beim Ändern damit zu konfigurieren.
Tipp 2: Kennwörter verschlüsselt speichern und nutzen
In Skripten ist es oft notwendig Kennwörter zu nutzen. Diese sollten aber nicht in Klartext im Skript stehen, sondern idealerweise in einer verschlüsselten Datei gespeichert sein. Das ist vor allem dann sinnvoll, wenn das Kennwort ständig benötigt wird. Um ein Kennwort sicher in einer Datei zu speichern, kann folgender Befehl zum Einsatz kommen:
Read-Host -Prompt 'Passwort eingeben' -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath 'C:\Temp\SecureString.txt' -Force
Der Inhalt der Datei ist mit folgendem Befehl zu sehen:
Get-ChildItem -Path 'C:\Temp\SecureString.txt' | Get-Content | Write-Warning
Sinnvoll ist die Verwendung natürlich nur, wenn das Kennwort auch wieder genutzt werden kann. Das geht zum Beispiel mit dem folgenden Befehl:
Get-Content -Path 'C:\Temp\SecureString.txt' | ConvertTo-SecureString | Write-Warning
Ist das Kennwort nicht mehr notwendig, lässt sich die Datei auch löschen:
Remove-Item -Path 'C:\Temp\SecureString.txt' -Force
Tipp 3: Kennwort verschlüsseln und sofort nutzen
Wenn in der PowerShell ein Kennwort zum Einsatz kommen soll, dass sofort gebraucht wird, lässt sich es bereits verschlüsselt speichern und gleich weiter nutzen, zum Beispiel bei der Installation eines Domänencontrollers:
Install-ADDSDomainController -DomainName <DNS-Name der Domäne> -SafeModeAdministratorPassword (Read-Host -Prompt Kennwort -AsSecureString)
Oder auch bei der Sicherung von Daten aus den Zertifikatsdiensten:
Backup-CARoleService -path C:\Backup -Password (Read-Host -prompt "Password:" -AsSecureString)
10 wichtige Tipps wie man mit der PowerShell Daten ganz einfach verschlüsselt, zeigen wir im Video und in der Bildergalerie
Tipp 4: Kennwort verschlüsselt als Variable speichern
In der PowerShell ist es über die oben beschriebenen Wege auch möglich ein Kennwort verschlüsselt in einer Variablen zu speichern. Nach der ersten Eingabe ist das Kennwort nicht mehr auslesbar:
$SecurePassword = ConvertTo-SecureString "MeinPasswort" -AsPlainText -Force
Tipp 5: AES in der PowerShell nutzen
Advanced Encryption Standard (AES) ist eine weit verbreitete Methode zur Verschlüsselung von Daten. Die Methode kann in der PowerShell zum Einsatz kommen, um Daten zu verschlüsseln:
$Key = New-Object Byte[] 16 # AES key
$RNGCrypto = New-Object Security.Cryptography.RNGCryptoServiceProvider
$RNGCrypto.GetBytes($Key)
$AESProvider = New-Object Security.Cryptography.AesCryptoServiceProvider
$AESProvider.Key = $Key
Die Verschlüsselung von Daten mit dem Advanced Encryption Standard (AES) in PowerShell kann durch die Verwendung der .NET-Klassen System.Security.Cryptography.AesCryptoServiceProvider oder System.Security.Cryptography.AesManaged erreicht werden. Zuerst wird ein AES-Objekt erstellt und ein Schlüssel sowie ein Initialisierungsvektor (IV) generiert.
$AESProvider = New-Object System.Security.Cryptography.AesCryptoServiceProvider
$AESProvider.GenerateKey()
$AESProvider.GenerateIV()
Anschließend kann ein Klartext mit Hilfe des AES-Objekts verschlüsselt werden:
$PlainText = "Geheimer Text"
$PlainTextBytes = [System.Text.Encoding]::UTF8.GetBytes($PlainText)
$Encryptor = $AESProvider.CreateEncryptor()
$EncryptedBytes = $Encryptor.TransformFinalBlock($PlainTextBytes, 0, $PlainTextBytes.Length)
Die resultierenden verschlüsselten Bytes können in eine Base64-Zeichenkette umgewandelt werden, um sie leichter handhaben zu können.
$EncryptedText = [Convert]::ToBase64String($EncryptedBytes)
Es ist wichtig zu bemerken, dass sowohl der Schlüssel als auch der IV sicher aufbewahrt werden müssen, um später die Entschlüsselung durchführen zu können. Sie sollten niemals in Klartext gespeichert oder über unsichere Kanäle übertragen werden. In der Praxis ist es oft sinnvoll, sie mit einem sicheren Schlüsselaustauschmechanismus wie Diffie-Hellman oder RSA zu übertragen oder sie in einem sicheren Schlüsselspeicher zu speichern.
Die Entschlüsselung von Daten, die mit dem Advanced Encryption Standard (AES) verschlüsselt wurden, erfordert den ursprünglichen Schlüssel und den Initialisierungsvektor (IV), die bei der Verschlüsselung verwendet wurden. Mit diesen kann das ursprüngliche AES-Objekt wiederhergestellt und ein Entschlüsselungstransformator erstellt werden. Zunächst wird die Base64-Zeichenkette, die die verschlüsselten Daten repräsentiert, zurück in ein Bytearray konvertiert:
$EncryptedBytes = [Convert]::FromBase64String($EncryptedText)
Dann wird ein Entschlüsselungstransformator mit dem ursprünglichen AES-Objekt, das denselben Schlüssel und IV hat, erstellt:
$Decryptor = $AESProvider.CreateDecryptor()
Schließlich wird die Entschlüsselung ausgeführt und die entschlüsselten Bytes werden zurück in einen Text konvertiert:
$DecryptedBytes = $Decryptor.TransformFinalBlock($EncryptedBytes, 0, $EncryptedBytes.Length)
$DecryptedText = [System.Text.Encoding]::UTF8.GetString($DecryptedBytes)
Jetzt sollte $DecryptedText denselben Wert wie der ursprüngliche $PlainText haben.
10 wichtige Tipps wie man mit der PowerShell Daten ganz einfach verschlüsselt, zeigen wir im Video und in der Bildergalerie
Tipp 6: Zertifikate zur Verschlüsselung nutzen
Admins und Benutzer können Zertifikate verwenden, um Daten zu verschlüsseln:
$Cert = Get-PfxCertificate -FilePath "Zertifikat.pfx"
$Encrypted = "Meine Daten" | Protect-CmsMessage -To $Cert.Subject
Tipp 7: Dateien in der PowerShell verschlüsseln
Es ist möglich auch Dateien mit PowerShell verschlüsseln:
$FileContent = Get-Content -Path "MeineDatei.txt" -Raw
$EncryptedContent = $FileContent | Protect-CmsMessage -To $Cert.Subject
$EncryptedContent | Set-Content -Path "VerschlüsselteDatei.txt"
Tipp 8: Große Dateimengen über RSA mit der PowerShell verschlüsseln
Größere Datenmengen lassen sich wiederum mit RSA verschlüsseln, zum Beispiel mit:
$RSACrypto = New-Object Security.Cryptography.RSACryptoServiceProvider
$PublicKey = $RSACrypto.ToXmlString($false) # false bedeutet, nur öffentlichen Schlüssel zu exportieren
Tipp 9: Hashing verwenden
Obwohl das technisch gesehen keine Verschlüsselung ist, kann Hashing verwendet werden, um die Integrität von Daten zu überprüfen. Wenn zum Beispiel eine Datei verschickt werden soll, kann parallel noch der Hash der Datei verschickt werden. Der Empfänger kann den Hash überprüfen, um sicherzustellen, dass die Datei nicht geändert wurde:
$Data = [System.Text.Encoding]::UTF8.GetBytes("Meine Daten")
$Hash = (New-Object Security.Cryptography.SHA256Managed).ComputeHash($Data)
Tipp 10: Daten in der PowerShell entschlüsseln
Wenn eine Datei mit einem Zertifikat verschlüsselt wurde, kann diese mit dem entsprechenden privaten Schlüssel entschlüsselt werden:
$DecryptedContent = Get-Content -Path "VerschlüsselteDatei.txt" | Unprotect-CmsMessage
$DecryptedContent | Set-Content -Path "EntschlüsselteDatei.txt"
10 wichtige Tipps wie man mit der PowerShell Daten ganz einfach verschlüsselt, zeigen wir im Video und in der Bildergalerie
(ID:49622172)