[DNSOP] draft-ietf-dnsop-dnssec-roadblock-avoidance & support for local DNS views

Petr Spacek <pspacek@redhat.com> Wed, 11 February 2015 16:24 UTC

Return-Path: <pspacek@redhat.com>
X-Original-To: dnsop@ietfa.amsl.com
Delivered-To: dnsop@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D74741A07BE for <dnsop@ietfa.amsl.com>; Wed, 11 Feb 2015 08:24:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -5.013
X-Spam-Level:
X-Spam-Status: No, score=-5.013 tagged_above=-999 required=5 tests=[BAYES_20=-0.001, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] 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 0PTIHEamiZvD for <dnsop@ietfa.amsl.com>; Wed, 11 Feb 2015 08:24:24 -0800 (PST)
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (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 E38151A8968 for <dnsop@ietf.org>; Wed, 11 Feb 2015 08:24:23 -0800 (PST)
Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t1BGOLGc022889 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for <dnsop@ietf.org>; Wed, 11 Feb 2015 11:24:22 -0500
Received: from pspacek.brq.redhat.com (pspacek.brq.redhat.com [10.34.128.7]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t1BGOJ17026071 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO); Wed, 11 Feb 2015 11:24:20 -0500
Message-ID: <54DB8233.5010405@redhat.com>
Date: Wed, 11 Feb 2015 17:24:19 +0100
From: Petr Spacek <pspacek@redhat.com>
Organization: Red Hat
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: dnsop@ietf.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26
Archived-At: <http://mailarchive.ietf.org/arch/msg/dnsop/lVEKY5-OAzI1lKCrW0Da5Et4oVc>
Cc: Tomas Hozza <thozza@redhat.com>
Subject: [DNSOP] draft-ietf-dnsop-dnssec-roadblock-avoidance & support for local DNS views
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.15
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: <http://www.ietf.org/mail-archive/web/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: Wed, 11 Feb 2015 16:24:33 -0000

Hello dnsop,

draft-ietf-dnsop-dnssec-roadblock-avoidance is a nice idea in general but
current version of "Roadblock Avoidance", section 5, version 01 has a
significant drawback:

       Else if the resolver is labeled "Not a DNS Resolver" or
          "Non-DNSSEC capable"

           Mark it as unusable and try next resolver

This effectively cuts off the client from local DNS view, which can
effectively mean that internal resources on the network will be unavailable.

On public networks it may be perfectly fine to sacrifice local names to get
DNSSEC validation.

However, on internal networks it is a big problem for practical usability of
the system. I personally experienced this when using dnssec-trigger on
networks where DHCP does not send complete list of local DNS domains. (Also, I
have to say that the fact that dnssec-trigger disables DNSSEC validation for
list of domains supplied DHCP effectively takes all the security away ...)

Generally my concern is about practical usability of the proposed solution:
Imagine that I'm road-warrior/consultant who is traveling all the time and is
working for different companies. When I arrive to a customer I should not need
to spend time fiddling with network configuration to get connected to local
network before I can start working on customer's problem.


Few guys in Red Hat proposed "hacky but almost-reliable automatic" way how to
improve usability without sacrificing security.


Disclaimer
==========
Method described below is covered by US patent application named "USING DOMAIN
NAME SYSTEM SECURITY EXTENSIONS IN A MIXED-MODE ENVIRONMENT".

See Red Hat, Inc. Statement of Position and Our Promise on Software Patents:
http://www.redhat.com/legal/patent_policy.html


The Hack
========
Fundamental assumption:
Internal & external DNS view are both signed with the same keys or both
unsigned. This assumption allows the method to work without explicit
configuration on every client and removes dependency on reliable/secure
network-detection logic.


The main idea can re-phrased as amendment to section 5 of the draft:

   The general fallback approach can be described by the following
   sequence:

       If the resolver is labeled as "Validator" or "DNSSEC aware"
           Send query through this resolver and perform local
           validation on the results.

           If validation fails, try the next resolver

       Else if the resolver is labeled "Not a DNS Resolver" or
          "Non-DNSSEC capable"
           Mark it as unusable and try next resolver

--- amended text begins here ---

       Else if no more resolvers are configured and if direct queries
       are supported
          1. Try iterating from Root

          2. If the answer is SECURE/BOGUS
            Return the result of iteration.

          3. If the answer is INSECURE
            Re-query "Non-DNSSEC capable" servers and get answer
            from "Non-DNSSEC capable" servers.
            Set AD bit to 0 before returning the answer to client.

       Else return a useful error code


This method covers DNS split-views with internal unsigned views pretty
nicely as long as the fundamental assumption holds. (Naturally it works only
for cases where fallback to iteration is possible.)

We wanted to write Unbound module for this but it is harder than it seems.
(Proof-of-concept with stand-alone DNS proxy works fine, we have problem with
Unbound module architecture - not with the described method.)

Feel free to incorporate the idea to the draft if you wish.

-- 
Petr Spacek  @  Red Hat