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
Powershell als Administrator

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
PowerShell Zertifikat liste

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
PowerShell Zertifikat in variable

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.

powershell script signieren

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.

powershell datei signatur windows explorer

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 *
Johannes
 

sidebar
>