Aller au contenu
EuroVPSEuroVPS

IP d'origine derrière un CDN : comment elle fuit et comment la verrouiller

Un scan réussi de votre nom d'hôte teste le edge du CDN ; l'origine est souvent découvrable depuis le DNS du domaine lui-même, alors trouvez-la, scannez-la et verrouillez-la sur le CDN.

Par EuroVPS EngineeringLa salle des machines

6 min de lecture
Dans cet article 5 sections
En bref
  • Un scan du nom d'hôte public passe par le CDN et rend compte du CDN. Il ne dit rien du serveur qui se trouve derrière.
  • L'adresse de l'origine est généralement publiée par le domaine lui-même : l'enregistrement SPF, les hôtes MX, un sous-domaine non proxifié, un certificat dans les journaux de transparence, un en-tête Received sur un e-mail sortant.
  • Trouvez-la comme le ferait un attaquant, épinglez-la, scannez le serveur lui-même depuis l'extérieur, puis verrouillez le firewall de l'origine sur les plages du CDN et authentifiez les origin pulls, pour que l'adresse soit inutile même connue.

La porte d'entrée et la porte de derrière

Un CDN ou un WAF cloud se place devant le serveur et prend en charge le nom d'hôte. Pointez un scanner sur ce nom d'hôte et la requête va au edge : le TLS du edge, les en-têtes du edge, les rate limits et les règles du edge. Un rapport vert est un rapport sur le edge. L'origine, le serveur réel, n'a pas été touchée par ce scan, et tout ce qu'elle expose directement reste exposé à quiconque l'atteint par adresse plutôt que par nom.

Ce qui est scannéCe que cela testeCe que cela prouve sur l'origine
Le nom d'hôte public, via le CDNLe edge : son WAF, son TLS et ses rate limitsRien
L'adresse épinglée de l'origineLe serveur lui-même, tel qu'un attaquant l'atteintCe qu'un inconnu sur Internet peut toucher

Par où l'origine fuit

L'adresse est rarement bien cachée, parce que le domaine la publie pour d'autres usages. L'enregistrement SPF est le cas le plus courant. Une politique SPF qui utilise le mécanisme a autorise l'enregistrement A du domaine lui-même à envoyer du courrier, et cet enregistrement A est l'origine derrière le CDN. Le mécanisme mx pointe vers les hôtes de messagerie, souvent dans la même plage. Un ip4: littéral l'écrit en toutes lettres.

TERMINAL
$ dig +short TXT example.com
"v=spf1 a mx ip4:<address> include:_spf.<mail-provider> ~all"
$ dig +short MX example.com
$ dig +short A mail.example.com ftp.example.com staging.example.com origin.example.com

Au-delà du SPF : des sous-domaines qui n'ont jamais été placés derrière le CDN (mail, ftp, un panneau de contrôle, staging, un hôte d'origine nu), qui résolvent directement vers le serveur. Les journaux de transparence des certificats, qui enregistrent chaque certificat émis pour un nom, y compris celui de l'hôte d'origine. Les bases de DNS passif, qui conservent l'enregistrement A d'avant l'introduction du CDN. Les en-têtes Received de tout e-mail envoyé par le serveur web, qui nomment l'hôte d'où il est parti. Et les fonctions applicatives qui font se connecter le serveur vers l'extérieur sur demande, comme les pingbacks et les tests de webhook, qui montrent l'adresse de connexion à quiconque reçoit l'appel.

Épinglez l'origine et scannez ce qu'un attaquant scanne

Une fois l'adresse connue, faites ignorer le CDN à vos outils. curl le fait par requête ; les scanners qui ne le peuvent pas reçoivent une entrée dans le fichier hosts. Lancez le scan depuis une machine qui n'est pas sur votre réseau ni sur aucune liste d'autorisation à laquelle l'origine fait confiance, car un scan depuis une adresse de confiance rapporte ce que voient les adresses de confiance.

TERMINAL
# per request, no hosts-file change
$ curl --resolve example.com:443:<address> -sI https://example.com/

# for tools without --resolve
$ echo "<address>  example.com" | sudo tee -a /etc/hosts

Gardez deux colonnes dans le résultat. La colonne infrastructure : quels ports répondent, quelles versions de TLS sont acceptées, si les bannières livrent des noms de logiciels. La colonne application : des endpoints sans authentification qui énumèrent les utilisateurs, des fichiers de debug ou de logs lisibles dans la racine web, des chemins d'administration accessibles sans second facteur, des composants en retard sur leur version actuelle. Une machine durcie qui sert une application ouverte n'est pas un site sécurisé, et les deux colonnes ne se moyennent pas en un seul verdict.

Verrouillez l'origine sur le CDN

Le correctif structurel se fait à l'origine, pas au edge. Les ports web ne répondent qu'aux plages d'adresses publiées du CDN, tout le reste étant refusé par défaut. Sur un hôte firewalld :

TERMINAL
# load the CDN's published ranges into an ipset, then allow only them on 443
$ firewall-cmd --permanent --new-ipset=cdn-v4 --type=hash:net
$ firewall-cmd --permanent --ipset=cdn-v4 --add-entries-from-file=cdn-ranges-v4.txt
$ firewall-cmd --permanent --zone=public --remove-service=http
$ firewall-cmd --permanent --zone=public --remove-service=https
$ firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source ipset="cdn-v4" port port="443" protocol="tcp" accept'
$ firewall-cmd --reload
$ firewall-cmd --ipset=cdn-v4 --get-entries

Deux détails décident si cela tient. Les plages du CDN changent, donc le fichier est rafraîchi depuis la liste publiée du CDN selon un calendrier et l'ipset rechargé avec lui. Et chaque préfixe d'une liste d'autorisation est relu après chargement : une longueur de préfixe mal tapée d'un caractère laisse entrer une grande partie d'Internet et paraît normale dans le fichier.

Les plages d'adresses sont le premier verrou, pas le seul. La plupart des CDN peuvent authentifier leurs pulls vers l'origine avec un certificat client ; exigez-le au niveau du serveur web, pour qu'une requête venant d'une plage du CDN sans ce certificat soit tout de même refusée. Supprimez ensuite les fuites qui restent : un enregistrement SPF qui ne nomme que les hôtes qui envoient du courrier, aucun sous-domaine non proxifié pointant vers l'origine et, lorsque c'est possible, une nouvelle adresse d'origine une fois le verrou en place, car l'ancienne reste dans le DNS passif indéfiniment.

Vérifiez depuis l'extérieur

Relancez le scan épinglé depuis le même point d'observation non fiable. L'origine refuse la connexion sur le port 443, et le nom d'hôte est toujours servi via le CDN. Répétez après chaque changement des plages ou de la configuration du serveur web ; faire de cela une vérification permanente plutôt qu'une opération ponctuelle est le sujet de prouvez que c'est fermé depuis l'extérieur.

TERMINAL
$ curl --resolve example.com:443:<address> -m 5 -sI https://example.com/ ; echo "exit $?"
exit 28
# a timeout (28) or a refused connection (7) is the correct answer from the locked origin

Réponses directes

Un CDN protège-t-il mon serveur d'origine ?+

Uniquement pour le trafic qui le traverse. Le WAF, le TLS et les rate limits s'appliquent au edge. Une requête adressée directement à l'adresse de l'origine n'en rencontre aucun, donc l'origine doit refuser tout ce qui n'est pas le CDN.

Comment un attaquant trouve-t-il l'IP d'origine derrière un CDN ?+

Le plus souvent dans le DNS du domaine lui-même : un enregistrement SPF avec les mécanismes a, mx ou ip4, des hôtes MX dans la même plage, des sous-domaines jamais proxifiés. Aussi dans les journaux de transparence des certificats, l'historique du DNS passif et les en-têtes des e-mails envoyés par le serveur. Partez du principe qu'elle sera trouvée, et verrouillez l'origine comme si elle l'était déjà.

Quelle est la différence entre scanner le nom d'hôte et scanner l'origine ?+

Le nom d'hôte résout vers le CDN, donc le scan teste le edge. L'origine est le serveur. Épingler l'adresse de l'origine avec curl --resolve ou une entrée dans le fichier hosts, depuis un réseau auquel l'origine ne fait pas confiance, teste ce qu'un attaquant teste.

Une fois l'origine verrouillée sur le CDN, la fuite SPF a-t-elle encore de l'importance ?+

Les ports web ne répondent plus, mais l'adresse reste connue, et tout autre service dessus (SSH, messagerie, un panneau de contrôle) reste joignable s'il n'est pas restreint lui aussi. Resserrez l'enregistrement SPF sur les vrais hôtes de messagerie, déplacez l'origine vers une adresse neuve lorsque c'est possible, et mettez les services restants sur liste d'autorisation.

Vous voulez que l'origine soit trouvée, épinglée et verrouillée par quelqu'un qui travaille depuis l'extérieur de votre réseau ?

Parlez à un ingénieur.

Parler à un ingénieur

Vous êtes arrivé à la fin.

Mettez la lecture en pratique

Que faites-vous tourner ?

Parlez-nous de la charge de travail, du trafic et des exigences de reprise. Commencez par le configurateur de serveur, ou passez en revue les détails avec un ingénieur.

Écrit par les ingénieurs qui construisent et exploitent l'infrastructure qu'il décrit.
Parler à un ingénieur
XIn

6 min restantes