Re: [DNSOP] Second Working Group Last Call: draft-ietf-dnsop-refuse-any

Paul Wouters <paul@nohats.ca> Mon, 20 March 2017 15:25 UTC

Return-Path: <paul@nohats.ca>
X-Original-To: dnsop@ietfa.amsl.com
Delivered-To: dnsop@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A1BB41294C4 for <dnsop@ietfa.amsl.com>; Mon, 20 Mar 2017 08:25:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.001
X-Spam-Level:
X-Spam-Status: No, score=-2.001 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RP_MATCHES_RCVD=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nohats.ca
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 gE6ajBIkHoBu for <dnsop@ietfa.amsl.com>; Mon, 20 Mar 2017 08:25:24 -0700 (PDT)
Received: from mx.nohats.ca (mx.nohats.ca [193.110.157.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id DD3C41279EB for <dnsop@ietf.org>; Mon, 20 Mar 2017 08:25:23 -0700 (PDT)
Received: from localhost (localhost [IPv6:::1]) by mx.nohats.ca (Postfix) with ESMTP id 3vn0BT3kmsz3Fn; Mon, 20 Mar 2017 16:25:21 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nohats.ca; s=default; t=1490023521; bh=T8TjLn/2ZOfH99D0ZIKbMfmbYRKMOwzXkx6o9heZSW0=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=K4bmweiGB3vQkcTpPYKBHsPwjZfgN8EMI6cs5hL36wmt27yJJ8uWaC3m+dj0/Shw+ E3DWbNbqw2b4f8XTInad45I4NQAwQW8wFgLUwziOJHEaCinhooLVCAqWwZvXltjfnC 9Qd5tLs6xPsSWVpfeipg17eV6dXuJNuULCnGuPX4=
X-Virus-Scanned: amavisd-new at mx.nohats.ca
Received: from mx.nohats.ca ([IPv6:::1]) by localhost (mx.nohats.ca [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 4ybOz3b1pIYK; Mon, 20 Mar 2017 16:25:19 +0100 (CET)
Received: from bofh.nohats.ca (bofh.nohats.ca [76.10.157.69]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx.nohats.ca (Postfix) with ESMTPS; Mon, 20 Mar 2017 16:25:18 +0100 (CET)
Received: by bofh.nohats.ca (Postfix, from userid 1000) id 7CC8539D3A6; Mon, 20 Mar 2017 11:25:17 -0400 (EDT)
DKIM-Filter: OpenDKIM Filter v2.11.0 bofh.nohats.ca 7CC8539D3A6
Received: from localhost (localhost [127.0.0.1]) by bofh.nohats.ca (Postfix) with ESMTP id 67F9E40267E6; Mon, 20 Mar 2017 11:25:17 -0400 (EDT)
Date: Mon, 20 Mar 2017 11:25:17 -0400
From: Paul Wouters <paul@nohats.ca>
To: dnsop <dnsop@ietf.org>
In-Reply-To: <87C900A0-50CA-4B65-813B-1F9D1D831380@rfc1035.com>
Message-ID: <alpine.LRH.2.20.999.1703201020240.18647@bofh.nohats.ca>
References: <CADyWQ+GSStfAiOs8R9Ob7+LVh0RAfPQ+AbbTFNuwsrKkO=EUWg@mail.gmail.com> <CAC94RYYir_5rKmW47XkUZoVCs5PUfWiKg4Cygyvw6pOzqC5mfA@mail.gmail.com> <d8f1076e-a635-7620-5e2b-0c70efe2c0cf@dougbarton.us> <EDDF24B8-42F6-4BCA-8162-5A5C7CDC8CA2@rfc1035.com> <65cec05f-bb1b-cb9e-d874-a73c9c4653ac@dougbarton.us> <87C900A0-50CA-4B65-813B-1F9D1D831380@rfc1035.com>
User-Agent: Alpine 2.20.999 (LRH 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"; format="flowed"
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/a9EsaTTH0oAQacoiY_1yaKKDS9c>
Subject: Re: [DNSOP] Second Working Group Last Call: draft-ietf-dnsop-refuse-any
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: IETF DNSOP WG mailing list <dnsop.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnsop>, <mailto:dnsop-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnsop/>
List-Post: <mailto:dnsop@ietf.org>
List-Help: <mailto:dnsop-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnsop>, <mailto:dnsop-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 20 Mar 2017 15:25:26 -0000

On Mon, 20 Mar 2017, Jim Reid wrote:

>> The traditional understanding of ANY == ALL is well ingrained in developers.
>
> [Citation needed.]

> draft-ietf-dnsop-refuse-any is about something completely different. In case you hadn't noticed, the draft's about a server-side issue.

Funny, how in this discussion about ANY there is already confusion about
what kind of ANY we are talking about. It seems that is all the
citation that is needed here :)

I can confirm that only DNS geeks understand the limitations of ANY and
its relation to what's in the cache or not. It is very prone to be
misunderstood by non DNS geeks.

> It's not going to make the slightest difference to idiot/lazy applications that make ANY queries instead of doing The Right Thing. They'll still be getting answers which might or might not contain the data they're looking for.

That is correct. But it will confuse the human operators, especially:

 	If a DNS operator prefers to reduce the potential for information
 	leaks, they MAY choose to not to send large ANY responses.

However, I think that the abuse versus the gain here has been decided
many years ago, and whether or not we will state this in a document,
this kind of behaviour is going to happen or rather, has already
happened. So let's standarize it.


So below is my review of draft-ietf-dnsop-refuse-any-04. I'm still a bt
undecided over whether to use HINFO or allocate a new special RRTYPE.
One of my concerns is that attackers may try to find or create zones
that happen to have a real HINFO record in them, possibly tweaked to
their use, like an HINFO with different CPU/OS values and a zero TTL.

Section 4:

At section 4, item 3, it could give advise based on source-verified
transport, so that ANY queries received over TCP or with DNS-COOKIES
could include more data then potentially spoofed UDP packets. But perhaps
that is not worth it, because ANY queries shouldn't really be used by
applications, and humans will likely use dig without tcp or cookies
enabled. So I am fine with the current text as well. But I think it
would be cleaner if we no longer refer to UDP and TCP when we really
mean "source IP verified transport" when we say that.

In section 4.2:

I'm not sure what this is refering to:

 	understanding that a TTL that is too long might make policy changes
 	relating to ANY queries difficult to change in the future.

And:

 	In the case of DO=0, the RRSIG SHOULD be omitted.

Why is that not a MUST ? What is the use case for the "not SHOULD"
branch? And which DNSSEC RFC would need to be Updated: by this document
as well :)

In Section 4.3:

 	As in the first one if the zone is signed

is pretty ackward to read :P

 	In some cases it is possible to guess what the initiator wants

I'm not sure if I want any DNS RFC to claim it is ok to guess what the
client wants. Instead, I would write some text that either refers to
one of the efforts to ask for multiple types of records in one query,
or if we think those drafts aren't mature enough and might obsolete,
I would rewrite this section to:

 	Some implementations already reduce ANY query responses by
 	returning CNAME or the set of MX, A plus AAAA RRsets, and
 	filtering out any other existing RRsets at the QNAME. The
 	main drawback is that such a response can still result in
 	a useful amplification effect.

 	If the zone is signed and the query has the DO bit set, the
 	response MUST include RRSIGs for all RRsets returned.

Section 4.4:

I would change "TCP" to be "Source address verified transport" so it also
includes queries received with DNS COOKIES. I would also add a note
here about the real problem, which is that DDOS attacks not using
spoofing would still cause an amplification attack when using a source
address verified transport.

Section 5:

I would rewrite this to make the distinction between a caching resolver
and a stub client clearer. That is currently done indirectly with the
MAY keyword which I think is wrong. eg something like:

 	A caching resolver MUST cache the resulting RRsets of a QTYPE=ANY
 	query in the same way it caches non-ANY QTYPEs, and MUST use the
 	HINFO record similar to any other record for the purpose of
 	answering any further QTYPE=ANY requests from its cache.

 	A non-caching stub or resolver MUST process or replay the obtained
 	DNS reply to a QTYPE=ANY request similarly to a non-ANY QTYPE response.

Section 5 and Section 6:

I'm unclear why the document wants different caching resolver behaviour
based on the CPU value of the HINFO record. Why does it matter? I fear
it might allow attackers to use zones that cannot reply with the answer
needed to suppress further ANY queries. If it has anything in its cache,
it should just return that anyway as per normal QTYPE=ANY processing?
So I don't understand the warning for Section 6 either?

Section 7:

I would add a quick sentence about HINFO and the TC bit to the
introduction. The TC bit behaviour seems quite important, and I
think an implementer who reads a section names "Updates to RFC 1035"
might skip reading this thinking it is not that important.

 	and implementation of the guidance provided by this document is OPTIONAL.

This OPTIONAL use is again a bit confusing with the RFC2119 language
used. I'd prefer to see strong language like MUST/MUST NOT for
implementations of this document. Obviously the whole document is
optional to implement.

Section 8:

This should get a marker for the RFC Editor to remove this section as
per RFC 7942. At least I hope this was the intent :)

Section 9:

I find this section more describes the goal of the document, and not so
much the security considerations of the implementation of this draft.

I think this section should really only talk about implementation
concerns (which I don't know of any) or concerns about the ANY query
having turned into a "lie" (which I think has been considered and while
it is deemed to confuse some human operators for a little while, it is
not expected to have an operational effect on properly implementd or
inpromperly implemented consumers of ANY responses.

NITS:

- A few language issues which I'll send as xml diff to the authors

- Should it be "RRset" instead of "RRSet" ?

- "a small one(s)" reads a bit ackward.

- In 4.2, the "SHOULD" is a bit confusing as this is only one of 3
   methods suggested, so it feels more like a MAY? Or perhaps this
   is better rewritten without RFC2119 language?

Paul