Vous trouverez ci-dessous une description des options disponibles pour l'exécution des fichiers de script PowerShell et des possibilités offertes par leur signature.
Zum Testen wurde ein simples PowerShell Skript erstellt und auf einem frisch installierten Windows 10 Client ausgeführt.

In der Standardeinstellung eines Windows 10 Client wird die Ausführung verhindert, da die Ausführungsrichtlinie für die Windows PowerShell auf „Restricted“ gesetzt ist, d.h. es dürfen generell keine Scripts ausgeführt werden.
File C:\Users\rudi.INTRA\Desktop\HelloWorld.ps1 cannot be loaded because running scripts is disabled on this system.

Die PowerShell Ausführungsrichtlinie
Connaissez-vous TameMyCerts? TameMyCerts est un add-on pour l'autorité de certification Microsoft (Active Directory Certificate Services). Il étend la fonction de l'autorité de certification et permet de Application de la réglementationIl s'agit d'un logiciel de gestion des certificats qui permet d'automatiser l'émission de certificats en toute sécurité. TameMyCerts est unique dans l'écosystème Microsoft, a déjà fait ses preuves dans d'innombrables entreprises du monde entier et est disponible sous une licence libre. Il peut téléchargé via GitHub et être utilisé gratuitement. Une maintenance professionnelle est également proposée.
Für die Windows PowerShell gibt es eine Ausführungsrichtlinie (engl. „Execution Policy“), die das Verhalten betreffend der Ausführung von Scripts festlegt. Diese unterscheidet sich je nach Betriebssystem-Variante:
| Betriebssystem-Variante | Standardmäßig gesetzte Ausführungsrichtlinie |
|---|---|
| Windows Clients | Restricted |
| Windows Server | RemoteSigned |
Die für das weitere Vorgehen relevanten Einstellungen kurz erklärt:
| Réglage | Description |
|---|---|
| Restricted | Es dürfen keine PowerShell Scripts jedweder Art ausgeführt werden. |
| RemoteSigned | Lokal gespeicherte PowerShell Scripts dürfen ausgeführt werden, auch wenn sie nicht signiert sind. PowerShell Scripts, die sich auf Netzwerkspeicherorten befinden, dürfen nur ausgeführt werden, wenn sie signiert sind. |
| AllSigned | PowerShell Scripts, dürfen nur ausgeführt werden, wenn sie signiert sind, egal ob sie lokal oder auf Netzwerkspeicherorten gespeichert sind. |
Ausführungsrichtlinie manuell konfigurieren
Unser Ziel ist, dass nur signierte Scripts ausgeführt werden dürfen. Daher wird die Ausführungsrichtlinie mit folgendem Befehl auf „AllSigned“ gesetzt.
Set-ExecutionPolicy AllSigned

Ausführungsrichtlinie über Gruppenrichtlinien konfigurieren
Der gleiche Effekt kann über Gruppenrichtlinien über folgende Einstellung erreicht werden: Computer Configuration“ – „Administrative Templates“ – „Windows Components“ – „Windows PowerShell“ – „Turn on Script Execution“ – „Allow only signed scripts“

Das Script digital signieren
Die Ausführung des Scripts wird immer noch nicht gelingen, da es noch keine digitale Signatur besitzt.
File C:\Users\rudi.INTRA\Desktop\HelloWorld.ps1 cannot be loaded. The file C:\Users\rudi.INTRA\Desktop\HelloWorld.ps1 is not digitally signed. You cannot run this script on the current system.


Codesignaturzertifikat
Zum signieren einer Scriptdatei benötigt man ein Zertifikat mit der Utilisation étendue des clés (EKU) für Codesignatur. Dieser Umstand wird für den weiteren Verlauf des Artikels als gegeben vorausgesetzt und nicht näher behandelt.

Die Signatur durchführen
Zum digitalen signieren von PowerShell Scripts kann der Set-AuthenticodeSignature Befehl verwendet werden.
Zunächst wird das Codesignaturzertifikat im lokalen Zertifikatspeicher identifiziert und in eine Variable geladen.
$SigningCertificate = (Get-ChildItem -Path Cert:\CurrentUser\My\26716942D0BDBB2D3825C2469C611C59AAE11DE6)
Optional aber sehr sinnvoll ist die Verwendung eines Zeitstempels (engl. Timestamp) nach RFC 3161. Ist die Codesignatur mit einem Zeitstempel versehen, wird die Signatur auch nach Ablauf des Signaturzertifikats weiterhin als gültig erkannt. In diesem Beispiel wird der öffentlich zugängliche Zeitstempelserver von Sectigo verwendet.
$TimeStampingAuthority = 'http://timestamp.sectigo.com'
Nun liegen alle Informationen vor, und das Script kann signiert werden.
Set-AuthenticodeSignature ` -FilePath .\HelloWorld.ps1 ` -Certificate $SigningCertificate ` -TimestampServer $TimeStampingAuthority

Sieht man sich nun die Eigenschaften der Scriptdatei an, erkennt man, dass sie nun über eine digitale Signatur verfügt.

Ein Blick in die Details der Sigatur offenbart außerdem, dass auch eine Gegensignatur (Zeitstempel) vorliegt.

Öffnet man das Script mit einem Texteditor, sieht man, dass die digitale Signatur an den Scriptcode in BASE64 kodierter Form angehängt wurde.

Eintragen in den Speicher für „Vertrauenswürdige Herausgeber“ (oder auch nicht)
Man sollte nun meinen, dass man das Script endlich ausführen könnte. Nun wird jedoch angemerkt, dass dem Herausgeber nicht vertraut wird.
Do you want to run software from this untrusted publisher? File C:\Users\rudi.INTRA\Desktop\HelloWorld.ps1 is published by CN=Rudi Ratlos, OU=Benutzerkonten, OU=ADCSLabor Benutzer, DC=intra, DC=adcslabor, DC=de and is not trusted on your system. Only run scripts from trusted publishers.
Man hat nun die Option, die Ausführung nicht vorzunehmen, sie einmalig durchzuführen, sie immer durchzuführen, oder sie niemals durchzuführen.

Die Auswahl von „Always run“ bewirkt, dass das Signaturzertifikat in den Speicher für „Vertrauenswürdige Herausgeber“ im Zertifikatspeicher des Benutzters importiert wird.

Aushebeln des Schutzes
Dass die Ausführungsrichtlinie nur signierte Scripts akzeptiert ist allerdings in keinem Fall ein Garant dafür, dass keine unsignierten Scripts ausgeführt werden können. Es gibt vielfältige Möglichkeiten, die Ausführungsrichtline zu untergraben, und unsignierte Scripts dennoch auszuführen.
Hier ein einfaches Beispiel:
type .\HelloWorld.ps1 | powershell -

Liens complémentaires
Sources externes
- About Execution Policies (Microsoft)
- Set-AuthenticodeSignature (Microsoft)
- Add, remove, or view a trusted publisher (Microsoft)
- Manage Trusted Publishers (Microsoft)
- Use Policy to Distribute Certificates (Microsoft)
- 15 Ways to Bypass the PowerShell Execution Policy (NetSPI LLC)
Les commentaires sont fermés.