Re: [EXTERNAL] Re: Review of draft-ietf-nfsv4-rpc-tls04

Chuck Lever <[email protected]> Mon, 9 Dec 2019 11:25:54 -0500
Newsgroups gmane.ietf.nfsv4
Message-ID <[email protected]>

> On Dec 9, 2019, at 11:11 AM, Tom Talpey <[email protected]> wrote:
> 
>> -----Original Message-----
>> From: nfsv4 <[email protected]> On Behalf Of Chuck Lever
>> Sent: Sunday, December 8, 2019 11:59 AM
>> To: Tom Talpey <[email protected]>
>> Cc: NFSv4 <[email protected]>
>> Subject: Re: [nfsv4] [EXTERNAL] Re: Review of draft-ietf-nfsv4-rpc-tls04
>> 
>> Having had some time to digest this....
> 
> Ok!
> 
>>> On Dec 6, 2019, at 4:44 PM, Tom Talpey <[email protected]> wrote:
>>> 
>>> On 12/6/2019 4:30 PM, Chuck Lever wrote:
>>>>> On Dec 6, 2019, at 3:58 PM, Tom Talpey <[email protected]> wrote:
>>>>> 
>>>>> On 12/6/2019 2:46 PM, Chuck Lever wrote:
>>>>>>> On Dec 6, 2019, at 2:24 PM, Tom Talpey <[email protected]>
>> wrote:
>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: Chuck Lever <[email protected]>
>>>>>>>> Sent: Friday, December 6, 2019 2:12 PM
>>>>>>>> To: David Noveck <[email protected]>; Black, David
>>>>>>>> <[email protected]>
>>>>>>>> Cc: Tom Talpey <[email protected]>; NFSv4 <[email protected]>
>>>>>>>> Subject: Re: [nfsv4] [EXTERNAL] Re: Review of draft-ietf-nfsv4-rpc-tls04
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Dec 6, 2019, at 11:53 AM, David Noveck
>> <[email protected]>
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> On Fri, Dec 6, 2019 at 10:28 AM Tom Talpey
>> <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: nfsv4 <[email protected]> On Behalf Of Chuck Lever
>>>>>>>>>> Sent: Friday, December 6, 2019 10:11 AM
>>>>>>>>>> To: David Noveck <[email protected]>
>>>>>>>>>> Cc: NFSv4 <[email protected]>
>>>>>>>>>> Subject: [EXTERNAL] Re: [nfsv4] Review of draft-ietf-nfsv4-rpc-tls04
>>>>>>>> 
>>>>>>>>>> Essentially, we want to require that the host separates
>>>>>>>>>> the encryption of each tenant's traffic.
>>>>>>>>> 
>>>>>>>>> I think the move from "user identiy domain" to "tenant" is helpful
>> here even
>>>>>>>>> though you would have to explain what multipe tenants, which, as
>> Tom
>>>>>>>>> points out, can alsooccur without virtalization per se, bein involved.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Fair 'nuf. To me "tenant" and "user identity domain" mean the same
>> thing
>>>>>>>> in this context. In Linux, a tenant container is represented by a set of
>>>>>>>> namespaces, one of which controls the user identity mapping. So "user
>>>>>>>> identity domain" seems natural to me, but maybe not to others.
>>>>>>>> 
>>>>>>>> RFC 4949 does not have a convenient definition of "tenant."
>>>>>>>> 
>>>>>>>> RFC 7644 Section 6 comes close.
>>>>>>>> 
>>>>>>>> David Black, perhaps you might have thoughts based on your work on
>>>>>>>> network virtualization overlays ( RFCs 736[45] )?
>>>>>>> 
>>>>>>> I'm arguing the opposite - that there's no need to bring in "tenant" or
>>>>>>> "virtualization" or adding references to nvo, etc. Unless you have a very
>>>>>>> specific vulnerability in mind that this needs to cover.
>>>>>>> 
>>>>>>> In other words, keep it simple and at the highest-level abstraction
>> possible.
>>>>>> I'm flexible, and philosophically agree that an abstract requirement
>>>>>> would be best. I just don't yet see how to make that happen. "Tenancy"
>>>>>> seems to me like an inseparable part of the discussion.
>>>>> 
>>>>> [replying from a different account]
>>>>> 
>>>>> I think "tenant" is a loaded word, especially when you seek an
>>>>> RFC-based definition. I understand the tenant container and namespace
>>>>> approach, but it's only one approach, and shouldn't be written into
>>>>> the protocol justification.
>>>>> 
>>>>> For example, the SMB3 protocol protects its traffic with per-user
>>>>> keys, and even safely mixes user traffic on a single connection
>>>>> because of this isolation. But this is implemented independent of
>>>>> containers and virtualization.
>>>> With RPCSEC GSS, each user gets its own key as well.
>>> 
>>> Indeed, yes.
>>> 
>>>> With TLS, a set of users shares a single host key. The constraint
>>>> we need to state here is how much key sharing is secure/recommended/
>>>> allowed.
>>> 
>>> I disagree - this is an implementation choice not a TLS requirement.
>>> This is the trap I think the draaft needs to avoid falling into.
>> 
>> What I meant is "With the current iteration of RPC-on-TLS,". I agree
>> TLS itself does not make a single key per client requirement.
> 
> Ok good that we're in agreement. I guess I'm suggesting to avoid the
> notion that this is an "iteration". In the protocol spec, it should strive
> to map out an architecture, and to note where a specific approach
> may be desirable, allowed, limited, or whatever. This is why I initially
> pointed out it's a key management issue at its base, i.e. it is not an
> RPC/TLS protocol requirement or restriction. This observation does
> not lead to any specific wording suggestion, but it does color the
> approach.
> 
>>> A single machine key is great for protecting HTTPS to a laptop, it
>>> covers traffic through unsafe networks and gives us a bit of server
>>> authentication. But NFS is a different scenario.
>>> 
>>>> In addition, Section 4.2 has this language:
>>>>>   In either of these modes, RPC user authentication is not affected by
>>>>>   the use of transport layer security.  Once a TLS session is
>>>>>   established, the server MUST NOT substitute RPC_AUTH_TLS, or the
>>>>>   remote identity used for TLS peer authentication, for existing forms
>>>>>   of per-request RPC user authentication specified by [RFC5531].
>>>> The document explicitly prohibits the use of these keys for making
>>>> authorization decisions about individual users. In other words, a
>>>> TLS identity in this case is not the same as an RPC user.
>>> 
>>> Right. But the language you quote is pretty vague. "Existing forms of
>>> per-request RPC user authentiction" I have to think about that long and
>>> hard, much less translate to a specific thing to MUST NOT do.
>> 
>> It does seem vague to the point of being unimplementable. I will have
>> to strengthen this paragraph significantly. Consider below:
>> 
>> 
>>>>>> If you have an example, that would help.
>>>>> 
>>>>> Well, it's the same thing - per-user NFS/RPC/TLS mounts, but it
>>>>> leaves out any mention of containers or namespaces or tenancy.
>>>>> Those are today's Linux approach, but they are by no means required
>>>>> to drive the protocol. I'm just suggesting the draft can say this
>>>>> without any of that baggage.
>>>> Again, I don't disagree with any of this. But I'm stuck when trying
>>>> to bridge the gap between "the draft can say this" and actually
>>>> writing the text. I'm not arguing with you, just trying to shake out
>>>> what it is we need to say in the document.
>>>>> A user then becomes an "authenticated principal", and the RPC/TLS
>>>>> connection may therefore be protected by a key derived from this
>>>>> authentication.
>>>> As above: RPC on TLS explicitly does not bind an RPC user to a TLS
>>>> identity in this iteration of the protocol. RPC users share the
>>>> encrypted TLS session. The TLS identity represents the client, not
>>>> the users.
>>> 
>>> But again, why not? Is that forbidden somehow? Or is it simply the
>>> way most OS's implement it?
>> 
>> The reason the current protocol does not bind the client certificate
>> to a particular user is because we want to enable encryption in the
>> following usage scenarios:
>> 
>> - The client has no certificate
>> 
>> - The client has a certificate that is shared amongst some or all
>>   of its users
>> 
>> - Each user has her own certificate (or, the client has a single
>>   user which is indistinguishable from the host itself)
>> 
>> The problem is that, given the currently proposed protocol extension,
>> the server has no way to distinguish between the latter two cases.
> 
> This is an excellent point and should be described in the document.

For the next revision, I'll include that distinction. Unless someone
has a brilliant suggestion for avoiding this conundrum.

The Coke/Pepsi text will focus on client-side key management, as you
suggested.

After WGLC closes, I'll post a link to a diff between the reviewed
document (-04) and my proposed changes to address LC comments. We can
tune up the language at that point.


>> IMO this is why the server MUST NOT treat the client's TLS identity
>> as identical to an RPC user in this iteration of the protocol.
>> 
>> I've cc'd my co-author for his thoughts, hoping he has had an
>> opportunity to follow this thread.
> 
> I didn't see a cc on this, but I'm sure he reads nfsv4@ietf :-)

Doi. It was there at one point. Not sure why it disappeared.


> Tom.
> 
>>>>> Or, if the administrator allows, it can be a
>>>>> per-machine key, or shared in other ways.
>>>> That's the (only) model we are trying to express here. And perhaps
>>>> we need to take care not to prevent a future protocol iteration
>>>> from going further and binding a single RPC user to a TLS identity.
>>>>> But this would not be
>>>>> as secure as the former, and the implications need to be stated.
>>>> To state those implications, IMO we need to express the concept of
>>>> a set of one or more users that reside in a single user identity
>>>> domain -- ie, users that are administered in the same security realm.

--
Chuck Lever



_______________________________________________
nfsv4 mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/nfsv4