Re: [kitten] [nfsv4] draft-ietf-nfsv4-rpcsec-gssv3: request for review

"Adamson, Andy" <William.Adamson@netapp.com> Fri, 01 August 2014 20:28 UTC

Return-Path: <William.Adamson@netapp.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3E3A71B28CE; Fri, 1 Aug 2014 13:28:32 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.903
X-Spam-Level:
X-Spam-Status: No, score=-6.903 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_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 h_oX9LL8jDHD; Fri, 1 Aug 2014 13:28:28 -0700 (PDT)
Received: from mx2.netapp.com (mx2.netapp.com [216.240.18.37]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A155B1B28CF; Fri, 1 Aug 2014 13:28:28 -0700 (PDT)
X-IronPort-AV: E=Sophos;i="5.01,782,1400050800"; d="scan'208";a="98348510"
Received: from vmwexceht05-prd.hq.netapp.com ([10.106.77.35]) by mx2-out.netapp.com with ESMTP; 01 Aug 2014 13:28:28 -0700
Received: from HIOEXCMBX01-PRD.hq.netapp.com (10.122.105.34) by vmwexceht05-prd.hq.netapp.com (10.106.77.35) with Microsoft SMTP Server (TLS) id 14.3.123.3; Fri, 1 Aug 2014 13:28:28 -0700
Received: from HIOEXCMBX03-PRD.hq.netapp.com (10.122.105.36) by hioexcmbx01-prd.hq.netapp.com (10.122.105.34) with Microsoft SMTP Server (TLS) id 15.0.913.22; Fri, 1 Aug 2014 13:28:26 -0700
Received: from HIOEXCMBX03-PRD.hq.netapp.com ([::1]) by hioexcmbx03-prd.hq.netapp.com ([fe80::6112:44a3:1946:292f%21]) with mapi id 15.00.0913.011; Fri, 1 Aug 2014 13:28:26 -0700
From: "Adamson, Andy" <William.Adamson@netapp.com>
To: Nico Williams <nico@cryptonector.com>
Thread-Topic: [nfsv4] draft-ietf-nfsv4-rpcsec-gssv3: request for review
Thread-Index: AQHPrAU48wbIQBIMg0W+Un2kpIHDeZu7PYKAgAB5yoCAAPRMgA==
Date: Fri, 01 Aug 2014 20:28:25 +0000
Message-ID: <8FD0C272-6FD3-44FE-BD3D-BAB220E0FF13@netapp.com>
References: <DC941FEB-725A-49E1-8C38-FF765454827C@netapp.com> <alpine.GSO.1.10.1407301239260.21571@multics.mit.edu> <20140801055401.GA7409@localhost>
In-Reply-To: <20140801055401.GA7409@localhost>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.1874)
x-originating-ip: [10.122.56.79]
Content-Type: text/plain; charset="Windows-1252"
Content-ID: <B8425CBD2F8C8540A2BEA4EBAE8661AB@hq.netapp.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Archived-At: http://mailarchive.ietf.org/arch/msg/kitten/OsupmLyi_3XZSpXM9DerXMd4Mqk
X-Mailman-Approved-At: Fri, 01 Aug 2014 14:35:25 -0700
Cc: "kitten@ietf.org" <kitten@ietf.org>, "Adamson, Andy" <William.Adamson@netapp.com>, NFSv4 <nfsv4@ietf.org>
Subject: Re: [kitten] [nfsv4] draft-ietf-nfsv4-rpcsec-gssv3: request for review
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.15
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: <http://www.ietf.org/mail-archive/web/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: Fri, 01 Aug 2014 20:28:32 -0000

On Aug 1, 2014, at 1:54 AM, Nico Williams <nico@cryptonector.com> wrote:

> On Thu, Jul 31, 2014 at 06:38:09PM -0400, Benjamin Kaduk wrote:
>> Hmm, this seems to have gotten rather long.  

Well, it’s two pages shorter than draft-williams-rpcsecgssv3-02.txt (!)

>> The most important part
>> is near the top, just after the refresher on the RPCSEC_GSS
>> protocol.
> 
> I may reply in bite sizes :)
> 
>> [...]
>> Three levels of protection are provided for the RPC bodies, none,
>> integrity, and privacy.  The choice of level for this attempt at
>> this RPC, as well as a sequence number unique to this transmission,
>> are encoded into the "credential", a part of the RPC request header;
>> there is a GSS MIC over the header, so the header (and protection
>> level and sequence number) are always protected.  The request
>> payload's encoding depends on the level; for none, it is unchanged.
>> [...]
> 
> Though "none" always MICs the header.
> 
>> Multi-principal authentication
>> 
>> This draft proposes a multi-principal authentication scheme,
>> restricted to just the case of a privileged client process on a
> 
> No, not only the case of a privileged client process.

Sure, but for the Multi-principal piece we do say the following which says that the use-case is privileged client process….

   RPCSEC_GSSv3 clients MAY assert a multi-principal authentication of
   the client host principal and a user principal.  This feature is
   needed, for example, when a client wishes to use authority assertions
   that the server may only grant if a user and a client are
   authenticated together to the server.  Thus a server may refuse to
   grant requested authority to a user acting alone (e.g., via an
   unprivileged user-space program), 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^6

   or to a client acting alone (e.g.
   when a client is acting on behalf of a user) but may grant requested
   authority to a client acting on behalf of a user if the server
   identifies the user and trusts the client.


 It is assumed that an unprivileged user-space program would not have



Adamson & Williams      Expires December 29, 2014              [Page 10]
^L
Internet-Draft                    NFSv4                        June 2014


   access to client host credentials needed to establish a GSS-API
   security context authenticating the client to the server, therefore
   an unprivileged user-space program could not create an RPCSEC_GSSv3
   RPCSEC_GSS_CREATE message that successfully binds a client and a user
   security context.

> 
> RPCSEC_GSSv3 wants to solve TWO problems:
> 
> - cache poisoning attacks on the client by the user
> - secure conveyance of privilege information for processes running with
>   more or even LESS privilege than the user normally would be accorded
> 
> Therefore we envision that RPCSEC_GSSv3 will *always* be used to
> establish security contexts on any ONC RPC client where the client can
> avail itself of a credential distinct from the user's.
> 
>> machine combining the (privileged) host's credentials with the
>> (unprivileged) user's credentials so as to take action on behalf of
>> the user.  This is a similar combination to that we are using for
>> RXGK_AFSCombineTokens (see draft-wilkinson-afs3-rxgk-afs),
> 
> Yes, it is similar to rxgk.
> 
>> restricted to just a combination of host and user credentials,
>> specifying which one is which.  I think this is the only
>> well-understood scenario for compount authentication at the moment,
>> and makes sense.
> 
> What is the antecedent of "this" here?  Did you mean that conveying
> local privilege information is not understood?
> 
>> The key material from the host's GSS context are used unchanged for
>> securing RPCs issued with the combined identity, but the opaque
>> RPCSEC_GSS context handle is changed to indicate that it represents
>> a "child" context which has the combined identity (and possibly
> 
> A new context results.
> 
>> other attributes as well, not relevant for multi-principal
>> authentication).  The creation of the child context involves sending
> 
> Yes.
> 
>> an authenticated RPC using the parent/host-credential context,
>> containing body data including a random nonce and the MIC of that
>> nonce using the "inner" context (i.e., the user's credentials).  The
>> reply contains the same nonce, but the MIC in the reply is performed
>> using the parent/host-credentials context.  The RPC to create the
>> child context is not permitted over a plaintext channel, and
>> requires either integrity protection, confidentiality+integrity
>> protection, or channel binding to a secure channel.
> 
> Eh?  No, confidentiality is neither needed nor called for for context
> establishment.
> 
>> However, I don't think this is strong enough; I think this scheme
>> requires the "privacy" level of protection.  Otherwise, an attacker
>> could replay the nonce+MIC and obtain an RPCSEC_GSS context that
>> will authenticate as the user from the "inner" context, without
>> actually proving that it possesses the user's credentials.  In
> 
> The client's credentials are required to make progress.

So you do need to be a ‘privileged client process’ - in order to use the client’s machine
credentials.

>  That stops
> replay attacks.  We need only bind things sufficiently to the new
> RPCSEC_GSS security context handle and the client credentials.

An evil user that can get root on a client machine wouldn’t need to bother with intercepting a nounce - it could simply create it’s own multi-principal RPCSEC_GSS_CREATE call because besides having access to the client host principal creds and gss_context, it also has access to all active user-principal contexts in the GSS context cache. So adding protection for the nounce is not required for the (currently only supported) case of client host principal and user-principal multi-principal authentication.

> 
> Sure, if you're not using integrity protection for the payloads then an
> attacker can hijack RPCs, but that was always true of RPCSEC_GSSv1.

> 
>> RXGK_AFSCombineTokens, we are not using (opaque) GSS credentials and
>> can explicitly combine the key material for a strong proof of
>> possession.  GSS credentials are opaque, and the GSS-API does not
>> really provide any primitives that seem applicable here. So, I would
>> recommend requiring privacy protection for this call.
> 
> I'll have to take a look (Andy produced the latest update and it's been
> a while since I've looked at RPCSEC_GSSv3), but IIRC it suffices to
> provide integrity protection.

This is the current wording:

   The client MUST use one of the following security services to protect
   the RPCSEC_GSS_CREATE or RPCSEC_GSS_LIST control message:

   o  rpc_gss_svc_channel_prot (see RPCSEC_GSSv2 [4])

   o  rpc_gss_svc_integrity

   o  rpc_gss_svc_privacy


> 
> More tomorrow.

Thanks 

—>Andy
> 
> Nico
> -- 
> 
> _______________________________________________
> nfsv4 mailing list
> nfsv4@ietf.org
> https://www.ietf.org/mailman/listinfo/nfsv4