Sensible Daten in der PowerShell schützen 10 Tipps zur Verschlüsselung von Daten mit der PowerShell

Von Thomas Joos Lesedauer: 5 min

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.

Wir zeigen 10 wichtige Tipps, wie man mit der PowerShell ganz einfach Daten verschlüsselt.
Wir zeigen 10 wichtige Tipps, wie man mit der PowerShell ganz einfach Daten verschlüsselt.
(Bild: Alex - stock.adobe.com)

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

Bildergalerie
Bildergalerie mit 5 Bildern

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

Bildergalerie
Bildergalerie mit 5 Bildern

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.Aes­Crypto­Service­Provider oder System.Security.Cryptography.Aes­Managed 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üsselungs­transformator 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:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zur IT-Sicherheit

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
$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

Bildergalerie
Bildergalerie mit 5 Bildern

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

Bildergalerie
Bildergalerie mit 5 Bildern

(ID:49622172)