Emotet mit Rspamd und Oletools bekämpfen (Teil 2)

Der erste Teil der Serie „Emotet mit Rspamd und Oletools bekämpfen“ zeigte, warum Emotet (und seine Namensbrüder Feodo, Dridex …) so gefährlich für Anwender sind und warum oletools einen guten Schutz vor Emotet bieten kann.
In diesem zweiten Teil möchten wir die Wirkweise der External Services in Rspamd ein wenig näher beleuchten, bevor wir im dritten Teil zur Installation von oletools, olefy und deren Einrichtung in Rspamd kommen.

Die External Services greifen wie das Antivirus-Plugin auf das Rspamd lua_scanners Framework zurück. Das es hier zwei Plugins gibt, liegt eher am allgemeinen Verständnis, dass Viren-Scanner eben bösartige Dateien erkennen, andere Tools wiederum Spam-Nachrichten. Dabei liegt die Wahrheit irgendwo dazwischen. Verschiedene Viren-Scanner sind auch sehr gut in der Spam-Klassifizierung und oletools ist genaugenommen ein Tool, um schädliche Anhänge zu entdecken. Wir setzen zum Beispiel das eigentliche Open-Source Anti-Virus-Plugin ClamAV mit Zusatzsignaturen sehr effektiv zu Spam-Erkennung ein.

Aber zurück zu den externen Services. Unterstützt werden hier derzeit die Abfrage von ICAP-Servern (generisches Protokoll / HTTP-Proxy Anti Virus), DCC & Razor (Hash Spam-Datenbanken), Spamassassin über seinen Daemon Spamd, das kommerzielle API von VadeSecure und eben Oletools.

https://rspamd.com/doc/modules/external_services.html

Rspamd – Konfiguration von Antivirus und External_Services

Prinzipiell lässt sich konfigurieren, ob Rspamd die gesamte E-Mail oder die einzelnen Mime-Parts getrennt an den Service schicken soll.

  • Scannen der ganzen E-Mail: scan_mime_parts = false;
  • Scannen der Mail in Einzelteilen: scan_mime_parts = true;

Während DCC oder Razor einen bestimmten Hash über die E-Mail bilden und damit die unverarbeitete E-Mail benötigen, kann es für ICAP Anti-Virus-Server sinnvoll sein, die Teile einzeln zu senden. Denn die einzelnen Anhänge werden nicht nur einzeln gescannt, sondern das Ergebnis auch einzeln gecached. Außerdem haben verschiedene Anti-Virus-Hersteller auch immer mal wieder Probleme E-Mails vernünftig zu zerlegen.

Damit nun nicht immer jeder kleine Textschnipsel oder jedes Bild einzeln an das externe Tool versendet wird, gibt es zwei weitere Schalter zur Steuerung:

  • Sollen Text-Parts gescannt werden: scan_text_mime = true|false;
  • Sollen Bilder gescannt werden: scan_image_mime = true|false;

Sofern ein externer Service oder ein Anti-Virus-Tool auch Spam in Text oder bösartige URLs erkennt, kann es empfehlenswert sein auch die Textanteile an den jeweiligen Service zu senden (z.B. Sanesecurity ClamAV Signaturen). Es geht aber noch genauer. Mit zwei weiteren Optionen lassen sich die zu verarbeitenden Mime-Parts noch genauer einschränken:

  • mime_parts_filter_ext
  • mime_parts_filter_regex

Filter für Mime-Parts und Dateinamen

mime_parts_filter_ext matched dabei auf die Dateierweiterung des Anhangs, ohne reguläre Ausdrücke zu erlauben. mime_parts_filter_regex matched hingegen via regulärem Ausdruck auf Dateinamen und damit ggf. ebenso auf die Endung sowie auf Mime-Types wie zum Beispiel ‘application/msword’. Rspamd stützt sich hier auf die Angaben im Header des Mime-Parts (Content-Disposition, Content-Type) sowie auf die eigene Magic-Erkennung des Filetypes.

Hier eine beispielhafte und wahrscheinlich immer noch unvollständige Konfiguration der Filter für das Oletools Plugin:

mime_parts_filter_regex {
   #UNKNOWN = "application\/octet-stream";
   #FILE = "bad-filename.d.*";   
   DOC2 = "application\/msword";
   DOC3 = "application\/vnd.ms-word.*";
   XLS = "application\/vnd.ms-excel.*";
   PPT = "application\/vnd.ms-powerpoint.*";
   GENERIC = "application\/vnd\.openxmlformats-officedocument.*";
 }
mime_parts_filter_ext {
doc = "doc";
dot = "dot";
docx = "docx";
dotx = "dotx";
docm = "docm";
dotm = "dotm";
xls = "xls";
xlt = "xlt";
xla = "xla";
xlsx = "xlsx";
xltx = "xltx";
xlsm = "xlsm";
xltm = "xltm";
xlam = "xlam";
xlsb = "xlsb";
ppt = "ppt";
pot = "pot";
pps = "pps";
ppa = "ppa";
pptx = "pptx";
potx = "potx";
ppsx = "ppsx";
ppam = "ppam";
pptm = "pptm";
potm = "potm";
ppsm = "ppsm";
}

Mit diesen Filtern werden die an oletools zum Scannen gesendeten Attachments auf Microsoft Office Dateien reduziert.

Rspamd mit ClamAV und Patterns eigene Virensymbole erzeugen lassen

Anti-Viren Software und andere externe Services liefern als Ergebnis eines Scans einen Report zurück, der im einfachsten Fall einfach ein Virusname oder eine Liste von Viren-Namen sein kann. Rspamd würde in dem Falle z.B. das Symbol CLAM_VIRUS setzen (und entsprechend seiner Einstellungen reagieren). Es können allerdings auch sogenannte Patterns mit regulären Ausdrücke definiert werden, die bestimmte Namen in eigene Symbole umwandeln lässt:

patterns {
 CLAM_JUST_EICAR = "^Eicar-Test-Signature$";
 CLAM_DOC_MALWARE = "^Doc\.Malware\..*";
 CLAM_HEUR_OLE2_VBA_MACRO = "^Heuristics\.OLE2\.ContainsMacros$";
 …    
 CLAM_PUA_WIN = "^PUA\.Win\..*";
 CLAM_PUA_DOC = "^PUA\.Doc\..*";
 CLAM_LIMITS_EXCEEDED = "^Heuristics\.Limits\.Exceeded";
 CLAM_SANESEC_JUNK = "^Sanesecurity\.Junk.*";
 …
 }

Wenn ClamAV den Eicar-Virus erkennt und den String ‘Eicar-Test-Signature’ zurück liefert, setzt Rspamd nun nicht mehr das Symbol CLAM_VIRUS sondern CLAM_JUST_EICAR mit entsprechend eigenen Einstellungen. Die Patterns lassen sich also wunderbar zur Kategorisierung erkannter Threats einsetzen. Wie schon erwähnt nutzen wir das Prinzip gern, um im ClamAV verschiedenste externe Signaturen zu nutzen, diese aber im Rspamd dann unterschiedlich zu gewichten.

dynamic_scan sorgt für mehr Performance bei Rspamd

Ein kleines verstecktes Feature möchte ich noch kurz erwähnen. Während die Analyse von Dateien in Anti-Virus Systemen meist sehr schnell geht, benötigen Dienste wie Spamassassin oder auch Oletools mehr Zeit und Ressourcen. Sofern eine E-Mail auf Grund anderer Regeln schon ziemlich sicher abgelehnt wird, ist eine zusätzliche Analyse in langsamen Diensten eigentlich unnötig. Dafür gibt es im Rspamd eine Option dynamic_scan. Diese prüft vor dem Scan ob die E-Mail nicht schon sicher abgelehnt wird und verzichtet dann auf den Aufruf des entsprechenden Services. Leider ist diese Option noch nicht weiter dokumentiert.

Im bald folgenden dritten Teil kümmern wir uns jetzt aber wirklich um die konkrete Konfiguration der Oletools. ;-)

Autor: Carsten Rosenberg, Linux-Consultant, Heinlein Support

Dieser Beitrag wurde unter Howtos, News abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten zu Emotet mit Rspamd und Oletools bekämpfen (Teil 2)

  1. Schroeffu sagt:

    Sollte es nicht ausreichen in clamd.conf auf „OLE2BlockMacros true“ zu setzen, und ClamAV erkennt danach zu 100% alle Makros in allen Office Dokumententypen. Wozu dann ein Oletool zusätzlich?

  2. Schroeffu sagt:

    OK ich verstehe inzwischen, dass oletools die Makros analysiert ob gewisse Funktionen die Emotet gerne nutzt, vorhanden sind, jedoch sehe ich in der Wildnis da draußen kaum echte Makros die diesen Filter rechtfertigen würden.

    Wir haben hier @Work bei eingehend ca. 5000 Mails/Tag je nach Monat 10-500 Makroviren, aber über das ganze Jahr gesehen nur 10 echte Makros. Und die sind oft sogar unbewusst im Dokument, z.B. hat eine Bank die Makros vergessen zu entfernen und auf mein Anschreiben hin sofort auch frisch ohne Makro zugestellt. Daher „kill them all“ mit ClamAV in unserem Fall löst bisher die Probleme zuverlässig – per unverschlüsselten Mail Anhang zumindest.

    Zumal zu bedenken ist, Emotet kann ebenso auch als .jar und vielen anderen findigen Dateitypen daher kommen.

    Trotzdem Danke für die Dokumentation. Sobald wir von MailScanner+SpamAssassin auf MailScanner+rspamd gewechselt sind lese ich euren Blog nochmal nach um nichts zu verpassen :- ))

  3. Carsten Rosenberg sagt:

    Wenn Ihr auf Makros verzichten könnt, ist komplette Blocken die einfachste und beste Methode.

    Bei vielen Unternehmen und Institutionen sind Office Dokumente mit Makro Erweitungen Teil des Workflows (z.B. Preiskalkulatoren etc) oder machen Daten management-kompatibel bunt. Diese wollen oder können auf Grund der Anforderungen von Partnern nicht verzichten.

    In einer Windows-Domäne könnte man ja auch per GPO Makros deaktivieren oder nur signierte Dateien mit Makros zulassen ;)

    > auf MailScanner+rspamd gewechselt sind
    Warum nicht nur Rspamd?

  4. Schroeffu sagt:

    > Warum nicht nur Rspamd?

    Ich sehe ein Problem mit der nicht vorhandenen Persistenz bei Rspamd mit Redis. Bei MailScanner bin ich sicher alle Mails werden in die MySQL geloggt und ich habe sie auch 10 Jahre später noch via MailWatch abrufbereit zur Recherche. Bei Redis geht Speed vor Persistenz.

    Das ist dann auch fast der einzige Grund, seit Rspamd den ICAP für Virenscanning integriert hat dürfte auch unser proprietärer Scanner problemlos funktionieren.

    Zu guter Letzt bliebe noch die Umgewöhnung, dass rspamd kein Quarantäne-Management hat, sondern allow or block und Ende im Gelände. Das ist aber mittelfristig sowieso der beste Weg, insbesondere je grösser die Firma ist/wird habe ich auch keine Lust mehr in irgendwelchen Quarantänen Mails freigeben zu müssen :- )

Schreibe einen Kommentar

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