PowerShell Script signieren in 4 Schritten
PowerShell war im Jahr 2021 mit 35 % der betroffenen Unternehmen der Angriffsvektor Nummer eins. Doch was kann man dagegen tun? Am Besten das PowerShell Script signieren. Wie zeigen in diesem Beitrag, wie die Scripte mit einem Zertifikat signiert werden können.
Voraussetzungen zum Signieren
Um ein PowerShell Script signieren zu können, sind Voraussetzungen notwendig. Folgende Faktoren müssen erfüllt sein:
- Ein Windows Betriebssystem, welches nicht älter ist als Version 8.1
(Windows 8.1, Windows 10, Windows 11) - Windows Powershell Version 5.1 oder höher
- Ein Code-Signing Zertifikat
- Das fertige PowerShell Script
Wenn diese Voraussetzungen erfüllt sind, steht dem Signieren der PowerShell Dateien mit einem Zertifikat nichts mehr im Weg.
PowerShell Script signieren
Unsignierte PowerShell Dateien bringen oft Bauchschmerzen mit sich. Denn folgende unangenehme Dinge können auftreten:
- Auf allen Geräten, die die Skripte verwenden, werden Sicherheitswarnungen angezeigt
- Jemand nutzt möglicherweise Ihre Software, um Malware zu transportieren
Daher ist es sinnvoll die PowerShell Scripte mit einem eigenen Zertifikat zu signieren. Das bringt folgende Vorteile mit sich:
- Anwender können sicher sein, dass die Skripte von Ihnen erstellt wurden
- Benutzer können überprüfen, ob die Skripte nicht von einem böswilligen Dritten geändert wurden
Nun aber zu den einzelnen Schritten, um die PowerShell Scripte sicherer zu machen!
Code Signing Zertifikat
Code-Signing Zertifikate sind PKI-Zertifikate, mit denen Skripte, aber auch Software und andere ausführbare Dateien vor unbefugten Änderungen durch Dritte geschützt werden können. Das reduziert das Manipulationsrisiko und garantiert den Usern und anderen Administratoren außerdem, dass die Skripte tatsächlich von Ihnen stammen.
Benötigt wird ein Code Signing Zertifikat oder ein EV Code Signing Zertifikat (empfohlen). Die EV-Zertifikate werden vor allem dazu gebraucht, dass die Software im Microsoft SmartScreen vertrauenswürdig sind. Unterschiede findet ihr hier.
PowerShell als Administrator starten
Das signieren von PowerShell Scripten erfordert Administrator Berechtigungen. Folgende Schritte befolgen, um PowerShell als Admin zu starten:
- Klicke auf Start
- Nach powershell suchen
- Wähle die Windows PowerShell App
- Klicke auf Als Administrator starten
Findet das Code Signung in einem größeren Script automatisch statt, sollten Prüfungen eingebaut werden: Prüfen, ob PowerShell Script als Administrator ausgeführt wird.
Code Signing Zertifikat wählen
Oft sind mehrere Zertifikate verfügbar, die ausgelesen werden können. Um alle Zertifikate anzuzeigen, wird folgender PowerShell Befehl benötigt:
Get-ChildItem Cert:\CurrentUser\My
Mit dem Parameter -CodeSigningCert
werden dann auch nur Zertifikate ausgegeben, welche für das Signieren von Code brauchbar sind:
Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert
Wenn dieser Befehl ausgeführt wird, erscheint in der Regel eine Liste mit mehreren Zertifikaten. Nun muss das richtige Zertifikat ausgewählt werden, in dem wir dieses anhand der ID auswählen und in einer Variable speichern.
$cert = (Get-ChildItem –Path Cert:\LocalMachine\My -CodeSigningCert)[0]
Hinweis
Wenn sich das Code-Signing-Zertifikat in einem anderen Ordner als My befindet, muss der Beispieldateipfad Cert:\CurrentUser\My
durch den richtigen Pfad ersetzt werden.
Zum Beispiel: Cert:\CurrentUser\My -CodeSigningCert [0]
oder Cert:\LocalMachine\My -CodeSigningCert [2]
PowerShell Script signieren
Nun kann das eigentliche Signieren der PowerShell Script Datei stattfinden. Hierfür wird das cmdlet Set-AuthenticodeSignature
mit dessen Parametern verwendet.
Set-AuthenticodeSignature -FilePath C:\yourdirectory\powershell_script.ps1 -Certificate $cert
Außerdem kann auch ein Timestamp Server angegeben werden, um die Signatur auf das maximum an Laufzeit zu erhöhen:
Set-AuthenticodeSignature -FilePath C:\yourdirectory\powershell_script.ps1 -Certificate $cert -TimeStampServer https://timestamp.digicert.com
Das wars! Das Signieren des PowerShell Scripts ist abgeschlossen. 🙂
PowerShell Signatur überprüfen
Natürlich kann man danach über verschiedene Wege prüfen, ob das Signieren der PowerShell Datei tatsächlich funktioniert hat.
Der einfachste Weg um zu überprüfen, ob das Signieren funktioniert hat ist das Öffnen des PowerShell Scripts per Texteditor. Ist dort der Signaturblock vorhanden, welcher mit # SIG #
startet, dann ist dies korrekt. Der Signaturblock ist am Ende des Scripts zu finden.
Eine weitere Möglichkeit sind die Eigenschaften der Datei im Windows Explorer. Hier Sollte ein Tab Digitale Signaturen zu sehen sein, in dem auch das Zertifikat aufgeführt ist.
Eine schöne Möglichkeit ist auch wiederum PowerShell mit dem Befehl Get-AuthenticodeSignature
um eine Übersicht über das Zertifikat zu erhalten.
Get-AuthenticodeSignature -FilePath SCRIPT_PATH | Select-Object -Property *