Le Spoofing : Une menace quotidienne!

Le spoofing (l’usurpation d’identité) est un défi auquel les entreprises doivent faire face de plus en plus. Afin de réduire ce phénomène, plusieurs protocoles et méthodes existent et continuent d’évoluer car les techniques de spam sont en constante évolution.
Les méthodes utilisées pour se protéger contre les spams sont les suivantes:

  • Le SPF (Sender Policy Framework)
  • Le DKIM (DomainKeys Identified Mail) et
  • Le DMARC (Domain-based Message Authentication, Reporting and Conformance)

Le SPF a été présenté dans article de Paul Cunningham que je vous invite à lire ici. Je ne présenterai donc plus le SPF en détail. Cet article est dédié à DKIM.

DKIM
Grace au DKIM, le serveur d’envoi insère une signature numérique dans l'en-tête du message que le serveur de réception doit décrypter afin d’authentifier les sources d’envoi (s’il sait le faire). Il s’agit d’un mécanisme de chiffrement qui permet non seulement d’améliorer la réputation de votre domaine SMTP sur internet mais aussi de limiter l’usurpation de votre identité.

Source : Microsoft

Comment ça marche :
Le SPF (Sender Policy Framework) permet de définir une ou plusieurs adresses IP à partir desquelles les mails de tout domaine peuvent être envoyés. DKIM est nettement plus complexe que SPF en fournissant de manière significative plus de fonctionnalités.
Le DKIM utilise le DNS pour publier une clé publique qui sera utilisée par les serveurs de réception pour valider la signature le chiffrement dans les entêtes de mail. À l’envoi d’un mail, le serveur d'envoi calcule une signature cryptographique qui chiffre le message en utilisant une clé privée. La signature est alors placée dans un en-tête de mail. À la réception, la signature du mail est validée à l'aide de la clé publique. Lorsque les serveurs de réception ne sont pas compatibles DKIM, ils ne pourront pas interpreter ou verifier la signature dans les entêtes de mail, ils recevront alors tous les mails même les spams.

Les enregistrements DNS pour DKIM

Il existe essentiellement deux types d'enregistrements DNS utilisés par DKIM : Les Policy records et les Public key records.
Voici un exemple des types de DNS pour DKIM:

  • Les Policy records

Un nom de domaine utilisant DKIM doit avoir une seule stratégie d’enregistrement (Policy Record) configurée. Il s’agit d’un enregistrement TXT dont le nom contient la chaine de caractères "_domainkey" suivie du nom de domaine.

Par exemple, pour le domaine herydis.com, le nom de la Policy record sera  "_domainkey.herydis.com" . La valeur de cet enregistrement sera au moins ‘’o = - ‘’ ou ‘’o = ~ ’’. 

‘’o = -‘’ signifie tous les e-mails provenant de ce domaine sont signés 
‘’o =~‘’ signifie certains e-mails provenant de ce domaine sont signés. Ce paramètres peut être combiné en mode test pour une mise en place progressive de DKIM.

D’autres paramètres supplémentaires peuvent être ajoutés cette valeur comme (t) pour le mode test, (r) pour adresse e-mail responsable et (n) pour les notes. 
Le serveur de réception vérifie la Policy Record pour déterminer si le domaine SMTP utilise DKIM. Le cas échéant, le mail est étiqueté comme non-signé.

  • Les Public key records

Il s’agit de l’enregistrement DNS pour la clé publique DKIM. Le nom de cet enregistrement DNS doit respecter la nomenclature suivante : selector._domainkey.domaine.com.
Le sélecteur (selector) : Le sélecteur est une chaîne de caractère arbitraire ajoutée au nom de domaine, pour identifier la clé publique DKIM. Il fait partie de la signature DKIM et est inséré dans le champ DKIM-Signature des entêtes de mail. Le sélecteur permet de définir plusieurs clés publiques par domaine SMTP d’envoi. 
Un exemple de nom d’enregistrement de public key peut être : paris._domainkey.herydis.com.
La valeur doit contenir plusieurs tags séparés par des ( ; ) tels que définis dans la RFC 4871 Section 3.6.1. 

v= (version)  : Optionnel, définit le numéro de version DKIM. La valeur par défaut est DKIM1 car à ce jour il n’existe qu’une version. Exemple : v = DKIM1; .

g= (granularité)  : Optionnel, permet de définir les adresses/utilisateurs locaux concernés par le chiffrement DKIM. Vous devez définir que le préfixe des adresses concernées. La valeur par défaut est ( * ). Exemples : 

      Pour une seule adresse mail toto@herydis.com, définirg=toto;  

      Pour plusieurs adresses mail contenant le mot -commerce, définirg=*-commerce;  

      La valeur par défaut correspond àg=*;  
h= (Algorithme de hash)  : Optionnel, contient un ou plusieurs algorithmes de hachage séparés par ( : ). Les valeurs autorisées sont Sha1 et Sha256. La valeur par défaut est h=*;

k= (key type)  : Optionnel, définit le type de clé publique utilisé. La valeur par défaut est k = rsa; . C’est la seule valeur supportée à ce jour. 

p= (public key)  : Définit la clé publique pour l'algorithme défini par le tag (k = ) dont la clé privée est utilisée pour signer numériquement les mails. 

Exemples de clé publiques : 

Au format ligne unique :paris._domainkey IN TXT "v=DKIM1;p=B7Ijfhepaetnq... AcdEZOIziLdzrr"Au format multi-ligneparis._domainkey IN TXT ("v=DKIM1""p= B7Ijfhepaetnq... ""zereDSJKZPURUD... ""klzepoqDJKLRER... "" AcdEZOIziLdzrr ")

NB : Si la clé utilisée est révoquée, vous devez définir une valeur null pour ce tag (p=; ).
n= (notes) : Optionnel, avec ce tag, vous pouvez définir un commentaire sur votre clé publique. 

s= (service type) : Optionnel, il définit le type de service auquel DKIM est appliqué. À cette époque, la seule valeur valide est email mais la valeur par défaut est s = * (All). 

t= (mode)  : Optionnel, par défaut, ce flag n’a aucun paramètre défini. Il peut être accompagné des paramètres (t) et (s). 
(t) : Indique le mode test.

(s) : indique que les sous-domaines ne sont pas pris en compte pour la clé publique DKIM.