Re: [apps-discuss] APPS-Dir review of draft-ietf-dnsop-edns-chain-query-05

Paul Wouters <pwouters@redhat.com> Mon, 11 January 2016 05:11 UTC

Return-Path: <pwouters@redhat.com>
X-Original-To: apps-discuss@ietfa.amsl.com
Delivered-To: apps-discuss@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B1ABD1A86FC; Sun, 10 Jan 2016 21:11:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.202
X-Spam-Level:
X-Spam-Status: No, score=-4.202 tagged_above=-999 required=5 tests=[BAYES_50=0.8, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fZLUUqMSt47n; Sun, 10 Jan 2016 21:11:12 -0800 (PST)
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id ED12A1A86FB; Sun, 10 Jan 2016 21:11:11 -0800 (PST)
Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 340108E225; Mon, 11 Jan 2016 05:11:11 +0000 (UTC)
Received: from thinkpad.nohats.ca (vpn-63-135.rdu2.redhat.com [10.10.63.135]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u0B5BAIG008271; Mon, 11 Jan 2016 00:11:10 -0500
To: Ted Hardie <ted.ietf@gmail.com>, apps-discuss@ietf.org, draft-ietf-dnsop-edns-chain-query.all@ietf.org
References: <CA+9kkMDaFbhNBjezBp40OaJoTTaUcvmJoO8Dv0bLmeqoAhO_kg@mail.gmail.com>
From: Paul Wouters <pwouters@redhat.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <5693396D.7080900@redhat.com>
Date: Mon, 11 Jan 2016 00:11:09 -0500
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0
MIME-Version: 1.0
In-Reply-To: <CA+9kkMDaFbhNBjezBp40OaJoTTaUcvmJoO8Dv0bLmeqoAhO_kg@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24
Archived-At: <http://mailarchive.ietf.org/arch/msg/apps-discuss/gU2WKagH53zO2NBCrnk9CjnShqQ>
X-Mailman-Approved-At: Mon, 11 Jan 2016 20:06:33 -0800
Cc: dnsop@ietf.org, IESG <iesg@ietf.org>
Subject: Re: [apps-discuss] APPS-Dir review of draft-ietf-dnsop-edns-chain-query-05
X-BeenThere: apps-discuss@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: General discussion of application-layer protocols <apps-discuss.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/apps-discuss/>
List-Post: <mailto:apps-discuss@ietf.org>
List-Help: <mailto:apps-discuss-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Jan 2016 05:11:14 -0000

On 11/23/2015 03:24 PM, Ted Hardie wrote:

(added CC: to dnsop list for feedback)

Thanks for your review Ted!

> Major Issues:
> 
> The effort to avoid amplification attacks is appropriate, but justification
> of the UDP option, even with the EDNS option for a DNS cookie, is not well
> supported in the draft.

I'm a little confused. Do you mean the justification of the COOKIE requirement needs more justification, or
the edns-query-chain option itself needs more justification. I would hope the latter is clear - it reduces the
need for either multiple latency bound round trips or many parallel queries and their callbacks.

  One major driver for the work is that the total
> response size needed for validation may be large.

You mean the driver for the COOKIE? Because the driver for the option is not related to response size. I'm assuming
that the amount of data the DNS client will receive is about equal. It's only a matter of whether it comes in via one
DNS query, or multiple DNS queries.

  Using DNS cookies will
> add between 15 and 40 bytes (presuming both client and server cookies are
> used), thus further swelling the response.  Some description of when the
> requester/responder's UDP payload size is likely to be sufficient here
> would be a valuable addition.  If the data is not available now, perhaps it
> could be gathered during the course of experimentation? If that data shows
> the intersection of "fits within UDP" and "answers at least a partial
> chain" is small, then reverting this to TCP-only looks sensible.

The amplification is really only a concern when the source IP is not confirmed, and the packet could be a spoofed source ip packet.
Once you have a DNS COOKIE, it is a confirmed client with source IP, so if it is abusive, it can be blacklisted or ratelimited.

The additional size of the COOKIE is not really a problem here. Those would be very few bytes compared to an abusive long chain
that an attacker could be asking for.

> Minor Issues:
> 
> In 5.4, the document currently describes the process of returning a partial
> chain:
> 
>    If a CHAIN answer would be bigger than the Recursive Resolver is
>    willing to serve, it SHOULD send a partial chain starting with the
>    data closest to the top of the chain.  The client MAY re-send the
>    query with an updated Closest Trust Point until it has received the
>    full chain.  The CHAIN response will contain the lowest Closest Trust
>    Point that was included in the CHAIN answer.
> 
> This describes the intersection of one particular resource constraint and
> the operation of this option.  It seems possible, however that a resolver
> might see other resource constraints which might allow it to answer a
> partial chain from something other than the data closest to the top of the
> chain.  Imagine, for example, that it has cached data for some parts of the
> chain but needs to refresh the cache on some other part.  If the cache fill
> operation is taking significant time, it might prefer to send what data it
> has, and fill the cache in anticipation of the follow-up query.  Is there a
> reason for limiting partial answers to the top-most hierarchical
> responses?  If so, could the document include it?

The reason for limiting the answer from the top down is that it enables the querying
client to extend its own chain further down, and send a new query for the same data
with the updated Closest Trust Point further down. This method guarantees that the
DNS client can work its way to the answer.

If the server decides to send other parts of the chain, the client has to modify its
query target in an attempt to get the top part of the chain it did not get. And it has
no guarantee that the next query will give it another useful hunk of the chain.

Additionally, assuming the DNS client to DNS server connection is of high latency, and
the DNS server itself has a low latency uplink, it might actually do the DNS client a
disservice giving it part of the chain instead of querying to create the full chain. It
would also be guessing as to whether the full chain is likely to fit or not.

To me, such strategies seem overly complicated, and require more code on the DNS client
implementing handling unexpected partial answers. The top down cut-off seems much simpler
to me. But let's ask the working group as well what they think.


> In section 6.5, the document says:
> 
>    Many paths between DNS clients and Recursive Resolvers suffer from
>    poor hygiene, limiting the free flow of DNS messages that include
>    particular EDNS0 options, or messages that exceed a particular size.
>    A fallback strategy similar to that described in [RFC6891
> <https://tools.ietf.org/html/rfc6891>] section
> <https://tools.ietf.org/html/draft-ietf-dnsop-edns-chain-query-05#section-6.2.2>
>    6.2.2 <https://tools.ietf.org/html/draft-ietf-dnsop-edns-chain-query-05#section-6.2.2>
> SHOULD be employed to avoid persistent interference due to non-
>    clean paths.

That section link is definitely pointing to the wrong document (this draft instead of RFC6891). Fixed.


> This seems to conflict with the advice in 5.3:
> 
>    However, it is RECOMMENDED that Forwarders remember which
>    upstream Recursive Resolvers did not return the option (and
>    additional data) with their response.  The Forwarder SHOULD fallback
>    to regular DNS for subsequent queries to those Recursive Resolvers.
>    It MAY switch to another Recursive Resolver that does support the
>    CHAIN option or try again later to see if the server has become less
>    loaded and is now willing to answer with Query Chains.
> 
> To resolve this, the client would have to be able to detect when the ENDS0
> option is suppressed by the path, versus not offered by a Recursive
> Resolver.   Some further text on how this is discerned would be useful;
> absent a method, I believe the text in 5.3 is sufficient and 6.5 not useful
> beyond the points made in RFC 6891.

How about removing section 6.5, but moving the one sentence in there:

   A fallback strategy similar to that described in [RFC6891] section
   6.2.2 SHOULD be employed to avoid persistent interference due to non-
   clean paths.

to the end of section 5.3? Would that resolve your issue?

> 
> Nits:
> 
> The abstract uses the term "security aware validating Resolver".  This use
> of "security aware" appears to be the term of art used in RFC 4033, but
> that may not be obvious; perhaps "DNSSEC validating resolver" would be more
> clear for an abstract?

RFC-7719 DNS Terminology marks all of these terms as "have caused confusion". I am fine with DNSSEC validating resolver", but I would like to punt this question
to the authors of RFC-7719. I'll ping them offlist if they miss this message on the dnsop list.

> In section 6.3, the document says:
> 
>    In the event that there is greater demand for Chain Queries than can
>    be accommodated, DNS servers may stop advertising the CHAIN option in
>    successive DNS messages.  This allows, for example, clients with
>    other candidate servers to query to establish new sessions with
>    different servers in expectation that those servers might still allow
>    Chain Queries.
> 
> Given that this would also apply to UDP CHAIN queries, it is not clear why
> this is in the TCP Session Management section.

Correct. How about renaming section 6.3 from "TCP session management" to "session management" ?

> In section 6.4, the document says "partian CHAIN up" where it should say
> "partial CHAIN up".

Fixed.

> In section 6.6, this text was quite hard to parse:
> 
> 
>     Changes in network topology between clients and anycast servers may
>    cause disruption to TCP sessions making use of CHAIN more often than
>    with TCP sessions that omit it, since the TCP sessions are expected
>    to be longer-lived.
> 
> Perhaps:
> 
> Since DNS queries using CHAIN may result in longer TCP sessions,
> network topology changes may disrupt them more frequently.

Changed.

Paul