Tipps zum Umgang mit Ausführungsrichtlinien
Der Sinn der Ausführungsrichtlinien ist es, das versehentliche Starten von Skripten zu verhindern. Sicherheitsrichtlinien sind explizit kein Sicherheitsfeature und können das Ausführen von Powershell-Skripten nicht verhindern! Zum einen kann die globale Computerrichtlinie von einem Benutzer auch ohne administrative Berechtigungen durch Set-Executionpolicy -Scope <Bereich> überschrieben oder mit dem Powershell-Prozess umgangen werden, zum anderen kann durch Aktivieren eines einzigen Bits im laufenden Powershell-Prozess die Ausführungsrichtlinie manipuliert werden – auch ohne administrative Berechtigungen.
Es geht aber noch viel einfacher, denn ein Benutzer kann den Inhalt eines Skripts auch einfach in einer interaktiven Konsole einlesen und per Pipeline zur Ausführung bringen.
Get-Content -Path c:\MySkript.ps1 | powershell.exe /command -
Leitet man ein Text-Array (hier also den Inhalt einer .ps1-Datei) in die Powershell.exe und verwendet den Parameter /command, führt Powershell die Zeilen wie Einzelkommandos aus und umgeht so die Ausführungsrichtlinie. Sehen Sie Ausführungsrichtlinien also nicht als Sicherheitsfeature, sondern eher als Basisschutz für Ihre Benutzer vor sich selbst.
Grundsätzlich gilt, dass Ausführungsrichtlinien in erster Linie stören, da sie die erwünschte Ausführung von Skripten mehr behindern als schädlichen Code. Um die Ausführungsrichtlinie unveränderbar festzulegen, muss man außerdem auf Gruppenrichtlinien zurückgreifen. Daher sollten Sie sich entscheiden, die Ausführung von Powershell entweder komplett zu unterbinden, die Ausführungsrichtline auf "Unrestricted" zu setzen und damit alle Skripte zuzulassen oder ausschließlich signierte Skripte zuzulassen (Allsigned). Das hat allerdings ein paar zusätzliche Implikationen, die genau wie der eigentliche Signaturvorgang im Abschnitt Skripte signieren beschrieben werden. Um Powershell sicher zu betreiben, sollten Sie stattdessen auf Skriptüberwachung setzen. Wie man das implementiert, finden Sie im Abschnitt Powershell per GPO konfigurieren.
Powershell sicher betreiben - geht das?
Wie beschrieben, funktionieren die Powershell Ausführungsrichtlinien suboptimal. Die Ausführungs von Skripten lässt sich nur per Gruppenrichtlinie vollständig verhindern, aber dann ist auch die Ausführung administrativer Skripte blockiert, und außerdem ist auch diese Hürde für einen Angreifer umgehbar. Man kann die Powershell aber mit Hilfe von Applocker oder Application-Control Policies vollständig absichern. Powershell-Skripte können dann nur noch aus vertrauenswürdigen Ordnern uneingeschränkt ausgeführt werden. Alle anderen Skripte laufen im sogenannten Constrained Language Mode, der Skripte zwar zulässt, aber nur sichere Cmdlets erlaubt.