Respostas DNSsec de named / bind intermitentemente têm registros RRSIG ausentes

1

As respostas de nosso servidor de nomes estão perdendo registros RRSIG intermitentemente, apesar de serem solicitadas. Todos os outros registros associados (como registros A) são retornados OK. Consequentemente, a validação do dnsssec falha. O exemplo abaixo é para paypal, mas acredito que não seja um problema com seus servidores de nomes, pois ao consultar seus servidores de nomes diretamente, não consigo reproduzir o problema.

    $ dig +dnssec api.paypal.com @internalnameserver
    Wed May 11 17:35:22 BST 2016

    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> +dnssec api.paypal.com @internalnameserver
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9849
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;api.paypal.com.  IN A

;; ANSWER SECTION:
api.paypal.com.  47 INA
173.0.84.98
api.paypal.com.  47 INA
173.0.88.98
api.paypal.com.  47 INA
173.0.92.23

;; AUTHORITY SECTION:
paypal.com. 47IN
NSns4.p57.dynect.net.
paypal.com. 47IN
NSns3.p57.dynect.net.
paypal.com. 47IN
NSns2.p57.dynect.net.
paypal.com. 47IN
NSns1.p57.dynect.net.

;; ADDITIONAL SECTION:
ns1.p57.dynect.net.  83856 INA
208.78.70.57
ns2.p57.dynect.net.  83856 INA
204.13.250.57
ns3.p57.dynect.net.  83856 INA
208.78.71.57
ns4.p57.dynect.net.  83856 INA
204.13.251.57

;; Query time: 0 msec
;; SERVER: 172.16.0.2#53(172.16.0.2)
;; WHEN: Wed May 11 17:35:25 2016
;; MSG SIZE  rcvd: 241

Os registros RRSIG estão faltando, no entanto, estão diretamente no NS paypal e estão presentes:

$ dig +dnssec api.paypal.com @ns1.p57.dynect.net

; <<>> DiG 9.5.1-P3 <<>> +dnssec api.paypal.com @ns1.p57.dynect.net
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33378
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 5, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;api.paypal.com.            IN  A

;; ANSWER SECTION:
api.paypal.com.     300 IN  A   173.0.88.98
api.paypal.com.     300 IN  A   173.0.84.98
api.paypal.com.     300 IN  A   66.211.168.91
api.paypal.com.     300 IN  RRSIG   A 5 3 300 20160617044014 20160518034014 11811 paypal.com. SnkboXg/S1uV0IzYhcaCIrq+YtH+z5vtQcgw2O3GnNPM/oQbNWFmDClq Jj7gRgjKNHLy7zH8BHk1p7QBUCJuhQK3ud02dc5IDBSupMSusMp8tay9 eSG6AJEwkNsed0ztuacJiUw2qYETbgnLQyywOAF97Q68m8210tPXHCE2 2qY=

;; AUTHORITY SECTION:
paypal.com.     300 IN  NS  ns1.p57.dynect.net.
paypal.com.     300 IN  NS  ns2.p57.dynect.net.
paypal.com.     300 IN  NS  ns3.p57.dynect.net.
paypal.com.     300 IN  NS  ns4.p57.dynect.net.
paypal.com.     300 IN  RRSIG   NS 5 2 300 20160606184750 20160507180943 11811 paypal.com. rV5WaDBF1SXjx9jSA0iom5+08dMja2aZIb4bqQhm3egqDAWku4+YXcCd rET1pxVQngIYpIPIF7eHheVSuPNd6mC63/U/1/Ph20Xm70OKL0EDjoVa +KgRT71J1X7Whs4oQ6df4L+E8lb8GspeHVyEGfuE00pZRbKt2ZevXZcu ZIk=

;; Query time: 10 msec
;; SERVER: 208.78.70.57#53(208.78.70.57)
;; WHEN: Wed May 18 10:31:17 2016
;; MSG SIZE  rcvd: 517

10 minutos depois e os registros RRSIG podem estar presentes novamente. Isso parece ser um problema interno de cache nomeado, já que cada 'iteração' dos registros presentes ou não parece coincidir com o TTL que está sendo atingido. - Uma vez que obtém ou não obtém os registros RRSIG, a resposta é armazenada em cache, OK, durante a vida útil do TTL do registro.

Ligações de execução 9.7.3

Se alguma coisa não estiver clara ou precisar de mais informações, informe-nos.

    
por Benjamin Goodacre 18.05.2016 / 11:41

1 resposta

3

Este é um problema comum com o BIND , embora confuso.

  • No modo recursivo, o BIND pode retornar registros extras dos quais está passivamente ciente, mas não tentará procurar ativamente por esses registros, a menos que seja exigido pelos padrões relevantes.
  • Quando esse comportamento é encontrado em um único servidor DNS (ou seja, a inconsistência é observada em um único servidor, não na frente de um balanceador de carga), a possibilidade de os RR ausentes não serem solicitados deve ser considerada. Um teste simples é pedir explicitamente um registro que você espera que seja incluído e repita a consulta original. Se o registro agora estiver incluído, não será necessário executar a recursão adicional para incluir essa resposta na resposta anterior. A inclusão do registro extra é puramente informativa .

Neste caso específico, parece que você está esperando que os registros RRSIG sejam apresentados ao resolvedor de stub. Pense nisso embora. Como essa assinatura é útil sem conhecer também as assinaturas intermediárias?

Antes de prosseguirmos com as RFCs do DNSSEC, vamos fazer uma rápida revisão do que está facilmente disponível na Wikipedia:

https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions#Stub_resolvers

A stub resolver will simply forward a request to a recursive name server, and use the Authenticated Data (AD) bit in the response as a "hint to find out whether the recursive name server was able to validate signatures for all of the data in the Answer and Authority sections of the response."

A validating stub resolver can also potentially perform its own signature validation by setting the Checking Disabled (CD) bit in its query messages. A validating stub resolver uses the CD bit to perform its own recursive authentication. Using such a validating stub resolver gives the client end-to-end DNS security for domains implementing DNSSEC, even if the Internet Service Provider or the connection to them is not trusted.

A ênfase em negrito é minha. Juntando isso:

  • Um resolvedor de stub sem validação simplesmente procura o AD em sua resposta e está confiando que o servidor recursivo executou a validação para ele. Não faz nada com o registro RRSIG . Os aplicativos que desejam executar uma ação com base nesse RRSIG devem solicitar esse registro diretamente e não confiar em sua inclusão na resposta.
  • Um resolvedor de stub de validação deve executar sua própria recursão. Essa é a única maneira de validar que as assinaturas válidas estão em vigor dos servidores raiz até o RRSIG associado ao registro em questão.

Sabendo de tudo isso, precisamos confirmar o que exatamente o dig está fazendo quando o sinalizador +dnssec está definido. Podemos conseguir isso na página do manual:

   +[no]dnssec
       Requests DNSSEC records be sent by setting the DNSSEC OK bit (DO)
       in the OPT record in the additional section of the query.

A partir disso podemos inferir que dig não está operando como um resolvedor de stub de validação (o que pode ser confirmado com uma captura de pacote se você preferir, já que ele deveria estar executando sua própria recursão), e que o BIND servidor está não executando a validação em seu nome, pois a resposta não retornou com o ad bit definido na pseudo-seção OPT para a resposta. (apenas do , uma confirmação de que viu do na consulta original)

    
por 25.05.2016 / 17:50