Digitale Signaturen in Powershell Skripten
Wir alle lesen oder hören Nachrichten, im besten Fall haben wir sogar einen Draht zur IT (Frau Merkel). Mal ganz im Ernst.
Die Wörter Sicherheit, Compliance, ISO, DSGVO, Authentizität und Integrität können wir langsam nicht mehr hören, dennoch ist es wichtig diese Schlagwörter immer wieder zu benutzen, damit wir diese als ein Teil unserer Arbeit akzeptieren lernen.
Sie sind nicht unser Gegner sondern Verbündete.
Warum ist die Signierung so wichtig?
Wenn ein Powershell- Skript mit dem Powershell Script Signer signiert wurde, kann der Benutzer mit Sicherheit feststellen, wer es erstellt hat. Die Signatur ist an ein Zertifikat gebunden, das Informationen über den Ersteller enthält. Dies schafft eine klare Verantwortlichkeit – im Gegensatz zu anonymen, unsignierten Skripten, bei denen die Herkunft unklar bleibt. Weiter ist es wichtig, das die Skripte integer sind und nicht verändert wurden.
In vielen Unternehmensumgebungen ist die Signierung sogar verpflichtend. Lasst uns nicht darauf warten, das diese Richtlinie erlassen wird, lasst uns gemeinsam lieber aufzeigen, das wir “Sicherheit” verstanden haben und diese gemeinsam zum Schutze des Unternehmens auch umsetzen.
Powershell Script Signer
Auch bei diesem Skript baue ich das Ganze wieder über eine GUI mit vielen Funktionen und Prüfungen auf.
Das Skript prüft zuerst ob eine Interverbindung besteht, denn die ist wichtig, für das setzen eines Zeitstempels innerhalb der Signatur. Wird kein Zeitstempel gesetzt, so kann das Powershell-Skript nach Ablauf des genutzten Zertifikats nicht mehr eingesetzt werden (abhängig von einer Gruppenrichtlinie, die das Ausführen von unsignierten Skripten verbietet).
Auch das Vorhandensein eines Zertifikats wird beim Start geprüft. Sollte die Richtlinie zum Verteilen von Signing-Zertifikaten erst kürzlich aktiv gesetzt worden sein, so kann man den Erhalt per GPUpdate und Certutil beschleunigen.
Der Button Aktualisieren startet die Prüfroutine erneut.
Über Skripte auswählen, kann ich eins oder mehrere Powershell-Skripte einlesen. Um diese dann signieren zu können, müssen sie noch markiert werden. Über Ordner durchsuchen, werden alle Dateien mit der Extension .PS1 reverse gesucht und in der Auswahl angezeigt. Alle oder einzeln markieren und signieren. Die Auswahl kann aber auch wieder geleert werden.
Wer das Skript im privaten Umfeld einsetzen möchte, der kann sich ein Self-Signing-Zertifikat erstellen und auch wieder löschen. Der Public-Key wird dabei auch im Speicher “Vertrauenswürdige Stammzertifizierungsstellen” importiert, so dass das Zertifikat lokal direkt gültig ist.
Im Protokoll ganz klar, werden die einzelnen Schritte angezeigt.
Transparente Herkunft
Nachdem ein Powershell-Skript signiert wurde, ist die Herkunft transparent.
GitHub
Das Skript könnt ihr wie gewohnt über Github NDSEDV/PS herunterladen.