Ik geloof toch niet dat ik DMARC helemaal snap, eerder schreef ik (daarbij mijn excuses makend):
26-07-2016, 08:05 door Erik van Straten: [...]
de domainname achter "From:" moet overeenkomen met de domainname achter "d=" in de DKIM header
[...]
Echter ik ontvang e-mails met daarin
twee DKIM headers, met twee verschillende "d=" domeinen, en toch worden die goedgekeurd!
Ik licht mijn vraag toe aan de hand van een analyse van zo'n e-mail, naar verluidt afkomstig van Ziggo - in relatie tot een opmerking van een Anomien eerder in deze thread.
28-07-2016, 12:48 door Anoniem: [...]
KPN, Ziggo, leest u mee? Gaat u het eindelijk ondersteunen?
Ziggo
zelf weet ik niet, maar alle (vermoedelijk legitieme) mailings van Ziggo die ik ontvang, worden
verzonden via mail servers van
brightbase.net die kennelijk van dezelfde eigenaar zijn als het domein
mailplus.nl (zie ook [5] voor een voorbeeld van wat ik bedoel).
Voorbeeld van een e-mail met 2 DKIM headersSinds 13 juli 2015 (ruim 1 jaar geleden dus) heeft
mailplus.nl haar zaken zo te zien redelijk voor elkaar, want steevast zie ik sindsdien in door
mailplus.nl namens Ziggo verzonden mails de volgende header (toegevoegd door mijn ISP Xs4all.nl):
Authentication-Results: xs4all.nl;
spf=pass smtp.mailfrom=mpbounces.ziggo.nl;
dkim=pass header.i=ziggo.contact.ziggo.nl;
dkim=pass header.d=mailplus.nl;
dmarc=pass header.from=ziggo.nl
waarbij ik de @ achter ziggo.contact door een . heb vervangen (en, voor de duidelijkheid, relevante entries op 1 regel gezet).
Ik schreef dat "
mailplus.nl haar zaken zo te zien redelijk voor elkaar" heeft, want uit de Xs4all header kun je afleiden dat er sprake is van zowel SPF, DKIM als DMARC. Sterker, er lijkt zelfs sprake van
twee DKIM headers; daarover later meer.
Een @ vervangen door een punt heb ik ook gedaan in de From: header die ik hieronder toon:
From: Ziggo <ziggo.contact.ziggo.nl>
Met andere woorden,
als een mail client het gehele afzender adres laat zien, zullen de meeste ontvangers daaruit afleiden dat iemand bij ziggo.nl de echte afzender moet zijn. Maar is dat ook zo, of gaat het om een phishing mail?
DMARC checkUitgevoerd in een CMD prompt venster (waarbij ik 212.54.32.26 als IP-adres voor de nameserver gebruik, omdat die
authoritative is voor ziggo.nl DNS lookups):
C:\>nslookup -querytype=txt _dmarc.ziggo.nl 212.54.32.26
Server: ns1.gn.iss.as9143.net
Address: 212.54.32.26
_dmarc.ziggo.nl text =
"v=DMARC1; p=none; rua=mailto:qjm2foqd.ag.dmarcian.com"
[...]
(ook hierin de @ achter qjm2foqd vervangen door een punt). Opvallend:
1) p (policy)=none; zie [1] voor een gedetailleerde uitleg. Duidelijk is dat er geen maatgerelen van de ontvangende mailserver worden verwacht als er iets niet klopt;
2) Ziggo heeft het bedrijf
dmarcian ingehuurd voor analyse van hoe met "haar" afzender e-mail adressen wordt omgesprongen (legitieme vs. vervalste e-mails waarbij het From: veld eindigt op "@ziggo.nl>").
SPFHet Return-Path luidt:
<ret-uid=X1_a=X2_s=X3_d=X4.mpbounces.ziggo.nl>
waarbij
X1 t/m
X4 getallen of alfanumerieke identifiers zijn, en ik de @ voor mpbounces vervangen heb door een punt.
Eveneens uitgevoerd in een CMD prompt venster:
C:\>nslookup -querytype=txt mpbounces.ziggo.nl 212.54.32.26
Server: ns1.gn.iss.as9143.net
Address: 212.54.32.26
mpbounces.ziggo.nl text =
"v=spf1 include:mailplus.nl -all"
Het minnetje voor "all" geeft aan dat het hier niet om een advies, maar om een
regel gaat: indien een e-mail met Return-Path eindigend op @mpbounces.ziggo.nl wordt aangeboden vanaf een IP-adres dat
niet in de toegestane lijst voorkomt, moet de e-mail worden geweigerd. Zaak (voor de ontvangende mailserver, wat wij hier handmatig nabootsen) is dus te bepalen wat wel toegestane IP-adressen zijn.
Aangezien er naast een "include" niets staat over IP-adressen van mailservers die namens
mpbounces.ziggo.nl e-mail mogen verzenden, hoeven we uitsluitend naar de "include" directive te kijken. En die geeft aan dat we het SPF record van
mailplus.nl mee moeten nemen, dus ook dat vragen we op (46.31.48.17 is een
authoritative DNS server voor
mailplus.nl):
C:\>nslookup -querytype=txt mailplus.nl 46.31.48.17
Server: ns1.brightbase.net
Address: 46.31.48.17
mailplus.nl text =
"v=spf1 ip4:46.31.48.0/21 -all"
mailplus.nl text =
"google-site-verification=H2WQvjsRU9UC6mXaTbQv9m1gYp8SKJmCDhln4wRR3IA"
Zoals je ziet zijn er twee verschillende "text" records, wij zijn natuurlijk alleen geïnteresseerd in degene die begint met "spf1". Uit de tekst daarachter kun je direct afleiden dat e-mails aan ontvangende mailservers mogen worden aangeboden als het IP-adres van de
aanbiedende server een IP-adres heeft in de reeks van 46.31.48.0 t/m 46.31.55.255.
Zo te zien ontvangt Xs4all de meeste Ziggo mails voor mij van de server
dmta9.brightbase.net met IP-adres 46.31.53.9, dus dat is legitiem.
DKIMIn de e-mails zie ik
twee DKIM headers. Uit de laatste "Ziggo" e-mail die ik ontving (Subject: Je nieuwe factuur van Ziggo, Date: Tue, 26 Jul 2016 18:04:31 +0200 (CEST)):
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=mailplus2015;
d=ziggo.nl;
h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe;
i=ziggo.contact.ziggo.nl;
bh=K0NE7dNxsDsE10Wsf5UlvDLPHfCbHbVuBhsGYhco9qM=;
b=IsxKkvuh0s6sScBJnjFinhOruToLJrLwBOV8vGQFHTGYlxV4+SpZmH1XZsbL1tQJfhBBQccPd7mM
63p3dIkJ5v/vjXMB82O3INSQnYWa2tASBo2QSdzYM6O2M9OHht9gODjxeuAq/ucLTTteFYvxFsa2
qUbgu1GfxMwz+J5zDbQ=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=mailplus2016-06;
d=mailplus.nl;
h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe;
bh=K0NE7dNxsDsE10Wsf5UlvDLPHfCbHbVuBhsGYhco9qM=;
b=eR9cqawjYxp1vWASP2xbMPiBvM3hBge0Cjzfg6+Io7BS5V0kr8hqp+r47eEzJyEGLhrUzcYz0fZA
sbBqRFEHsb8glJ/zCWTXRIH7XW71dWvgS0hP92Ea4Wf6soZKCWmqKWQEstr2D8aaaRUXt+aLHliX
Ec4JjtZifkTKbPHJz+4=
(In de eerste header heb ik achter
i=ziggo.contact de @ vervangen door een punt, en ik heb een lege regel tussen beide DKIM headers tussengevoegd, in de e-mail zelf stonden deze strak achter elkaar).
De
eerste DKIM header is, gok ik, door Ziggo zelf toegevoegd, waarna de e-mail door Mailplus is
geforward, waarbij Mailplus kennelijk de
tweede DKIM header heeft toegevoegd.
Check of de DKIM public keys bestaanWe zoeken de in DNS gepubliceerde public keys op (hoe je dat doet heb ik beschreven in [2]):
C:\>nslookup -querytype=txt mailplus2015._domainkey.ziggo.nl 212.54.32.26
Server: ns1.gn.iss.as9143.net
Address: 212.54.32.26
mailplus2015._domainkey.ziggo.nl text =
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgnwVGjGAreOyrF7A8YO1RhVY8Sh/mPaqbNv4IL5vGhFhpSBhKsQ5KDLgBuHzIInnMoYUtSdhN2liSVXSheWLLJ1C8pMvvCvoGz6I4K+MLEthfmLSjPNgN3h9c4K1uad63aCzOi
tIFHLRzJZ91OMb7XAK7QOfv8GpwHjJo+dNRrwIDAQAB"
en
C:\>nslookup -querytype=txt mailplus2016-06._domainkey.mailplus.nl 46.31.48.17
Server: ns1.brightbase.net
Address: 46.31.48.17
mailplus2016-06._domainkey.mailplus.nl text =
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCJBXX3mIMC1XFlVnjWOMP8nZedXBeekltH90263u89Jd+3eSoXPap2KwXXvAsp0Ogm+cLwgq6fA7rusQTt2NCnJxxUMySdXt2xR2qkDJ5jYQA8v4GNDY9WtiPpv9TI61a4es4Z
kRPkcB7C764aiueLA1GedE1jYupKyQH33Pa3wIDAQAB"
Handmatig controleren van DKIM signatures is iets dat ik nog nooit heb geprobeerd, want dat is vermoedelijk lastig (je moet op de juiste manier en in de juiste volgorde de gespecificeerde velden en de message body achter elkaar zetten, en daar de gespecificeerde hash (sha256 in dit geval) over uitrekenen. Die berekende hash moet hetzelfde zijn als de door de verzender met zijn private key versleutelde hash, die je met de public key uit het bijbehorende DNS record kunt decrypten).
DKIM Verifier voor ThunderbirdDaar bestaan tools voor, o.a. voor Thunderbird (die ik gebruik voor privé mail), met dank aan Anoniem in [3]; zie [4].
Ik heb 3 Thunderbird screenshots gemaakt van de laatste e-mail die ik van Ziggo ontving, zie [5] (Thunderbird v45.2.0, DKIM Verifier v1.5.1 met default settings). Van boven naar onder:
1) De e-mail zoals ontvangen;
2) De e-mail waarin ik de DKIM header van Ziggo.nl heb verwijderd;
3) De e-mail waarin ik beide DKIM headers heb verwijderd.
In de middelste screenshot zie je dat de DKIM verifier vermeldt: Valid (signed by mailplus.nl) echter met een geel driehoekje erachter. Als ik daar de muispijl boven laat hangen, verschrijnt een klein popup boxje met de tekst "From is not in the signing domain". M.a.w. woorden: het is een geldige handtekening, echter gezet door iemand die helemaal niets met de afzender te maken hoeft te hebben!
Ik heb nog meer geëxperimenteerd, maar deze post is alweer veel te lang geworden. Overigens vind ik ondertussen het hele DKIM+DMARC verhaal
zodanig complex worden met alle mogelijke variaties van parameters en dubbele headers zoals hierboven getoond, dat ik mij afvraag of het realistisch is om ervan uit te gaan dat alle ontvangende mailservers e.e.a. correct zullen implementeren en dit niet tot heel veel fouten gaat leiden (zowel onterecht geweigede of als spam getagde legitieme mails, en doorgelaten nepmails).
VRAAGWat is nou precies het criterium van DMARC? Hoe kan het dat er 2 DKIM headers zijn, waarvan eentje met
d=mailplus.nl terwijl From: eindigt op
ziggo.nl, en Xs4all beide DKIM headers goedkeurt? Of zou Xs4all die laatste DKIM header hebben
afgekeurd indien de DMARC policy "reject" of "quarantine" was geweest, en zo ja, zou daarmee de hele mail geweigerd of als spam getagged zijn?
[1]
https://dmarc.org/wiki/FAQ#Does_DMARC_.E2.80.9Cp.3Dnone.E2.80.9D_affect_the_way_my_emails_get_delivered.3F[2]
https://www.security.nl/posting/463813/Waarom+DMARC+%28%2BSPF+%2BDKIM%29[3]
https://www.security.nl/posting/463813/Waarom+DMARC+%28%2BSPF+%2BDKIM%29#posting464032[4]
https://addons.mozilla.org/en-US/thunderbird/addon/dkim-verifier/[5]
https://imgur.com/a/WQGMAEdit 21:41: typos gecorrigeerd en teksten iets verduidelijkt