Réputation des URL et empreintes de contenu
Comment les filtres de contenu modernes jugent le corps des messages : listes de réputation des URL et des domaines (zones SURBL, mécanique des requêtes, traitement des redirecteurs) et empreintes floues (shingles de rspamd, détection de campagnes quasi identiques), et ce que cela implique pour les domaines de liens et les modèles des expéditeurs.
Référence13 min de lecture
À qui cela s’adresse Expéditeurs, Opérateurs ESP
S’applique aux expéditeurs, quelle que soit leur plateforme
SommaireSur cette page : 4 sections
Un message peut être entièrement authentifié et envoyé depuis une adresse IP propre, et être quand même filtré à cause de ce qu’il contient. La réputation des adresses IP et des domaines d’envoi (listes de blocage) juge qui envoie. Les filtres de contenu ajoutent deux contrôles qui jugent ce qui est envoyé : la réputation de chaque domaine lié dans le corps du message, et une empreinte floue du message, comparée aux campagnes de spam déjà vues.
Ces deux contrôles fonctionnent indépendamment de l’authentification et de la réputation d’IP propres à l’expéditeur. Un message qui renvoie vers un domaine inscrit sur une liste de blocage, ou dont l’empreinte correspond à une campagne connue, est filtré quoi qu’il en soit.
Partie 1 : réputation des URL et des domaines (SURBL)
SURBL est l’exemple type de la DNSBL d’URI. Au lieu d’inscrire des adresses IP d’envoi, elle inscrit des domaines (et quelques adresses IP) qui apparaissent dans le corps d’emails non sollicités ou malveillants. URIBL.com et les listes Spamhaus DBL et HBL (voir Listes de blocage et Spamhaus) fonctionnent de la même manière. Les filtres antispam extraient chaque URL d’un message, réduisent chacune à un domaine et interrogent ces zones pour ce domaine. Une correspondance ajoute généralement un score très élevé ou bloque le message purement et simplement.
Zones des listes et valeurs de retour
Les données publiques sont servies dans une seule zone combinée à valeurs en masque de bits, multi.surbl.org, qui réunit ces jeux de données :
| Liste | Signification | Valeur du bit (dernier octet) |
|---|---|---|
| DM | Domaines d’adresses email jetables | 4 |
| PH | Sites de phishing | 8 |
| MW | Sites de logiciels malveillants | 16 |
| CT | Domaines de suivi des clics (click trackers) | 32 |
| ABUSE | Sites d’abus ou de spam en général | 64 |
| CR | Sites piratés (sites légitimes compromis) | 128 |
- Les réponses sont des enregistrements A de la forme 127.0.0.X. Un domaine inscrit sur plusieurs listes renvoie la somme de leurs bits. Par exemple, 127.0.0.80 signifie MW plus ABUSE (16 plus 64).
- NXDOMAIN signifie que le domaine n’est pas inscrit, et un enregistrement A qu’il l’est. SURBL indique que l’enregistrement A est « la réponse fortement privilégiée pour un usage automatisé ».
- Le TTL par défaut est de 60 secondes sur la zone multi en production, et les données elles-mêmes sont mises à jour environ toutes les 30–40 secondes.
- Une réponse 127.0.0.1 n’est pas une inscription. Elle signale que l’accès de l’émetteur de la requête est bloqué à cause d’un volume excessif sur les miroirs publics, et qu’il doit s’inscrire au Sponsored Data Service de SURBL.
- Au-delà de ses listes de domaines, SURBL propose aussi HASHBL, des requêtes de réputation fondées sur des empreintes, dans ces catégories : abuse, cracked, malware, phish, email, crypto, phone.
- Pour les opérateurs de filtres, les données sont livrées en DNS (Private Query Service), en rsync (recommandé pour le filtrage d’emails à fort volume), en RPZ (filtrage web), par API REST, en CSV et en RTF (flux JSON en temps réel).
L’existence même de la liste CT (click tracker) compte : les domaines de suivi et de redirection sont une catégorie d’inscription à part entière, et non un cas marginal.
Comment les filtres extraient et interrogent les URL (consignes d’implémentation de SURBL)
Les consignes publiées par SURBL à l’intention des développeurs de filtres décrivent ce que font réellement les filtres de contenu en production :
- Extraire chaque URI du message, en résolvant complètement les redirections jusqu’au domaine cible final. Autrement dit, les filtres doivent suivre les redirecteurs et les raccourcisseurs jusqu’à la destination et vérifier ce domaine, et pas seulement le lien visible.
- Réduire les URI à des domaines ou sous-domaines. Avec la zone multi à caractères génériques, les sous-domaines d’un domaine inscrit correspondent automatiquement, donc les filtres n’ont pas besoin de normaliser au niveau du domaine enregistré.
- Ne pas résoudre les domaines extraits dans le DNS. C’est la chaîne du domaine elle-même qui sert de clé de recherche.
- Interroger en ajoutant le domaine devant la zone (
domainundertest.com.multi.surbl.org) et en faisant une recherche d’enregistrement A. - Les URL à adresse IP numérique (
http://10.20.30.40/) sont vérifiées avec les octets inversés, comme le font les DNSBL :40.30.20.10.multi.surbl.org(octets en base 10). - Tenir une liste blanche locale de domaines connus et à fort trafic (yahoo.com, w3.org, google.com) pour éviter des requêtes inutiles.
- Vérifier que les réponses se situent dans 127/8. Une réponse hors de 127.0.0.0/8 indique un résolveur DNS qui utilise des caractères génériques ou des redirections et corrompt les résultats ; utilisez un serveur de noms cache local.
SURBL interdit explicitement deux pratiques, car toutes deux provoquent des faux positifs avec l’hébergement mutualisé : ne pas utiliser les données d’URI du corps des messages pour vérifier les adresses IP des expéditeurs, et ne pas résoudre les domaines inscrits en adresses IP pour inscrire ensuite ces adresses IP sur une liste de blocage.
Ce qu’implique ce mécanisme
- L’inscription d’un seul domaine touche chaque message qui renvoie vers lui, quel que soit l’expéditeur et quelle que soit l’adresse IP. Pour un ESP, l’inscription d’un domaine partagé sur une DNSBL d’URI est un incident qui touche de nombreux clients.
- Comme les filtres résolvent les redirections, cacher une mauvaise destination derrière un raccourcisseur ou votre propre domaine de redirection n’échappe pas au contrôle. Cela expose au contraire votre domaine de redirection à une inscription lorsque les destinations qu’il masque font l’objet d’abus. C’est exactement ce que capte la liste CT de SURBL.
- Comme les sous-domaines d’un domaine inscrit correspondent dans la zone à caractères génériques, une inscription au niveau du domaine enregistré fait tomber tous les sous-domaines clients qui en dépendent.
Partie 2 : empreintes de contenu par hachage flou (rspamd)
Le hachage flou (fuzzy hashing) détecte qu’un message est une quasi-copie d’un spam déjà signalé, même après que le spammeur l’a modifié. Le module fuzzy_check et le worker fuzzy_storage de rspamd en sont une implémentation ouverte entièrement documentée. Les systèmes commerciaux d’empreintes, et les réseaux d’empreintes partagées comme Razor, Pyzor et DCC, suivent les mêmes principes. rspamd fournit aussi un flux d’empreintes floues public et partagé que de nombreuses installations interrogent par défaut, si bien qu’une empreinte apprise n’importe où peut compter dans les scores partout.
Comment l’empreinte est construite : les shingles
- Le texte du message est découpé en mots, puis en séquences de trois mots qui se chevauchent (trigrammes), appelées « shingles ».
- Chaque shingle est haché avec plusieurs fonctions de hachage (32 empreintes par shingle), et l’empreinte du message est l’ensemble de ces empreintes. (rspamd cite les travaux de Broder sur la ressemblance et le shingling comme fondement.)
- La comparaison est probabiliste. La similarité est calculée à partir du nombre et de la position des empreintes de shingles communes au message candidat et aux empreintes stockées, ce qui donne un pourcentage de correspondance plutôt qu’une égalité stricte.
- Algorithmes d’empreinte pour le texte :
mumhash(la valeur par défaut actuelle, et recommandée),xxhash,fasthash,siphash(ancien). Changer d’algorithme invalide toutes les données stockées. - Les images et les pièces jointes sont comparées à l’identique, et non de façon floue, au moyen d’empreintes blake2b de leur contenu. Un seul octet modifié rompt la correspondance. C’est pourquoi les campagnes de spam par images régénèrent leurs images à chaque envoi, et pourquoi les filtres combinent par ailleurs les empreintes exactes avec des empreintes perceptuelles d’images.
Principales valeurs par défaut de fuzzy_check : min_bytes = 1k (la taille minimale d’une pièce jointe ou d’une image prise en compte), min_height/min_width = 32 px pour les images, min_length = 0 (toutes les parties texte sont vérifiées), text_multiplier = 4.0, timeout = 2s, retransmits = 1. mime_types sélectionne les types de pièces jointes hachés (par exemple application/*), et short_text_direct_hash hache à l’identique les textes trop courts pour le shingling.
Empreintes floues de la structure HTML (rspamd v3.14+)
Depuis la v3.14.0, rspamd peut aussi calculer l’empreinte de la structure du DOM, indépendamment du texte. Il utilise des jetons de la forme tagname[.class][@domain] (par exemple a.button@example.com). Seule la première classe CSS est utilisée, les classes de suivi connues sont filtrées, et les domaines des liens sont normalisés en eTLD+1.
L’empreinte combinée est pondérée ainsi : shingles de structure 50 %, domaines des appels à l’action (CTA) 30 %, ensemble des domaines des liens 15 %, et décomptes de caractéristiques (balises et liens) 5 %. Pour éviter de correspondre à des modèles génériques, elle exige au moins min_html_tags (10 par défaut ; les configurations d’exemple utilisent 15), au moins 2 liens et une profondeur de DOM d’au moins 3.
La pondération des domaines de CTA vise le phishing. Un message de phishing qui clone parfaitement le modèle d’une marque obtient une similarité de structure d’environ 0,9, mais avec des domaines de CTA différents, la similarité combinée s’effondre (l’exemple documenté : une similarité de structure de 0,9 avec des domaines de CTA non concordants donne une similarité combinée de 0,45). À l’inverse, une campagne de spam qui garde son domaine de CTA tout en remaniant son texte correspond toujours.
Pourquoi les modifications et le bourrage de jetons ne permettent pas d’y échapper
L’empreinte est un grand ensemble d’empreintes de trigrammes de mots qui se chevauchent, comparées de façon probabiliste. Par conséquent :
- Les petites modifications (mots échangés, noms insérés, paragraphes réordonnés) ne changent que les shingles qui chevauchent la modification. La plupart des shingles correspondent toujours, et la similarité reste au-dessus du seuil.
- Le bourrage de jetons (ajout de mots aléatoires, de texte masqué ou de chaînes destinées à casser les empreintes) ajoute des shingles mais ne supprime pas ceux qui correspondent. Il ne dilue que légèrement le ratio de similarité, tandis que le nombre absolu de shingles connus comme mauvais continue de correspondre. Pour mettre en échec la correspondance par shingles, il faut réécrire pratiquement tout le corps du message, et même alors, l’empreinte de la structure HTML (v3.14+) correspond encore au modèle et au domaine de CTA inchangés.
- Les champs de fusion propres à chaque destinataire, les URL de désabonnement et les jetons de suivi laissent aussi intacte la plupart des shingles communs. C’est exactement pourquoi une campagne signalée par ses premiers destinataires est reconnue dans le reste de l’envoi.
Poids, seuils et score progressif
Les empreintes stockées portent un poids qui augmente à mesure que des sources (signalements d’utilisateurs, adresses pièges touchées, pots de miel) signalent de nouveau la même empreinte. Le score est volontairement progressif, et non binaire :
- Chaque flag ou règle a un
max_score(un seuil sur le poids de l’empreinte). En dessous du seuil, le symbole vaut 0. Le score monte ensuite du seuil jusqu’à 2× le seuil, selon une courbe en tangente hyperbolique : ≈50 % du poids de la métrique au seuil, et le score complet à 2×. Par exemple, avec un poids de signalement de 1 et un seuil de 20, une empreinte doit recevoir ≥ 20 plaintes indépendantes avant de compter. - Les empreintes sont organisées par flags numériques qui associent des catégories à des symboles. La disposition conventionnelle : le flag 1 correspond au spam confirmé (
FUZZY_DENIED, max_score 20), le flag 2 au spam probable (FUZZY_PROB, max_score 10), et le flag 3 au contenu légitime placé sur liste blanche (FUZZY_WHITE, max_score 2). Les numéros de flag doivent être uniques parmi les règles en écriture, etskip_hashesplace des empreintes précises sur liste blanche. - Apprentissage :
rspamc -f <flag> -w <weight> fuzzy_add <message>(ou-S FUZZY_DENIED) ajoute une empreinte, etfuzzy_delen supprime une.read_only = truerend une règle interrogeable uniquement, et une condition d’apprentissage facultative écrite en Lua peut bloquer l’apprentissage ou changer son flag.
Côté exploitation, le worker fuzzy_storage :
- a une architecture à écrivain unique, avec une file de mises à jour synchronisée sur disque tous les
sync = 1min; - stocke les données dans SQLite (par défaut) ou Redis ;
- fait expirer les empreintes via
expire(90d est la valeur initiale recommandée, pour que les anciennes empreintes disparaissent à mesure que les campagnes meurent) ; - nécessite environ 400k empreintes par 100 Mo de RAM (1,5M ≈ 500 Mo) ;
- n’accepte l’apprentissage que depuis les adresses IP
allow_update; - prend en charge un chiffrement facultatif du transport en Curve25519 (
encrypted_only = true), et une réplication maître-esclave (TCP 11335) avec traduction des flags pour chaque esclave.
Conséquences pour les expéditeurs
Ensemble, les deux mécanismes aboutissent à des règles concrètes pour quiconque exploite un ESP ou un programme d’envoi :
- Chaque domaine présent dans le corps porte une réputation : domaines des liens, domaines d’hébergement des images, domaines de redirection et de suivi des clics, et même les domaines écrits en texte brut. Leur réputation est évaluée séparément de celle du domaine From et de l’adresse IP d’envoi.
- Les clients qui partagent un domaine de suivi partagent son sort. Un domaine de suivi des clics ou d’habillage des liens utilisé dans tout un ESP réunit la réputation des destinations de tous les clients. Un seul client abusif peut le faire inscrire sur une DNSBL d’URI (la catégorie CT de SURBL existe exactement pour cela), ce qui filtre d’un coup les emails de tous les clients. Les parades sont des sous-domaines de suivi propres à chaque client sur des domaines qui appartiennent au client (via un CNAME), une surveillance proactive des domaines de suivi sur les DNSBL d’URI, et un contrôle des URL de destination auprès de SURBL, d’URIBL et de la DBL au moment de l’envoi.
- Les raccourcisseurs publics font plus de mal que de bien. Les filtres les résolvent de toute façon jusqu’à la destination, et le domaine du raccourcisseur porte la réputation accumulée de tous ceux qui en ont abusé. Voir Contenu et design pour la délivrabilité.
- Garder des domaines de liens propres est une tâche de surveillance continue, et non une vérification ponctuelle. Interrogez multi.surbl.org (et la Spamhaus DBL) sur vos domaines de suivi, d’images et de pages de destination aussi souvent que vous vérifiez les listes de blocage d’IP, et vérifiez les URL de chaque campagne sortante avant de l’envoyer.
- Les empreintes font peser les plaintes sur le reste de l’envoi. Les quelques milliers de premiers destinataires qui signalent une campagne créent son empreinte floue et lui ajoutent du poids, et le reste du même envoi y correspond ensuite. Envoyer par segments avec des pauses (d’abord aux destinataires les plus engagés, en surveillant les premiers signaux de plaintes, puis en continuant) exploite directement la fenêtre de score entre le seuil et 2× le seuil.
- Modifier un modèle ne remet pas à zéro la réputation de son contenu. De petites modifications du texte, la rotation des lignes d’objet ou la personnalisation des champs de fusion laissent intacte l’empreinte par shingles (ainsi que l’empreinte de la structure HTML et des domaines de CTA). La seule vraie remise à zéro est un contenu réellement différent, envoyé à un public qui le souhaite. La réputation du contenu est un symptôme de la qualité de la liste, et non un problème à régler en travaillant le contenu.
- Des domaines de CTA constants jouent dans les deux sens. Garder vos liens sur vos propres domaines stables et bien réputés aide l’empreinte de structure à vous distinguer des clones de phishing de votre modèle. Disperser les liens sur des domaines jetables ressemble à une tentative de contournement.
Voir aussi
- Listes de blocage et Spamhaus, sur le fonctionnement des DNSBL d’adresses IP et de domaines, dont la Spamhaus DBL et HBL, les autres grands jeux de données de réputation des domaines
- Contenu et design pour la délivrabilité, avec les règles pratiques de contenu (raccourcisseurs, images, liens) que ces mécanismes expliquent
- Surveillance de la réputation, sur la place des vérifications des domaines de suivi et de liens sur les DNSBL d’URI dans un programme de surveillance
Vérifier votre propre enregistrement
Le diagnostic gratuit lit ce que votre domaine publie dans le DNS.
Dans ce thème
- Glossaire de la délivrabilité
- Typologie des abus par email
- Listes de blocage DNS et zones Spamhaus
- Inscriptions Spamhaus en détail : politiques SBL, CSS, PBL et DBL, et retrait de liste