Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Makros automatisiert signieren?

Mitglied: ITboon

ITboon (Level 1) - Jetzt verbinden

02.08.2017 um 08:55 Uhr, 2665 Aufrufe, 14 Kommentare, 2 Danke

Guten Morgen,

Meine Frage: Kann man Makros automatisiert signieren?

Der Hintergrund:
In meinem Unternehmen habe ich alle Makros deaktiviert um die Bedrohung von Ransomeware & Co. einzuschränken.
Jedoch arbeiten ein paar Mitarbeiter mit Makros. Ich habe per GPO alle Makros deaktiviert bis auf die mit Zertifikat.
Das Problem ist dass ich jetzt ca. 300+ Makros signieren muss. Ist das automatisiert möglich?

Mit freundlichen Grüßen
ITboon
Mitglied: emeriks
02.08.2017 um 09:01 Uhr
Hi,
ich hoffe nicht! Sonst würde doch sicher irgendjemand genau das auszunutzen versuchen. So etwa wie:
  1. Suche eine interne CA,
  2. versuche von dort ein Zertifikat für Codesignatur zu erhalten
  3. signiere Dich selbst
  4. Hab Spaß!

E.
Bitte warten ..
Mitglied: ITboon
02.08.2017 um 09:45 Uhr
Hallo emeriks,
danke für deine schnelle Antwort.
Dann mach ich mich mal "händisch" an die Arbeit.

Trotzdem habe ich diesbezüglich aus Interesse eine Frage. Wäre dies grundsätzlich möglich und wie?

MFG
ITboon
Bitte warten ..
Mitglied: emeriks
02.08.2017, aktualisiert um 10:27 Uhr
Nee
We're sorry, the page you requested cannot be found.
Bitte warten ..
Mitglied: 133883
02.08.2017 um 10:39 Uhr
Da wurde was abgeschnitten, ist korrigiert.
Bitte warten ..
Mitglied: emeriks
02.08.2017 um 10:50 Uhr
Dabei wird das Dokument (sein Inhalt) signiert, nicht aber das VBA-Projekt.
Bitte warten ..
Mitglied: 133883
02.08.2017, aktualisiert um 11:01 Uhr
Na dann das VBA Projekt File aus dem Dokument extrahieren (ZIP extractor) und das VBA-Projektfile mit den gängigen Tools signieren, im ZIP ersetzen, fertig.
Lässt sich ja z.B. mit Powershell automatisieren.
Bitte warten ..
Mitglied: colinardo
05.08.2017, aktualisiert um 14:45 Uhr
Hallo ITboon,
Meine Frage: Kann man Makros automatisiert signieren?
Ja lässt sich problemlos machen. Habe hier mal ein simples C# Beispiel dafür. Es nutzt die frei verfügbare Bibliothek EPPlus die sich direkt über Nuget in Visual Studio einbinden lässt.

Folgende Imports sind nötig:
01.
using System;
02.
using System.IO;
03.
using System.Windows.Forms;
04.
using OfficeOpenXml;
05.
using System.Security.Cryptography.X509Certificates;
Die Arbeit erledigen dann die zwei Methoden (Konstanten natürlich an eigene Bedürfnisse anpassen)
01.
private void SignAllWorkbooksInFolder() {
02.
    // ----------------------------------------------------------
03.
    const string CERTPATH = @"C:\certificates\codesign.p12";
04.
    const string CERTPASS = @"GEHEIM";
05.
    const string WORKBOOKPATH = @"D:\Pfad\zu\den\xlsm";
06.
    // ----------------------------------------------------------
07.
    // build certificate object
08.
    X509Certificate2 cert = new X509Certificate2(CERTPATH, CERTPASS, X509KeyStorageFlags.PersistKeySet);
09.
    //for each Makro-Project *.xlsm
10.
    foreach (string file in Directory.GetFiles(WORKBOOKPATH,"*.xlsm")) {
11.
        try {
12.
            // sign workbook and store it with extension '_signed' in same directory
13.
            SignWorkbook(file, Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file) + "_signed.xlsm"), cert);
14.
        }catch(Exception ex) {
15.
            MessageBox.Show("Error: " + ex.Message);
16.
        }
17.
    }
18.
}
19.
// sign workbook function with OfficeOpenXML Module
20.
private void SignWorkbook(string SourcePath, string TargetPath, X509Certificate2 cert) {
21.
    using (ExcelPackage xl = new ExcelPackage(new System.IO.FileInfo(SourcePath))) {
22.
        using (ExcelWorkbook wb = xl.Workbook) {
23.
            wb.VbaProject.Signature.Certificate = cert;
24.
            xl.SaveAs(new System.IO.FileInfo(TargetPath));
25.
        }
26.
    }
27.
}
Der Code durchläuft alle *.xlsm Dateien in einem Verzeichnis setzt das VBA-Zertifikat und speichert die Datei mit dem suffix _signed im selben Verzeichnis ab. Dient nur als Beispiel und lässt sich ja nach Belieben anpassen.

Viel Spaß
Grüße Uwe
Bitte warten ..
Mitglied: Rigazoni
02.07.2019 um 18:11 Uhr
Hallo Uwe,

vielen Dank für das Beispiel, das funktioniert soweit wunderbar.
Gibt es zusätzlich die Möglichkeit, das Zertifikat dabei mit einem Timestamp zu versehen, damit es nach Ablauf des verwendeten Zertifikats weiterhin vertrauenswürdig bleibt?

Wenn ich im VBA-Editor manuell signiere (Extras - Digitale Signatur), wird eine entsprechende Gegensignatur für den Timestamp erzeugt und im xlsm gespeichert (ich habe dazu meine Windows-Registry angepasst). Über das Skript wird allerdings nur "normal" signiert.

Viele Grüße
Thommy
Bitte warten ..
Mitglied: Rigazoni
05.07.2019 um 12:48 Uhr
Servus Uwe,

ich habe deinen Link und die dort folgenden durchgearbeitet und ausgiebige Tests durchgeführt. Leider bezieht sich das alles ausschließlich auf das Signieren von Office-Dokumenten, nicht von VBA-Code. Das bedeutet, dass zwar das Excel-Dokument signiert ist, dem VBA-Code aber trotzdem nicht vertraut wird.

Ausschlaggebend für den Timestamp in der VBA Code-Signierung ist soweit ich herausgefunden habe der Wert von HKCU\Software\Microsoft\VBA\Security\TimeStampURL. Sobald hier ein gültiger Timestamp-Server angegeben ist, wird der VBA-Code mit Timestamp signiert. Aber eben nur manuell im VBA-Editor (Extras - Digitale Signatur), nicht mit dem obigen Skript.

Leider finde ich in der Doku von EPPlus bzw. auf den dort angegebenen Supportseiten nichts dazu außer der gleichen Frage eines anderen Entwicklers. Im Sourcecode wird zwar Timestamp erwähnt (z.B. in ExcelVBASignature.cs, Zeile 72ff.), aber mir ist nicht klar, ob ich das direkt ansprechen kann. Hast du dazu zufällig weitere Infos oder noch eine Idee, wo ich nachschauen kann?

Viele Grüße, Thommy
Bitte warten ..
Mitglied: colinardo
05.07.2019, aktualisiert um 14:30 Uhr
Hast du dazu zufällig weitere Infos oder noch eine Idee, wo ich nachschauen kann?
Du musst eine CounterSignature (Timstamping Signature) hinzufügen, siehe:
Dafür hast du mehrere Methoden, geht z.B. mit dem SignTool
https://docs.microsoft.com/de-de/dotnet/framework/tools/signtool-exe#tim ...

Weitere Infos:
https://knowledge.digicert.com/solution/SO15544.html
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://www.sysadmins.lv/blog-en/digital-signatures.aspx
https://www.sysadmins.lv/blog-en/retrieve-timestamp-attribute-from-digit ...

p.s.
Microsoft bietet inzwischen auch eine extra Library dafür an die das SignTool um Office Dateien erweitert:
Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects

Habs gerade mal getestet, funktioniert einwandfrei.
Ein regsvr32 auf die passende DLL (hier für OOXML Formate) in einer elevated CMD ausführen:
regsvr32 msosipx.dll
Dann das Signieren und Timestampen starten
signtool.exe sign /f "Meincert.pfx" /p "Geheim" /t http://timestamp.verisign.com/scripts/timstamp.dll "D:\Datei.xlsm"
Hier der Auszug aus dem Helpfile des Packages
Microsoft Office Subject Interface Packages (SIPs)

WHAT THIS PACKAGE CONTAINS

	msosip.dll - Subject Interface Package library to facilitate the signing and verification of
		signatures for VBA projects contained in legacy Office file formats.
	msosipx.dll - Subject Interface Package library to facilitate the signing and verification of
		signatures for VBA projects contained in OOXML Office file formats.
	offclearsig.exe - Tool for removing existing signatures for VBA projects from Office file
		types supported by the included SIPs.
	vbe7.dll - VBE7 runtime library, which is used in the process of generating and validating the
		signatures for the VBA projects during signing or signature verification.
	eula.txt - Licensing terms. If you do not agree to the terms specified in this file, do not use
		the binaries in this package.
	readme.txt - Information on the purpose and use of the files in this package.

WHAT THESE COMPONENTS ARE FOR

	Subject Interface Packages (SIPs) are libraries that integrate with the Windows cryptographic
	stack to allow for the signing and verification of file types not natively understood by the
	default Windows cryptography components. Once the SIP is registered with the system, the file
	types supported by the SIP can be signed and verified using tools (such as signtool.exe) that
	would normally be used to perform these operations on standard executable modules (such as EXEs
	or DLLs).

HOW TO USE THESE COMPONENTS

	1) If not already present on the machine where the tools will be run, download and install the
		Microsoft Visual C++ Runtime Libraries. The installer for the redistributable can be
		found at https://aka.ms/vs/15/release/VC_redist.x86.exe

	2) Extract the files in the package to a directory. The files can be located at any local path on
		the machine where the signing and verification operations will be performed. Due to the
		sensitive nature of the operations the binaries perform, the chosen location should be
		well secured.

	3) The vbe7.dll library can be either located in the same directory as the SIP libraries, or it
		can be located in an alternate location, and its location registered for discovery in
		the Windows registry at:
			[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VBA]
			REG_SZ Value "Vbe71DllPath" set to the full path to vbe7.dll library

	4) Run regsvr32.exe on the SIP libraries (i.e. msosip.dll / msosipx.dll) you wish to use.
		Regsvr32.exe must be run with Administrator privileges because the libraries are
		registered into the HKEY_LOCAL_MACHINE registry hive.

	5) Once registered, you can run your signing or verification procedure on supported Office files
		containing VBA macros.
			Example Command Line (signing):
				signtool.exe sign /f C:\Certificates\cert1.pfx /fd SHA256 C:\Files\FileWithMacros.xlsm
			Example Command Line (verification):
				signtool.exe verify C:\Files\FileWithMacros.xlsm

	6) Beginning with Office 2016, Office supports two different signatures on VBA projects. The
		first is the same signature format that has been supported in Office in past versions. The
		second is an improved signature format that allows for more agility in specifying new hashing
		algorithms as the cryptographic landscape changes over time.

		The best practice when signing VBA projects in Office files involves creating both signatures.
		However, the Windows cryptographic stack only supports creating one of these signatures at a
		time. To accomplish signing with both signatures, begin with a document with an unsigned VBA
		project and run signtool.exe (or other tool of your choice) the first time to sign the project.
		This will generate the legacy format signature. Running the tool again on the same file will
		add the newer agile signature. Note that if a file already has a legacy signature, any new
		attempts to sign the file will produce (or overwrite) the agile signature. In order to sign a
		file from scratch again, including the legacy signature, the existing signatures must first be
		removed (see below).

		Note that this two-signature format used for VBA projects is different in format than the
		built-in dual signing mechanism supported in more recent Windows versions, and so does not work
		with signtool.exe options such as "verify /all" or "verify /ds 1" which iterate over native
		Windows multiple signature stores.

		Due to limitations in the way SIPs integrate into the Windows cryptography stack, only one
		signature can be validated on a given file. If the legacy signature is present but the agile
		signature is not, the legacy signature will be validated. If the agile signature is present, it
		will be validated. This means the best practice for signing an Office file with both signatures
		is:
			i) Sign the file with the legacy signature.
			ii) Validate the file to ensure the legacy signature is valid.
			iii) Sign the file again, this time producing the agile signature.
			iv) Validate the file once again to ensure the agile signature is valid.

	7) If your signing process requires the removal of existing signatures from files in order to support
		properly double-signing the Office files as described above, you can use the included
		offclearsig.exe tool to accomplish this. This tool will remove any existing VBA signatures
		contained in the specified file. The tool depends on the SIPs being registered as described
		above.

SUPPORTED FILE FORMATS

	MSOSIP:
		Excel: .xla, .xls, .xlt
		PowerPoint: .pot, .ppa, .pps, .ppt
		Project: .mpp, .mpt
		Publisher: .pub
		Visio: .vdw, .vdx, .vsd, .vss, .vst, .vsx, .vtx
		Word: .doc, .dot, .wiz

	MSOSIPX:
		Excel: .xlam, .xlsb, .xlsm, .xltm
		PowerPoint: .potm, .ppam, .ppsm, .pptm
		Visio: .vsdm, .vssm, .vstm
		Word: .docm, .dotm

MICROSOFT OFFICE SUBJECT INTERFACE PACKAGES SUPPORT

	The Office SIPs are provided as-is with the following options available for support:
		1) Premier customers may either:
			i) Go to the Office Premier portal.
			ii) Log a support request or call tech support at the Premier support contacts page (https://aka.ms/premier_support_contacts).
		2) Broad Commercial customers may purchase professional support for a single incident or a pack of 5 (developer support not included), which includes phone support.
			i) To purchase: https://aka.ms/business_support_options
			ii) Phone support: https://aka.ms/business_phone_support
Bitte warten ..
Mitglied: Rigazoni
08.07.2019 um 15:48 Uhr
Vielen Dank für die Infos!

Das SignTool hab ich schon in Verwendung, auch mit TimeStamp, aber dass man damit inzwischen Office-Dateien/VBA-Code signieren kann, war mir nicht bekannt. Ich werde jetzt mal alles durcharbeiten und dir Feedback geben, ob es geklappt hat.

Grüße, Thommy
Bitte warten ..
Mitglied: Rigazoni
15.07.2019 um 13:08 Uhr
Hallo Uwe,

der Hinweis auf das Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects (SIP) war für mich die Lösung.
Ich habe damit das SignTool (es muss die x86-Variante sein) erweitert und kann nun per PowerShell-Skript den VBA-Code in MS Office Dateien mit CounterSignature/Timestamp signieren. Werde mir wahrscheinlich dazu noch einen Webservice drumrumbauen.
Die Parameter habe ich an meine Anforderungen angepasst, z.B.:
signtool.exe sign /f "Meincert.pfx" /p "Geheim" /fd "SHA256" /tr "http://rfc3161timestamp.globalsign.com/advanced" /td "SHA256" "D:\Datei.xlsm"
Vielen Dank nochmal und Grüße
Thommy
Bitte warten ..
Ähnliche Inhalte
Viren und Trojaner

Office Makros automatisiert kontrollieren - Security Thematik

gelöst Frage von K-ist-KViren und Trojaner16 Kommentare

Hallo Werte Administrator LeserInnen, was ist das Problem: Viele Kunden/Lieferanten schicken uns Excel Listen, wo teils Makro Code das ...

Windows Server

Netstat automatisiert auswerten?

gelöst Frage von lcer00Windows Server5 Kommentare

Hallo, ich stehe vielleicht ein bisschen auf dem Schlauch ich benötige eine Liste der Prozesse eines Servers, die an ...

VB for Applications

Makros in Funktionen umwandeln

Frage von 123660VB for Applications7 Kommentare

Guten Tag und frohes Neues Jahr, ich suche Hilfe bei der Thema Makros umwandeln ? ich arbeite mit Excel ...

VB for Applications

Outlook-Makros gemeinsam benutzen

Frage von ahstaxVB for Applications2 Kommentare

Hallo, gibt es (abgesehen vom Exportieren und Importieren) eine Möglichkeit, Outlook-Makros gleichzeitig an zwei Arbeitsstationen für zwei unterschiedliche Usern ...

Neue Wissensbeiträge
Windows Installation

Windows Install ISO mit übergroßer Install.wim auf FAT32 übertragen

Tipp von Lochkartenstanzer vor 3 TagenWindows Installation10 Kommentare

Moin Kollegen, Viele von euch werden sicher aus praktischen Gründen nicht nur DVDs oder "virtuelle" CD-Laufwerke (Zalman, IODD) zum ...

Datenschutz

Gehe zurück auf Los, ziehe keine 4.000 Mark. E-Privacy (erstmal) gescheitert

Information von certifiedit.net vor 4 TagenDatenschutz

Webbrowser

Firefox 71 verfügbar mit Picture in Picture Funktion

Information von sabines vor 4 TagenWebbrowser2 Kommentare

Die neue Firefox Version 71 unterstützt, zunächst nur für Windows, Picture in Picture. Damit kann ein Video in einem ...

E-Mail
SPF beim Versenden testen
Tipp von StefanKittel vor 6 TagenE-Mail3 Kommentare

Hallo, wenn man einen SPF für einen Exchange, oder anderen Mail-Server, konfigiruert muss man das ja auch testen. Ganz ...

Heiß diskutierte Inhalte
E-Business
Brainstorming: Zeiterfassungs- oder gesamtes Abrechnungssystem
Frage von certifiedit.netE-Business23 Kommentare

Guten Abend, alles neu macht der, naja, schon lange nicht mehr, Mai Zum Ende des Jahres, besser zum Beginn ...

MikroTik RouterOS
Mikrotik Router empfehlenswert?
Frage von matze2090MikroTik RouterOS16 Kommentare

Hallo, ich würde gerne mir Mikrotik anschauen. Reicht dieser Router zum erstmal Test? Er Kostet ca 23€. Ich habe ...

Windows 10
MS Edge in Win10Pro sperren
gelöst Frage von ad-minWindows 1011 Kommentare

Guten Abend, wie kann ich in Windows 10 Professional (1909) MS Edge sperren? (Standardbenutzer, nutze lokale GPO) Vielen Dank! ...

Netzwerkmanagement
Hausverkabelung auf billig für 8
Frage von AmateurverkablerNetzwerkmanagement10 Kommentare

Hallo Community, ich bin in eine Haus-WG eingezogen welche 7 Zimmer hat und eine Einliegerwohnung. Der Vermieter hat in ...