diff options
Diffstat (limited to 'doc/rfc/rfc9289.txt')
-rw-r--r-- | doc/rfc/rfc9289.txt | 1104 |
1 files changed, 1104 insertions, 0 deletions
diff --git a/doc/rfc/rfc9289.txt b/doc/rfc/rfc9289.txt new file mode 100644 index 0000000..d84478e --- /dev/null +++ b/doc/rfc/rfc9289.txt @@ -0,0 +1,1104 @@ + + + + +Internet Engineering Task Force (IETF) T. Myklebust +Request for Comments: 9289 Hammerspace +Updates: 5531 C. Lever, Ed. +Category: Standards Track Oracle +ISSN: 2070-1721 September 2022 + + + Towards Remote Procedure Call Encryption by Default + +Abstract + + This document describes a mechanism that, through the use of + opportunistic Transport Layer Security (TLS), enables encryption of + Remote Procedure Call (RPC) transactions while they are in transit. + The proposed mechanism interoperates with Open Network Computing + (ONC) RPC implementations that do not support it. This document + updates RFC 5531. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc9289. + +Copyright Notice + + Copyright (c) 2022 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Revised BSD License text as described in Section 4.e of the + Trust Legal Provisions and are provided without warranty as described + in the Revised BSD License. + +Table of Contents + + 1. Introduction + 2. Requirements Language + 3. Terminology + 4. RPC-with-TLS in Operation + 4.1. Discovering Server-Side TLS Support + 4.2. Authentication + 4.2.1. Using TLS with RPCSEC_GSS + 5. TLS Requirements + 5.1. Base Transport Considerations + 5.1.1. Protected Operation on TCP + 5.1.2. Protected Operation on UDP + 5.1.3. Protected Operation on Other Transports + 5.2. TLS Peer Authentication + 5.2.1. X.509 Certificates Using PKIX Trust + 5.2.1.1. Extended Key Usage Values + 5.2.2. Pre-shared Keys + 6. Security Considerations + 6.1. The Limitations of Opportunistic Security + 6.1.1. STRIPTLS Attacks + 6.1.2. Privacy Leakage before Session Establishment + 6.2. TLS Identity Management on Clients + 6.3. Security Considerations for AUTH_SYS on TLS + 6.4. Best Security Policy Practices + 7. IANA Considerations + 7.1. RPC Authentication Flavor + 7.2. ALPN Identifier for SunRPC + 7.3. Object Identifier for PKIX Extended Key Usage + 7.4. Object Identifier for ASN.1 Module + 8. References + 8.1. Normative References + 8.2. Informative References + Appendix A. Known Weaknesses of the AUTH_SYS Authentication Flavor + Appendix B. ASN.1 Module + Acknowledgments + Authors' Addresses + +1. Introduction + + In 2014 the IETF published a document entitled "Pervasive Monitoring + Is an Attack" [RFC7258], which recognized that unauthorized + observation of network traffic had become widespread and was a + subversive threat to all who make use of the Internet at large. It + strongly recommended that newly defined Internet protocols should + make a genuine effort to mitigate monitoring attacks. Typically, + this mitigation includes encrypting data in transit. + + The Remote Procedure Call version 2 protocol has been a Proposed + Standard for three decades (see [RFC5531] and its antecedents). Over + twenty years ago, Eisler et al. first introduced RPCSEC_GSS as an in- + transit encryption mechanism for RPC [RFC2203]. However, experience + has shown that RPCSEC_GSS with in-transit encryption can be + challenging to use in practice due to the following: + + * Parts of each RPC header remain in cleartext, constituting a loss + of metadata confidentiality. + + * Offloading the Generic Security Service (GSS) privacy service is + not practical in large multi-user deployments since each message + is encrypted using a key based on the issuing RPC user. + + However strong GSS-provided confidentiality is, it cannot provide any + security if the challenges of using it result in choosing not to + deploy it at all. + + Moreover, the use of AUTH_SYS remains common despite the adverse + effects that acceptance of User Identifiers (UIDs) and Group + Identifiers (GIDs) from unauthenticated clients brings with it. + Continued use is in part because: + + * Per-client deployment and administrative costs for the only well- + defined alternative to AUTH_SYS are expensive at scale. For + instance, administrators must provide keying material for each RPC + client, including transient clients. + + * GSS host identity management and user identity management + typically must be enforced in the same security realm. However, + cloud providers, for instance, might prefer to remain + authoritative for host identity but allow tenants to manage user + identities within their private networks. + + In view of the challenges with the currently available mechanisms for + authenticating and protecting the confidentiality of RPC + transactions, this document specifies a transport-layer security + mechanism that complements the existing ones. The TLS [RFC8446] and + Datagram Transport Layer Security (DTLS) [RFC9147] protocols are + well-established Internet building blocks that protect many standard + Internet protocols such as the Hypertext Transfer Protocol (HTTP) + [RFC9110]. + + Encrypting at the RPC transport layer accords several significant + benefits: + + Encryption by Default: Transport encryption can be enabled without + additional administrative tasks such as identifying client systems + to a trust authority and providing each with keying material. + + Encryption Offload: Hardware support for the GSS privacy service has + not appeared in the marketplace. However, the use of a well- + established transport encryption mechanism that is employed by + other ubiquitous network protocols makes it more likely that + encryption offload for RPC is practicable. + + Securing AUTH_SYS: Most critically, transport encryption can + significantly reduce several security issues inherent in the + current widespread use of AUTH_SYS (i.e., acceptance of UIDs and + GIDs generated by an unauthenticated client). + + Decoupled User and Host Identities: TLS can be used to authenticate + peer hosts while other security mechanisms can handle user + authentication. + + Compatibility: The imposition of encryption at the transport layer + protects any upper-layer protocol that employs RPC, without + alteration of the upper-layer protocol. + + Further, Section 6 of the current document defines policies in line + with [RFC7435] that enable RPC-with-TLS to be deployed + opportunistically in environments that contain RPC implementations + 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 are used for all + RPC transactions to mitigate against pervasive monitoring attacks + [RFC7258]. Enforcing the use of RPC-with-TLS is of particular + importance for existing upper-layer protocols whose security + infrastructure is weak. + + The protocol specification in the current document assumes that + support for ONC RPC [RFC5531], TLS [RFC8446], PKIX [RFC5280], DNSSEC/ + DNS-Based Authentication of Named Entities (DANE) [RFC6698], and + optionally RPCSEC_GSS [RFC2203] is available within the platform + where RPC-with-TLS support is to be added. + +2. Requirements Language + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Terminology + + This document adopts the terminology introduced in Section 3 of + [RFC6973] and assumes a working knowledge of the RPC version 2 + protocol [RFC5531] and the TLS version 1.3 protocol [RFC8446]. + + Note also that the NFS community long ago adopted the use of the term + "privacy" from documents such as [RFC2203]. In the current document, + the authors use the term "privacy" only when referring specifically + to the historic GSS privacy service defined in [RFC2203]. Otherwise, + the authors use the term "confidentiality", following the practices + of contemporary security communities. + + We adhere to the convention that a "client" is a network host that + actively initiates an association, and a "server" is a network host + that passively accepts an association request. + + RPC documentation historically refers to the authentication of a + connecting host as "machine authentication" or "host authentication". + TLS documentation refers to the same as "peer authentication". In + the current document, there is little distinction between these + terms. + + The term "user authentication" in the current document refers + specifically to the RPC caller's credential, provided in the "cred" + and "verf" fields in each RPC Call. + +4. RPC-with-TLS in Operation + +4.1. Discovering Server-Side TLS Support + + The mechanism described in the current document interoperates fully + with RPC implementations that do not support RPC-with-TLS. When an + RPC-with-TLS-enabled peer encounters a peer that does not support + RPC-with-TLS, policy settings on the RPC-with-TLS-enabled peer + determine whether RPC operation continues without the use of TLS or + is discontinued altogether. + + To achieve this interoperability, we introduce a new RPC + authentication flavor called AUTH_TLS. The AUTH_TLS authentication + flavor signals that the client wants to initiate TLS negotiation if + the server supports it. Except for the modifications described in + this section, the RPC protocol is unaware of security encapsulation + at the transport layer. The value of AUTH_TLS is defined in + Section 7.1. + + An RPC client begins its communication with an RPC server by + selecting a transport and destination port. The choice of transport + and port is typically based on the RPC program that is to be used. + The RPC client might query the RPC server's RPCBIND service to make + this selection (The RPCBIND service is described in [RFC1833]). The + mechanism described in the current document does not support RPC + transports other than TCP and UDP. In all cases, an RPC server MUST + listen on the same ports for (D)TLS-protected RPC programs as the + ports used when (D)TLS is not available. + + To protect RPC traffic to a TCP port, the RPC client opens a TCP + connection to that port and sends a NULL RPC procedure with an + auth_flavor of AUTH_TLS on that connection. To protect RPC traffic + to a UDP port, the RPC client sends a UDP datagram to that port + containing a NULL RPC procedure with an auth_flavor of AUTH_TLS. The + client constructs this RPC procedure as follows: + + * The length of the opaque data constituting the credential sent in + the RPC Call message MUST be zero. + + * The verifier accompanying the credential MUST be an AUTH_NONE + verifier of length zero. + + * 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. + + The RPC server signals its corresponding support for RPC-with-TLS by + replying with a reply_stat of MSG_ACCEPTED and an AUTH_NONE verifier + containing the "STARTTLS" token. The client SHOULD proceed with TLS + session establishment, even if the Reply's accept_stat is not + SUCCESS. If the AUTH_TLS probe was done via TCP, the RPC client MUST + send the "ClientHello" message on the same connection. If the + AUTH_TLS probe was done via UDP, the RPC client MUST send the + "ClientHello" message to the same UDP destination port. + + Conversely, if the Reply's reply_stat is not MSG_ACCEPTED, if its + verifier flavor is not AUTH_NONE, or if its verifier does not contain + the "STARTTLS" token, the RPC client MUST NOT send a "ClientHello" + message. RPC operation may continue, depending on local policy, but + without confidentiality, integrity, or peer authentication protection + from (D)TLS. + + If, after a successful RPC AUTH_TLS probe, the subsequent (D)TLS + handshake should fail for any reason, the RPC client reports this + failure to the upper-layer application the same way it reports an + AUTH_ERROR rejection from the RPC server. + + 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 returning a reply_stat of MSG_DENIED + with a reject_stat of AUTH_ERROR and an auth_stat of AUTH_BADCRED. + + Once the TLS session handshake is complete, the RPC client and server + have established a secure channel for exchanging RPC transactions. A + successful AUTH_TLS probe on one particular port/transport tuple does + not imply that RPC-with-TLS is available on that same server using a + different port/transport tuple, nor does it imply that RPC-with-TLS + will be available in the future using the successfully probed port. + +4.2. Authentication + + There is some overlap between the authentication capabilities of RPC + and TLS. The goal of interoperability with implementations that do + not support TLS requires limiting the combinations that are allowed + and precisely specifying the role that each layer plays. + + Each RPC server that supports RPC-with-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 + from each client upon first contact. There are two different modes + of client deployment: + + Server-Only Host Authentication + In this type of deployment, the client can authenticate the server + host using the presented server peer TLS identity, but the server + cannot authenticate the client. In this situation, RPC-with-TLS + clients are anonymous. They present no globally unique identifier + to the server peer. + + Mutual Host Authentication + In this type of deployment, the client possesses an identity that + is backed by a trusted entity (e.g., a pre-shared key or a + certificate validated with a certification path). As part of the + TLS handshake, both peers authenticate using the presented TLS + 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. Further + explanation appears in Section 5.2. + + 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 cannot + utilize the remote TLS peer identity to authenticate RPC users. + +4.2.1. Using TLS with RPCSEC_GSS + + To use GSS, an RPC server has to possess a GSS service principal. On + a TLS session, GSS mutual (peer) authentication occurs as usual, but + only after a TLS session has been established for communication. + Authentication of RPCSEC_GSS users is unchanged by the use of TLS. + + RPCSEC_GSS can also perform per-request integrity or confidentiality + protection. When operating over a TLS session, these GSS services + become largely redundant. An RPC implementation capable of + concurrently using TLS and RPCSEC_GSS MUST use Generic Security + Service Application Program Interface (GSS-API) channel binding, as + defined in [RFC5056], to determine when an underlying transport + provides a sufficient degree of confidentiality. RPC-with-TLS + implementations MUST provide the "tls-exporter" channel binding type, + as defined in [RFC9266]. + +5. TLS Requirements + + When peers negotiate a TLS session that is to transport RPC, the + following restrictions apply: + + * Implementations MUST NOT negotiate TLS versions prior to 1.3 (for + TLS [RFC8446] or DTLS [RFC9147], respectively). Support for + mandatory-to-implement cipher suites for the negotiated TLS + version is REQUIRED. + + * Implementations MUST conform to the recommendations for TLS usage + specified in BCP 195 [RFC7525]. Although RFC 7525 permits the use + of TLS 1.2, the requirement to use TLS 1.3 or later for RPC-with- + TLS takes precedence. Further, because TLS 1.3 ciphers are + qualitatively different than cipher suites in previous versions of + TLS, and RFC 7525 predates TLS 1.3, the cipher suite + recommendations in RFC 7525 do not apply to RPC-with-(D)TLS. A + strict TLS mode for RPC-with-TLS that protects against STRIPTLS + attacks is discussed in detail in Section 6.1.1. + + * Implementations MUST support certificate-based mutual + authentication. Support for Pre-Shared Key (PSK) mutual + authentication is OPTIONAL; see Section 5.2.2 for further details. + + * Negotiation of a cipher suite providing confidentiality as well as + integrity protection is REQUIRED. + + 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 7.2 in that message's ProtocolNameList value. + + Similarly, 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 7.2 in that message's ProtocolNameList + value. + + 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. + +5.1. Base Transport Considerations + + There is frequently a strong association between an RPC program and a + particular destination port number. The use of TLS or DTLS does not + change that association. Thus, it is frequently, though not always, + the case that a single TLS session carries traffic for only one RPC + program. + +5.1.1. Protected Operation on TCP + + The use of the TLS protocol [RFC8446] protects RPC on TCP + connections. Typically, once an RPC client completes the TCP + handshake, it uses the mechanism described in Section 4.1 to discover + RPC-with-TLS support for that RPC program on that connection. Until + an AUTH_TLS probe is done on a connection, the RPC server treats all + traffic as RPC messages. If spurious traffic appears on a TCP + connection between the initial cleartext AUTH_TLS probe and the TLS + session handshake, receivers MUST discard that data without response + and then SHOULD drop the connection. + + 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. + + Once a TLS session is established on a TCP connection, no further + cleartext communication can occur on that connection until the + session is terminated. The use of TLS does not alter RPC record + framing used on TCP transports. + + Furthermore, if an RPC server responds with PROG_UNAVAIL to an RPC + Call within an established TLS session, that does not imply that RPC + server will subsequently reject the same RPC program on a different + TCP connection. + + Reverse-direction operation occurs only on connected transports such + as TCP (see Section 2 of [RFC8167]). 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. + + When operation is complete, an RPC peer terminates a TLS session by + sending a TLS closure alert. It may then close the TCP connection. + +5.1.2. Protected Operation on UDP + + The use of the DTLS protocol [RFC9147] protects RPC carried in UDP + datagrams. As soon as a client initializes a UDP socket for use with + an RPC service, it uses the mechanism described in Section 4.1 to + discover RPC-with-DTLS support for that RPC program on that port. If + spurious traffic appears on a 5-tuple between the initial cleartext + AUTH_TLS probe and the DTLS association handshake, receivers MUST + discard that traffic without response. + + Using DTLS does not introduce reliable or in-order semantics to RPC + on UDP. The use of DTLS record replay protection is REQUIRED when + transporting RPC traffic. + + Each RPC message MUST fit in a single DTLS record. DTLS + encapsulation has overhead, which reduces the Packetization Layer + Path MTU (PLPMTU) and thus the maximum RPC payload size. A possible + PLPMTU discovery mechanism is offered in [RFC8899]. + + The current document does not specify a mechanism that enables a + server to distinguish between DTLS traffic and unprotected RPC + traffic directed to the same port. To make this distinction, each + peer matches ingress datagrams that appear to be DTLS traffic to + existing DTLS session state. A peer treats any datagram that fails + the matching process as an RPC message. + + Multihomed RPC clients and servers may send protected RPC messages + via network interfaces that were not involved in the handshake that + established the DTLS session. Therefore, when protecting RPC + traffic, each DTLS handshake MUST include the "connection_id(54)" + extension described in Section 9 of [RFC9147], and RPC-with-DTLS peer + endpoints MUST provide a ConnectionID with a nonzero length. + Endpoints implementing RPC programs that expect a significant number + of concurrent clients SHOULD employ ConnectionIDs of at least 4 bytes + in length. + + Sending a TLS closure alert terminates a DTLS session. Because + neither DTLS nor UDP provide in-order delivery, after session closure + there can be ambiguity as to whether a datagram should be interpreted + as DTLS protected or not. Therefore, receivers MUST discard + datagrams exchanged using the same 5-tuple that just terminated the + DTLS session for a sufficient length of time to ensure that + retransmissions have ceased and packets already in the network have + been delivered. In the absence of more specific data, a period of 60 + seconds is expected to suffice. + +5.1.3. Protected Operation on Other Transports + + 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. + + RPC-over-RDMA can make use of transport layer security below the RDMA + transport layer [RFC8166]. The exact mechanism is not within the + scope of the current document. Because there might not be other + provisions to exchange client and server certificates, authentication + material exchange needs to be provided by facilities within a future + version of the RPC-over-RDMA transport protocol. + +5.2. TLS Peer Authentication + + TLS can perform peer authentication using any of the following + mechanisms. + +5.2.1. X.509 Certificates Using PKIX Trust + + X.509 certificates are specified in [X.509]. [RFC5280] provides a + profile of Internet PKI X.509 public key infrastructure. RPC-with- + TLS implementations are REQUIRED to support the PKIX mechanism + described in [RFC5280]. + + The rules and guidelines defined in [RFC6125] apply to RPC-with-TLS + certificates with the following considerations: + + * The DNS-ID identifier type is a subjectAltName extension that + contains a dNSName, as defined in Section 4.2.1.6 of [RFC5280]. + Support for the DNS-ID identifier type is REQUIRED in RPC-with-TLS + client and server implementations. Certification authorities that + issue such certificates MUST support the DNS-ID identifier type. + + * To specify the identity of an RPC peer as a domain name, the + certificate MUST contain a subjectAltName extension that contains + a dNSName. DNS domain names in RPC-with-TLS certificates MUST NOT + contain the wildcard character '*' within the identifier. + + * To specify the identity of an RPC peer as a network identifier + (netid) or a universal network address (uaddr), the certificate + MUST contain a subjectAltName extension that contains an + iPAddress. + + When validating a server certificate, an RPC-with-TLS client + implementation takes the following into account: + + * Certificate validation MUST include the verification rules as per + Section 6 of [RFC5280] and Section 6 of [RFC6125]. + + * Server certificate validation MUST include a check on whether the + locally configured expected DNS-ID or iPAddress subjectAltName of + the server that is contacted matches its presented certificate. + + * For RPC services accessed by their netids and uaddrs, the + iPAddress subjectAltName MUST be present in the certificate and + MUST exactly match the address represented by the universal + network address. + + An RPC client's domain name and IP address are often assigned + dynamically; thus, RPC servers cannot rely on those to verify client + certificates. Therefore, when an RPC-with-TLS client presents a + certificate to an RPC-with-TLS server, the server takes the following + into account: + + * The server MUST use a procedure conformant to Section 6 of + [RFC5280] to validate the client certificate's certification path. + + * The tuple (serial number of the presented certificate; Issuer) + uniquely identifies the RPC client. The meaning and syntax of + these fields is defined in Section 4 of [RFC5280]. + + RPC-with-TLS 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, a set of allowed X.509v3 Certificate Policies, or + a set of extended key usages). + + When the configured set of trust anchors changes (e.g., removal of a + Certification Authority (CA) from the list of trusted CAs; issuance + of a new Certificate Revocation List (CRL) for a given CA), + implementations SHOULD reevaluate the certificate originally + presented in the context of the new configuration and terminate the + TLS session if the certificate is no longer trustworthy. + +5.2.1.1. Extended Key Usage Values + + Section 4.2.1.12 of [RFC5280] specifies the extended key usage X.509 + certificate extension. This extension, which may appear in end- + entity certificates, indicates one or more purposes for which the + certified public key may be used in addition to or in place of the + basic purposes indicated in the key usage extension. + + The current document defines two new KeyPurposeId values: one that + identifies the RPC-with-TLS peer as an RPC client, and one that + identifies the RPC-with-TLS peer as an RPC server. + + The inclusion of the RPC server value (id-kp-rpcTLSServer) indicates + that the certificate has been issued for allowing the holder to + process RPC transactions. + + The inclusion of the RPC client value (id-kp-rpcTLSClient) indicates + that the certificate has been issued for allowing the holder to + request RPC transactions. + +5.2.2. Pre-shared Keys + + This mechanism is OPTIONAL to implement. In this mode, the RPC peer + can be uniquely identified by keying material that has been shared + out of band (see Section 2.2 of [RFC8446]). The PSK Identifier + SHOULD be exposed at the RPC layer. + +6. Security Considerations + + One purpose of the mechanism described in the current document is to + protect RPC-based applications against threats to the confidentiality + of RPC transactions and RPC user identities. A taxonomy of these + threats appears in Section 5 of [RFC6973]. Also, Section 6 of + [RFC7525] contains a detailed discussion of technologies used in + conjunction with TLS. Section 8 of [RFC5280] covers important + considerations about handling certificate material securely. + Implementers should familiarize themselves with these materials. + + Once a TLS session is established, the RPC payload carried on TLS + version 1.3 is forward secure. However, implementers need to be + aware that replay attacks can occur during session establishment. + Remedies for such attacks are discussed in detail in Section 8 of + [RFC8446]. Further, the current document does not provide a profile + that defines the use of 0-RTT data (see Appendix E.5 of [RFC8446]). + Therefore, RPC-with-TLS implementations MUST NOT use 0-RTT data. + +6.1. The Limitations of Opportunistic Security + + Readers can find the definition of Opportunistic Security in + [RFC7435]. A discussion of its underlying principles appears in + Section 3 of that document. + + The purpose of using an explicitly opportunistic approach is to + enable interoperation with implementations that do not support RPC- + with-TLS. A range of options is allowed by this approach, from "no + peer authentication or encryption" to "server-only authentication + with encryption" to "mutual authentication with encryption". The + actual security level may indeed be selected based on policy and + without user intervention. + + In environments where interoperability is a priority, the security + benefits of TLS are partially or entirely waived. Implementations of + the mechanism described in the current document must take care to + accurately represent to all RPC consumers the level of security that + is actually in effect, and are REQUIRED to provide an audit log of + RPC-with-TLS security mode selection. + + In all other cases, the adoption, implementation, and deployment of + RPC-based upper-layer protocols that enforce the use of TLS + authentication and encryption (when similar RPCSEC_GSS services are + not in use) is strongly encouraged. + +6.1.1. STRIPTLS Attacks + + The initial AUTH_TLS probe occurs in cleartext. An on-path attacker + can alter a cleartext handshake to make it appear as though TLS + support is not available on one or both peers. Client implementers + can choose from the following to mitigate STRIPTLS attacks: + + * A TLSA record [RFC6698] can alert clients that TLS is expected to + work, and provide a binding of a hostname to the X.509 identity. + If TLS cannot be negotiated or authentication fails, the client + disconnects and reports the problem. When an opportunistic + security policy is in place, a client SHOULD check for the + existence of a TLSA record for the target server before initiating + an RPC-with-TLS association. + + * 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. This + policy prevents an attacker from causing the association to fall + back to cleartext silently. If TLSA records are not available, + this approach is strongly encouraged. + +6.1.2. Privacy Leakage before Session Establishment + + As mentioned earlier, communication between an RPC client and server + appears in the clear on the network prior to the establishment of a + TLS session. This cleartext information usually includes transport + connection handshake exchanges, the RPC NULL procedure probing + support for TLS, and the initial parts of TLS session establishment. + Appendix C of [RFC8446] discusses precautions that can mitigate + exposure during the exchange of connection handshake information and + TLS certificate material that might enable attackers to track the RPC + client. Note that when PSK authentication is used, the PSK + identifier is exposed during the TLS handshake and can be used to + track the RPC client. + + Any RPC traffic that appears on the network before a TLS session has + been established is vulnerable to monitoring or undetected + modification. A secure client implementation limits or prevents any + RPC exchanges that are not protected. + + 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, so + there is negligible privacy impact from this exception. + +6.2. TLS Identity Management on Clients + + The goal of RPC-with-TLS is to hide the content of RPC requests while + they are in transit. RPC-with-TLS protocol by itself cannot protect + against exposure of a user's RPC requests to other users on the same + client. + + Moreover, client implementations are free to transmit RPC requests + for more than one RPC user using the same TLS session. Depending on + the details of the client RPC implementation, this means that the + client's TLS credentials are potentially visible to every RPC user + that shares a TLS session. Privileged users may also be able to + access this TLS identity. + + As a result, client implementations need to carefully segregate TLS + credentials so that local access to it is restricted to only the + local users that are authorized to perform operations on the remote + RPC server. + +6.3. Security Considerations for AUTH_SYS on TLS + + Using a TLS-protected transport when the AUTH_SYS authentication + flavor is in use addresses several longstanding weaknesses in + AUTH_SYS (as detailed in Appendix A). TLS augments AUTH_SYS by + providing both integrity protection and confidentiality that AUTH_SYS + lacks. TLS protects data payloads, RPC headers, and user identities + against monitoring and alteration while in transit. + + TLS guards against in-transit insertion and deletion of RPC messages, + thus ensuring the integrity of the message stream between RPC client + and server. DTLS does not provide full message stream protection, + but it does enable receivers to reject nonparticipant messages. In + particular, transport-layer encryption plus peer authentication + protects receiving eXternal Data Representation (XDR) decoders from + deserializing untrusted data, a common coding vulnerability. + However, these decoders would still be exposed to untrusted input in + the case of the compromise of a trusted peer or Certification + Authority. + + The use of TLS enables strong authentication of the communicating RPC + peers, providing a degree of non-repudiation. When AUTH_SYS is used + with TLS, but the RPC client is unauthenticated, the RPC server still + acts on RPC requests for which there is no trustworthy + authentication. In-transit traffic is protected, but the RPC client + itself can still misrepresent user identity without server detection. + TLS without authentication is an improvement from AUTH_SYS without + encryption, but it leaves a critical security exposure. + + In light of the above, when AUTH_SYS is used, the use of a TLS mutual + authentication mechanism is RECOMMENDED to prove that the RPC client + is known to the RPC server. The server can then determine whether + the UIDs and GIDs in AUTH_SYS requests from that client can be + accepted, based on the authenticated identity of the client. + + The use of TLS does not enable RPC clients to detect compromise that + leads to the impersonation of RPC users. Also, there continues to be + a requirement that the mapping of 32-bit user and group ID values to + user identities is the same on both the RPC client and server. + +6.4. Best Security Policy Practices + + RPC-with-TLS implementations and deployments are strongly encouraged + to adhere to the following policies to achieve the strongest possible + security with RPC-with-TLS. + + * When using AUTH_NULL or AUTH_SYS, both peers are RECOMMENDED to + have DNSSEC TLSA records, keys with which to perform mutual peer + authentication using one of the methods described in Section 5.2, + and a security policy that requires mutual peer authentication and + rejection of a connection when host authentication fails. + + * RPCSEC_GSS provides integrity and privacy services that are + largely redundant when TLS is in use. These services SHOULD be + disabled in that case. + +7. IANA Considerations + +7.1. RPC Authentication Flavor + + Following Appendix B of [RFC5531], an entry has been added to the + "RPC Authentication Flavor Numbers" registry. The purpose of the new + authentication flavor is to signal the use of TLS with RPC. This new + flavor is not a pseudo-flavor. + + The fields in the new entry have been assigned as follows: + + Identifier String: AUTH_TLS + + Flavor Name: TLS + + Value: 7 + + Description: Indicates support for RPC-with-TLS + + Reference: RFC 9289 + +7.2. ALPN Identifier for SunRPC + + Following Section 6 of [RFC7301], the following value has been + allocated in the "TLS Application-Layer Protocol Negotiation (ALPN) + Protocol IDs" registry. The "sunrpc" string identifies SunRPC when + used over TLS. + + Protocol: SunRPC + + Identification Sequence: 0x73 0x75 0x6e 0x72 0x70 0x63 ("sunrpc") + + Reference: RFC 9289 + +7.3. Object Identifier for PKIX Extended Key Usage + + Per the Specification Required policy defined in Section 4.6 of + [RFC8126], the following new values have been registered in the "SMI + Security for PKIX Extended Key Purpose" registry (1.3.6.1.5.5.7.3) + (see Section 5.2.1.1 and Appendix B). + + +=========+====================+===========+ + | Decimal | Description | Reference | + +=========+====================+===========+ + | 33 | id-kp-rpcTLSClient | RFC 9289 | + +---------+--------------------+-----------+ + | 34 | id-kp-rpcTLSServer | RFC 9289 | + +---------+--------------------+-----------+ + + Table 1 + +7.4. Object Identifier for ASN.1 Module + + Per the Specification Required policy defined in Section 4.6 of + [RFC8126], the following new value has been registered in the "SMI + Security for PKIX Module Identifier" registry (1.3.6.1.5.5.7.0) (see + Appendix B). + + +=========+========================+===========+ + | Decimal | Description | Reference | + +=========+========================+===========+ + | 105 | id-mod-rpcWithTLS-2021 | RFC 9289 | + +---------+------------------------+-----------+ + + Table 2 + +8. References + +8.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure + Channels", RFC 5056, DOI 10.17487/RFC5056, November 2007, + <https://www.rfc-editor.org/info/rfc5056>. + + [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., + Housley, R., and W. Polk, "Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List + (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, + <https://www.rfc-editor.org/info/rfc5280>. + + [RFC5531] Thurlow, R., "RPC: Remote Procedure Call Protocol + Specification Version 2", RFC 5531, DOI 10.17487/RFC5531, + May 2009, <https://www.rfc-editor.org/info/rfc5531>. + + [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and + Verification of Domain-Based Application Service Identity + within Internet Public Key Infrastructure Using X.509 + (PKIX) Certificates in the Context of Transport Layer + Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March + 2011, <https://www.rfc-editor.org/info/rfc6125>. + + [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, + "Transport Layer Security (TLS) Application-Layer Protocol + Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, + July 2014, <https://www.rfc-editor.org/info/rfc7301>. + + [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, + "Recommendations for Secure Use of Transport Layer + Security (TLS) and Datagram Transport Layer Security + (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May + 2015, <https://www.rfc-editor.org/info/rfc7525>. + + [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for + Writing an IANA Considerations Section in RFCs", BCP 26, + RFC 8126, DOI 10.17487/RFC8126, June 2017, + <https://www.rfc-editor.org/info/rfc8126>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + <https://www.rfc-editor.org/info/rfc8446>. + + [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The + Datagram Transport Layer Security (DTLS) Protocol Version + 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, + <https://www.rfc-editor.org/info/rfc9147>. + + [RFC9266] Whited, S., "Channel Bindings for TLS 1.3", RFC 9266, + DOI 10.17487/RFC9266, July 2022, + <https://www.rfc-editor.org/info/rfc9266>. + + [X.509] International Telecommunication Union, "Information + technology - Open Systems Interconnection - The Directory: + Public-key and attribute certificate frameworks", ISO/ + IEC 9594-8, ITU-T Recommendation X.509, October 2019. + + [X.680] ITU-T, "Information technology - Abstract Syntax Notation + One (ASN.1): Specification of basic notation", ITU-T + Recommendation X.680, February 2021, + <https://www.itu.int/rec/T-REC-X.680>. + + [X.690] ITU-T, "Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), Canonical + Encoding Rules (CER) and Distinguished Encoding Rules + (DER)", ITU-T Recommendation X.690, February 2021, + <https://www.itu.int/rec/T-REC-X.690>. + +8.2. Informative References + + [RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC Version 2", + RFC 1833, DOI 10.17487/RFC1833, August 1995, + <https://www.rfc-editor.org/info/rfc1833>. + + [RFC2203] Eisler, M., Chiu, A., and L. Ling, "RPCSEC_GSS Protocol + Specification", RFC 2203, DOI 10.17487/RFC2203, September + 1997, <https://www.rfc-editor.org/info/rfc2203>. + + [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication + of Named Entities (DANE) Transport Layer Security (TLS) + Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August + 2012, <https://www.rfc-editor.org/info/rfc6698>. + + [RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., + Morris, J., Hansen, M., and R. Smith, "Privacy + Considerations for Internet Protocols", RFC 6973, + DOI 10.17487/RFC6973, July 2013, + <https://www.rfc-editor.org/info/rfc6973>. + + [RFC7258] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an + Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May + 2014, <https://www.rfc-editor.org/info/rfc7258>. + + [RFC7435] Dukhovni, V., "Opportunistic Security: Some Protection + Most of the Time", RFC 7435, DOI 10.17487/RFC7435, + December 2014, <https://www.rfc-editor.org/info/rfc7435>. + + [RFC8166] Lever, C., Ed., Simpson, W., and T. Talpey, "Remote Direct + Memory Access Transport for Remote Procedure Call Version + 1", RFC 8166, DOI 10.17487/RFC8166, June 2017, + <https://www.rfc-editor.org/info/rfc8166>. + + [RFC8167] Lever, C., "Bidirectional Remote Procedure Call on RPC- + over-RDMA Transports", RFC 8167, DOI 10.17487/RFC8167, + June 2017, <https://www.rfc-editor.org/info/rfc8167>. + + [RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. + Völker, "Packetization Layer Path MTU Discovery for + Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, + September 2020, <https://www.rfc-editor.org/info/rfc8899>. + + [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, + Ed., "HTTP Semantics", STD 97, RFC 9110, + DOI 10.17487/RFC9110, June 2022, + <https://www.rfc-editor.org/info/rfc9110>. + +Appendix A. Known Weaknesses of the AUTH_SYS Authentication Flavor + + The ONC RPC protocol, as specified in [RFC5531], provides several + modes of security, commonly referred to as "authentication flavors". + Some of these flavors provide much more than an authentication + service. We refer to these as authentication flavors, security + flavors, or simply, flavors. One of the earliest and most basic + flavors is AUTH_SYS, also known as AUTH_UNIX. Appendix A of + [RFC5531] specifies AUTH_SYS. + + AUTH_SYS assumes that the RPC client and server both use POSIX-style + user and group identifiers (each user and group can be distinctly + represented as a 32-bit unsigned integer). It also assumes that the + client and server both use the same mapping of user and group to an + integer. One user ID, one primary group ID, and up to 16 + supplemental group IDs are associated with each RPC request. The + combination of these identifies the entity on the client that is + making the request. + + A string identifies peers (hosts) in each RPC request. [RFC5531] + does not specify any requirements for this string other than that it + is no longer than 255 octets. It does not have to be the same from + request to request. Also, it does not have to match the DNS hostname + of the sending host. For these reasons, even though most + implementations fill in their hostname in this field, receivers + typically ignore its content. + + Appendix A of [RFC5531] contains a brief explanation of security + considerations: + + | It should be noted that use of this flavor of authentication does + | not guarantee any security for the users or providers of a + | service, in itself. The authentication provided by this scheme + | can be considered legitimate only when applications using this + | scheme and the network can be secured externally, and privileged + | transport addresses are used for the communicating end-points (an + | example of this is the use of privileged TCP/UDP ports in UNIX + | systems -- note that not all systems enforce privileged transport + | address mechanisms). + + It should be clear, therefore, that AUTH_SYS by itself (i.e., without + strong client authentication) offers little to no communication + security: + + 1. It does not protect the confidentiality or integrity of RPC + requests, users, or payloads, relying instead on "external" + security. + + 2. It does not provide authentication of RPC peer machines, other + than inclusion of an unprotected domain name. + + 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. In addition, the + mapping of these integers to users and groups has to be + consistent amongst a server and its cohort of clients. + + 4. Because the user and group ID fields are not integrity protected, + AUTH_SYS does not provide non-repudiation. + +Appendix B. ASN.1 Module + + The following module adheres to ASN.1 specifications [X.680] and + [X.690]. + + <CODE BEGINS> + RPCwithTLS-2021 + { iso(1) identified-organization(3) dod(6) internet(1) + security(5) mechanisms(5) pkix(7) id-mod(0) + id-mod-rpcWithTLS-2021(105) } + + DEFINITIONS IMPLICIT TAGS ::= + BEGIN + + -- OID Arc + + id-kp OBJECT IDENTIFIER ::= + { iso(1) identified-organization(3) dod(6) internet(1) + security(5) mechanisms(5) pkix(7) kp(3) } + + -- Extended Key Usage Values + + id-kp-rpcTLSClient OBJECT IDENTIFIER ::= { id-kp 33 } + id-kp-rpcTLSServer OBJECT IDENTIFIER ::= { id-kp 34 } + + END + <CODE ENDS> + +Acknowledgments + + Special mention goes to Charles Fisher, author of "Encrypting NFSv4 + with Stunnel TLS" <https://www.linuxjournal.com/content/encrypting- + nfsv4-stunnel-tls>. His article inspired the mechanism described in + the current document. + + Many thanks to Benjamin Coddington, Tigran Mkrtchyan, and Rick + Macklem for their work on prototype implementations and feedback on + the current document. Also, thanks to Benjamin Kaduk for his expert + guidance on the use of PKIX and TLS and to Russ Housley for his ASN.1 + expertise and for providing other proper finishing touches. In + addition, the authors thank the other members of the IESG for their + astute review comments. These contributors made this a significantly + better document. + + Thanks to Derrell Piper for numerous suggestions that improved both + this simple mechanism and the current document's security-related + discussion. + + Many thanks to Transport Area Director Magnus Westerlund for his + sharp questions and careful reading of the final revisions of the + current document. The text of Section 5.1.2 is mostly his + contribution. + + The authors are additionally grateful to Bill Baker, David Black, + Alan DeKok, Lars Eggert, Olga Kornievskaia, Greg Marsden, Alex + McDonald, Justin Mazzola Paluska, Tom Talpey, Martin Thomson, and + Nico Williams for their input and support of this work. + + Finally, special thanks to NFSV4 Working Group Chair and document + shepherd David Noveck, NFSV4 Working Group Chairs Spencer Shepler and + Brian Pawlowski, and NFSV4 Working Group Secretary Thomas Haynes for + their guidance and oversight. + +Authors' Addresses + + Trond Myklebust + Hammerspace Inc. + 4300 El Camino Real, Suite 105 + Los Altos, CA 94022 + United States of America + Email: trond.myklebust@hammerspace.com + + + Charles Lever (editor) + Oracle Corporation + United States of America + Email: chuck.lever@oracle.com |