MSXFAQ MeetNow aktiv: Komm doch einfach dazu.

DMARC DNS-Record-Analyse

Immer mehr Firmen veröffentlichen einen DMARC-Eintrag im DNS, damit Sie eine Rückmeldung von entfernten Mailservern über den eigenen Versand bekommen. Da wird es höchste Zeit mal zu schauen, was solche DNS-Einträge mir erzählen.

DMARC-DNS-Eintrag

Jede Firma, die ihre Aussendungen von Mails überwachen möchte, ist gut damit beraten, die eigenen Mailserver per SPF bekannt zu geben und jede Mail mittels DKIM zu signieren. So können entsprechend vorbereitete Empfänger die Legitimierung der Mail prüfen und zumindest Phishing und anderen Missbrauch zuverlässig unterbinden. Als Versendet sollten sie dann auch noch Veröffentlichen, wohin die Empfänger einen DMARC-Report senden, wenn Sie dies unterstützen. Das ist ein einfacher DNS-TXT-Record. Sie können den Eintrag einfach per NSLOOKUP oder Resolve-DNSName prüfen

Der DMARC-Eintrag hat den Namen "_dmarc.<domain>" und ist ein einfacher TXT-Record. Die Payload muss mit "v=DMARC1" beginnen und danach werden die Parameter angegeben. Meine Einstellung sind:

p=reject     d.h. meine Policy sagt dem Empfänger, dass er Mails ablehnen soll, wenn sie weder SPF noch DKIM bestehen.
rua= mail..  Damit hinterlege ich die Mailadressen, an die andere Server ihre Berichte senden dürfen

Es gibt noch weitere Parameter wie "ruf" für forensische Angaben, die Steuerung von Subdomains und des Aligments. Aber mir reicht die einfache Konfiguration.

Top 10.000 Domains

Um nun eine Auswertung der DMARC-Reports der Welt zu erhalten, müsste ich eine Liste aller interessanten Domains der Welt bekommen. Es macht sicher keinen Sinn, von "a.de" bis "zzzzzzzzzzzzz.de" durchzugehen und dann noch ".com", ".net" und andere TLDs abzugrasen. Es gibt aber auch keine öffentlichen Listen aller Domains und das wäre auch wieder nicht repräsentativ. Man könnte auch die Feeds von Zertifizierungsstellen über ausgestellte öffentliche Zertifikate abfragen, was aber auch nur eine Stichprobe wäre. Leider habe ich auch keine Domain-Liste der Firmen im MSCI, S&P500, DAX, MDAX, SDAX o.ä. gefunden und ob die IHK die Domains ihrer Mitgliederlisten bereitstellt, habe ich nicht weiter gefragt. Auch "Breaches" mit Mailadressen könnten hinsichtlich von Domains eine Quelle sein. Sie können natürlich genauso eigene Domains aus ihrer Firewall, den DNS-Server-Logs, dem Exchange Message Tracking oder auch aus ihrer CRM-Kundendatenbank generieren.

Gegen Geld wird man sicher auch die ein oder andere Datenbank käuflich erwerben können.

Vielleicht haben Sie ja eine weitere interessante Quelle.

Es geht aber auch einfacher, denn es gibt ja "öffentliche DNS-Server" (Siehe auch PublicDNS) und zumindest OpenDNS stellt manchmal eine Liste der "am häufigsten abgefragten Domains" bereit.

Das sind dann zwar eher die Domains von Firmen, deren Webseite per Browser abgerufen werden aber vermutlich sind das schon auch die Firmen, die viele Mails versenden. Diese Liste habe ich mir in eine Datei gespeichert.

(Get-Content .\opendnstopdomains.txt).count
10000

10.000 Top-Domains von OpenDNS dürften eine recht repräsentative Liste über "wichtige" Domains in der Welt sein, auch wenn es nur die Anfragen über "OpenDNS" sind. 

PowerShell und DMARC

Diese Text-Datei war dann die Eingabe in ein PowerShell-Script, welches per DNS die DMARC-Records abruft, auseinandernimmt und wieder als PowerShell-Objekt ablegt.

get-dmarcinfo.ps1.txt

Ich habe die 10.000 Domain in eine einfache Text-Datei abgelegt und dann wie folgt an das Skript übergeben

$dmarcresult = Get-Content .\opendnstoppdomains.txt |  .\get-dmarcinfo.ps1

Die Ausgabe habe ich dann unterschiedlich gruppiert und gefiltert

DMARC-Verbreitung

Von den 10.000  Domains haben 4.464 haben einen DMARC-Eintrag.

($dmarcresult).count
4464

Es könnten sicher mehr sein aber denken Sie auch an Domains, von denen eigentlich keine Mails gesendet werden (statische CDNs etc.) aber bei Webseiten oft vorkommen und daher nicht auf dem Radar der Administratoren sind. Es zeigt aber auch, dass wir noch viel zu tun haben, wenn selbst die TopDomains nicht mal einen DMARC-Eintrag haben

DMARC Reportempfänger in der eigenen Domain

Im DMARC-Eintrag hinterlege ich natürlich eine SMTP-Adresse, an welche die Reports gesendet werden. Hier habe ich natürlich die Wahl, ob ich die Berichte an meine eigene Domain zusenden lasse oder eine andere Domain.

($dmarcresult | where {$_.domain -eq $_.smtpdomain})
1118

1.118 Domains haben die gleiche SMTP-Domain. Eine andere Domain ist oft ein Zeichen dafür, dass die Weiterverarbeitung ein Dienstleister übernimmt. Der muss allerdings bei sich dann noch einen Eintrag addieren, damit die DMARC-Report-Versender eine abweichende Domain akzeptieren.

Eine Adresse in der eigenen Domain interpretiere ich oft erst einmal so, dass die Domaininhaber entweder die Mail erst mal selbst manuell, eigenen Skripten oder lokalen Tools auswertet oder selbst zu den verschiedenen Dienstleistern weiter sendet.

DMARC Report-Domains

Wenn eine Domain aber eine Mailadresse in einer anderen Domain angibt, dann könnten Häufungen ein Hinweis auf einen Dienstleister sein. Hier die Liste der häufigsten 40 SMTP-Domains, die von den Top-10.000-Domains genutzt werden. Damit sehen wir schon einige Dienstleister im Markt der DMARC-Auswertungen aber auch einige Firmen, die anscheinend viele Domains betreiben, die es in die Top-10.000-Liste geschafft haben.

$dmarcresult `
| Group-Object SMTPDomain -NoElement `
| Sort-Object  count -Descending -Top 40 `
| Format-Table -AutoSize

Count Name
----- ----
  463 emaildefense.proofpoint.com
  293 vali.email
  218 rua.agari.com
  192 ag.dmarcian.com
  146 rep.dmarcanalyzer.com
  136 google.com
   91 dmarc-reports.cloudflare.net
   87 dmarc.postmarkapp.com
   75 dmarc.everest.email
   70 ag.us.dmarcian.com
   64 dmarc.cyber.dhs.gov
   61 dmarc.amazon.com
   59 inbox.ondmarc.com
   53 rua.easydmarc.us
   50 dmarc.microsoft
   47 inbound.dmarcdigests.com
   44 mxtoolbox.dmarc-report.com
   43 dmarc.250ok.net
   41 auth.returnpath.net
   33 yelp.com
   30 yahoo-inc.com
   29 craigslist.org
   28 rua.dmarc.emailanalyst.com
   25 tmgrup.com.tr
   19 ag.eu.dmarcadvisor.com
   19 rua.netcraft.com
   18 dmarc.brevo.com
   18 service.alibaba.com
   17 corp.globo.com
   16 dmarc.inboxmonster.com
   16 dmarctest.comcast.net
   15 dmarc-bloomberg.com
   13 ag.dmarcly.com
   11 dmarc.facebookmail.com
   11 dmarc.report-uri.com
   10 dmarc.barracudanetworks.com
   10 kayak.com
   10 qiye.163.com
   10 qq.com
    9 mailinblue.com!10m

Da aber DMARC schon länger definiert ist aber erst langsam seine Verbreitung findet, gibt es jede Menge Startups, die früh erste DMARC-Reports erstellt haben und mittlerweile doch eine gewisse Marktdurchdringung erreicht haben. Einen Marktüberblick hat vermutlich niemand aber man kann ja mal ein paar DNS-Domains abfragen und die Ergebnisse gruppieren. Proofpoint steht zu dem Zeitpunkt oben, da es auch ein großer AntiSpam-Provider ist. Aber auch vali.email, Agari, DMmarcian und DMARCAnalyzer können über 100 Einträge der 10.000 Domains auf sich verbuchen, was in relativen Zahlen aber dann doch wieder nur 1-3% sind. Es sind auch ein paar Domains dabei, die auf "Testbetrieb" schließen lassen.

Repräsentativ hinsichtlich verschiedener Anbieter von Auswerteprodukten ist das nicht. Ich muss auch hinterfragen, wer bei den "10.000" Domains enthalten ist. Der OpenDNS-Server sieht ja nur die DNS-Anfragen der Clients aber nicht in welchem Zusammenhang diese Abfrage erfolgt ist. Wenn ich z.B. eine Seite wie "google.com" aufrufen, dann werden im Hintergrund auch Daten von "gstatic.com" und "googleusercontent.com" abgerufen und damit auch als DNS-Abfragen erfasst werden, obwohl diese nie eine Mail versenden. Solche Domains können z.B. in den 6000 Domains ohne DMARC-Record auftauchen. Gerade dann sollte der Inhaber aber eine DMARC-Richtlinie mit "p=reject" und SPF aufsetzen. Domains, die keine Mails versenden sollen, sollten folgende beiden Einträge haben:

# Ein SPF-Eintrag, das alle IP-Adressen als legitime Absender verbietet
_spf    TXT "v=spf1 -all"

# Ein MX-Eintrag auf "null", damit jeder Mailserver erkennt, dass es keinen 
Mailserver für die Domain gibt.
@       MX  0 .

Umgekehrt könnte aber genau der DMARC-Eintrag für solche Domains ein Grund dafür sein, dass z.B. dmarc@facebookmail.com mehrfach aufgeführt wird. Übrigens ändern sich solche Einträge auch immer mal wieder

Policy Fehler

Wenn ich schon die DMARC-Einträge auswerte, dann hat mich auch die Policy interessiert. Wie viele haben schon ein "reject" und welche haben noch ein "none". Ich finde aber auch Tippfehler:

$dmarcinfo | group policy -NoElement

Count Name
----- ----
    2
 1198 none
    1 nonr
  979 quarantine
    1 quarantine\
 2256 reject

Interessanterweise haben über 50% aller DMARC-Einträge schon eine Policy "p=reject" und ich hoffe mal, dass die 1198 Einträge mit einem "p=none" gerade in der Einführung sind und dies kein Dauerzustand bleibt

Von "Quarantine" halte ich persönlich nichts, da der Absender damit den Empfänger anweist, die Mail anzunehmen und in der Quarantäne abzulegen. Siehe dazu auch Das Leid mit der Quarantäne.

Die Fehlerfälle habe ich auch schnell ermitteln können:

Das "P=" bei Fitbit.com ist genaugenommen kein Fehler, denn Upper/Lowercase ist nur für "DMARC1" vorgeschrieben. Mein Skripte hat allerdings beim Auswerten auch nur den genauen String gesucht, weil es eben "üblich ist. Wer garantiert ihnen, dass andere DMARC-Parser den Eintrag nicht auch falsch klassifizieren?

Die anderen Fehler sind hingegen einfach zu erkennen. Ein fehlendes Semikolon, ein Escape-Zeichen "\" zuviel und ein einfacher unbemerkter Tippfehler führen aber schnell zu einem undefinierten Verhalten der Empfängerseite.

Weitere Links