Re: [DNSOP] WGLC for draft-ietf-dnsop-let-localhost-be-localhost-02

Petr Špaček <petr.spacek@nic.cz> Mon, 29 January 2018 11:46 UTC

Return-Path: <petr.spacek@nic.cz>
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 AF91B12D95F for <dnsop@ietfa.amsl.com>; Mon, 29 Jan 2018 03:46:05 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.009
X-Spam-Level:
X-Spam-Status: No, score=-7.009 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_HI=-5, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nic.cz
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 nNeVKfMZ6TLq for <dnsop@ietfa.amsl.com>; Mon, 29 Jan 2018 03:46:02 -0800 (PST)
Received: from mail.nic.cz (mail.nic.cz [IPv6:2001:1488:800:400::400]) (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 D440512D95B for <dnsop@ietf.org>; Mon, 29 Jan 2018 03:46:01 -0800 (PST)
Received: from [IPv6:2001:1488:fffe:6:544b:6eff:feac:5d4a] (unknown [IPv6:2001:1488:fffe:6:544b:6eff:feac:5d4a]) by mail.nic.cz (Postfix) with ESMTPSA id DB47A64245 for <dnsop@ietf.org>; Mon, 29 Jan 2018 12:45:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1517226360; bh=3Rx5sbIqEYc8VeEoHZ19nyF7qncdraFB3bjz2fWYnCo=; h=To:From:Date; b=W4x1k6lsuHPoz8kikKOSRDCjrCR8w9pk1ubx7LD4hGzx7Whaz+badC6/EdANf8giM BFXJ8O0HFtmKcnURTFOWtI7GMvy0wU8TzuN0oFNkIZNwBFX9l/IB1kMzvJERuCO9kv w18SZ9pKL1yNAmehBMkkTvjiyEgUZ8SuEyqS1vcw=
To: dnsop@ietf.org
References: <CANV=THh6bOxd_UW=TuLonWzz0KyGapkGWpMiNuu54W=45gFAvg@mail.gmail.com> <20180124205620.GZ3322@mournblade.imrryr.org> <alpine.DEB.2.11.1801251558440.5022@grey.csi.cam.ac.uk> <CAJE_bqf+GqYGFRAsXbBPymQLXoJRs_AxvVHhtcMJF1LEvTL7sQ@mail.gmail.com> <77B805CC-E8FE-4B09-A261-C5CB13707EE4@dotat.at> <CAJE_bqdCZ_vj2nncvEVpYunVmE=xxAiXqrzhu8BGxnSsLjy+3Q@mail.gmail.com> <37A9F504-A8BE-4F47-AAE9-AF2458206F03@fugue.com> <20180126201613.GK3322@mournblade.imrryr.org> <B17E9259-BC28-4861-8102-B716685C75B3@fugue.com> <20180126230343.GL3322@mournblade.imrryr.org> <CAHw9_i+dM+MeMVt+et0t-xU-SKxK0nB_XSuPqP1DngmSTuYTqQ@mail.gmail.com>
From: Petr Špaček <petr.spacek@nic.cz>
Organization: CZ.NIC
Message-ID: <eb96c2f5-8b35-d285-43ea-2c4151588580@nic.cz>
Date: Mon, 29 Jan 2018 12:45:59 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2
MIME-Version: 1.0
In-Reply-To: <CAHw9_i+dM+MeMVt+et0t-xU-SKxK0nB_XSuPqP1DngmSTuYTqQ@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: clamav-milter 0.99.2 at mail
X-Virus-Status: Clean
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/X8juqmw2bx3P1XlsXpc4OTj2hRc>
Subject: Re: [DNSOP] WGLC for draft-ietf-dnsop-let-localhost-be-localhost-02
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, 29 Jan 2018 11:46:06 -0000

On 27.1.2018 18:56, Warren Kumari wrote:
> On Fri, Jan 26, 2018 at 6:03 PM, Viktor Dukhovni <ietf-dane@dukhovni.org> wrote:
>> On Fri, Jan 26, 2018 at 02:24:26PM -0600, Ted Lemon wrote:
>>
>>>> Disagreed, with respect to recursive resolvers, because the
>>>> requirement is neither necessary nor sufficient to achieve the
>>>> stated security goals, is not required for interoperability, and
>>>> is in conflict with existing uses of local data for localhost.
>>>
>>> The point of the requirement is that it breaks stacks that use DNS to look
>>> up localhost.
>>
>> Multiple participants in this discussion have pointed out that such
>> queries are rare.
> 
> <no hats>
> 
> I've somewhat lost track of which exactly "such queries" are
> ('localhost', '*.localhost', with or without DO bit, etc), and what we
> are considering as "rare", but, as mentioned in
> https://mailarchive.ietf.org/arch/msg/dnsop/k9Rec7WuLCLjLBb5hI7kynAxf3U
> :
> 'Around 0.3% of responses from Google Public DNS are for "localhost".'
> 
> If I opened a packet of M&Ms[0] and <0.3% of them were green I'd call
> green M&Ms rare, but if 0.3% of people who went swimming got eaten by
> sharks I'd likely not call shark attacks rare :-p
> 
> 
> 
>>  And, we must not forget that, absent local
>> overrides, the iterative resolvers are *already* returning NXDomain,
>> because the authoritative data from the root returns NXDomain.
> 
> 
> ... do they?
> 
> Google Public DNS:
> $ dig  +dnssec localhost @8.8.8.8
> ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 62555
> ;; AUTHORITY SECTION:
> . 64929 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018012700
> 1800 900 604800 86400
> . 64929 IN RRSIG SOA 8 0 86400 20180209050000 20180127040000 41824 .
> i1JPur/fqut5...==
> 
> 
> Verisign Public DNS:
> $ dig +dnssec localhost @64.6.64.6
> ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8025
> ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
> ;; ANSWER SECTION:
> localhost. 10687 IN A 127.0.0.1
> 
> 
> Quad9:
> $ dig +dnssec localhost @9.9.9.9
> ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22677
> ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
> ;; ANSWER SECTION:
> localhost. 86170 IN A 127.0.0.1
> 
> 
> OpenDNS:
> dig +dnssec localhost @208.67.222.222
> ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14156
> ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
> ;; ANSWER SECTION:
> localhost. 604800 IN A 127.0.0.1
> 
> 
> My local BIND instance:
> # dig +dnssec localhost @127.0.0.1
> ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 62183
> ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 1
> ;localhost.                     IN      A
> 
> ;; AUTHORITY SECTION:
> .                       10800   IN      SOA     a.root-servers.net.
> nstld.verisign-grs.com. 2018012700 1800 900 604800 86400
> .                       10800   IN      RRSIG   SOA 8 0 86400
> 20180209050000 20180127040000 41824 . i1JPur/fqut5jJ...
> 
> 
> (above examples edited for readability. No queries were harmed in the
> making of this).
> 
> I'm not really sure anymore who's point I'm making here, but I
> disagree that localhost queries hitting the DNS is rare, and that
> iterative resolvers already return NXD - some do, and some don't.

To add more to this, Unbound by default returns 127.0.0.1, and so does
Knot Resolver, because both decided to respect
https://tools.ietf.org/html/rfc6761#section-6.3

This is a security hole, and again, purpose of NXDOMAIN is to make it
fail safe instead of keeping insecure stub implementations doing what
they did up until now.

So again, I support documents in its current form.

Petr Špaček  @  CZ.NIC


> W
> </no hats>
> 
> 
> [0]: For non-Americans, M&Ms are kind of like Rowntree (now Nestlé)
> Smarties[0], but much less tasty.
> [1]: For American readers, Rowntree Smarties are like much much better
> M&M's, and *nothing* like the US Smarties (which are mainly sugar,
> citric acid and calcium stearate, but always taste like chalk to
> me...).
> We'll be in London soon, you should really give them a try...
> 
> 
>>
>> So what you seem to be asking for is to *require* implementations
>> that currently serve local data with the expected loopback addresses
>> (and don't forward towards the root) to stop doing as configured and
>> return NXDomain.  Despite the explicitly configured "knobs" that turn
>> on this non-default behaviour.
>>
>> I claim that this is too big a hammer for too small a nail.  There
>> is simply no need to do this.  A clear requirement to short-circuit
>> localhost name -> address resolution *before* it gets to the resolver
>> is quite sufficient.  I'm breathlessly enthusiastic for this part
>> of the draft. :-)
>>
>>> If you think there's no risk to applications that rely on
>>> this, obviously it's not worth doing.   The reason I'm being such a stickler
>>> about this is that we have beaucoup experience over the past two decades
>>> that if there is an attack surface, somebody will come up with an attack.
>>> It's better to fail safe than fail unsafe.   If apps are breaking all over
>>> the place because they use DNS to look up localhost, then we all win in
>>> the long run.
>>
>> Reports from the field seem to indicate that this is largely a
>> non-problem, and perhaps the maintainers of glibc and the like will
>> pay attention to this specification and ensure correct localhost
>> resolution without asking even the (e.g. glibc) DNS stub resolver,
>> let alone an upstream recursive resolver.
>>
>>> That said, I absolutely do not want to deprive you of the ability to do
>>> your hack.   I just don't think that the current text does that.
>>
>> The MUST says otherwise, and if we don't mean that, then we should
>> not say so.
>>
>>> If the way the stack accomplishes the MUST is to have some code in
>>> nsswitch.conf that does the right thing, I think that follows the MUST.
>>
>> It follows the MUST for the part I am breathlessly enthusiastic about,
>> the requirements on the hostname -> address resolution library.  No
>> problems with that at all.  My objection all along is with the MUST
>> at the recursive resolver.
>>
>>> The reason I drilled down into your use case is that I don't think there's
>>> ever going to be a time when Christos disables this behavior.   So I don't
>>> think this text is going to actually create an inconvenience for you.
>>
>> I'm fine with MUST NOT FORWARD, except when the DO bit is set in
>> the query, in which case I'm inclined to say that a validated
>> NXDomain from the root is better than a bogus NXDomain, and
>> is still (or more) secure.
>>
>>> Is there a way we can change what the text says so that it's sufficiently
>>> emphatic to make me happy, and sufficiently open to make you [not] unhappy?
>>
>> Yes.  Keep the MUST for the platform library.  Downgrade the MUST for
>> the iterative resolver to a SHOULD (absent local data), and either
>> exempt DNSSEC or explain why "bogus" local NXDomain is better than
>> a cacheable validated NXDomain from the roots.
>>
>> --
>>         Viktor.