Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Free, noblogs.org et un curieux problème DNS / DNSSEC

Première rédaction de cet article le 9 octobre 2015


Quelques mois après le problème juralib.noblogs.org, les rézosocios ont bruissé de clameurs sur le domaine ladiscordia.noblogs.org, invisible depuis Free. Censure ou bavure ?

Beaucoup de gens ont crié à la censure, ce qui est raisonnable dans le contexte politique actuel, vu que le site Web derrière ce domaine sert en général des contenus politiquement radicaux. (Voir par exemple une discussion très foutraque sur Reddit.) Mais, si la censure existe, les bogues existent aussi, et il existe davantage de maladroits que de méchants. Étudions donc la question.

D'abord, plaçons nous sur une machine connectée par Free et utilisant les résolveurs DNS de Free (ce n'est pas obligatoire). On constate qu'on ne peut pas visiter la page Web citée plus haut. Des tests techniques montrent que le problème est dans la résolution DNS. Pas moyen de trouver l'adresse IP associée au nom. Testons avec dig :


%  dig ladiscordia.noblogs.org                
...
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 937
                                       ^^^^^^^^
                                       Server Failure

Ah, Houston, nous avons un problème. Le domaine noblogs.org étant signé avec DNSSEC (une excellente idée), regardons avec l'option +cd (Checking Disabled) qui coupe la validation DNSSEC :


%  dig +dnssec +cd ladiscordia.noblogs.org  

; <<>> DiG 9.10.2-P2 <<>> +cd ladiscordia.noblogs.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16475
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 15, AUTHORITY: 5, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;ladiscordia.noblogs.org. IN A

;; ANSWER SECTION:
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
  
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
ladiscordia.noblogs.org. 2284 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 2284 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
www.l.autistici.org.    1800 IN A 94.23.50.208
www.l.autistici.org.    1800 IN A 82.94.249.234
www.l.autistici.org.    1800 IN RRSIG A 7 4 30 (
                                20151105063002 20151006063002 2207 l.autistici.org.
                                HDkkzb8afOIlk5P0HRmiVal7KmAu4bevmkAPpHuAMruS
                                9Pj2OkWjeWwJiLm7zX5MjqIcfUBvJ6gbODvRGr7dDJHn
                                7qqLNA3IXMvxm5trBWz2/YZsTs/2XEgIBDVgxRel+OBp
                                HD+riKX0ZylmTGXG7/fyRfcYLquwphS4gNTMWbk= )

;; AUTHORITY SECTION:
l.autistici.org.        1800 IN NS ns1.investici.org.
l.autistici.org.        1800 IN NS ns2.investici.org.
l.autistici.org.        1800 IN NS ns2-v6.investici.org.
l.autistici.org.        1800 IN NS ns1-v6.investici.org.
l.autistici.org.        1800 IN RRSIG NS 7 3 30 (
                                20151105063002 20151006063002 2207 l.autistici.org.
                                bA28B6AP9NQzyavLXFZoxDCsV1kDpZwid+QyPcR2qhrj
                                c3wfuB6P2PM7WBHzlbZevt1C3+z/FMqvXRr/TrhbseDy
                                ScKCai/LPD68z0bqUucz0uuFbDpTxvJNDf+0zJrMQTsw
                                +zse/UsiopBVrqCjOXRWte2DvDxyCPtN3WnEYJc= )

;; Query time: 26 msec
;; SERVER: 192.168.2.254#53(192.168.2.254)
;; WHEN: Fri Oct 09 11:09:32 CEST 2015
;; MSG SIZE  rcvd: 1648

Ouh là, là, c'est long. Bien trop long, la répétition de l'enregistrement CNAME et de sa signature est tout à fait anormale. Est-ce de la faute du résolveur DNS Free ou bien du domaine noblogs.org ? Allons sur une autre machine qui utilise son propre résolveur, un Unbound :


% dig +dnssec ladiscordia.noblogs.org

; <<>> DiG 9.9.5-9+deb8u3-Debian <<>> +dnssec ladiscordia.noblogs.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62823
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;ladiscordia.noblogs.org. IN A

;; ANSWER SECTION:
ladiscordia.noblogs.org. 6082 IN CNAME www.l.autistici.org.
ladiscordia.noblogs.org. 6082 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                MphTYlJRGvwTzZTPwbbbkZjSuCtt5P7l3/iMx50ZEZ/B
                                x3q0PDD3Yo4ckrfcIzMQ9V+HeosW+W78UBTC0LyQIxSq
                                eRdlhsNZKSELmR8k9sVpJ5mrQPTQ3HzGzUr4z1w= )
www.l.autistici.org.    30 IN A 94.23.50.208
www.l.autistici.org.    30 IN A 82.94.249.234
www.l.autistici.org.    30 IN RRSIG A 7 4 30 (
                                20151105063002 20151006063002 2207 l.autistici.org.
                                HDkkzb8afOIlk5P0HRmiVal7KmAu4bevmkAPpHuAMruS
                                9Pj2OkWjeWwJiLm7zX5MjqIcfUBvJ6gbODvRGr7dDJHn
                                7qqLNA3IXMvxm5trBWz2/YZsTs/2XEgIBDVgxRel+OBp
                                HD+riKX0ZylmTGXG7/fyRfcYLquwphS4gNTMWbk= )

;; AUTHORITY SECTION:
EDG28OM0KF8LV6JVVTUAE9R7GLNTNKMD.noblogs.org. 82 IN NSEC3 1 0 10 5CA1AB1E (
                                K1C26GO8L9TJ398E8MKH7QLSP4LB88UO
                                CNAME RRSIG )
EDG28OM0KF8LV6JVVTUAE9R7GLNTNKMD.noblogs.org. 82 IN RRSIG NSEC3 7 3 3600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                juTchEjZZFdj5WkhyKh/2qZxffIjahcjtWrC7aiM78QT
                                nuBLP6AqRatIwpbIauM9ZbBwXD1ZXwRhpZrLTDKqS8bK
                                qU5dsUCKsB3vIYba84I12t1bAg0YKv0HP8bkEMp9ftO+
                                bZNLtY+TXyaZ5FULNI26gMen2YYsqPovY0YnH0M= )

l.autistici.org.        30 IN NS ns2-v6.investici.org.
l.autistici.org.        30 IN NS ns2.investici.org.
l.autistici.org.        30 IN NS ns1.investici.org.
l.autistici.org.        30 IN NS ns1-v6.investici.org.
l.autistici.org.        30 IN RRSIG NS 7 3 30 (
                                20151105063002 20151006063002 2207 l.autistici.org.
                                bA28B6AP9NQzyavLXFZoxDCsV1kDpZwid+QyPcR2qhrj
                                c3wfuB6P2PM7WBHzlbZevt1C3+z/FMqvXRr/TrhbseDy
                                ScKCai/LPD68z0bqUucz0uuFbDpTxvJNDf+0zJrMQTsw
                                +zse/UsiopBVrqCjOXRWte2DvDxyCPtN3WnEYJc= )

;; Query time: 239 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Oct 09 11:12:01 CEST 2015
;; MSG SIZE  rcvd: 977

On n'a pas cette fois la répétition des CNAME, c'est plus normal (et valide : le bit AD Authentic Data dans la réponse nous l'indique). Autre façon de vérifier qu'il y a bien un problème spécifique à Free, demander aux sondes RIPE Atlas françaises (avec ce programme) ce qu'elles voient :

% python resolve-name.py -r 500 -c FR -t A ladiscordia.noblogs.org 
Measurement #2490878 for ladiscordia.noblogs.org/A uses 500 probes
[ERROR: REFUSED] : 3 occurrences 
[ERROR: SERVFAIL] : 116 occurrences 
[82.94.249.234 94.23.50.208] : 338 occurrences 
Test done at 2015-10-08T08:58:30Z 

La plupart voient la bonne réponse (deux adresses IP), 116 d'entre elles reçoivent le SERVFAIL. Ce sont celles situées sur ce réseau de Free. Limitons la requête à l'AS de Free :

% python resolve-name.py -r 500 --as 12322 -t A ladiscordia.noblogs.org  
Measurement #2495118 for ladiscordia.noblogs.org/A uses 233 probes
[ERROR: REFUSED] : 1 occurrences 
[ERROR: SERVFAIL] : 161 occurrences 
[82.94.249.234 94.23.50.208] : 62 occurrences 
Test done at 2015-10-09T09:18:07Z

La majorité des sondes Atlas chez Free ont le problème (certains clients de Free ont leur propre résolveur et ne voient donc pas le problème).

Donc, c'est chez Free ? Il n'y a pas de problème dans la zone noblogs.org ? Je dois confesser que j'avais stupidement mis en cause cette zone sur Twitter, en confondant avec un autre cas. Comme les gens qui criaient à la censure, j'avais réagi trop vite en sens inverse. Toutes mes excuses au mainteneur de noblogs.org, cette zone ne semble pas avoir de problème DNSSEC grave, comme le montrent très bien DNSviz ou ZoneMaster (il y a des erreurs mais pas graves et sans lien avec DNSSEC).

Mais, alors, qu'est-ce qui se passe ? Y aurait-il bien censure délibérée par Free ? Sans doute pas. En effet, en comparant le résultat des commandes dig avec le résolveur DNS de Free et un autre résolveur, on voit le problème : l'enregistrement NSEC3 est manquant. Ça veut dire quoi ? NSEC3, normalisé dans le RFC 5155, sert à prouver qu'un nom n'existe pas. Ici, comme la zone noblogs.org utilise des jokers (tout nom, même gfcgf565FsdZE523SEDvgGFSS.noblogs.org va marcher, cf. RFC 1034, section 4.3.3), le NSEC3 doit être envoyé pour prouver que le nom demandé, ladiscordia.noblogs.org, n'existait pas réellement mais été synthétisé via le joker. Dans la réponse du résolveur correct, on a le NSEC3 :

EDG28OM0KF8LV6JVVTUAE9R7GLNTNKMD.noblogs.org. 82 IN NSEC3 1 0 10 5CA1AB1E (
                                K1C26GO8L9TJ398E8MKH7QLSP4LB88UO
                                CNAME RRSIG )

Mais on ne l'a pas dans la réponse du résolveur de Free. Si on teste avec DNSviz en local, en passant à travers le résolveur de Free, le rapport (en JSON) nous dit la même chose :

"errors": [
    {
        "description": "No NSEC RR(s) were returned to validate the wildcard response.",
        "code": "MISSING_NSEC_FOR_WILDCARD",
        "servers": [
            "192.168.2.254"
        ],
        "tags": [
            "UDP_272_EDNS0_32768_4096"
        ]
    }
...

(Au passage, notez que Free force un TTL minimum, ce qui fait également couiner DNSviz, car DNSSEC ne permet pas ce genre de manips :

"errors": [
       {
           "description": "The TTL of the RRset (1665) exceeds the value of the Original TTL field of the RRSIG RR covering it (900).",
           "code": "ORIGINAL_TTL_EXCEEDED"
       }
...

)

Comment un résolveur ayant ces données voit qu'il y a un problème DNSSEC (et va donc renvoyer SERVFAIL) ? Grâce au champ Number of labels de la signature (RFC 4034, section 3.1.3). Lorsque le nom existe, ce champ indique le nombre de composants dans le nom demandé :

www.noblogs.org.        9600 IN RRSIG CNAME 7 3 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                k7l/nfVCejZ+pO7BPIPEPaQs7w09CE/4SJL7rjItAEqf
                                ...

Le champ est le troisième après le type RRSIG. Ici, il vaut trois, ce qui est bien le nombre de composants du nom de domaine demandé. Mais lorsque le nom a été synthétisé grâce au joker :

ladiscordia.noblogs.org. 5073 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
				...

Alors, le champ ne vaut que deux, indiquant qu'il y a un joker dans le deuxième composant (la zone noblogs.org ; après tout, le joker pourrait être dans une zone parente ou grand-parente). Le résolveur DNSSEC voit donc que la signature couvre en fait le joker :

*.noblogs.org.          9600 IN RRSIG CNAME 7 2 9600 (
                                20151101063004 20151002063004 64367 noblogs.org.
                                LuRSXa97Yjr+wYVGjq8yFxIOTXeufRMNaL6L31jqq3im
                                ...

(Regardez la signature, c'est la même que pour ladiscordia mais pas la même que pour www.) Le résolveur validant va donc chercher un NSEC3 prouvant que le nom n'existe pas (un nom existant masque le joker), ne le trouve pas, et paf, SERVFAIL.

Pourquoi le résolveur de Free a-t-il omis le NSEC3, qui est bien envoyé par les serveurs faisant autorité pour noblogs.org ? L'investigation doit s'arrêter là, je n'ai pas accès à l'intérieur de ces résolveurs. Je soupçonne que la duplication anormale des CNAME a mené à une réponse trop grosse et que l'enregistrement NSEC3 a été abandonné.

Donc, ma conclusion est que les résolveurs de Free sont en tort, mais qu'il s'agit très probablement d'une bogue et pas d'une attaque délibérée. Quant à la zone noblogs.org, elle n'avait d'autres torts que de combiner des techniques compliquées (jokers et NSEC3).

Notez que, six mois plus tard, la bogue n'était pas réparée, et se déclenche même sans NSEC3.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)