Das Signieren von VBA-Projekten ist ein 2024 erneut eingeführter Sicherheitsprozess, bei dem wir ein VBA-Projekt mit einem digitalen Zertifikat versehen. Dieses Zertifikat bestätigt, dass der Code von uns stammt und seit der Signierung nicht verändert wurde. Das Signieren ist besonders wichtig, wenn VBA-Makros in sensiblen oder gemeinsam genutzten Umgebungen ausgeführt werden, zum Beispiel in Unternehmensnetzwerken. In diesem Beitrag schauen wir uns an, welche Arten von Zertifikaten es gibt, wie diese funktionieren und wie wir ein VBA-Projekt mit einer digitalen Zertifikat versehen können. Außerdem betrachten wir, ob das signieren mit einem Zertifikat überhaupt sinnvoll ist.
In allen Umgebungen sollte eigentlich sichergestellt sein, dass keine Schadsoftware unerwünscht ausgeführt werden. Insbesondere mit VBA-Code können nahezu beliebige Aktionen wie das Löschen von Dateien oder der Zugriff auf die Registry durchgeführt werden.
Bei VBA-Projekten, die mit verschiedenen Dokumenten wie Access-Datenbanken, Excel-Arbeitsmappen, Word-Dokumenten oder auch PowerPoint-Präsentationen auf dem System landen können, besteht grundsätzlich die Möglichkeit, dass diese unbemerkt vom Benutzer ausgeführt werden können, wenn das System dies nicht unterbindet. Also sollte man gerade in Umgebungen, die sensible Daten beinhalten, Vorsicht walten lassen.
Wie können wir die Ausführung von VBA-Code unterbinden?
Die Office-Anwendungen bieten verschiedene Einstellungen, mit denen wir festlegen können, ob VBA-Code ausgeführt werden kann. Diese finden wir in den Optionen der jeweiligen Anwendung. Im Optionen-Dialog klicken wir dazu auf den Bereich Trust Center und dann auf Einstellungen für das Trust Center… (siehe Bild 1).
Bild 1: Öffnen der Einstellungen für das Trust Center
Im Bereich Makroeinstellungen sehen wir die gewünschten Optionen (siehe Bild 2):
Bild 2: Einstellungen für die Aktivierung oder Deaktivierung von Makros
Diese lauten wie folgt:
- Alle Makros ohne Benachrichtigung deaktivieren: Dies führt dazu, dass gar kein VBA-Code ausgeführt werden kann. Versuchen wir hier, Code aufzurufen, erhalten wir eine Meldung wie in Bild 3. Code, der beispielsweise durch Formularereignisse ausgelöst werden soll, wird ohne Meldung ignoriert.
- Alle Makros mit Benachrichtigung deaktivieren: In diesem Fall erscheint ein gelber Balken mit einem Hinweis, dass einige Inhalte deaktiviert wurden (siehe Bild 4). Wir können hier auf Inhalt aktivieren klicken und so das Dokument zu den vertrauenswürdigen Dokumenten hinzufügen. Gegebenenfalls erscheint hier keine solche Meldung und der Code wird anstandslos ausgeführt. In diesem Fall wurde das Dokument offensichtlich bereits zu den vertrauenswürdigen Dokumenten hinzugefügt. Es kann jedoch auch sein, dass das Dokument sich durch eine digitale Signatur als vertrauenswürdig erkennbar gemacht hat.
- Alle Makros, außer digital signierten Makros deaktivieren: Mit dieser Option werden auch die VBA-Projekte, die über ihr Dokument zu den vertrauenswürdigen Dokumenten hinzugefügt wurden, nicht mehr ausgeführt, sondern nur noch solche, die mit einem digitalen Zertifikat signiert wurden.
- Alle Makros aktivieren (nicht empfohlen, weil potenziell gefährlicher Code ausgeführt werden kann): Bei Auswahl dieser nicht empfohlenen Option wird der Code dieser Datenbank ohne weitere Nachfrage ausgeführt.
Bild 3: Meldung, dass die Makros deaktiviert sind
Bild 4: Hinweis, dass der Inhalt noch nicht aktiviert ist
Hinzufügen zu vertrauenswürdigen Dokumenten
Wenn wir die oben erwähnte Meldung in dem gelben Balken erhalten, die besagt, dass Inhalte deaktiviert wurden, können wir den enthaltenen Code durch einen Klick auf die Schaltfläche Inhalt aktivieren scharf schalten.
Was geschieht dann genau? Unser Dokument wird zu den vertrauenswürdigen Dokumenten für dieses Benutzerkonto hinzugefügt. Wenn man dauerhaft diese Einstellung verwendet, werden sich im Laufe der Zeit einige Datenbankdateien in der Sammlung der vertrauenswürdigen Dokumente finden. Leider kann man diese nicht so einfach einsehen (siehe Bild 6).
Bild 5: Vertrauenswürdige Dokumente
Es gibt allerdings eine Möglichkeit, Dokumente in einem oder mehreren Verzeichnissen automatisch als vertrauenswürdig einzustufen. Diese verwalten wir ebenfalls im Dialog Trust Center, und zwar im Bereich Vertrauenswürdige Speicherorte (siehe Bild 5).
Bild 6: Vertrauenswürdige Speicherorte
Hier können wir Ordner hinzufügen und ihre Eigenschaften einstellen, aber auch vertrauenswürdige Ordner wieder entfernen.
Wie gelingt dies, wenn wir ein einzelnes Dokument aus den vertrauenswürdigen Dokumenten entfernen möchten?
Wenn wir zum Bereich Vertrauenswürdige Dokumente wechseln, sehen wir nur die Möglichkeit, alle Dokumente zu löschen.
Es muss also einen anderen Ort geben, an dem wir die Zuordnung zu den vertrauenswürdigen Dokumenten finden. Diese finden wir schließlich in der Registry, in unserem Fall im folgenden Zweig:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Documents\TrustRecords
Hier können wir die Einträge einzeln löschen (siehe Bild 7).
Bild 7: Vertrauenswürdige Dokumente in der Registry
Vertrauenswürdiger Speicherort per Setup
Wenn wir unsere Anwendung mit einem Setup verteilen, können wir dafür sorgen, dass das Installationsverzeichnis als vertrauenswürdiger Speicherort gekennzeichnet wird und die Anwendung direkt ausgeführt werden kann. Das ist hilfreich, aber wenn wir unsere Anwendung mit offenem Quellcode ausliefern, was manchmal eine Kundenanforderung ist, dann kann der Benutzer den Code der Datenbank ändern, ohne dass die Anwendung die Vertrauenswürdigkeit verliert. Was aber, wenn wir sicherstellen wollen, dass der Benutzer keine Funktionen einbaut, die gegebenenfalls Schaden verursachen? Dann kommen wir um die Anwendung eines Zertifikats nicht herum, denn nur dieses garantiert, dass das VBA-Projekt im offenen Zustand nicht geändert wurde.
Eine andere Möglichkeit, zusätzlich sicherzustellen, dass der Benutzer den Code nicht anpasst, ist die Erstellung einer .accde-Version der Anwendung. Diese enthält dann allerdings nur noch den kompilierten Quellcode. Aber auch diese kann mit einem digitalen Zertifikat signiert werden.
VBA-Projekt zertifizieren
Um ein VBA-Projekt mit einem digitalen Zertifikat zu signieren, benötigen wir zunächst einmal ein solches Zertifikat. Hier gibt es zum Beispiel die folgenden Möglichkeiten:
- Wir erstellen ein eigenes Zertifikat.
- Wir kaufen ein Zertifikat.
Eigenes Zertifikat erstellen
Als Erstes schauen wir uns an, was wir mit einem selbst erstellten Zertifikat erledigen können.
Mit Microsoft wird in der Regel auch ein Programm namens Selfcert.exe auf dem System installiert. Dieses ist bei uns beispielsweise hier zu finden:
C:\Program Files (x86)\Microsoft Office\root\Office16\SELFCERT.EXE
Starten wir dieses, finden wir den Dialog aus Bild 8 vor. Hier geben wir den gewünschten Zertifikatsnamen ein. Alternativ können wir auch auf den Link klicken und landen auf einer Webseite, die nach den dortigen Angaben im Jahr 2008 erstellt und in 2005 aktualisiert wurde.
Bild 8: Erstellen eines eigenen Zertifikats
Beides passt nicht zusammen und macht nicht den Eindruck von Aktualität.
Also verwerfen wir diesen Ansatz und legen ein eigenes Zertifikat an. Die Meldung aus Bild 9 bescheinigt uns das erfolgreiche Anlegen des Zertifikats.
Bild 9: Erfolgsmeldung über die Erstellung des Zertifikats
VBA-Projekt mit selbst erstelltem Zertifikat signieren
Was können wir damit nun tun? Natürlich ein VBA-Projekt signieren. Um das zu erledigen, öffnen wir den VBA-Editor und wählen dort den Menübefehl Extras|Digitale Signatur… aus (siehe Bild 10).
Bild 10: Aufrufen der digitalen Signatur
So öffnen wir den Dialog Digitale Signatur aus Bild 11. Hier können wir mit einem Klick auf Wählen… einen weiteren Dialog öffnen.
Bild 11: Auswählen der digitalen Signatur
Hier finden wir ganz unten unser soeben erstelltes Zertifikat, das wir nun auswählen (siehe Bild 12).
Bild 12: Selektieren einer Signatur
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo