k-ist-k
Goto Top

Office Makros automatisiert kontrollieren - Security Thematik

Hallo Werte Administrator LeserInnen,

was ist das Problem:
Viele Kunden/Lieferanten schicken uns Excel Listen, wo teils Makro Code das Excel aufhübschen,
ein paar Zeilen ausfüllen, Berechnungen durchführen, etc.

Auf die Anfrage zum Kunden/Lieferanten ob es möglich ist,
es gemeinsam so zu ändern umzustellen, das man keinen Makro Code mehr benötige,
wird meist abgelehnt.

Office Dokumente mit Makros kann ich nicht einfach blind weiterleiten,
heißt ich muss jedes Makro anschauen Zeile für Zeile und jedes mal,
auch wenn es gleich aussieht.


theoretischer Ansatz:
Mein Ansatz wäre ein System, Script, Programm das automatisch
das Makro vom Excel exportiert, und diesen exportierten Code
mit Vorlagen vergleicht, Zeichen für Zeichen.

Also man bekommt einen Makro Code vom Kunden, der sich nicht ändert.
Man ließt sich diesen Code sorgfältig 1x durch.
Speichert diesen Code als Vorlage.

Jedes Excel mit Makros wird mit den Vorlagen verglichen,
wenn keines übereinstimmt, kommt es in die Quarantäne.


Frage:
Hat jemand gleiche Probleme und schon eine Lösung ?
Habt Ihr andere Ansätze für mich ?


Danke fürs lesen.

Content-Key: 299261

Url: https://administrator.de/contentid/299261

Printed on: April 26, 2024 at 11:04 o'clock

Mitglied: 126919
126919 Mar 16, 2016 updated at 10:11:09 (UTC)
Goto Top
Cherio.
Sag deinen Kunden / Lieferanten das sie Ihre Makros doch bitte mit einer gültigen Signatur versehen möchten, ansonsten würden diese abgelehnt. Dann packst du diese Zertifikate per GPO in die Whitelist von Office, fertig. Unsignierte Makros werden dann in Zukunft nicht mehr erlaubt.

Gruß fk
Member: K-ist-K
K-ist-K Mar 16, 2016 at 10:20:56 (UTC)
Goto Top
Hallo Flachkoepper,

hab ich noch gar nicht probiert, aber die Erfahrung hat gezeigt, das manche Firmen auf bestimmte Dinge bestehen und oft einfach nicht entgegenkommend scheinen, da Sie halt nicht wollen oder die IT keine Zeit oder Interesse hat.
Aber das ist mal ein Tipp denn ich mal nach gehe, danke mal.

Mit Makro Signaturen kenne ich mich jetzt gar nicht aus. Deswegen korrigiere mich bitte, falls ich einen blödsinn schreibe.

Auch wenn das Makro mit einer Digitalen Signatur versehen wird, heißt das doch nicht, das das Makro zu 100% sicher ist oder ?
Das beweißt nur das das Makro wirklich von dieser Firma kommt, und es kein "man in the middle" etc. manipuliert hat.

Lg
Mitglied: 126919
126919 Mar 16, 2016 updated at 10:32:56 (UTC)
Goto Top
Zitat von @K-ist-K:
Auch wenn das Makro mit einer Digitalen Signatur versehen wird, heißt das doch nicht, das das Makro zu 100% sicher ist oder ?
Absolut sicher kann man nie sein das in den Firmen euch nicht doch jemand schaden möchte. Ansonsten hilft nur die Files auf die typischen Signaturen von Malware hin zu checken. Also Download von Content, ausführen von Befehlen wie Shell etc.
Das beweißt nur das das Makro wirklich von dieser Firma kommt, und es kein "man in the middle" etc. manipuliert hat.
Eine Änderung am Makroprojekt durch dritte macht die Signatur ungültig. Das ist der Zweck dieser.
Member: K-ist-K
K-ist-K Mar 16, 2016 at 10:45:23 (UTC)
Goto Top
Das habe ich verstanden, ist aber nur ein Teilschutz.
Ich kann dann zwar ziemlich sicher sein, das der Code passt, aber eine Garantie ist es nicht.

Ich finde die Idee sehr gut, und man findet auch recht viel im Internet zum nachlesen.
Dennoch würde ich gerne nochmal auf die Grundidee von mir eingehen.

Ob das machbar ist.
Bei der Urpsrungsidee von mir, ließt man sich den Code der Firmen 1x durch.
Kann sich selbst überzeugen und man muss es dennoch nur 1x checken.

Lg
Mitglied: 126919
126919 Mar 16, 2016 updated at 10:55:58 (UTC)
Goto Top
Zitat von @K-ist-K:
Ob das machbar ist.
Bei der Urpsrungsidee von mir, ließt man sich den Code der Firmen 1x durch.
Kann sich selbst überzeugen und man muss es dennoch nur 1x checken.

Also man bekommt einen Makro Code vom Kunden, der sich nicht ändert.
Ist man sich sicher ob der Code sich nicht ändert ?? Da muss man dann jedes mal ran wenn sich was ändert, und wer sagt einem das schon jedes mal.

Es bleibt also trotzdem noch manuelle Selektion. Wie man es dreht oder wendet nur 2 Augen geben dir die Sicherheit die du wünschst.
Sehe ich positiv, schafft wenigstens Arbeitsplätze, in der heutigen Zeit eine Seltenheit face-wink

Du könntest natürlich auch mit Makros und Regex den Code der Mappen durchpflügen z.B. ala
'(?i)\.Run|Shell|powershell|executionpolicy|\.exec|kill|cmd\.exe'
etc.
Und so eine Vorauslese von verdächtigen Dokumenten generieren die man manuell durchsieht.
Member: K-ist-K
K-ist-K Mar 16, 2016 at 11:52:24 (UTC)
Goto Top
Wenn sich der Code ändert, muss ich so wieso ran.
Ich kann ja nicht Blind einer anderen Firma vertrauen.

Egal wie sehr vertrauenswürdig die angeblich sind.
Denn die vertrauen vllt. auch einer "vertrauenswürdigen" Firma und die wieder einer.
Bis man einen hat, der gehackt wurde oder wo ein Mitarbeiter die Firma zerstören will warum auch immer.

Es gibt genug nicht bekannte Sicherheitsprobleme, dann sollte man zu mindest die abdecken,
die man kennt oder die Probleme machen könnten.

Solange sich der Code bei der Firma nicht ändert, und der Code bei mir als Vorlage bekannt ist,
solange brauche ich den Code nicht noch einmal kontrollieren, bis er sich halt ändert.

Ich denke der erste Schritt ist, wie kann man den Makro Code automatisch exportieren.
Es kann auch sein, das meine Idee gar nicht umsetzbar ist, deswegen wollte ich mich hier ja informieren.

Lg
Mitglied: 126919
126919 Mar 16, 2016 updated at 11:57:52 (UTC)
Goto Top
Zitat von @K-ist-K:
Ich denke der erste Schritt ist, wie kann man den Makro Code automatisch exportieren.
Es kann auch sein, das meine Idee gar nicht umsetzbar ist, deswegen wollte ich mich hier ja informieren.
Das ist kein Problem, Office-Dateien sind intern gesehen ZIP-Dateien, wenn du an diese die Endung *.zip anhängst (z.B. docx.zip) findest du im Zip-File eine Datei namens vbaProject.bin darin ist der VBA-Code enthalten.
Das kannst du nach belieben umsetzen ob nun mit Batch via 7zip oder auch mit Powershell, das kann ab PS 3.0 auch nativ ZIP-Files entpacken.
Member: K-ist-K
K-ist-K Mar 16, 2016 at 12:02:35 (UTC)
Goto Top
Toll wie schnell du immer reagierst.
Das hilft mir mal sehr.

Danke schon mal für die Hilfe.
Ich werde versuchen euch hier auf dem laufenden zu halten,
wie weit ich bin ob es funktioniert,
ob es wirklich so sinnvoll ist, wie ich es mir vorstelle :D

Lg
Mitglied: 116301
116301 Mar 16, 2016 at 16:15:26 (UTC)
Goto Top
Hallo K-ist-K!

Eine Möglichkeit wäre vielleicht, wie von Flachkoepper vorgeschlagen, die Makro-Datei zu entpacken (geht per 7zip direkt) und den Hash-Value (MD5, SHA1, SHAxxx...) der Datei vbaProject.bin mit einer von Dir bereits erstellten Hash-Freigabeliste zu vergleichen?

Gruß Dieter
Member: K-ist-K
K-ist-K Mar 29, 2016 at 12:25:47 (UTC)
Goto Top
Hallo,

das hat jetzt eine lange Zeit gedauert, bis ich wieder zu diesen Projekt gestoßen bin.
Ist es möglich das das umbenennen auf *.zip nur bei Word Dokumente geht ?
Wenn ich das mit Excel mache, kommt immer ZIP File ist leer (obwohl ein Makro drinnen ist).

Die meist kontrolliertesten Makros sind die von Excel.

Lg
Mitglied: 116301
116301 Mar 31, 2016 at 18:10:14 (UTC)
Goto Top
Hallo!

Für's extrahieren ist es unerheblich, ob die Word-/Exceldateien Makros (vbaProject) enthalten oder nichtface-wink

Mit 7zip lassen sich z.B. folgende Dateien (ohne vorheriges umbenennen) direkt extrahieren:
*.doc
*.docx
*.docm
*.xls
*.xlsx
*.xlsm

Mit Bordmitteln davon nur:
*.docx.zip
*.docm.zip
*.xlsx.zip
*.xlsm.zip

Gruß Dieter
Member: K-ist-K
K-ist-K Apr 15, 2016 at 08:27:16 (UTC)
Goto Top
Wir werden bei uns gerade von so viel Projekten überschüttet, das ich an diesem Projekt momentan nicht weiter arbeiten kann.
Jetzt meine Frage: Soll ich diese Frage einfach so lassen wie es ist oder wenn es mal eine Lösung gibt, eines Wissensartikel schreiben ?
Oder einfach mal wenn es soweit ist, hier weiter schreiben ?

Lg
Mitglied: 116301
116301 Apr 15, 2016 at 09:23:14 (UTC)
Goto Top
Hallo K-ist-K!

Soll ich diese Frage einfach so lassen wie es ist oder wenn es mal eine Lösung gibt, eines Wissensartikel schreiben ?
Gute Frageface-wink, zumal es sich um ein aktuelles Thema handelt für das Dir momentan die Zeit fehlt...

Einen Wissensartikel dazu zu schreiben, ist sicherlich keine schlechte Idee und wenn es soweit ist, solltest Du hier den Link dazu posten und den Beitrag auf gelöst setzen...

Gruß Dieter
Member: K-ist-K
K-ist-K Apr 15, 2016 at 11:16:49 (UTC)
Goto Top
Klingt nach einen guten Plan. Ich hoffe ich vergesse nicht : )
Member: colinardo
Solution colinardo Apr 15, 2016, updated at Sep 22, 2023 at 08:51:06 (UTC)
Goto Top
Hallo zusammen,
habe das hier gerade zufällig gesehen und mal was in Powershell gezimmert was das beschriebene für aktuelle Office-Dateien im OpenXML-Format erledigt:
Das Skript speichert man als *.ps1 und übergibt diesem auf der Kommandozeile dann zwei Parameter, einmal einen Ordnerpfad in dem die Office-Dateien liegen und der zweite ist der Pfad zu einer Referenzdatei vbaProject.bin.
powershell -Executionpolicy Bypass -File "C:\script.ps1" "[ORDNER-PFAD DER OFFICE-DATEIEN]" "[PFAD ZUR REFERENZ VBAPROJECT.BIN]"
Vom Skript wird dann jeweils die vbaProject.bin extrahiert, deren Hash geprüft und gegen den Referenz-Hash gecheckt. Je nachdem ob der Hash stimmt oder nicht werden die Dateien dann in entsprechende Unterordner des Prüfordners verschoben.
Zum Schluss erfolgt eine LOG-Ausgabe. Diese kann man sich nach Bedarf dann noch in eine Datei wegschreiben.
Die Ordnernamen etc. lassen sich in den Variablen anpassen.

param(
    [parameter(Mandatory=$true)][ValidateScript({Test-Path $_})][string]$folder,
    [parameter(Mandatory=$true)][ValidateScript({Test-Path $_})][string]$vbaref
)

# Benötigt wird mindestens NET-Framework 4.5 und Powershell 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}   

# =================== Variablen ============================================
# Ordner in den die Dateien je nach Status verschoben werden
$quarantine_folder = "$folder\quarantäne"  
$clean_folder = "$folder\clean"  
# zu überprüfende Dateierweiterungen
$extensions = @('.xlsm','.xltm','.docm','.dotm','.pptm','.ppsm','.potm')  
# ==========================================================================
# benötigte Assemblies laden
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.Filesystem

# Ausgabe Ordner erstellen
if (!(Test-Path $quarantine_folder)){md $quarantine_folder -Force}
if (!(Test-Path $clean_folder)){md $clean_folder -Force}

# Hash-Funktion
function md5([System.IO.FileInfo]$fileobj){
    $md5 = [System.Security.Cryptography.MD5]::Create()
    Try{
        $stream = $fileobj.OpenRead()
        $hash = [System.BitConverter]::ToString($md5.ComputeHash($stream))
        $stream.Close();$stream.Dispose();$md5.Dispose()
        return $hash
    }catch{
        write-host "Error: $($_.Exception.Message)"  
        return $false
    }
}

# Temporäre Extrahierungs-Pfade für die Datei die geändert wird
$vbaprojectfile = "$env:TEMP\vbaProject.bin"  
# Hash der Referenzdatei berechnen
$hash_ref = md5 $vbaref
# Dateien ausfiltern
$files = gci $folder | ?{$_.Extension -in $extensions}
$log = @()

foreach ($file in $files){
    # Dokument als ZIP-Datei im Read-Modus öffnen
    $zipfile = [System.IO.Compression.ZipFile]::Open($file.Fullname,[System.IO.Compression.ZipArchiveMode]::Read)
     
    # Falls die temoporäre Datei existiert lösche sie
    remove-item $vbaprojectfile -Force -EA Ignore
    
    # Einträge der benötigte Dateien aus dem Dokument holen
    $entry = $zipfile.Entries | ?{$_.Name -eq 'vbaProject.bin'} | select -First 1  
    
    if ($entry){
        # vbaproject.bin extrahieren
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry,$vbaprojectfile)
        # Zipfile-Resourcen freigeben
        $zipfile.Dispose()

        # Hash berechnen
        $hash_file = md5 $vbaprojectfile
        # Checken ob Hash mit Hash des Referenz-File übereinstimmt ...
        if ($hash_ref -eq $hash_file){
            $file | move-item -Destination $clean_folder -Force
            $log += [pscustomobject] @{"Filename"=$file.Fullname;'Result'='HASH OK';'Hash'=$hash_file}  
            
        }else{
            $file | move-item -Destination $quarantine_folder -Force
            $log += [pscustomobject] @{"Filename"=$file.Fullname;'Result'='HASH MISMATCH';'Hash'=$hash_file}  
            
        }
    }else{
        $zipfile.Dispose()
        $file | move-item -Destination $clean_folder -Force
        $log += [pscustomobject] @{"Filename"=$file.Fullname;'Result'='NO VBA PROJECT';'Hash'=''}  
    }
    
}
# Log anzeigen
$log | sort Result | ft -GroupBy Result -AutoSize
Vielleicht hilft das dem ein oder anderen.

Grüße Uwe
Mitglied: 116301
116301 Apr 16, 2016 at 06:33:56 (UTC)
Goto Top
Hallo Uwe!

Ich bin begeistert, Du bist mein Heldface-smile

Gruß Dieter