Re: [kitten] Review of draft-ietf-kitten-channel-bound-flag-04

Sam Hartman <hartmans-ietf@mit.edu> Wed, 13 March 2019 20:05 UTC

Return-Path: <hartmans-ietf@mit.edu>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9132C1310CB for <kitten@ietfa.amsl.com>; Wed, 13 Mar 2019 13:05:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.252
X-Spam-Level:
X-Spam-Status: No, score=-0.252 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RDNS_DYNAMIC=0.982, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
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 3Uh_PKXQ9XIW for <kitten@ietfa.amsl.com>; Wed, 13 Mar 2019 13:05:03 -0700 (PDT)
Received: from mail.suchdamage.org (ec2-52-9-186-167.us-west-1.compute.amazonaws.com [52.9.186.167]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E83FA13104B for <kitten@ietf.org>; Wed, 13 Mar 2019 13:05:02 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by mail.suchdamage.org (Postfix) with ESMTP id F26702D640; Wed, 13 Mar 2019 16:05:01 -0400 (EDT)
Received: from mail.suchdamage.org ([127.0.0.1]) by localhost (mail.suchdamage.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id k6Vk8Oy9itrC; Wed, 13 Mar 2019 16:05:01 -0400 (EDT)
Received: from carter-zimmerman.suchdamage.org (c-24-91-242-186.hsd1.ma.comcast.net [24.91.242.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "laptop", Issuer "laptop" (not verified)) (Authenticated sender: hartmans-laptop) by mail.suchdamage.org (Postfix) with ESMTPSA; Wed, 13 Mar 2019 16:05:01 -0400 (EDT)
Received: by carter-zimmerman.suchdamage.org (Postfix, from userid 8042) id 9D344C07D7; Wed, 13 Mar 2019 16:04:31 -0400 (EDT)
From: Sam Hartman <hartmans-ietf@mit.edu>
To: Nico Williams <nico@cryptonector.com>
Cc: Sam Hartman <hartmans-ietf@mit.edu>, kitten@ietf.org
References: <tslbm38vl8h.fsf@suchdamage.org> <20190311185706.GD4211@localhost>
Date: Wed, 13 Mar 2019 16:04:31 -0400
In-Reply-To: <20190311185706.GD4211@localhost> (Nico Williams's message of "Mon, 11 Mar 2019 13:57:07 -0500")
Message-ID: <tsltvg6ilrk.fsf@suchdamage.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/kitten/xD_PM6GPpL6HS6rEqf0L2R-moKw>
Subject: Re: [kitten] Review of draft-ietf-kitten-channel-bound-flag-04
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Mar 2019 20:05:05 -0000

>>>>> "Nico" == Nico Williams <nico@cryptonector.com> writes:


    >> This draft is based on the premis that the GSS-API channel
    >> binding behavior is flawed and that there's a security problem
    >> associated with not knowing if channel bindings are validated.

    Nico> It's only flawed if you'd like to start using CB in
    Nico> applications that lack a negotiation for it.  Modifying
    Nico> application protocols is non-trivial.

How about.
"GSS-APi does not provide a mechanism to add channel bindings to
applications without adding a negotiation mechanism to determine when
channel bindings can be relied on.
This draft adds such a mechanism?
"

I'd avoid the word flaw in such a case, but don't care that much about
the text.  What I do care about is that I now understand what you're
trying to do, and I'm really happy about that.  I support the goal, with
some caviats I'll discuss below.


    >> However, by jumping to the conclusion that we're fixing a flaw, I
    >> think we approach interoperability and operational aspects with
    >> inadequate thought.  I think we discard some of the options too
    >> early.
    >> As I write this up, I'm realizing that the draft authors seem to
    >> be making an assumption that there are applications in the wild
    >> that pass in channel bindings to the initiator but not the
    >> acceptor or vise versa.  The only such application I'm aware of
    >> is gss ftp, which passed IP address channel bindings into the
    >> acceptor and optionally initiator.  It would help me evaluate
    >> whether there is a security problem to understand these
    >> applications better.  I note that SASL is not such an
    >> application.

    Nico> I believe IWA is such an application...

I'm not familiar with that application.
Pointer?

    >> I think the current draft has several shortcomings:
    >> 
    >> * I think that it inaccurately describes what RFC 2743 says and
    >> so it does not call out backward incompatible changes.

    Nico> There should be no backwards-incompatible changes.

I listed one later in my review.
In particular, RFC 2743 permits a mechanism to entirely ignore CB.  This
draft requires that if an initiator passes in channel bindings without
the new flag, then CB fails.
I think that is not required by RFC 2743.  As such, this makes legal
mechanisms under 2743 into non-compliant mechanisms and thus is a
backward compatible change.

    Nico> I am open to re-designing this extension.

    >> * I think that more consideration needs to be given to situations
    >> where one side supports the channel bound flag and the other does
    >> not and what if any signaling changes are required.

    Nico> We might want to extend the Kebreros mechanism to provide
    Nico> signalling about this from the acceptor to the initiator.

    Nico> That could be done in a separate I-D.

When I read the current draft it's not clear to me which sides get the
flag set and who knows CB has succeeded.  One advantage to adding
Kerberos signaling here or in a normative dependency is that we could
give both sides of the conversation info about whether CB has succeeded.

I think the current draft is too silent on whether the initiator learns
about CB success, the acceptor or both.  And unless we mandate
signaling, I think who learns about CB success depends a lot on the
mechanism involved.

I'd like to walk through what guarantees we can make, and then make sure
that is actually what applications need.

    >> * I think it does not consider behavior when mutual
    >> authentication is not requested.

    Nico> In that case the acceptor could not signal CB status to the
    Nico> initiator, not via a context token, though the application
    Nico> still could if it was necessary.

First, you seem to be assuming that it's the acceptor that verifies CB.
Is that actually guaranteed by GSS?

Second, how does the acceptor application signal to the initiator about
CB?
The channel might not be verified, so the initiator cannot depend on
that.
There's no mutual authentication, so it's not like the initiator can
know that a wrap token is from the acceptor.
I actually think CB may be kind of useless without mutual auth.
My point is not that the draft is broken, simply that it doesn't cover
the case, and I think application designers are unlikely to be sure on
their own.


    >> * I'm concerned that in thinking about channel binding we have
    >> not given adequate thought to how channel binding interacts with
    >> proxies, reverse proxies and the like.  I'm concerned that this
    >> draft makes that situation worse, and so I'd recommend exploring
    >> that at least enough to understand whether I'm right.

    Nico> As long as we provide a way to discover that CB failed, but
    Nico> continue context establishment, we are making things better,
    Nico> not worse.

To be concrete, I'm concerned that this makes channel binding better
 enough to work with proxies, but doesn't provide us channel
 binding type agility.

Addressing my concern might look like talking about proxies in the
security considerations section, noting that things like endpoint
channel bindings   are easier than unique when you have proxies.
And then noting that we have no plan for what happens when an
application without cb negotiation needs to change the preferred channel
binding type.
    >> * Please get review from multiple implementors before
    >> standardizing the create_context stuff.
    [This point has been addressed; Luke seemed fine when he wrote to
    the WG]