Blog

Signieren unter Windows

6.7.2021 | 4 minutes read
Share this:

Einleitung

Der Security Experte und Influencer Florian Hansemann hat auf seinem Blog eine tolle Reihe mit Top Security QuickFails ins Leben gerufen. Sein erster Quickfail ist Standard Office Macros Einstellung. Das Problem beschreibt er darin, dass in vielen Unternehmen und diese Beobachtung kann ich bestätigen, es den Mitarbeitern überlassen wird, ob ein Makro in einem Dokument ausgeführt wird oder nicht. Das die Entscheidungen, die da getroffen werden, nicht immer optimal sind, sichert uns beide den Lebensunterhalt. Weiterhin liefert er auch zwei Lösungen mit, wobei eine Lösung bedeutet Office Makros zu deaktivieren und die andere Lösung ist, sie zu signieren.

Auf diesen Vorschlag reagieren viele Verantwortliche leider mit Ablehnung, da dass Signieren von Makros oder auch anderen ausführbaren Dateien zu aufwendig, zu kompliziert und den Mitarbeitern nicht zumutbar sei.

Daher möchte ich in diesem kurzen Eintrag einmal kurz zeigen, wie aufwendig - passende PKI oder Zertifikate vorausgesetzt - es tatsächlich ist Daten in Windows zu signieren. Ich beschränke mich dabei auf die drei wichtigsten Anwendungsfälle:

  • Makros
  • PowerShell-Skripte
  • Ausführbare Programme

Für meine Tests habe ich in meinem Labor eine PKI nach dieser Anleitung aufgebaut und eine Zertifikat nach dem Vorbild der Infrastrukturhelden erstellt.

Makros

Office-Makros sind wohl der Albtraum aller Sicherheitsverantwortlichen in einem Unternehmen. In Office-Makros können vollständige Programme implementiert und ausgeführt werden. In den Standardeinstellungen wird der Benutzer, wenn er ein Word Dokument mit Makros öffnet, gefragt ob er das Makro zulassen möchte.

Standard Makro Einstellungen

Microsoft bietet an der Stelle mehrere Einstellungsmöglichkeiten an:

  • VBA (Makros) ganz zu verbieten
  • Makros immer ausführen
  • Benutzer fragen, ob Makros ausgeführt werden soll (Standard)
  • Markos verbieten, außer sie wurden signiert

Wenn möglich, sollten natürlich Makros ganz verboten werden. Hand aufs Herz, ich habe noch kein Unternehmen gesehen, die das wirklich durchzieht. Daher plädiere ich für “Makros verbieten, außer sie wurden signiert” Methode. Aber jetzt zurück zum Thema: Wie werden Makros signiert? Eine Beschreibung kann hier gefunden werden.

  1. Entwicklertools öffnen => Code => Visual Basic Open Developper Console
  2. Tools => Digitale Signature Open Visual Basic
  3. Choose => Ok Cheoose Cert

Im Anschluss habt ihr ein signiertes Dokument und die Makros können normal ausgeführt werden.

PowerShell

PowerShell-Skripte können noch einfacher signiert werden als Makros. Signaturen bei PowerShell machen in Unternehmen in Kombination mit Application Control oder der Execution Policy besonders viel Sinn.

Zum Signieren von PowerShell-Skripten kann die PowerShell verwendet.

Set-AuthenticodeSignature -Certificate $cert -FilePath .\Desktop\HelloWorld.ps1 -TimestampServer "http://timestamp.digicert.com"

PowerShell Signing

Im Anschluss kann mittels Rechtsklick und Eigenschaften oder mit dem Befehle Get-AuthenticodeSignature .\Desktop\HelloWorld.ps1 | fl * die Signatur verifiziert werden.

Ausführbare Programme

In der Regel sollten alle legitimen ausführbaren Programme vom Hersteller signiert sein. Trotzdem kommt es vor, dass Programme nicht signiert sind oder in Zeiten von Github nur der Quellcode zur Verfügung steht und dieser selbst kompiliert werden muss. In so einem Fall ist es an der IT-Abteilung, die Anwendung zu signieren, so es denn einen Mehrwert bietet.

Das Schöne ist Programme und DLLs können genau so wie PowerShell-Skripte signiert werden. Alternativ kann das Programm signtool, das mit dem Microsoft SDK kommt, installiert werden. Für alle die das SDK nicht installieren wollen und die PowerShell scheuen, können das signtool auch ohne SDK installieren, siehe hier.

Weitere Themen

Timestamps

Eine Frage, die auch immer mal wieder aufkommt, ist, was passiert, wenn das Zertifikat mit dem eine Anwendung signiert wird abläuft? Die Antwort ist relative einfach. Wenn beim Signieren, wie oben geschehen, ein Timestamp verwendet wird, so ist für das zu prüfende Programm nur wichtig, ob das Zertifikat zu dem Zeitpunkt als die Signatur erstellt wurde, gültig war. Wenn kein Zeitstempel verwendet wurde, so muss das Zertifikat, das zum Signieren der Datei verwendet wurde noch gültig sein. Wie hier und hier nachzulesen ist. Eine Liste mit Timestamp Servern ist hier zu finden.

Fazit

Das Signieren von Anwendungen, Skripten und Makros ist relativ einfach zu bewerkstelligen und sollte in einem Unternehmen konsequent umgesetzt werden. Zumindest das Signieren von Makros sollte der Standard im Unternehmen sein. Zugekaufte Dokumenten können nach einen kurzen Review signiert und damit für die Massen freigeben werden.

Wie immer gilt falls ihr Fragen, Anmerkungen oder Verbesserungsvorschläge zu dem Artikel habt, schreibt eine Mail an info@hackmich.net.

Quellen