Wie filtere ich auf dem Gateway E-Mail-Anhänge mit Makros in Office-Dokumenten heraus?

Mit der aktuellen Ransomware-Welle haben Makro-Viren wieder eine hohe Bedeutung erhalten. Die gängigen Maßnahmen zum Schutz vor Makro-Viren wie beispielsweise nur signierte Makros zuzulassen, lassen sich in der Regel nicht von heute auf morgen firmenweit umsetzen.

Als einen auch kurzfristig einsetzbaren Baustein zum Schutz vor Makro-Viren, kann der hier beschriebene Filter auf dem Mail-Gateway eingesetzt werden. (Plattform: Cisco ESA, Ironport C-Serie)

Die Grundfunktion des Filters

E-Mails inklusive angehängter Office-Dokumente mit Makros werden in die Quarantäne kopiert. In der Original-E-Mail werden die Anhänge gelöscht und ein Hinweis darauf in den E-Mail-Text eingefügt, bevor sie an den/die Empfänger weitergeleitet wird. Technisch gesprochen: ein Message Filter erkennt, ob ein Makro enthalten ist und markiert die E-Mail mit einem speziellen Header. Ein Content Filter reagiert auf diesen Header und führt dann die entsprechenden Aktionen durch.

Der Vorteil dieses Filters gegenüber einfacheren Filtern:

Es werden nicht generell alle Office-Dokumente blockiert. Manche Unternehmen haben sich in den letzten Wochen entschlossen, um größeren Schaden zu verhindern, alle E-Mails mit Office-Dokumente im Anhang in die Quarantäne zu verschieben. Dies hat zum Teil massive Einschränkungen in den Geschäftsabläufen zur Folge und auch einen deutlichen Mehraufwand auf Seiten der Administratoren, die eine Vielzahl von E-Mails prüfen und gegebenenfalls wieder freigeben müssen.

Kompromisse des unten stehenden Filters:

  • Einen 100%igen Filter gegen Office-Makros kann es nicht geben, es sei denn, man blockiert alle Anhänge (Stichwort passwortgeschützte zip-Dateien). Die Einschränkung des Filters auf die gängigen Dateierweiterungen von MS-Office-Dokumenten ist zwei Umständen geschuldet. Zum einen der Performance für das komplette Durchsuchen des Inhalts von Dateianhängen, und zum anderen dem Ziel den Datenaustausch mittels anderer Datei-Anhänge z.B. im Energie-Sektor nicht zu beeinträchtigen.
  • Wenn eine E-Mail mehrere Anhänge enthält und nur ein Anhang beinhaltet Makros, werden trotzdem in der zugestellten E-Mail alle angehängte Office-Dokumente entfernt.

Weitere Hinweise:

    • Wenn z.B. eine Whitelist für Absender gelten soll, kann eine zusätzliche Einschränkung auf sendergroup(s), mail-from-dictionary-match o.ä. gesetzt werden.
    • Die Liste der gesuchten Dateierweiterungen ist recht lang und enthält auch auf den ersten Blick unproblematische Dateierweiterungen. So enthalten laut Definition z.B. .docx keine Makros, nur .docm. Es gibt jedoch die „Komfort-Funktion“. Wird eine Datei mit fast beliebiger Dateierweiterung z.B. in Word geöffnet (auch .rtf) und es handelt sich eigentlich um eine .docm-Datei, wird dies automatisch erkannt und entsprechend geöffnet – mit den enthaltenen Makros.
    • Es wäre auch möglich den kompletten Filter als Message Filter zu bauen, das ist zum Teil eine Geschmacksfrage.

1)  Message Filter:

(Message Filter werden nur über die CLI konfiguriert, nicht sichtbar in der WebGUI!)

ActiveOfficeAttachmentsFilter:

if

(attachment-filename ==

"(?i)\\.(xls|xlsx|xlt|xla|xltx|xlsm|xltm|xlam|xlsb|doc|dot|docx|dotx|dotm|docm|ppt|pot|pps|ppa|pptx|potx|ppsx|ppam|pptm|potm|ppsm|rtf)$")

AND

((attachment-binary-contains("(?i)x-vba-macros"))

OR

(((attachment-binary-contains("(?i)vba")) AND

(attachment-binary-contains("(?i)versioncompatible32")))

OR

((attachment-binary-contains("(?i)vba")) AND

(attachment-binary-contains("(?i)\\[Content_Types\\].xml")))))

{

log-entry("ActiveOfficeAttachmentsFilter $MatchedContent");

insert-header("X-ActiveOfficeAttachmentsFilter", "True");

}

2)  Incoming Content Filter / Outgoing Content Filter:

Condition:

Other Header:

Header Name: X-ActiveOfficeAttachmentsFilter
Header Value   Contains   True

Action:

Quarantine

Quarantäne auswählen
Duplicate Message: selektieren

Strip Attachment by File Info

Filename   ends with    .(xls|xlsx|xlt|xla|xltx|xlsm|xltm|xlam|xlsb|doc|dot|docx|dotx|dotm|docm|ppt|pot|pp
s|ppa|pptx|potx|ppsx|ppam|pptm|potm|ppsm|rtf)

Replacement Message:

Folgende Anhänge wurden wegen potentiell schädlichen Inhalten aus der Email entfernt:

$dropped_filenames

Wenn Sie die Datei(en) benötigen, wenden Sie sich bitte an <…>

 

3)  Der Content Filter muss dann noch bei der entsprechenden Mail Policy aktiviert werden.

4 Kommentare

  1. Ich kann nur jedem die oletools empfehlen (https://github.com/decalage2/oletools/wiki), um vermeintlich bösartige Office Files auf Macros zu scannen.
    Den obigen Filter haben wir in ähnlicher Form im Einsatz und er ist besser als der mittlerweile von Cisco eingebaute MacroFilter ( macro-detection-rule ). Der Cisco-Filter ist leider zu großzügig, denn er erkennt nahezu jedes Office File als Macro File.

    1. Hallo Daniel,
      Danke für den Hinweis. Ausserhalb der ESA gibt es sicher bessere Möglichkeiten Makros zu erkennen und zu filtern. V.a. dass man mit dem obigen Filter nicht erkennen kann, ob tatsächlich ein Makro mit Code enthalten ist oder nur eine mehr oder weniger leere Hülle, führt leider zu Fehlerkennungen. Aber innerhalb der ESA ist man eben auf die von Cisco bereitgestellten Funktionen angewiesen und wir wollten die Makros auf der ESA fangen (Malware-Filter ist deren Job) und die Quarantäne-Möglichkeiten der Ironports auch gleich dafür nutzen. Die in jeder Hinsicht optimale Lösung ist mal wieder nicht zu haben…

  2. Hi, bin per Zufall auf euren coolen Beitrag gestossen. Bei mir werden aber viele „doc“ Attachments geblockt welche keinen VBA Code oder Makros enthalten. Musste den Filter leider wieder deaktivieren.

    1. Hallo,
      kleiner Nachtrag aus inzwischen längerer Erfahrung mit dem Filter. Für Fehlerkennungen hatten wir v.a. zwei Ursachen:
      1) ein zweiter Anhang, in dem die strings im Binär-Code auftauchen, gerne auch in zip-Dateien. Leider habe ich keinen Weg gefunden, dass von dem Filter nur bestimmte Anhänge durchsucht werden, es werden immer alle Anhänge der email durchsucht.
      2) eine geblockten doc-Datei beruht auf einer Vorlage, die einmal ein Makro enthalten hat und ein leeres vba-Projekt noch als Überbleibsel hat.

      Ich habe die gesuchten strings immer über den strings-Befehl eines Linux-Systems kontrolliert. Das gibt ganz gute Hinweise darauf, wo der betreffende string enthalten ist, und man findet zumindest die Ursache der Fehlerkennung – und evt. sogar einen Hinweis darauf, wie man in diesem speziellen Fall die Fehlerkennung vermeiden kann. Teilweise waren es aber auch einfach blöde Zufälle, dass irgendwo im Binär-Code eben tatsächlich „vba“ auftaucht und dies nichts mit Makros zu tun hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

CAPTCHA *