Skip to the content

Signierte Powershell-Scripts

Vor allem bei Sofware, die man im Sourcecode ausliefert, macht es Sinn, diese zu signieren.

Im einfachsten Falle macht man einen MD5-Hash des Quellcodes und kommuniziert diesen klar bei der Übergabe der Software (das ist noch kein "Unterschreiben", aber zumindest sowas wie ein Fingerprint...). Verwendet man eine moderne Scripting-Sprache wie Powershell, so kann man hier tatsächlich die Software signieren. Und das geht so:

  1. Man holt sich ein Codesigning-Zertifikat (bspw. über DigiCert oder einen anderen Anbieter. Sofern die Zielgruppe der Software sehr klein ist, macht auch ein Selbstsigniertes Zertifikat Sinn. Dieses bekommt man einfach über "New-SelfSignedCertificate". Ich hab' meines so erstellt:  
    New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Software,OU=UserAccounts,DC=abz-informatik,DC=at" -TextExtension @("2.5.29.17={text}upn=software@abz-informatik.at") -KeyAlgorithm ECDSA_nistP256 -CurveExport CurveName -CertStoreLocation "Cert:\CurrentUser\My"
  2. Dann braucht man für's signieren eine Referenz auf dieses Zertifikat und mit SetAuthenticodeSignature kann man unterschreiben. Bspw.
    $cert = Get-ChildItem -Path Cert:\CurrentUser\my |? Subject -like "*Software*"
    $filename = HierDerFilename.ps1
    Set-AuthenticodeSignature -FilePath $filename -Certificate $cert
    
  3. Wenn die Powershell-Execution Policy richtig gesetzt ist, (idealerweise auf "AllSigned") können nur mehr gültig unterzeichnete Scripts ausgeführt werden und es wird auch die gesamte Zertifikatskette überprüft. Verwendet man ein selbstsigniertes Zertifikat muss dieses in den lokalen Zertifikatsspeicher.
  4. Mit Get-AuthenticodeSignature kann man den Status überprüfen. Hier eine Ausgabe mit Fehlerhafter Signatur und einmal mit einer gültigen.

Hier noch ein Screenshot. Bei (1) wird versucht, ein Script zu starten, das manipuliert wurde, (2) zeigt ein richtig unterschriebenes Script, wo jedoch das Zertifikat nicht im Zertifikatsspeicher der Vertrauenswürdigen Stammzertifizierungsstellen abgelegt ist, und (3) zeigt, wie nach dem ablegen des Zertifikats im richtigen Speicher das Programm ausgeführt werden kann.

Sicherheit tut weh und ist aufwendig, aber zahlt sich unterm Strich natürlich aus!

Harald Krottmaier

Kontaktformular

Bitte beschreiben Sie kurz das Thema, dass Sie mit uns besprechen wollen! Wann sind Sie für einen Rückruf erreichbar?

Das Feld "Vorname" wird benötigt
Das Feld "Nachname" wird benötigt.
Bitte geben Sie eine gültige E-Mailadresse ein