Re: [nfsv4] Benjamin Kaduk's Discuss on draft-ietf-nfsv4-rpc-tls-08: (with DISCUSS and COMMENT)
Chuck Lever <chuck.lever@oracle.com> Thu, 09 July 2020 14:39 UTC
Return-Path: <chuck.lever@oracle.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DD0AA3A0C07; Thu, 9 Jul 2020 07:39:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.101
X-Spam-Level:
X-Spam-Status: No, score=-2.101 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=oracle.com
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 fMZSQ-fPcKXg; Thu, 9 Jul 2020 07:39:27 -0700 (PDT)
Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) (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 0EEAC3A0BE9; Thu, 9 Jul 2020 07:39:26 -0700 (PDT)
Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 069EakGx040442; Thu, 9 Jul 2020 14:39:25 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=content-type : mime-version : subject : from : in-reply-to : date : cc : content-transfer-encoding : message-id : references : to; s=corp-2020-01-29; bh=F/fqbyfxJHwGO5fnVMhxT4sp64kR2zVfEL/MSsOm7xg=; b=q0okvJQGUzOxGGmifS45BrHEqRfsVyZgri81QVY1hwfZvRr+P4bMmvmyUxZerNTgRQZp /rRClyAKbHyTkZ8cIjxK1HxlfFlJ80jUyt9Ek4Wt6FL3oEsF9exENXWJ5koeMt7ZQgbz x0WI1g8h/UMrYI+3CzaoOFXWDH3AhfSPxcV/ZZ9GW3yu8Y24fefGqmCQ/eTpS/zHptkv xDER7nA1Oyq7D0PsV4blbfOaUPpR5hpJEmiRN1WeCk4I67hdN/rkkDKDkq9lQX+0Snde uUdHO1f4V0lXzqzg5uWrn733g9mxXk1GHo/8xjICGLdpRoC5eylSGqrx7iQixjMQz4Jg Aw==
Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2120.oracle.com with ESMTP id 325y0aj1me-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 09 Jul 2020 14:39:25 +0000
Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 069EdNSi111319; Thu, 9 Jul 2020 14:39:24 GMT
Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3020.oracle.com with ESMTP id 325k3hbpn3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 09 Jul 2020 14:39:23 +0000
Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 069EdIov030788; Thu, 9 Jul 2020 14:39:19 GMT
Received: from anon-dhcp-153.1015granger.net (/68.61.232.219) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 09 Jul 2020 07:39:18 -0700
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\))
From: Chuck Lever <chuck.lever@oracle.com>
In-Reply-To: <159419140773.2153.2711644434582054796@ietfa.amsl.com>
Date: Thu, 09 Jul 2020 10:39:16 -0400
Cc: The IESG <iesg@ietf.org>, draft-ietf-nfsv4-rpc-tls@ietf.org, nfsv4-chairs@ietf.org, nfsv4@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <D74C936B-212A-4416-82AA-EDCAEAE71665@oracle.com>
References: <159419140773.2153.2711644434582054796@ietfa.amsl.com>
To: Benjamin Kaduk <kaduk@mit.edu>
X-Mailer: Apple Mail (2.3445.104.14)
X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9677 signatures=668680
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxscore=0 spamscore=0 malwarescore=0 phishscore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007090109
X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9677 signatures=668680
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 priorityscore=1501 spamscore=0 phishscore=0 clxscore=1011 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 bulkscore=0 suspectscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007090109
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/aEz7aJuFA0oUvRLtl63qpicE1F0>
Subject: Re: [nfsv4] Benjamin Kaduk's Discuss on draft-ietf-nfsv4-rpc-tls-08: (with DISCUSS and COMMENT)
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 09 Jul 2020 14:39:31 -0000
Hi Ben- Thanks for your thorough review and comments. I'd prefer to nail down the document updates wrt Roman's DISCUSS / COMMENTs before responding to yours. If that is not acceptable, please let me know! > On Jul 8, 2020, at 2:56 AM, Benjamin Kaduk via Datatracker <noreply@ietf.org> wrote: > > Benjamin Kaduk has entered the following ballot position for > draft-ietf-nfsv4-rpc-tls-08: Discuss > > When responding, please keep the subject line intact and reply to all > email addresses included in the To and CC lines. (Feel free to cut this > introductory paragraph, however.) > > > Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html > for more information about IESG DISCUSS and COMMENT positions. > > > The document, along with other ballot positions, can be found here: > https://datatracker.ietf.org/doc/draft-ietf-nfsv4-rpc-tls/ > > > > ---------------------------------------------------------------------- > DISCUSS: > ---------------------------------------------------------------------- > > I support Roman's Discuss points. > > Sorry to provide so many new substantive points here -- I was only able to > follow the email discussions in the WG (and not completely, even) but not to > actually read the document earlier. It hopefully goes without saying, but > the goal is to make sure we get it right, since it's going to be an important > pillar for the future of things; I'm happy to see that this is advancing. > > (1) I don't think that the claim in Section 4.2 that "[b]oth RPC and TLS have > peer and user authentication" is correct, at least given my understanding of > those terms. Using this document's definition of RPC "peer authentication" > as analogous to TLS server authentication, the functionality that TLS calls > "mutual authentication" is more analogous to RPC client authentication, > though it is sometimes repurposed for use for user authentication, with > concommittant bad user experience. This analogy does not seem critical to > the mechanisms of this document, so I believe we should remove or modify it. > > (2) The mention of using RPCSEC_GSS with GSS channel bindings to TLS is > quite underspecified. Unfortunately, this is largely the fault of other > specifications, but we have to deal with the fallout. On first glance (but > subject to further clarification/change), it seems like we should: > > - Say what channel binding type (from the registry that RFC 5929 registered > stuff in) is to be used -- just citing 5929 doesn't help, since it > mentions three different ones (none of which are really right for TLS 1.3, > see below) > > - provide a mechanism for the peers to determine whether GSS channel binding > to TLS is to be used. (As discussed in > draft-ietf-kitten-channel-bound-flag, the current state of things GSS is > that if one party supplies channel bindings but the other doesn't, the > security context negotiation fails, which is usually not the best for > usability.) Since this is a greenfield GSS-API application, the simplest > thing by far is to just say "always provide the channel bindings when > using RPCSEC_GSS over TLS". It's even the more secure option, too :) > > - give more detail about what value to provide as the 'chan_binding' input > to the GSS security context negotiation. We currently reference RFC 5929, > that defines three different channel-binding values, but none of them are > really usable for TLS 1.3 (as discussed in > draft-ietf-kitten-tls-channel-bindings-for-tls13). Most likely this will > mean using the tls-exporter value from that document. > > (3) Please check this reference in Section 5.1.1: > > Reverse-direction operation occurs only on connected transports such > as TCP (see Section 2 of [RFC8166]). [...] > > It seems likely that RFC 8167 was intended... > > (4) I don't think it's particularly safe to suggest that non-protected RPCs > should be exchanged on the same 5-tuple that just terminated a DTLS > association, since neither DTLS nor UDP provide in-order delivery, so there > is ambiguity as to whether a datagram should be interpreted as DTLS > protected or not. This is particularly problematic in the face of the three > different DTLS record headers (DTLSPlaintext, DTLSCiphertext(full), and > DTLSCiphertext(minimal)) with something like 10 or 11 different possible > values for the first byte that might be in flight, with limited "magic > number" verification fields available. I think I need some input from the > TSV ADs about what the options are, though -- while a cooling-off period > might be fine if an ephemeral port is in use, it seems problematic for cases > where fixed port numbers are used for both source and destination. > > (5) Section 5.2.1 requires that: > > * Implementations SHOULD indicate their trusted Certification > Authorities (CAs). > > Indicate to whom? > > (6) The usage of RFC 6125 procedures in Section 5.2.1 seems counter to its > intent. Specifically, we seem to be saying "the peer gave me a cert, let me > look through it to see if it has something I like", but RFC 6125's intended > procedure is "I know a list of names that I expect to see at least one of in > the cert; these rules tell me whether the cert is valid for any such name". > It's not entirely clear that it's appropriate for this document to specify > how the client has to order its list of names by type (per Section 6.1 of > RFC 6125's "The client constructs a list of acceptable reference > identifiers"), which the bit about "The following precedence applies" seems > to be doing. To the extent that we give a recommendation to use DNS-ID > instead of CN-ID, and ipAddress SAN instead of CN-ID, that's already covered > by RFC 6125; it would be okay for us to say "use DNS-ID or iPAddress SAN", > though. (Roman's comment about "why not a normative MUST" for putting IP > addresses in the iPAddress SAN is related, and if we don't have a compelling > reason to allow the flexibility, we should limit to the specific > DNS-ID/iPAddress options without allowing CN-ID.) > > (6.1) Note additionally that if wildcard certificates are to be used, RFC > 6125 requires the application protocol specification to give details on how > they are to be used. > > (6.2) RFC 6125's procedures are (facially, at least) only valid for TLS > server authentication. We also want to authenticate TLS clients, so we > should say whether we expect the same procedures to be used, or what > procedures should be used (even just as how it differs from the RFC 6125 > ones). Of particular note is that, since the server is not initiating the > network connection, it is unlikely to have a preconceived notion of what > client identity to expect, and is likely limited to attempting to extract > something from the certificate. In this scenario a precedence list (as I > complained about being inconsistent with RFC 6125 above) would be > appropriate. > > (7) Section 5.2.1 uses the phrase "renegotiate the TLS session". > Renegotiation is not defined or allowed for TLS 1.3; generally one would > need to either remember the presented certificate and re-run the validation > process on it or shutdown the TLS connection and make a new one, though in > theory one could try to define a mechanism using post-handshake > authentication. (I don't recommend the latter, though; it's not widely > implemented/used.) > > (8) Can we clarify the status of DNSSEC (or DANE) requirements? Section 1 > assumes that support for DNSSEC is already available in an RPC > implementation, but Section 7.1.1 says that "Clients [sic] implementors can > choose from" a list of things including DANE TLSA records. Why would we > require DNSSEC support but not using the records if they're present? > > (9) I agree with Roman('s comment) that Sections 5.2.2 and 5.2.4 should give > a minimum amount of information to be exposed to the administrator for > implementing the trust mode. > > > ---------------------------------------------------------------------- > COMMENT: > ---------------------------------------------------------------------- > > I'm surprised that we don't make a normative reference to BCP 195's > "Recommendations for Secure Use of Transport Layer Security (TLS) and > Datagram Transport Layer Security (DTLS)" (we have only an informative > reference from the security considerations). > > Abstract > > I can't quite put my finger on it, but something about "enables encryption > of in-transit Remote Procedure Call (RPC) transactions" rubs me the wrong > way. I think I want to change what the "in transit" binds to, since what we > are doing is encrypting RPC messages while they are in transit, as opposed > to applying protection to just the subset of messages that are "in transit". > > Section 1 > > It > strongly recommended that newly defined Internet protocols should > make a genuine effort to mitigate monitoring attacks. Typically this > mitigation is done by encrypting data in transit. > > I suggest s/is done by/includes/, since in some cases padding or other > side-channel-resistance mechanisms are also used. > > * Parts of each RPC header remain in clear-text, constituting a > significant security exposure. > > "Security" is kind of a catch-all term; it would be good to be more precise, > here, perhaps as "constituting a needless loss of metadata confidentiality". > > Moreover, the use of AUTH_SYS remains common despite the adverse > effects that acceptance of UIDs and GIDs from unauthenticated clients > brings with it. Continued use is in part because: > > * Per-client deployment and administrative costs are not scalable. > > This writing could be tidied up; it currently can be read as saying that the > deployment/administrative costs are of AUTH_SYS, but really the costs belong > to the only currently defined alternative to AUTH_SYS. Perhaps, "Per-client > deployment and administrative costs for the only defined alternative to > AUTH_SYS are expensive at scale". > > * Host identity management and user identity management must be > enforced in the same security realm. In certain environments, > different authorities might be responsible for provisioning client > systems versus provisioning new users. > > I think this is only true from a certain point of view. They have to be > related, and (assuming Kerberos since non-Kerberos RPCSEC_GSS isn't really a > thing) a cross-realm relationship would have to exist in at least one > direction when client system and user provisioning are managed by separate > kerberos realms, but the authorities in question do not need to be exactly > the same. > > The alternative described in the current document is to employ a > transport layer security mechanism that can protect the > confidentiality of each RPC connection transparently to RPC and > upper-layer protocols. The Transport Layer Security protocol > > side note: I'd consider an editorial rewording to something like: > > % In light of the difficulties and issues with both the mechanisms currently > % defined for RPC protection and/or authentication, and the continued > % inability to make significant progress in mitigating those concerns, this > % document takes a new approach by defining a third mechanism to complement > % the existing ones. The confidentiality of each RPC connection can be > % protected transparently to the RPC and upper-layer protocols by use of a > % transport-layer security mechanism. The Transport Layer Security protocol > > Encryption By Default: Transport encryption can be enabled without > additional administrative tasks such as identifying client systems > to a trust authority, generating additional keying material, or > provisioning a secure network tunnel. > > To clarify Roman's comment, it seems worth specifying that this is without > additional *per-client* keying material. Generating per-server keying > material is clearly a minimum requirement. > > The current document specifies the implementation of RPC on an > encrypted transport in a manner that is transparent to upper-layer > protocols based on RPC. The imposition of encryption at the > transport layer protects any upper-layer protocol that employs RPC, > without alteration of that protocol. > > nit: this paragraph, especially the first sentence, feels pretty redundant > with the paragraph that I proposed a rewording of. > > that do not support TLS. However, specifications for RPC-based > upper-layer protocols should choose to require even stricter policies > that guarantee encryption and host authentication is used for all RPC > transactions. [...] > > We could probably cite 7258 again to strengthen this argument. I though > 7435 (opportunistic security) also had some applicable text, but am not > finding it right now. > > The protocol specification in the current document assumes that > support for RPC, TLS, PKI, GSS-API, and DNSSEC is already available > in an RPC implementation where TLS support is to be added. > > We assume that TLS is available where TLS support is to be added? That > might merit a bit more explanation. > > Also, what exactly does "PKI" mean, here? PKIX X.509 certificates? > > Section 4.1 > > The mechanism described in the current document interoperates fully > with RPC implementations that do not support RPC-over-TLS. Policy > settings on the RPC-over-TLS-enabled peer determine whether RPC > > I'd consider joining the two sentences via ", subject to policy settings on > the RPC-over-TLS-enabled peer that determine". > > The RPC client might query the RPC server's rpcbind service to make > this selection. In all cases, an RPC server MUST listen on the same > > Is there a reference we could put in for the rpcbind service? > > containing a NULL RPC procedure with an auth_flavor of AUTH_TLS. The > mechanism described in the current document does not support RPC > transports other than TCP and UDP. > > It might be nice if we could find a way to mention this transport > restriction in the previous paragraph, though it's hardly vital. > > The flavor value of the verifier in the RPC Reply message received > from the server MUST be AUTH_NONE. The length of the verifier's body > field is eight. The bytes of the verifier's body field encode the > ASCII characters "STARTTLS" as a fixed-length opaque. > > nit/style: I kind of want there to be mention of "to accept" starttls or > "a server supporting this mechanism" or something in this paragraph, since > of course a client that sent the proper probe message will not get this > response from a server that doesn't implement it. > > If an RPC client uses the AUTH_TLS authentication flavor on any > procedure other than the NULL procedure, or an RPC client sends an > RPC AUTH_TLS probe within an existing (D)TLS session, the RPC server > MUST reject that RPC Call by setting the reply_stat field to > MSG_DENIED, the reject_stat field to AUTH_ERROR, and the auth_stat > field to AUTH_BADCRED. > > nit: is the protocol element a 'reply_stat' field or a 'stat' field of type > 'reply_stat'? Likewise for reject_stat and auth_stat. > > Once the TLS session handshake is complete, the RPC client and server > have established a secure channel for communicating. A successful > AUTH_TLS probe on one particular port/transport tuple never implies > RPC-over-TLS is available on that same server using a different port/ > transport tuple. > > It could be worth saying something about expected future availability of > RPC-over-TLS on the same server/port/transport (though it is, of course, not > guaranteed). RFC 7435 admits this possibility when it discusses that peer > capabilities may be obtained by out-of-band mechanisms such as > trust-on-first-use (TOFU). > > Section 4.2 > > Each RPC server that supports RPC-over-TLS MUST possess a unique > global identity (e.g., a certificate that is signed by a well-known > trust anchor). Such an RPC server MUST request a TLS peer identity > > This is perhaps sufficiently vague to not be actively problematic, but at > least comes close to a touchy area. The main source of "well-known trust > anchor" that many readers will think of is the Web PKI, but use of TLS > certificates issued from the Web PKI for authenticating RPC operation enters > a grey area in terms of CA policy; if the CA determines that the certificate > is being used for a purpose other than the one it was issued for, the > certificate is subject to revocation by the CA. A hypothetical > mass-revocation event due to publicity about wide-scale "misuse" of TLS > certificate for RPC (i.e., not HTTP) would have knock-on effects on other > consumers of those CAs via expanded CRL size and the resources needed to > perform revocation checks. Things would be easier in this regard if a > dedicated "well-known" CA infrastructure appeared for RPC usage, though many > things would have to align for that to happen (which would themselves not be > "easy"!), and there are of course options involving site-local CAs where the > combination of issuer and subject serves to satisfy the "unique global > identity" criterion. > > from each client upon first contact. There are two different modes > > nit: "contact" is perhaps needlessly ambiguous (i.e., w.r.t. TLS handshake > vs. NULL RPC probe); perhaps "during the TLS handshake" suffices? > > identities. If authentication of either peer fails, or if > authorization based on those identities blocks access to the > server, the peers MUST reject the association. > > nit: there's something like a singular/plural mismatch, in that only > authorization based on the client identity would "block access to the > server", but we talk about "authorization based on those identities" plural. > I guess in some sense the client could reject a server as unauthorized, but > given how the server identity check happens usually the client would make > that rejection before it even does a DNS resolution and starts the TLS > handshake, with the in-handshake checks being limited to authenticating that > the server is the one the client was trying to talk to. > > In either of these modes, RPC user authentication is not affected by > the use of transport layer security. When a client presents a TLS > peer identity to an RPC server, the protocol extension described in > the current document provides no way for the server to know whether > that identity represents one RPC user on that client, or is shared > amongst many RPC users. Therefore, a server implementation must not > > That's only true to the extent that we haven't yet defined X.509 mechanisms > to convey that information. It's certainly imaginable that we would define > new name types or key usage that are specific to RPC client or RPC user > authentication, though I don't know of any such mechanism that already > exists today. > > Section 4.2.1 > > RPCSEC GSS can also perform per-request integrity or confidentiality > protection. When operating over a TLS session, these GSS services > become redundant. An RPC implementation capable of concurrently > > At risk of being called a pedant, these services are only "largely > redundant" -- most TLS setups will be using standard asymmetric key exchange > that is vulnerable to a quantum computer, whereas a kerberos-backed > RPCSEC_GSS will be using symmetric crypto that is or can be > quantum-resistant for appropriate key sizes. When a "record now, decrypt > later" attack is relevant the distinction can be important to make (though > for purely ephemeral traffic the distinction collapses). > > Section 5 > > * Negotiation of a ciphersuite providing confidentiality as well as > integrity protection is REQUIRED. Support for and negotiation of > compression is OPTIONAL. > > There's a bit of tidying we can do that falls out from the "1.3 only" change > -- all TLS 1.3 ciphersuites provide confidentiality (by virtue of needing to > be AEAD ciphers), and compression is forbidden in TLS 1.3. > > * Implementations MUST support certificate-based mutual > authentication. Support for TLS-PSK mutual authentication > [RFC4279] is OPTIONAL. See Section 4.2 for further details. > > (Roman's Discuss is valid, but also) people using TLS-PSK (with TLS 1.3) > might be interested in the topics discussed in > draft-ietf-tls-external-psk-guidance and > draft-ietf-tls-external-psk-importer. I don't insist on referencing them, > but it might be worth considering. > > Client implementations MUST include the > "application_layer_protocol_negotiation(16)" extension [RFC7301] in > their "ClientHello" message and MUST include the protocol identifier > defined in Section 8.2 in that message's ProtocolNameList value. > > Similary, in response to the "ClientHello" message, server > implementations MUST include the > "application_layer_protocol_negotiation(16)" extension [RFC7301] in > their "ServerHello" message and MUST include only the protocol > identifier defined in Section 8.2 in that message's ProtocolNameList > value. > > [this would change if we end up using ALPN to indicate whether GSS channel > binding is used] > > If the server responds incorrectly (for instance, if the > "ServerHello" message does not conform to the above requirements), > the client MUST NOT establish a TLS session for use with RPC on this > connection. See [RFC7301] for further details about how to form > these messages properly. > > We could probably give a bit more detail about what happens here. > Specifically, once you abort the TLS handshake, most implementations don't > give you a guaranteed clean way to get back to a non-TLS socket, so you > generally end up tearing the whole thing down. If we expect people to be > able to say "well, STARTTLS failed, let me just reuse this connection for > unencrypted RPC", we should be clear about that. > > Section 5.1.1 > > If > spurious traffic appears on a TCP connection between the initial > clear-text AUTH_TLS probe and the TLS session handshake, receivers > MUST discard that data without response and then SHOULD drop the > connection. > > Is this "spurious traffic" supposed to be just in one direction or in both? > IIUC at least one of those cases would probably be malformed RPC (and thus > discarded anyway?). > > The protocol convention specified in the current document assumes > there can be no more than one concurrent TLS session per TCP > connection. This is true of current generations of TLS, but might be > different in a future version of TLS. > > I'd be pretty surprised if a future version of TLS grew this feature; I've > asked the TLS WG if we think there's not need to include such a statement in > this document. > > To protect reverse-direction > RPC operations, the RPC server does not establish a separate TLS > session on the TCP connection, but instead uses the existing TLS > session on that connection to protect these operations. > > My apologies for zoning out during the WG discussions, but we're sure that > the RPC framing is enough to let this work (with forward and > reverse-direction RPCs intermingled on the same TLS connection)? > > Section 5.1.2 > > Using DTLS does not introduce reliable or in-order semantics to RPC > on UDP. Each RPC message MUST fit in a single DTLS record. DTLS > encapsulation has overhead, which reduces the effective Path MTU > (PMTU) and thus the maximum RPC payload size. The use of DTLS record > > "Packetization Layer Path MTU" (PLPMTU, draft-ietf-tsvwg-datagram-plpmtud, > in the RFC Editor's queue) might be a better term to use. > > As soon as a client initializes a UDP socket for use with an RPC > server, it uses the mechanism described in Section 4.1 to discover > DTLS support for an RPC program on a particular port. It then > negotiates a DTLS session. > > We could probably normalize the wording between the TCP and UDP cases (e.g., > TCP says "typically, once a client completes the TCP handshake, it uses the > mechanism [...]" but this uses descriptive text). That would also let us > decide whether or not to mention that (D)TLS usage is contingent on mutual > support for STARTTLS. > > extension described in Section 9 of [I-D.ietf-tls-dtls13], and RPC- > on-DTLS peer endpoints MUST provide a ConnectionID with a non-zero > > nit: we seem to prefer RPC-over- to RPC-on (as is used here, across the line > break) > > Section 5.1.3 > > Transports that provide intrinsic TLS-level security (e.g., QUIC) > need to be addressed separately from the current document. In such > cases, the use of TLS is not opportunistic as it can be for TCP or > UDP. > > nit(?): somehow "can be" doesn't feel like the right wording here, but "must > be" isn't right either... > > scope of the current document. Because there might not be other > provisions to exchange client and server certificates, authentication > > Er, "other provisions" than what? > > Section 5.2.1 > > X.509 certificates are specified in [X.509] and extended in > [RFC5280]. > > Note that RFC 5280 claims to be a profile of X.509, not an extension to it. > > * Certificate validation MUST include the verification rules as per > [RFC5280]. > > It might be appropriate to reference RFC 6125 as well (though that places > some restrictions on how servers are named, claims to only apply to server > certificate validation, and requires specifying what type of name is to be > validated and how the input name to validation is obtained) > > * Peer validation always includes a check on whether the locally > configured expected DNS name or IP address of the server that is > contacted matches its presented certificate. DNS names and IP > > In the RFC 6125 parlance these would be the "DNS-ID" and "iPAddress > subjectAltName", respectively, and such a reference would obviate the need > for most of the subsequent explanation. > > * Implementations MAY allow the configuration of a set of additional > properties of the certificate to check for a peer's authorization > to communicate (e.g., a set of allowed values in > subjectAltName:URI or a set of allowed X.509v3 Certificate > Policies). > > I could imagine an extendedKeyUsage being configured, too. > > trust model. As a suggestion, at least the following parameters of > the X.509 client certificate SHOULD be exposed: > > What about non-extended keyUsage, and arbitrary X.509 extensions? > > * Originating IP address > > I don't think "originating IP address" is a parameter of the X.509 client > certificate. > > * Certificate Fingerprint > > Using what hash algorithm? > > * Subject > [...] > * all X.509v3 Subject Alternative Name > > Per RFC 5280 (§ 4.1.2.6) the SAN *is* (part of) the Subject. > > Section 5.2.2 > > As above, fingerprint using what hash algorithm? > > Section 5.2.3 > > This mechanism is OPTIONAL to implement. In this mode, the RPC peer > is uniquely identified by keying material that has been shared out- > of-band or by a previous TLS-protected connection (see Section 2.2 of > [RFC8446]). [...] > > I strongly suggest not mentioning the "by a previous TLS-protected > connection (see Section 2.2 of [RFC8446])" case here; the TLS stack should > handle resumption transparently and expose the identity information from the > original handshake. There's no need to make the application manage and > track the resumption PSK identifier values. > > * TLS Identifier > > nit: missing "PSK". > > Section 7 > > It's probably worth pulling in (by reference) the security considerations of > RFCs 5280 and 8446 as well. > > Section 7.1.1 > > * Client security policy can require that a TLS session is > established on every connection. If an attacker spoofs the > handshake, the client disconnects and reports the problem. If > > It might be worth adding a few more words about how this is a "fail-safe" > setup where the attacker cannot cause the client to fall back to plaintext. > > Section 7.1.2 > > The exception to this edict is the initial RPC NULL procedure that > acts as a STARTTLS message, which cannot be protected. This RPC NULL > procedure contains no arguments or results, and the AUTH_TLS > authentication flavor it uses does not contain user information. > > I suggest hammering home the conclusion, ", so there is negligible privacy > impact from this exception". > > Section 7.2 > > I'd consider using the phrase "credentials" instead of, or in addition to, > "identity material". > > Section 7.3 > > but it does enable receivers to reject non-participant messages. In > particular, transport layer encryption plus peer authentication > protects receiving XDR decoders from deserializing untrusted data, a > common coding vulnerability. > > I might go on to add that these decoders would still be exposed to untrusted > input in the case of the compromise of a trusted peer (or trusted CA). > > In light of the above, it is RECOMMENDED that when AUTH_SYS is used, > every RPC client should present host authentication material to RPC > servers to prove that the client is a known one. The server can then > determine whether the UIDs and GIDs in AUTH_SYS requests from that > client can be accepted. > > Perhaps add ", based on the authenticated identity of the client"? > > Section 7.4 > > * When using AUTH_NULL or AUTH_SYS, both peers are required to have > DNS TLSA records and certificate material, and a policy that > > I suggest to s/DNS/DANE/ or s/DNS/DNSSEC/. > > * RCPSEC_GSS provides integrity and privacy services which are > redundant when TLS is in use. These services should be disabled > > ["largely redundant", again] > > Section 8 > > I think we should consider getting IANA to allocate OIDs for some X.509 > extendedKeyUsage values that correspond to RPC-TLS client/server usage. > It's not necessarily something that we'd require to be present (but would be > helpful if a dedicated RPC-TLS PKI was to appear), but is useful to have > available for when it's needed. This would presumably be under the > 1.3.6.1.5.5.7.3 arc, and the referenced documents for existing allocations > usable as a template for what text to put in. > > Section 8.1 > > Isn't it codepoint squatting to claim auth flavor 7 before IANA has > allocated it? (This is usually a Discuss-level issue, but that part is too > long already so I left it here.) > > Section 9.1 > > RFC 7258 doesn't seem like it needs to be normative. > > Appendix A > > Maybe link to draft-dnoveck-nfsv4-security-needs for further (extensive!) > discussion of the weaknesses of AUTH_SYS? > > 3. The use of 32-bit unsigned integers as user and group identifiers > is problematic because these data types are not cryptographically > signed or otherwise verified by any authority. > > Also problematic due to the need for database consistency between > client/server. > > > > _______________________________________________ > nfsv4 mailing list > nfsv4@ietf.org > https://www.ietf.org/mailman/listinfo/nfsv4 -- Chuck Lever
- [nfsv4] Benjamin Kaduk's Discuss on draft-ietf-nf… Benjamin Kaduk via Datatracker
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… David Noveck
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… David Noveck
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Chuck Lever
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… David Noveck
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… Benjamin Kaduk
- Re: [nfsv4] Benjamin Kaduk's Discuss on draft-iet… David Noveck