Dieser Artikel ist Teil unseres Guides: Profi-Tipps zu Windows Server 2016

PKI-Verschlüsselung mit PowerShell 5.0 und Windows Server 2016

Mit der PowerShell 5.0 können Administratoren mit Hilfe neuer Cmdlets Daten verschlüsseln und entschlüsseln. Hier ein Praxisbeispiel.

Die PowerShell 5.0 bringt in Sachen Sicherheit einige neue Funktionen mit, dazu gehört auch die Unterstützung von PKI-Verschlüsselung (Public Key Infrastruktur). Die in Windows 10 und Windows Server 2016 enthaltene PowerShell 5.0 bringt drei Cmdlets mit, die sich um das Thema PKI kümmern: Get-CmsMessage, Protect-CmsMessage und Unprotect-CmsMessage.

Da PKI-Verschlüsselung auf der Verwendung von öffentlichem Schlüssel und einem privatem Krytpographie-Schlüssel basiert, gilt es zunächst ein Zertifikat zu erstellen und dieses zum Zertifikatsspeicher hinzuzufügen. Erst dann lassen sich Daten per PowerShell verschlüsseln.

Am besten erhält man ein Zertifikat von einer der renommierten Zertifikatsstellen (Certificate Authority - CA) oder gegebenenfalls von einer eigenen Zertifikatsstelle im Unternehmen. Sie können auch ein selbst signiertes Zertifikat generieren. Dieses eignet sich zwar nicht für den Einsatz in produktiven Umgebungen, kann aber in Testumgebungen zum Einsatz kommen.

Es gibt unterschiedliche Herangehensweisen, ein selbst signiertes Zertifikat zu generieren, aber Microsoft empfiehlt eine einfache Textdatei, die die Zertifikatsinhalte liefert:

[Version]

Signature = "$Windows NT$"

 

[Strings]

szOID_ENHANCED_KEY_USAGE = "2.5.29.37"

szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

 

[NewRequest]

Subject = "cn=youralias@emailaddress.com"

MachineKeySet = false

KeyLength = 2048

KeySpec = AT_KEYEXCHANGE

HashAlgorithm = Sha1

Exportable = true

RequestType = Cert

KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"

ValidityPeriod = "Years"

ValidityPeriodUnits = "1000"

[Extensions]

%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"

Die einzige Änderung, die Sie durchführen müssen, ist für eindeutig identifzierbaren Text in der Betreffzeile zu sorgen. Am einfachsten tauschen Sie die Beispiel-E-Mail-Adresse gegen Ihre eigene aus.

Sobald Sie das Zertifikat erstellt haben, oder eines von einer Zertifizierungsstelle erhalten haben, gilt es das Zertifikat in den Zertifikatsspeicher zu importieren. Benennen Sie die Zertifikatsdatei um, so dass diese die Dateierweiterung „inf“ erhält. Führen Sie folgenden Befehl aus:

certreq -new <your file.inf> DocumentEncryption.cer

Der Vollständigkeit halber sei erwähnt, auch wenn Sie das Zertifikat zum Zertifikatsspeicher hinzufügen, verbleibt eine Kopie des Zertifikats auf der Systemfestplatte. Wenn Sie den Befehl im Hauptverzeichnis von C:\ ausgeführt haben, wird dort das Zertifikat abgelegt.

Abbildung 1: Mit Hilfe der PowerShell lässt sich die inf-Datei in eine cer-Datei umwandeln und in den Zertifikatsspeicher laden.

Die Zertifikatsdatei finden Sie über den Datei-Explorer, klassisch per DIR-Befehl am Prompt oder mit dem Cmdlet Get-ChildItem mit darauffolgendem Dateinamen des Zertifikats. Wenn Sie mit einem selbst signierten Zertifkat arbeiten, das nur für eine Testumgebung gedacht ist, dann ist die Existenz dieser Zertifikatsdatei kein Anlass zur Sorge. Stammt das Zertifikat jedoch von einer Zertifizierungsstelle und ist für den produktiven Einsatz gedacht, dann sollte diese Datei an einem sicheren Ort gespeichert werden.

Ob Sie das Zertifikat nun woanders speichern oder dort belassen, wichtig sind in jedem Fall Dateiname und Pfad, wo sich das Zertifikat befindet. Die Zertifikatsdatei ist Teil der Verschlüsselung und wird entsprechend aufgerufen.

Verschlüsselung mit der PowerShell

Um die Verschlüsselung beispielhaft zu demonstrieren, haben wir eine Datei angelegt: C:\Scripts\Hello.txt. Diese Datei enthält den Text „Hello World“. Mit dem folgenden Befehl kann man diese Datei nun verschlüsseln:

Protect-CmsMessage –Path C:\Scripts\Hello.txt –To C:\DocumentEncryption.cer –Outfile Hello.cms

In diesem Beispiel haben wir den Schalter –Outfile angewendet. Dieser sorgt dafür, das der verschlüsselte Inhalt in eine neue Datei geschrieben wird, in diesem Beispiel in die Datei Hello.cms. Die originale Textdatei bleibt unverschlüsselt.

Abbildung 2: Die PowerShell hat unter Verwendung des Zertifikats eine verschlüsselte Datei angelegt.

Die Entschlüsselung ist gleichfalls einfach. Vorausgesetzt, das der Zertifikatsspeicher des Systems den notwenigen Schüssel enthält, entschlüsselt dieser Befehl die Datei:

$PlainText = Unprotect-CmsMessage –Path C:\Hello.cms

$PlainText

In der ersten Zeile wird mit Hilfe des Cmdlets Unprotect-CmsMessage der Inhalt der Datei entschlüsselt. Die Datei selbst bleibt verschlüsselt, aber der Inhalt wird in die Variable $Plaintext geschrieben. Dieser wird in der nächsten Zeile ausgegeben.

Abbildung 3: Die Variable $Plaintext enthält den entschlüsselt Text.

PowerShell-Befehle aufzeichnen

Man kann sich in der PowerShell die zuletzt genutzten Befehle anzeigen lassen. Dafür stehen mehrere Möglichkeiten zur Verfügung. Mit Hilfe des Get-History-Cmdlet erhalten Sie die letzten 64 Befehle, die in der aktuellen PowerShell-Sitzung eingegeben wurden. Mit dem Cmdlet Start-Transcript können Sie die eingegebenen Befehle aufzeichnen.

Mit dem Windows Server 2016 hat Microsoft diese Aufzeichnungsmöglichkeit überarbeitet. So funktioniert diese nun in der PowerShell und in der PowerShell ISE (Integrated Scripting Environment). Zudem lässt sich die Aufzeichnung nun per Gruppenrichtlinie regeln. Die Einstellungen hierfür finden sich unter Administrative Vorlagen/Windows-Komponenten/PowerShell.

Desired State Configuration – Mehr Übersicht

Mit Hilfe der Desired State Configuration (DSC) können Administratoren festlegen beziehungsweise beschreiben, wie beispielsweise ein Windows oder Server konfiguriert sein soll. Konfigurationsabweichungen lassen sich so schnell erkennen. Bislang mangelte es aber an einer zentralen Stelle, wo diese Meldungen auflaufen können.

Mit Windows Server 2016 erlaubt es Microsoft entsprechende DSC-Fehler an eine zentrale Stelle zu senden, was die Überwachung entsprechender Meldungen deutlich vereinfacht. Die Funktion kann unabhängig davon verwendet werden, ob der Server so eingerichtet wurde, die DSC-Konfigurationsinformationen von einem anderen Server zu beziehen oder nicht. Und die DSC-Fehlerinformation wird natürlich auch in den eigenen Logfiles des Servers berücksichtigt.

Wer sich eingehender mit den sicherheitsrelevanten Cmdlets der PowerShell beschäftigen möchte, wird in Microsofts TechNet fündig.

Folgen Sie SearchSecurity.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

Was bedeuten kostenlose Zertifikate für Sicherheitsverantwortliche?

PowerShell 5.0: Die wichtigsten Cmdlets und Module.

Von Copy-Item bis Get-ChildItem: Vier kaum bekannte Neuerungen der PowerShell 5.0.

Ältere PowerShell-Versionen auf die PowerShell 5.0 aktualisieren.

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close