…ich weiß, ich weiß…
Hierzu gibt es schon eine ganze menge an Artikel im Internet. Viele sehr ausführlich und gut geschrieben.

Dieser wird kurz und Bündig.

Signatur-Zertifikat in Variable speichern:

$cert=(dir cert:currentuser\my\ -CodeSigningCert)

Der Inhalt der Variable sollte in etwa so sein:

    Verzeichnis: Microsoft.PowerShell.Security\Certificate::currentuser\my


Thumbprint                                Subject
----------                                -------
D04A7B8DAE7E628CC828AAE0979B0B0D6E679D54  CN="Rasp, Robert", OU=Users, OU=PowerShell, DC=PowerShell, DC=pub

Script signieren:
Dazu wir ein Timestamp hinzugefügt, damit hinterlegt ist, dass das Zertifikat zum Zeitpunkt des Signierens gültig war. Das Script läuft dann auch noch nach Ablauf des Zertifikates!

Set-AuthenticodeSignature -Certificate $cert -IncludeChain all -TimestampServer http://timestamp.globalsign.com/scripts/timstamp.dll -FilePath .\Select-Test.ps1

 

    Verzeichnis: D:\tmp


SignerCertificate                         Status                                                               Path
-----------------                         ------                                                               ----
D04A7B8DAE7E628CC828AAE0979B0B0D6E679D54  Valid                                                                Select-Test.ps1

Die Rückgabe ist auch gleich zu sehen….

Was passiert nun, wenn das Script verändert wird??!!

Vorher:

Get-AuthenticodeSignature -FilePath .\Select-Test.ps1 -Verbose | fl

 

SignerCertificate      : [Subject]
                           CN="Rasp, Robert", OU=Users, OU=PowerShell, DC=PowerShell, DC=pub

                         [Issuer]
                           CN=PowerShell-pub-CA, DC=PowerShell, DC=pub

                         [Serial Number]
                           5F000000297E025D7E7EFC9B51000000000029

                         [Not Before]
                           17.03.2015 09:56:15

                         [Not After]
                           16.03.2016 09:56:15

                         [Thumbprint]
                           D04A7B8DAE7E628CC828AAE0979B0B0D6E679D54

TimeStamperCertificate : [Subject]
                           CN=GlobalSign TSA for MS Authenticode - G2, O=GMO GlobalSign Pte Ltd, C=SG

                         [Issuer]
                           CN=GlobalSign Timestamping CA - G2, O=GlobalSign nv-sa, C=BE

                         [Serial Number]
                           112106A081D33FD87AE5824CC16B52094E03

                         [Not Before]
                           03.02.2015 01:00:00

                         [Not After]
                           03.03.2026 01:00:00

                         [Thumbprint]
                           B36308B4D4CDED4FCFBD66B955FAE3BFB12C29E6

Status                 : Valid
StatusMessage          : Signatur wurde überprüft.
Path                   : D:\tmp\Select-Test.ps1

Die dritte Zeile von unten ist ausschlaggebend: Valid 

 

Nun habe ich ein Leerzeichen in einer Zeile hinzugefügt. (Syntaktisch keine Änderung)

Get-AuthenticodeSignature -FilePath .\Select-Test.ps1 -Verbose | fl

 

SignerCertificate      : [Subject]
                           CN="Rasp, Robert", OU=Users, OU=PowerShell, DC=PowerShell, DC=pub

                         [Issuer]
                           CN=PowerShell-pub-CA, DC=PowerShell, DC=pub

                         [Serial Number]
                           5F000000297E025D7E7EFC9B51000000000029

                         [Not Before]
                           17.03.2015 09:56:15

                         [Not After]
                           16.03.2016 09:56:15

                         [Thumbprint]
                           D04A7B8DAE7E628CC828AAE0979B0B0D6E679D54

TimeStamperCertificate : [Subject]
                           CN=GlobalSign TSA for MS Authenticode - G2, O=GMO GlobalSign Pte Ltd, C=SG

                         [Issuer]
                           CN=GlobalSign Timestamping CA - G2, O=GlobalSign nv-sa, C=BE

                         [Serial Number]
                           112106A081D33FD87AE5824CC16B52094E03

                         [Not Before]
                           03.02.2015 01:00:00

                         [Not After]
                           03.03.2026 01:00:00

                         [Thumbprint]
                           B36308B4D4CDED4FCFBD66B955FAE3BFB12C29E6

Status                 : HashMismatch
StatusMessage          : Der Inhalt der Datei "D:\tmp\Select-Test.ps1" wurde möglicherweise von einem nicht autorisierten Benutzer oder Prozess manipuliert, da der Hash der Datei
                         nicht mit dem in der digitalen Signatur gespeicherten Hash übereinstimmt. Das Skript wird auf dem angegebenen System nicht ausgeführt. Weitere
                         Informationen erhalten Sie mit "Get-Help about_Signing".
Path                   : D:\tmp\Select-Test.ps1

Der Status hat sich geändert! Wenn die Ausführungsrichtlinie entsprechend gesetzt ist, wird dieses Script nicht mehr ausgeführt.

Beim mir ist die Richtlinie auf „RemoteSigned“. Das Script würde weiterhin ausgeführt, da ein lokales Script keine Signatur benötigt!

 

 

 

PowerShell Scripte signieren

Das könnte dir auch gefallen

Schreibe einen Kommentar