Centrale Marseille et Geoffroy Desvernay

présentent

DMARC

MA TUER !!!

de quoi on parle là ?

Des suites de la RFC 821

En particulier des problème d'authentification des messages

Objectif

Protéger son/ses domaines du phishing

Soigner la "réputation" du/des domaine (vs anti-spams)

Savoir déboguer

Remember…

1980-1981
RFC 772, RFC 780(Mail Transfer Protocol), RFC 788…
1982
RFC 821 (SIMPLE Mail Transfer Protocol)
2001
… 19 ANS plus tard, la RFC 2821 n'ajoute rien

«It consolidates, updates and clarifies, but doesn't add new or change existing functionality»

#CaCfait

2006
SPFv1 est publié dans le RFC 4408 (expérimental)
2008
RFC 5321

It covers the SMTP extension mechanisms and best practices for the contemporary Internet…

(ESMTP)
2009
DKIM apparait (mais ne sera pas utilisable avant…)
2011
DKIM peut fonctionner avec des mailing-listes (en théorie du moins)
2014
SPF n'est plus experimental (RFC 7208)

Cool ! on va pouvoir authentifier un mail… mais on ne peut pas le rejeter s'il ne semble pas authentique !!!

DMARC

Défini dans le RFC 7489 en 2015 (dernier errata en 2019)

DMARC c'est bien

DMARC c'est compliqué (un peu…)

Des oubliés

  • SenderID (by Micro$oft),
  • ADSP (extension à DKIM abandonnée en 2013)

Euh… comment ca marche le mail déjà ?

C'est très simple :)

Ca peut l'être moins

Bon… en vrai c'est plus proche de ça

trop simple.

…on peut faire mieux :)

Sender Policy Framework

Authentification des serveurs pour un domaine

  • Il utilise le domaine de l'enveloppe (MAIL FROM)
  • Un serveur est identifié par IP
  • tout est dans le DNS

A quoi ça ressemble ?

drill txt samaison.fr
;; ANSWER SECTION:
samaison.fr. 3600 IN TXT "v=spf1 mx:samaison.fr -all"

DomainKeys Identified Mail

Authentification des serveurs pour un domaine

Non, c'est pas le même slide

  • Utilise le From: du message (entêtes)
  • Le serveur est identifié par clé publique
  • tout est dans le DNS

A quoi ça ressemble ?

To: n'importe qui <dgeo@sonboulot.fr>
From: geoffroy desvernay <dgeo@samaison.fr>
Subject: test DMARC
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=samaison.fr; s=smtp1;
 t=1539355343; bh=2KE9GekSHDd9++VPGVnaYpeBReMiofL+vlicggpMoLU=;
 h=To:From:Subject:Date;
 b=os9r0qpKstFBEA2SLNPgvdwWDIH3M5Pfd3TyVna/eD2XVvtO6pvfa1kgfVEn7xJnR
  ZzheIckUZZ4Y2WVrN8Ky6FMI5D+hHIZD1HSJlWttXWvo3a84+m7R7JR4S6PGvVa8b7
  Z714gYGBbCTwumne87Qezu3LG6vQcQ3E0Jmb0OMZ+Tq4tVBd+ifLhglmxWqHgfVQ2b
  LA7iHz9XqToLhnAVBdaGYI/2Qc6IOM+EvBm+3TurMGEIvpCkA/830yJh6RdF3waMHl
  gJe7IipPVrbx3eBclzBQAjBsFn30HwuudBxwXhOfW340uJ7jqc7TzQdGZZyzB03Khq
  eVq4o1VPfYW5w==

Comment on trouve la clé publique pour vérifier la signature ?

Dans le DNS, mais on a besoin du mail

drill txt smtp1._domainkey.samaison.fr
;; ANSWER SECTION:
smtp1._domainkey.samaison.fr. 3600 IN  TXT "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwQ5rIWHm4KuF68T4ryZk8UJgXNYeknlXwx6FIa4BJG/fRWKrScoqCLdrH1C8vyQvSxo0TSTaNblcoY5HIXNbzZW0WsCsidBwPyUif/7tNMFU3g+LnWK0m8iSgevblJSFN00XbqiBtWNcZZtO8c9g7upGa6Ev0XWtAco+BawY5eWbBQPZDL42QcFNiksvc+YrE2QuqiW3DrtuJH" "Uv+xPHv0tsKpmAzJ/vHRGSNVyDUqWQ7JPrrcoflOyZldaGzwNIOg99PB6ESrQa2LAJsyT7bn8jCaMyEYmRNwuO4EjD5U0Cltk5IUIQ09Ih8W+vVaxnDbmUbM/YJQHCJM1xpU+moQIDAQAB"

Faire suivre un mail signé et le garder valide (signature DKIM): ARC

Authenticated Received Chain

DRAFT IETF

Chaque transitaire re-signe (efficace contre le phishing)

DMARC… Un dessin ?

Domain-based Message Authentication, Reporting & Conformance

Avec SPF et DKIM, on a pu donner au reste du monde (via le DNS) le moyen de valider des choses dans les mails qui semble provenir de notre/nos domaines.

Comment leur dire quoi faire des mails qui ne sont pas conformes, par exemple…

  • Les redirections (SRS)
  • Les mailing-lists (SRS, ARC)
  • Le super machin as-a-service (?…)
  • Qui a dit aïoti ? On dit aïoli ici :)

Et celui-là, c'est encore dans le DNS…

Ils ont tergiversé un moment avant de mettre DNSSEC en "SHOULD" plutôt qu'en "MUST"…

drill txt _dmarc.samaison.fr
;; ANSWER SECTION:
_dmarc.samaison.fr.       3600    IN      TXT     "v=DMARC1;p=quarantine;rua=mailto:dmarc+aggr@samaison.fr;ruf=mailto:dmarc+forensic@samaison.fr;fo=1;adkim=s;aspf=r;pct=100"

p={quarantine,reject,none}

On définit ce qu'il faut faire des mails qui ne suivent pas les règles définies

sp=

pareil, pour les sous-domaines

ALIGNEMENT: {adkim,aspf}={r,s}

On précise l'alignement des adresses "FROM" (entre enveloppe et entêtes)

  • ADKIM cherche le domaine du From: des entêtes dans la signature dkim
  • ASPF compare l'entête From: avec le FROM: SMTP (enveloppe) (peut être celle du Return-Path:)
  • r=relaxed, s=strict, default=r
  • relaxed: autorise un domaine parent du From: à signer DKIM

rua=unmail@ouonveut.fr (¡¡¡ killer-feature !!!)

Ce mail recevra des rapports (au format XML dans des .zip ou .tar.gz) de pleins de serveurs concernant les mails utilisant notre domaine

fo={0,1,d,s}

On précise dans quels cas on veut des rapports

Ne pas hésiter à aller à la source, y'a beaucoup de docs… comme sur internet ;-)

Boite à outils

DKIM
opendkim(milter) - signe et/ou vérifie
DMARC
opendmarc(milter) - vérifie + remplit une BDD pour émettre der rapports
SPF
? (amavisd-milter here)
SRS
? (postsrsd en émission vers internet)
ARC
sympa le fait déjà (via Mail::DKIM) ;)

À vous ?

¿ Quelqu'un a vu mon verre ?

CC0