SPF, DKIM & DMARC – Vechten tegen Spam / Phishing
Al vele jaren is het spoofen van e-mailadressen een koud kunstje. Doordat crackers een e-mail kunnen sturen waarbij het lijkt alsof de e-mail afkomstig is van een ander worden vele phishing aanvallen succesvol uitgevoerd. Een e-mail die afkomstig lijkt te zijn van je vader wordt sneller geopend dan een phising e-mail van een vreemde verzender. Voor de industrie is het erg lastig een vuist te maken tegen e-mail spoofing en daarmee het pfishing probleem! Hiervoor zijn speciale technieken zoals SPF, DKIM en DMARC in het leven geroepen en ik leg deze graag aan jullie uit!
huidige DMARC
SPF, DKIM en DMARC worden allen geregeld in de DNS. Let echter goed op alvorens je DNS instellingen gaan aanpassen. Je krijgt geen duidelijke resultaten of alles afdoende werkt en bij een foute setup kunnen er dus ook berichten onnodig verloren gaan. Hou dus na het instellen je DNS settings in de gaten en wanner deze gerepliceerd zijn is het zaak om deze goed te testen.
SPF – Sender Policy Framework
SPF is bedacht in 2000 en rond 2002 doorontwikkeld. SPF stond voor “Sender Permitted From”, maar dat is nu veranderd in “Sender Policy Framework”. SPF is ontwikkeld om de tekortkomingen van e-mail te corrigeren. Ik doel hier voornamelijk op het “from” veld welke niet beveiligd is en waardoor een malafide gebruiker zich voor kan door als een ander. Het SPF record is een simpel e-mail validatiesysteem waarbij een e-mailserver (MX server) bij het ontvangen van een e-mail kijkt naar het SPF record in de DNS. Als de e-mailserver waarvan de e-mail ontvangen wordt aanwezig is in het record dan krijgt deze een SPF PASS en wordt de e-mail verder behandeld. Zo niet dan wordt dan krijgt de e-mail een SPF FAIL en is het aan de mailserver om te bepalen wat deze met SPF FAIL gemarkeerde e-mails doet. Een spamfiler zal SPF FAIL e-mails vrijwel altijd aanmerken als spam en verwijderen.
Een SPF record is een nieuw TXT record in DNS welke begint met “v=spf1”. Een volledig voorbeeld record ziet er als volgt uit:
"v=spf1 a mx ip4:211.181.40.14 include:_spf.marketingmail.nl ~all" |
Het SPF record wordt van links naar rechts gelezen en kent de volgende “qualifiers”:
+
De + geeft aan dat een match met de volgende waarde een SPF PASS resultaat krijgt. Dit is tevens de standaardwaarde.
–
De – geeft aan dat een match met de volgende waarde een SPF FAIL resultaat krijgt.
~
De ~ (tilde) geeft aan dat een match met de volgende waarde een SPF SOFTFAIL resultaat krijgt. Berichten met een SOFTFAIL tag worden meestal wel behandeld maar gemarkeerd als spam.
?
De ? geeft de volgende waarde een SPF NEUTRAL tag. Dit betekend eigenlijk dat de SPF controle niet geslaagd of gefaald is.
Het SPF record kent de volgende mechanismes:
a
De a refereert naar het A DNS record van de verzender. Als het IP adres van de verzender voorkomt in een A DNS record van de verzender dan wordt dit mechanische succesvol gepasseerd.
mx
ieder domein waarop e-mail gehost wordt beschikt over 1 of meerdere MX records. Het MX record definieert welke servers gebruikt moeten worden voor het relayen van de e-mail. Als de mx tag opgenomen is dan wordt elke e-mail afkomstig van een inkomende e-mailserver van het domein succesvol gepasseerd. Dit voorkomt het handmatig bijhouden en opsommen van alle MX / relay servers.
INCLUDE
INCLUDE refereert naar de policy op een ander domein. Als ik met IP adres 10.180.20.30 een e-mail verzend als test@nederland.nl en in mijn INCLUDE tag staat “spf.nederland.nl” dan wordt de e-mail ook succesvol geaccepteerd als het IP adres 10.180.20.30 voorkomt in de SPF policy van “nederland.nl”. In de INCLUDE tag worden vaak diensten opgenomen die namens jou e-mail mogen verzenden.
IP4
Als het IPv4 adres van de verzender matched dan wordt de e-mail succesvol gepasseerd.
IP6
Als het IPv6 adres van de verzender matched dan wordt de e-mail succesvol gepasseerd.
ALL
ALL refereert naar “alles”. ALL wordt meestal gebruikt in combinatie met een – qualifier aan het einde van het SPF record om aan te geven dat alles wat niet een 1 van voorgaande mechanismes voldaan heeft de SPF FAIL tag krijgt.
Het volgende SPF record:
"v=spf1 a mx ip4:211.181.40.14 include:_spf.marketingmail.nl ~all" |
is hetzelfde als (omdat de + de standaard qualifier is):
"v=spf1 +a +mx +ip4:211.181.40.14 +include:_spf.marketingmail.nl ~all" |
Als we dit SPF record ontleden kunnen we prima achterhalen welke SPF regels er voor dit domein gelden:
v=spf1
Omdat er meerdere TXT records bestaan binnen DNS verteld de v (version prefix) welk type TXT record dit is. Dit is het SPFv1 record.
a
Als het IP adres van de verzender voorkomt in een A DNS record van de verzender dan wordt dit mechanische succesvol gepasseerd.
mx
Als de e-mail afkomstig is van een MX server (inkomende e-mailserver) dan wordt dit mechanische succesvol gepasseerd.
ip4:211.181.40.14
Als de e-mail afkomstig is van IP adres: 211.181.40.14 dan wordt dit mechanische succesvol gepasseerd.
include:_spf.marketingmail.nl
Als het IP adres van de verzender voorkomt in het SPF record van “marketingland.nl” dan wordt dit mechanische succesvol gepasseerd.
~all
Alle e-mail die op dit moment niet de SPF PASS tag heeft gekregen wordt voorzien van een SOFTFAIL tag.
*let op. Een SPF record kan slechts uit maximaal 255 karakters bestaan. Je kunt echter langere SPF records gebruiken door quotes te gebruiken. Dit staat beschreven in RFC1035. Voorbeeld: “v=spf1 255 karakters deel 1” “overige karakters deel 2” wordt gelezen als: “v=spf1 255 karakters deel 1 overige karakters deel 2”.
Het probleem met SPF is dat veel grote bedrijven deze methode nog steeds niet volledig geïmplementeerd hebben waardoor het nog steeds mogelijk is om ongeautoriseerd uit naam van deze bedrijven een e-mail te versturen.
DKIM – DomainKeys Identified Mail
DKIM is voortgekomen vanuit het “DomainKeys” protocol van Yahoo en het “Internet Identified Mail” protocol van Cisco. In tegenstelling tot SPF is DKIM geen anti-spam technologie maar een authenticatiemogelijkheid waar anti-spam filters gebruikt kunnen worden.
Een voorbeeld DKIM DNS record ziet er als volgt uit:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDp6a+u73eI0PmR shbi7LeAjWSs6ZhL5bUZ7RExmewTN7w6eiGMlwx2yL/f4atmsaJFQ3 ik6KegVjYSX1njp5exTkWbe2MlGF/t14CkYxDHzIiN9erebi/XqHa3 VV/7IFOcB8ZkkpGjRYHg9LkOo8p0ASmm4ruyrCSsS2OUQB98rwIDAQAB |
Net zoals bij SPF is het DKIM DNS record een TXT type record. De “v=DKIM1” geeft aan dat dit het DKIM record is voor het domein. Er kunnen meerdere DKIM records in DNS bestaan omdat voor ieder geautoriseerd domein een DKIM record toegevoegd moet worden.
De “k” geeft aan om welk type encryptie het gaat en de “p” is de publieke sleutel.
Een voorbeeld DKIM e-mail signature ziet er als volgt uit:
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; d=voorbeeld.nl; c=relaxed/simple; b=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQE45tYlPP89uutEPtr33+vM7tN6A5nYAqflz GbVXayk6stdusH/PgM+mDlQNdfqWXpzULd1ahNm1FtkGwaf/9jFMUKT51T8dK9rbC2yCcPk5aNA /Gs7597eJlGsNzhztM295HwUYPEO2Rx9JE5ps+M5K27xB5lXgdVqp2907AnSHjk61ri5m2XYRbQ u7JUN1Wte8DMsqwPKJ3xSfOg+IvNn+TrbVV4322PDFwqvbprG; |
Alle tags worden afgesloten met een semicolon (;). Er zijn nog meer veel voorkomende tags die gebruikt kunnen worden:
v
De “v” tag geeft het DKIM versienummer aan
a
De “a” tag geeft aan welk signing algoritme gebruikt is. Meestal is dit “rsa-sha256”
h
De “h” tag geeft aan in welke volgorde de header velden gehashed moeten worden. De velden worden binnen de “h” tag gescheiden met een dubbele punt (:). Een voorbeeld is: “from:to:subject:date:keywords:keywords”
d
De “d” tag geeft aan welk domein de e-mail getekend (signing) moet hebben
q
De “q” tag geeft aan welk type record er gebruikt is. Dit is meestal gewoon “dns/txt”
s
De “s” tag is het type selector
c
De “c” tag is de standaardisatie van de header en body algoritmes
b
De “b” tag is de digitale handtekening van de headers en body
bh
De “bh” tag geeft de “body hash” weer
t
De “t” tag geeft de creatiedatum van het record aan
x
De “x” tag is de verloopdatum van het record
DKIM werkt als volgt:
1. Tijdens het versturen van de e-mail wordt er een DKIM signature toegevoegd aan de e-mail. Om dit te doen moeten de MTA (Message Transfer Agents) van de mailserver geconfigureerd worden zodat ze DKIM ondersteunen en moet de privé sleutel aanwezig zijn om de DKIM signature te maken. Om de DKIM signature te maken wordt eerst body gehashed en vervolgens de headers in de opgegeven volgorde van de “h” tag (incl. de digitale handtekening zelf die leeg moet zijn en dus een lege string genereerd). De hashed body (bh) en de hashed header worden digitaal ondertekend met de privé sleutel. Dit genereerd de “b” tag.
2. De e-mail wordt ontvangen door een mailserver die DKIM ondersteund (zo niet dan wordt DKIM niet gebruikt). De e-mailserver haalt de juiste publieke sleutel op via het DNS record. Als de sleutels matchen dan is het bericht geautoriseerd en anders niet. De e-mailserver maakt een nieuwe header aan in de e-mail genaamd “Authentication-Results”. Spamfilters kunnen nu de spamscore van het bericht bijstellen afhankelijk van de “Authentication-Results”. De resultaten kunnen zowel, PASS, FAIL en NEUTRAL (niet gecontroleerd) zijn.
DMARC – Domain-based Message Authentication, Reporting and Conformance
De nieuwste telg in de spam-fighting familie is DMARC. DMARC bestaat sinds 2012 en werkt samen met SPF en DKIM om hun tekortkomingen aan te vullen. DKIM is een e-mail validatie systeem welke de authenticiteit (is er onderweg niet gerommeld met het bericht) en de autorisatie (is het bericht echt van de afzender) controleert en hierop acties onderneemt. DKIM wordt ondersteund door ’s werelds grootste internetorganisaties zoals Google, Microsoft, Facebook etc. en beschermt nu al meer dan de helft van alle e-mailboxen.
DMARC is een policy die toegevoegd wordt aan je DNS. In deze policy vertel je of je SPF en/of DKIM gebruikt en wat er met de e-mail moet gebeuren als deze niet door deze testen komen. Met DMARC ben je niet meer afhankelijk van anti-spam filters en spam scores maar kun je zelf meteen bepalen wat ermee moet gebeuren.
Omdat DMARC een krachtige tool is waardoor bij een foute configuratie goede mails gaat verliezen is het aan te raden DMARC te starten in monitor mode. Nadat je DMARC geactiveerd hebt krijg je automatisch XML rapporten die een overzicht geven van de effectiviteit van je huidige DMARC policy.
Een DMARC DNS record is ook een TXT type records. Om een DMARC record te genereren kun je de deze tool gebruiken.
Een voorbeeld DMARC DNS record ziet er als volgt uit:
v=DMARC1; p=quarantine; pct=50; rua=mailto:dmarcreports@voorbeeld.nl; ruf=mailto: dmarcforensicreports@voorbeeld.nl |
Net als bij DKIM worden alle tags (behalve de laatste) afgesloten met een semicolon. De tags zijn als volgt:
v
De “v” tag staat voor “version”. Door je TXT record hiermee te starten geef je eveneens aan dat dit het DKIM record is voor het domein. Je moet dus met de DKIM version je record beginnen.
p
De “p” tag staat voor de policy die gebruikt moet worden. Dus wat er moet gebeuren als de SPF en DKIM testen falen. “none” betekend dat de e-mail doorgestuurd wordt (dit is de monitor modus), “quarantine” betekend dat de berichten in quarantaine gezet moeten worden (junk folder) en “reject” betekend dat het bericht verwijderd moet worden.
sp
De “sp” tag staat voor de policy die gebruikt moet worden op de sub domeinen. We hebben hier dezelfde opties als voor de “p” tag.
pct
De “pct” tag staat voor “percentage”. En geeft het percentage aan hoe vaak de policy toegepast moet worden. “pct=100; p=reject;” zal dus 100% van alle e-mails die falen voor de SPF en/of DKIM controle verwijderen.
rua
De “rua” tag geeft de e-mailadressen aan waar de XML reports naartoe gestuurd moeten worden.
ri
De “rua” tag geeft de interval aan waarvan XML reports verstuurd moeten worden.
ruf
De “ruf” tag geeft de e-mailadressen aan waar de forensische XML reports naartoe gestuurd moeten worden.
aspf
De “aspf” tag staat voor de SPF alignment mode. Deze kan “relaxed” (r) en “strict” (s) zijn. “aspf: s;” staat dus voor strict mode. Dit betekend dat het SPF record 100% moet matchen. Bij de “relaxed” modes ook gedeeltelijke overeenkomsten zijn toegestaan.
adkim
De “adkim” tag staat voor de DKIM alignment mode. Deze kan “relaxed” (r) en “strict” (s) zijn. “adkim: s;” staat dus voor strict mode. Dit betekend dat het DKIM record 100% moet matchen. Bij de “relaxed” modes ook gedeeltelijke overeenkomsten zijn toegestaan.
Bij een DMARC policy zijn de “v” en “p” tags vereist. Alle overige tags zijn optioneel. Om DMARC gecontroleerd te implementeren zou je het volgende implementatie scenario kunnen gebruiken:
1. Alles controleren
2. 1% in quarantaine plaatsen
3. 5% in quarantaine plaatsen
4. 10% in quarantaine plaatsen
5. 25% in quarantaine plaatsen
6. 50% in quarantaine plaatsen
7. Alles in quarantaine plaatsen
8. 25% afwijzen
9. 50% afwijzen
10. Alles afwijzen
Testen:
Zoals hierboven vermeld is het goed om je SPF, DKIM en DMARC records te testen. Als hulpmiddel zijn er online tools verkrijgbaar om dit voor je te doen.
Omdat DNS keys publieke sleutels zijn en door iedereen bekeken kunnen worden is er een potentieel gevaar dat iemand je sleutels gaat misbruiken en manipuleren. Om je DNS records te beschermen kun je gebruik maken van een methode die DNSSEC (Domain Name System Security Extensions) heet.
Conclusie:
De SPF, DKIM en DMARC records geven ons prachtige handvaten maar kennen allemaal hun eigen problemen en zwakheden. Het advies is absoluut om deze mechanismes in te zetten om e-mail spoofing te voorkomen. Een mooi gezegde is dan ook:
Laten we de anti-spam tools gebruiken die we voorhanden hebben en niet de anti-spam tools welke we graag gewild hadden!