Direkt zum Inhalt
26.11.2019 - Fachbeitrag

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

Und hier alle weiteren bisher erschienen Artikel aus der Reihe "Emotet bekämpfen mit Rspamd und Oletools" zum Nachlesen:

Emotet bekämpfen mit Rspamd und Oletools (Teil 1)
Emotet bekämpfen mit Rspamd und Oletools - Emotet 2020 (Teil 3)
Emotet bekämpfen mit Rspamd und Oletools - die vielen kleinen Tricks (Teil 4)

Kommentare

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

s-Icon
Schroeffu
26. November 2019 um 23:52

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?

s-Icon
Schroeffu
27. November 2019 um 09:25

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 :- ))

c-Icon
Carsten Rosenberg
27. November 2019 um 12:01

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?

s-Icon
Schroeffu
27. November 2019 um 14:38

> 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 :- )

f-Icon
Fabrice
01. June 2020 um 18:39

Hi
Ich bin schon sehr gespannt auf Teil 3 der Serie. Wann ist denn dieser zu erwarten?

o-Icon
Ozelot
07. June 2020 um 17:08

Von Bald folgend seh ich hier irgendwie nix ;)

Wenn ich mir das so anschaue ist am Support für Archiv Formate noch einiges zu tun verglichen mit dem Klassenprimus Spamasssassin.
Zip,rar,7zip sind ja schön und gut, aber wir haben bei Malware auch exotisches, egg, alz, tar, bzip2, lzip, gz,ace . Das entpackt mit rspamd noch nich und SA mit reinhängen macht den Gewinn wieder zu nichte.

Auch interessant wäre die Mail Texte mit strings auf passwörter für geschützte Dateien (office/archive) zu durchsuchen. Das muss ein malware Mensch ja tun, sonst kommt keiner an den fiesen Code.

c-Icon
Carsten Rosenberg
10. June 2020 um 23:29

Ja "bald folgend" wurde irgendwie nix. Aber der kommt noch ;)

Du meinst wahrscheinlich eher Amavis? Spamassassin selbst packt selbst nix aus. Um ehrlich zu sein, sehe ich im Spam-Zusammenhang selten etwas anderes als Zip. Selbst die Spammer halten sich hier an die Marktführer. Wer hat schon noch WinACE installiert. Wär ja auch blöd wenn der User den schicken Virus gar nicht entpacken kann. Bei Targeted Treats ist das natürlich nochmal was anderes. Aber da sollte eher die Täuschung des Empfängers verhindert werden.

Die ganzen Anti-Virus Scanner können aber auch ganz gut selbst alle möglichen Archive auspacken: https://www.clamav.net/documents/libclamav

Und in bestimmten Situationen lassen wir den Rspamd und Amavis (oder in Wirklichkeit eher nur den Spamassassin) durchaus gemeinsam laufen. Das braucht vielleicht viel mehr Performance, der Gewinn am Rspamd geht ja aber nicht verloren.

Spams mit Passwörtern und dazu passenden Anhängen sind zum Glück derzeit auch eher selten. Wir haben schon ne Idee dazu. Das wird aber ein generellerer Ansatz.

Spannend wird es dann, wenn die Spammer darauf reagieren und die Passwörter in einer 2. Mail oder via Link übermitteln. Die sind ja oft Profis und nutzen auch den Rspamd ;)