Tags: Sicherheit, PowerShell
In der Voreinstellung ist PowerShell kompromisslos auf Sicherheit getrimmt: Man kann generell keine Scripts ausführen, nur die Shell interaktiv benutzen. Damit soll verhindert werden, dass Schadcode ausgeführt und ein Computer oder Benutzerkonto dadurch kompromittiert wird.
Je nach Erfordernis will man diese Einstellung ändern, um PowerShell-Scripts ausführen zu können, etwa selbst entwickelte. Um dies zu können, muss man die Tore seines Systems nicht sperrangelweit öffnen, sondern wählt eine Lösung, die sicher und dennoch handhabbar ist.
Man signiert PowerShell-Scripts, die man selbst erstellt hat oder denen man vertraut, und verbietet die Ausführung unsignierter Scripts (zum begrenzten Schutz durch die Execution Policy siehe diese ausführliche Erläuterung).
Richtlinien für die Ausführung: Get-ExecutionPolicy und Set-ExecutionPolicy
Ob und welche PowerShell-Scripts auf einem System ausgeführt werden können, legt eine Richtlinie fest. Über das Kommando Get-ExecutionPolicy in einem PowerShell-Fenster erfährt man, welche gültig ist.
Ändern kann man sie, und zwar nur mit Administratorrechten, mittels des Befehls Set-ExecutionPolicy oder per Gruppenrichtlinie für die Domäne. Die möglichen Werte für ExecutionPolicy sind folgende:
Wert | Auswirkung |
---|---|
Restricted | Es werden keine Konfigurationsdateien geladen und keine Scripts ausgeführt (Standard) |
AllSigned | Signierte Scripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber werden ausgeführt. Auch lokal erstellte Scripts müssen signiert sein. |
RemoteSigned | Aus dem Internet heruntergeladenen Scripts und Konfigurationsdateien müssen von einem vertrauenswürdigen Herausgeber signiert sein. |
Unrestricted | Alle Konfigurationsdateien und alle Scripts werden ausgeführt. Bei nicht signierten Scripts aus dem Internet muss man jede Ausführung am Prompt bestätigen |
Bypass | Keinerlei Blockade, keine Warnungen oder Prompts. |
Undefined | Entfernt die gerade zugewiesene Richtlinie (nur für lokal zugewiesene Richtlinien, nicht für GPO-applizierte) |
Eigene Scripts signieren
Um eigene Scripts ausführen zu können, jedoch trotzdem die Sicherheit zu behalten, dass unsignierter oder nach der Signatur veränderter Code nicht ausgeführt werden kann, eignet sich als ExecutionPolicy am besten AllSigned. Um sie sinnvoll zu verwenden, muss man eigene Scripts und solche, denen man vertraut, fortan signieren.
Dazu fordert man von seiner Zertifizierungsstelle zunächst ein Zertifikat mit dem Zweck Codesignatur an. Mittels des Kommandos
Get-ChildItem cert:\CurrentUser\My -codesigning
prüft man dessen Vorhandensein in der PowerShell-Umgebung. Signieren kann man sein Script dann per
Set-AuthenticodeSignature ‹Script.ps1› @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
wozu im Gegensatz zu einer globalen Richtlinienänderung keine Administratorrechte nötig sind. Direkt nach der Installation des Codesignatur-Zertifikats muss man noch einmal am Prompt bestätigen, dass man dem Herausgeber vertraut. Damit wird das Zertifikat in den Speicher für die Vertrauenswürdigen Herausgeber kopiert und man kann fortan damit signierte Scripts ohne weitere Nachfragen ausführen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Security- und Health-Checks für Active Directory mit PowerShell-Scripts
- PowerShell als Hacking-Tool: Missbrauch von Scripts verhindern
- Deep Scriptblock Logging: PowerShell-Kommandos im Eventlog aufzeichnen
- PowerShell-Logging: Befehle in Transcript-Datei aufzeichnen
- PowerShell-Scripts signieren mit Zertifikaten einer AD-Zertifizierungsstelle
Weitere Links
2 Kommentare
Danke für die Anleitung. Auf die Powershell Befehle zum Signieren wäre ich im Leben nicht gekommen. Was man vielleicht noch erwähnen sollte ist, dass man sich das Zertifikat von der Zertifizierungsstelle für die Codesignatur über die mmc als Benutzer holen muss, und nicht über den Computer. Hilfreich wäre evtl. auch noch der Pfad in der GPO um die Einstellungen für die Scripts anzupassen. (Computerkonfiguration - Richtlinien - Administrative Vorlagen -Windows Komponenten - Windows Powershell - Skriptausführung aktivieren).
Hallo, wie sollte den die executionpolicy auf einem W10Pro gesetzte sein? bei mir steht überall 'undefined', da ist doch alles zu gelassen, oder?
und wie sieht das auf einem Server 2016/2019 aus?
MfG