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.
- opendns/public-domain-lists: OpenDNS
public domain lists of domain names for
training/testing classifiers
https://github.com/opendns/public-domain-lists
raw.githubusercontent.com/opendns/public-domain-lists/refs/heads/master/opendns-top-domains.txt
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.
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
- DMARC for facebookmail.com
https://dmarc.live/info/facebookmail.com
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.