e0fe765152
new configuration structure: peer_cfg: configuration related to a peer (authenitcation, ...= ike_cfg: config to use for IKE setup (proposals) child_Cfg: config for CHILD_SA (proposals, traffic selectors) a peer_cfg has one ike_cfg and multiple child_cfg's stroke now uses fixed count of threads
5660 lines
256 KiB
Text
5660 lines
256 KiB
Text
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group S. Kent
|
||
Request for Comments: 4301 K. Seo
|
||
Obsoletes: 2401 BBN Technologies
|
||
Category: Standards Track December 2005
|
||
|
||
|
||
Security Architecture for the Internet Protocol
|
||
|
||
Status of This Memo
|
||
|
||
This document specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" (STD 1) for the standardization state
|
||
and status of this protocol. Distribution of this memo is unlimited.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2005).
|
||
|
||
Abstract
|
||
|
||
This document describes an updated version of the "Security
|
||
Architecture for IP", which is designed to provide security services
|
||
for traffic at the IP layer. This document obsoletes RFC 2401
|
||
(November 1998).
|
||
|
||
Dedication
|
||
|
||
This document is dedicated to the memory of Charlie Lynn, a long-time
|
||
senior colleague at BBN, who made very significant contributions to
|
||
the IPsec documents.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 1]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ....................................................4
|
||
1.1. Summary of Contents of Document ............................4
|
||
1.2. Audience ...................................................4
|
||
1.3. Related Documents ..........................................5
|
||
2. Design Objectives ...............................................5
|
||
2.1. Goals/Objectives/Requirements/Problem Description ..........5
|
||
2.2. Caveats and Assumptions ....................................6
|
||
3. System Overview .................................................7
|
||
3.1. What IPsec Does ............................................7
|
||
3.2. How IPsec Works ............................................9
|
||
3.3. Where IPsec Can Be Implemented ............................10
|
||
4. Security Associations ..........................................11
|
||
4.1. Definition and Scope ......................................12
|
||
4.2. SA Functionality ..........................................16
|
||
4.3. Combining SAs .............................................17
|
||
4.4. Major IPsec Databases .....................................18
|
||
4.4.1. The Security Policy Database (SPD) .................19
|
||
4.4.1.1. Selectors .................................26
|
||
4.4.1.2. Structure of an SPD Entry .................30
|
||
4.4.1.3. More Regarding Fields Associated
|
||
with Next Layer Protocols .................32
|
||
4.4.2. Security Association Database (SAD) ................34
|
||
4.4.2.1. Data Items in the SAD .....................36
|
||
4.4.2.2. Relationship between SPD, PFP
|
||
flag, packet, and SAD .....................38
|
||
4.4.3. Peer Authorization Database (PAD) ..................43
|
||
4.4.3.1. PAD Entry IDs and Matching Rules ..........44
|
||
4.4.3.2. IKE Peer Authentication Data ..............45
|
||
4.4.3.3. Child SA Authorization Data ...............46
|
||
4.4.3.4. How the PAD Is Used .......................46
|
||
4.5. SA and Key Management .....................................47
|
||
4.5.1. Manual Techniques ..................................48
|
||
4.5.2. Automated SA and Key Management ....................48
|
||
4.5.3. Locating a Security Gateway ........................49
|
||
4.6. SAs and Multicast .........................................50
|
||
5. IP Traffic Processing ..........................................50
|
||
5.1. Outbound IP Traffic Processing
|
||
(protected-to-unprotected) ................................52
|
||
5.1.1. Handling an Outbound Packet That Must Be
|
||
Discarded ..........................................54
|
||
5.1.2. Header Construction for Tunnel Mode ................55
|
||
5.1.2.1. IPv4: Header Construction for
|
||
Tunnel Mode ...............................57
|
||
5.1.2.2. IPv6: Header Construction for
|
||
Tunnel Mode ...............................59
|
||
5.2. Processing Inbound IP Traffic (unprotected-to-protected) ..59
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 2]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
6. ICMP Processing ................................................63
|
||
6.1. Processing ICMP Error Messages Directed to an
|
||
IPsec Implementation ......................................63
|
||
6.1.1. ICMP Error Messages Received on the
|
||
Unprotected Side of the Boundary ...................63
|
||
6.1.2. ICMP Error Messages Received on the
|
||
Protected Side of the Boundary .....................64
|
||
6.2. Processing Protected, Transit ICMP Error Messages .........64
|
||
7. Handling Fragments (on the protected side of the IPsec
|
||
boundary) ......................................................66
|
||
7.1. Tunnel Mode SAs that Carry Initial and Non-Initial
|
||
Fragments .................................................67
|
||
7.2. Separate Tunnel Mode SAs for Non-Initial Fragments ........67
|
||
7.3. Stateful Fragment Checking ................................68
|
||
7.4. BYPASS/DISCARD Traffic ....................................69
|
||
8. Path MTU/DF Processing .........................................69
|
||
8.1. DF Bit ....................................................69
|
||
8.2. Path MTU (PMTU) Discovery .................................70
|
||
8.2.1. Propagation of PMTU ................................70
|
||
8.2.2. PMTU Aging .........................................71
|
||
9. Auditing .......................................................71
|
||
10. Conformance Requirements ......................................71
|
||
11. Security Considerations .......................................72
|
||
12. IANA Considerations ...........................................72
|
||
13. Differences from RFC 2401 .....................................72
|
||
14. Acknowledgements ..............................................75
|
||
Appendix A: Glossary ..............................................76
|
||
Appendix B: Decorrelation .........................................79
|
||
B.1. Decorrelation Algorithm ...................................79
|
||
Appendix C: ASN.1 for an SPD Entry ................................82
|
||
Appendix D: Fragment Handling Rationale ...........................88
|
||
D.1. Transport Mode and Fragments ..............................88
|
||
D.2. Tunnel Mode and Fragments .................................89
|
||
D.3. The Problem of Non-Initial Fragments ......................90
|
||
D.4. BYPASS/DISCARD Traffic ....................................93
|
||
D.5. Just say no to ports? .....................................94
|
||
D.6. Other Suggested Solutions..................................94
|
||
D.7. Consistency................................................95
|
||
D.8. Conclusions................................................95
|
||
Appendix E: Example of Supporting Nested SAs via SPD and
|
||
Forwarding Table Entries...............................96
|
||
References.........................................................98
|
||
Normative References............................................98
|
||
Informative References..........................................99
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 3]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1. Summary of Contents of Document
|
||
|
||
This document specifies the base architecture for IPsec-compliant
|
||
systems. It describes how to provide a set of security services for
|
||
traffic at the IP layer, in both the IPv4 [Pos81a] and IPv6 [DH98]
|
||
environments. This document describes the requirements for systems
|
||
that implement IPsec, the fundamental elements of such systems, and
|
||
how the elements fit together and fit into the IP environment. It
|
||
also describes the security services offered by the IPsec protocols,
|
||
and how these services can be employed in the IP environment. This
|
||
document does not address all aspects of the IPsec architecture.
|
||
Other documents address additional architectural details in
|
||
specialized environments, e.g., use of IPsec in Network Address
|
||
Translation (NAT) environments and more comprehensive support for IP
|
||
multicast. The fundamental components of the IPsec security
|
||
architecture are discussed in terms of their underlying, required
|
||
functionality. Additional RFCs (see Section 1.3 for pointers to
|
||
other documents) define the protocols in (a), (c), and (d).
|
||
|
||
a. Security Protocols -- Authentication Header (AH) and
|
||
Encapsulating Security Payload (ESP)
|
||
b. Security Associations -- what they are and how they work,
|
||
how they are managed, associated processing
|
||
c. Key Management -- manual and automated (The Internet Key
|
||
Exchange (IKE))
|
||
d. Cryptographic algorithms for authentication and encryption
|
||
|
||
This document is not a Security Architecture for the Internet; it
|
||
addresses security only at the IP layer, provided through the use of
|
||
a combination of cryptographic and protocol security mechanisms.
|
||
|
||
The spelling "IPsec" is preferred and used throughout this and all
|
||
related IPsec standards. All other capitalizations of IPsec (e.g.,
|
||
IPSEC, IPSec, ipsec) are deprecated. However, any capitalization of
|
||
the sequence of letters "IPsec" should be understood to refer to the
|
||
IPsec protocols.
|
||
|
||
The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
|
||
SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this
|
||
document, are to be interpreted as described in RFC 2119 [Bra97].
|
||
|
||
1.2. Audience
|
||
|
||
The target audience for this document is primarily individuals who
|
||
implement this IP security technology or who architect systems that
|
||
will use this technology. Technically adept users of this technology
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 4]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
(end users or system administrators) also are part of the target
|
||
audience. A glossary is provided in Appendix A to help fill in gaps
|
||
in background/vocabulary. This document assumes that the reader is
|
||
familiar with the Internet Protocol (IP), related networking
|
||
technology, and general information system security terms and
|
||
concepts.
|
||
|
||
1.3. Related Documents
|
||
|
||
As mentioned above, other documents provide detailed definitions of
|
||
some of the components of IPsec and of their interrelationship. They
|
||
include RFCs on the following topics:
|
||
|
||
a. security protocols -- RFCs describing the Authentication
|
||
Header (AH) [Ken05b] and Encapsulating Security Payload
|
||
(ESP) [Ken05a] protocols.
|
||
b. cryptographic algorithms for integrity and encryption -- one
|
||
RFC that defines the mandatory, default algorithms for use
|
||
with AH and ESP [Eas05], a similar RFC that defines the
|
||
mandatory algorithms for use with IKEv2 [Sch05] plus a
|
||
separate RFC for each cryptographic algorithm.
|
||
c. automatic key management -- RFCs on "The Internet Key
|
||
Exchange (IKEv2) Protocol" [Kau05] and "Cryptographic
|
||
Algorithms for Use in the Internet Key Exchange Version 2
|
||
(IKEv2)" [Sch05].
|
||
|
||
2. Design Objectives
|
||
|
||
2.1. Goals/Objectives/Requirements/Problem Description
|
||
|
||
IPsec is designed to provide interoperable, high quality,
|
||
cryptographically-based security for IPv4 and IPv6. The set of
|
||
security services offered includes access control, connectionless
|
||
integrity, data origin authentication, detection and rejection of
|
||
replays (a form of partial sequence integrity), confidentiality (via
|
||
encryption), and limited traffic flow confidentiality. These
|
||
services are provided at the IP layer, offering protection in a
|
||
standard fashion for all protocols that may be carried over IP
|
||
(including IP itself).
|
||
|
||
IPsec includes a specification for minimal firewall functionality,
|
||
since that is an essential aspect of access control at the IP layer.
|
||
Implementations are free to provide more sophisticated firewall
|
||
mechanisms, and to implement the IPsec-mandated functionality using
|
||
those more sophisticated mechanisms. (Note that interoperability may
|
||
suffer if additional firewall constraints on traffic flows are
|
||
imposed by an IPsec implementation but cannot be negotiated based on
|
||
the traffic selector features defined in this document and negotiated
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 5]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
via IKEv2.) The IPsec firewall function makes use of the
|
||
cryptographically-enforced authentication and integrity provided for
|
||
all IPsec traffic to offer better access control than could be
|
||
obtained through use of a firewall (one not privy to IPsec internal
|
||
parameters) plus separate cryptographic protection.
|
||
|
||
Most of the security services are provided through use of two traffic
|
||
security protocols, the Authentication Header (AH) and the
|
||
Encapsulating Security Payload (ESP), and through the use of
|
||
cryptographic key management procedures and protocols. The set of
|
||
IPsec protocols employed in a context, and the ways in which they are
|
||
employed, will be determined by the users/administrators in that
|
||
context. It is the goal of the IPsec architecture to ensure that
|
||
compliant implementations include the services and management
|
||
interfaces needed to meet the security requirements of a broad user
|
||
population.
|
||
|
||
When IPsec is correctly implemented and deployed, it ought not
|
||
adversely affect users, hosts, and other Internet components that do
|
||
not employ IPsec for traffic protection. IPsec security protocols
|
||
(AH and ESP, and to a lesser extent, IKE) are designed to be
|
||
cryptographic algorithm independent. This modularity permits
|
||
selection of different sets of cryptographic algorithms as
|
||
appropriate, without affecting the other parts of the implementation.
|
||
For example, different user communities may select different sets of
|
||
cryptographic algorithms (creating cryptographically-enforced
|
||
cliques) if required.
|
||
|
||
To facilitate interoperability in the global Internet, a set of
|
||
default cryptographic algorithms for use with AH and ESP is specified
|
||
in [Eas05] and a set of mandatory-to-implement algorithms for IKEv2
|
||
is specified in [Sch05]. [Eas05] and [Sch05] will be periodically
|
||
updated to keep pace with computational and cryptologic advances. By
|
||
specifying these algorithms in documents that are separate from the
|
||
AH, ESP, and IKEv2 specifications, these algorithms can be updated or
|
||
replaced without affecting the standardization progress of the rest
|
||
of the IPsec document suite. The use of these cryptographic
|
||
algorithms, in conjunction with IPsec traffic protection and key
|
||
management protocols, is intended to permit system and application
|
||
developers to deploy high quality, Internet-layer, cryptographic
|
||
security technology.
|
||
|
||
2.2. Caveats and Assumptions
|
||
|
||
The suite of IPsec protocols and associated default cryptographic
|
||
algorithms are designed to provide high quality security for Internet
|
||
traffic. However, the security offered by use of these protocols
|
||
ultimately depends on the quality of their implementation, which is
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 6]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
outside the scope of this set of standards. Moreover, the security
|
||
of a computer system or network is a function of many factors,
|
||
including personnel, physical, procedural, compromising emanations,
|
||
and computer security practices. Thus, IPsec is only one part of an
|
||
overall system security architecture.
|
||
|
||
Finally, the security afforded by the use of IPsec is critically
|
||
dependent on many aspects of the operating environment in which the
|
||
IPsec implementation executes. For example, defects in OS security,
|
||
poor quality of random number sources, sloppy system management
|
||
protocols and practices, etc., can all degrade the security provided
|
||
by IPsec. As above, none of these environmental attributes are
|
||
within the scope of this or other IPsec standards.
|
||
|
||
3. System Overview
|
||
|
||
This section provides a high level description of how IPsec works,
|
||
the components of the system, and how they fit together to provide
|
||
the security services noted above. The goal of this description is
|
||
to enable the reader to "picture" the overall process/system, see how
|
||
it fits into the IP environment, and to provide context for later
|
||
sections of this document, which describe each of the components in
|
||
more detail.
|
||
|
||
An IPsec implementation operates in a host, as a security gateway
|
||
(SG), or as an independent device, affording protection to IP
|
||
traffic. (A security gateway is an intermediate system implementing
|
||
IPsec, e.g., a firewall or router that has been IPsec-enabled.) More
|
||
detail on these classes of implementations is provided later, in
|
||
Section 3.3. The protection offered by IPsec is based on requirements
|
||
defined by a Security Policy Database (SPD) established and
|
||
maintained by a user or system administrator, or by an application
|
||
operating within constraints established by either of the above. In
|
||
general, packets are selected for one of three processing actions
|
||
based on IP and next layer header information ("Selectors", Section
|
||
4.4.1.1) matched against entries in the SPD. Each packet is either
|
||
PROTECTed using IPsec security services, DISCARDed, or allowed to
|
||
BYPASS IPsec protection, based on the applicable SPD policies
|
||
identified by the Selectors.
|
||
|
||
3.1. What IPsec Does
|
||
|
||
IPsec creates a boundary between unprotected and protected
|
||
interfaces, for a host or a network (see Figure 1 below). Traffic
|
||
traversing the boundary is subject to the access controls specified
|
||
by the user or administrator responsible for the IPsec configuration.
|
||
These controls indicate whether packets cross the boundary unimpeded,
|
||
are afforded security services via AH or ESP, or are discarded.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 7]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
IPsec security services are offered at the IP layer through selection
|
||
of appropriate security protocols, cryptographic algorithms, and
|
||
cryptographic keys. IPsec can be used to protect one or more "paths"
|
||
(a) between a pair of hosts, (b) between a pair of security gateways,
|
||
or (c) between a security gateway and a host. A compliant host
|
||
implementation MUST support (a) and (c) and a compliant security
|
||
gateway must support all three of these forms of connectivity, since
|
||
under certain circumstances a security gateway acts as a host.
|
||
|
||
Unprotected
|
||
^ ^
|
||
| |
|
||
+-------------|-------|-------+
|
||
| +-------+ | | |
|
||
| |Discard|<--| V |
|
||
| +-------+ |B +--------+ |
|
||
................|y..| AH/ESP |..... IPsec Boundary
|
||
| +---+ |p +--------+ |
|
||
| |IKE|<----|a ^ |
|
||
| +---+ |s | |
|
||
| +-------+ |s | |
|
||
| |Discard|<--| | |
|
||
| +-------+ | | |
|
||
+-------------|-------|-------+
|
||
| |
|
||
V V
|
||
Protected
|
||
|
||
Figure 1. Top Level IPsec Processing Model
|
||
|
||
In this diagram, "unprotected" refers to an interface that might also
|
||
be described as "black" or "ciphertext". Here, "protected" refers to
|
||
an interface that might also be described as "red" or "plaintext".
|
||
The protected interface noted above may be internal, e.g., in a host
|
||
implementation of IPsec, the protected interface may link to a socket
|
||
layer interface presented by the OS. In this document, the term
|
||
"inbound" refers to traffic entering an IPsec implementation via the
|
||
unprotected interface or emitted by the implementation on the
|
||
unprotected side of the boundary and directed towards the protected
|
||
interface. The term "outbound" refers to traffic entering the
|
||
implementation via the protected interface, or emitted by the
|
||
implementation on the protected side of the boundary and directed
|
||
toward the unprotected interface. An IPsec implementation may
|
||
support more than one interface on either or both sides of the
|
||
boundary.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 8]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Note the facilities for discarding traffic on either side of the
|
||
IPsec boundary, the BYPASS facility that allows traffic to transit
|
||
the boundary without cryptographic protection, and the reference to
|
||
IKE as a protected-side key and security management function.
|
||
|
||
IPsec optionally supports negotiation of IP compression [SMPT01],
|
||
motivated in part by the observation that when encryption is employed
|
||
within IPsec, it prevents effective compression by lower protocol
|
||
layers.
|
||
|
||
3.2. How IPsec Works
|
||
|
||
IPsec uses two protocols to provide traffic security services --
|
||
Authentication Header (AH) and Encapsulating Security Payload (ESP).
|
||
Both protocols are described in detail in their respective RFCs
|
||
[Ken05b, Ken05a]. IPsec implementations MUST support ESP and MAY
|
||
support AH. (Support for AH has been downgraded to MAY because
|
||
experience has shown that there are very few contexts in which ESP
|
||
cannot provide the requisite security services. Note that ESP can be
|
||
used to provide only integrity, without confidentiality, making it
|
||
comparable to AH in most contexts.)
|
||
|
||
o The IP Authentication Header (AH) [Ken05b] offers integrity and
|
||
data origin authentication, with optional (at the discretion of
|
||
the receiver) anti-replay features.
|
||
|
||
o The Encapsulating Security Payload (ESP) protocol [Ken05a] offers
|
||
the same set of services, and also offers confidentiality. Use of
|
||
ESP to provide confidentiality without integrity is NOT
|
||
RECOMMENDED. When ESP is used with confidentiality enabled, there
|
||
are provisions for limited traffic flow confidentiality, i.e.,
|
||
provisions for concealing packet length, and for facilitating
|
||
efficient generation and discard of dummy packets. This
|
||
capability is likely to be effective primarily in virtual private
|
||
network (VPN) and overlay network contexts.
|
||
|
||
o Both AH and ESP offer access control, enforced through the
|
||
distribution of cryptographic keys and the management of traffic
|
||
flows as dictated by the Security Policy Database (SPD, Section
|
||
4.4.1).
|
||
|
||
These protocols may be applied individually or in combination with
|
||
each other to provide IPv4 and IPv6 security services. However, most
|
||
security requirements can be met through the use of ESP by itself.
|
||
Each protocol supports two modes of use: transport mode and tunnel
|
||
mode. In transport mode, AH and ESP provide protection primarily for
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 9]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
next layer protocols; in tunnel mode, AH and ESP are applied to
|
||
tunneled IP packets. The differences between the two modes are
|
||
discussed in Section 4.1.
|
||
|
||
IPsec allows the user (or system administrator) to control the
|
||
granularity at which a security service is offered. For example, one
|
||
can create a single encrypted tunnel to carry all the traffic between
|
||
two security gateways, or a separate encrypted tunnel can be created
|
||
for each TCP connection between each pair of hosts communicating
|
||
across these gateways. IPsec, through the SPD management paradigm,
|
||
incorporates facilities for specifying:
|
||
|
||
o which security protocol (AH or ESP) to employ, the mode (transport
|
||
or tunnel), security service options, what cryptographic
|
||
algorithms to use, and in what combinations to use the specified
|
||
protocols and services, and
|
||
|
||
o the granularity at which protection should be applied.
|
||
|
||
Because most of the security services provided by IPsec require the
|
||
use of cryptographic keys, IPsec relies on a separate set of
|
||
mechanisms for putting these keys in place. This document requires
|
||
support for both manual and automated distribution of keys. It
|
||
specifies a specific public-key based approach (IKEv2 [Kau05]) for
|
||
automated key management, but other automated key distribution
|
||
techniques MAY be used.
|
||
|
||
Note: This document mandates support for several features for which
|
||
support is available in IKEv2 but not in IKEv1, e.g., negotiation of
|
||
an SA representing ranges of local and remote ports or negotiation of
|
||
multiple SAs with the same selectors. Therefore, this document
|
||
assumes use of IKEv2 or a key and security association management
|
||
system with comparable features.
|
||
|
||
3.3. Where IPsec Can Be Implemented
|
||
|
||
There are many ways in which IPsec may be implemented in a host, or
|
||
in conjunction with a router or firewall to create a security
|
||
gateway, or as an independent security device.
|
||
|
||
a. IPsec may be integrated into the native IP stack. This requires
|
||
access to the IP source code and is applicable to both hosts and
|
||
security gateways, although native host implementations benefit
|
||
the most from this strategy, as explained later (Section 4.4.1,
|
||
paragraph 6; Section 4.4.1.1, last paragraph).
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 10]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
b. In a "bump-in-the-stack" (BITS) implementation, IPsec is
|
||
implemented "underneath" an existing implementation of an IP
|
||
protocol stack, between the native IP and the local network
|
||
drivers. Source code access for the IP stack is not required in
|
||
this context, making this implementation approach appropriate for
|
||
use with legacy systems. This approach, when it is adopted, is
|
||
usually employed in hosts.
|
||
|
||
c. The use of a dedicated, inline security protocol processor is a
|
||
common design feature of systems used by the military, and of some
|
||
commercial systems as well. It is sometimes referred to as a
|
||
"bump-in-the-wire" (BITW) implementation. Such implementations
|
||
may be designed to serve either a host or a gateway. Usually, the
|
||
BITW device is itself IP addressable. When supporting a single
|
||
host, it may be quite analogous to a BITS implementation, but in
|
||
supporting a router or firewall, it must operate like a security
|
||
gateway.
|
||
|
||
This document often talks in terms of use of IPsec by a host or a
|
||
security gateway, without regard to whether the implementation is
|
||
native, BITS, or BITW. When the distinctions among these
|
||
implementation options are significant, the document makes reference
|
||
to specific implementation approaches.
|
||
|
||
A host implementation of IPsec may appear in devices that might not
|
||
be viewed as "hosts". For example, a router might employ IPsec to
|
||
protect routing protocols (e.g., BGP) and management functions (e.g.,
|
||
Telnet), without affecting subscriber traffic traversing the router.
|
||
A security gateway might employ separate IPsec implementations to
|
||
protect its management traffic and subscriber traffic. The
|
||
architecture described in this document is very flexible. For
|
||
example, a computer with a full-featured, compliant, native OS IPsec
|
||
implementation should be capable of being configured to protect
|
||
resident (host) applications and to provide security gateway
|
||
protection for traffic traversing the computer. Such configuration
|
||
would make use of the forwarding tables and the SPD selection
|
||
function described in Sections 5.1 and 5.2.
|
||
|
||
4. Security Associations
|
||
|
||
This section defines Security Association management requirements for
|
||
all IPv6 implementations and for those IPv4 implementations that
|
||
implement AH, ESP, or both AH and ESP. The concept of a "Security
|
||
Association" (SA) is fundamental to IPsec. Both AH and ESP make use
|
||
of SAs, and a major function of IKE is the establishment and
|
||
maintenance of SAs. All implementations of AH or ESP MUST support
|
||
the concept of an SA as described below. The remainder of this
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 11]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
section describes various aspects of SA management, defining required
|
||
characteristics for SA policy management and SA management
|
||
techniques.
|
||
|
||
4.1. Definition and Scope
|
||
|
||
An SA is a simplex "connection" that affords security services to the
|
||
traffic carried by it. Security services are afforded to an SA by
|
||
the use of AH, or ESP, but not both. If both AH and ESP protection
|
||
are applied to a traffic stream, then two SAs must be created and
|
||
coordinated to effect protection through iterated application of the
|
||
security protocols. To secure typical, bi-directional communication
|
||
between two IPsec-enabled systems, a pair of SAs (one in each
|
||
direction) is required. IKE explicitly creates SA pairs in
|
||
recognition of this common usage requirement.
|
||
|
||
For an SA used to carry unicast traffic, the Security Parameters
|
||
Index (SPI) by itself suffices to specify an SA. (For information on
|
||
the SPI, see Appendix A and the AH and ESP specifications [Ken05b,
|
||
Ken05a].) However, as a local matter, an implementation may choose
|
||
to use the SPI in conjunction with the IPsec protocol type (AH or
|
||
ESP) for SA identification. If an IPsec implementation supports
|
||
multicast, then it MUST support multicast SAs using the algorithm
|
||
below for mapping inbound IPsec datagrams to SAs. Implementations
|
||
that support only unicast traffic need not implement this de-
|
||
multiplexing algorithm.
|
||
|
||
In many secure multicast architectures, e.g., [RFC3740], a central
|
||
Group Controller/Key Server unilaterally assigns the Group Security
|
||
Association's (GSA's) SPI. This SPI assignment is not negotiated or
|
||
coordinated with the key management (e.g., IKE) subsystems that
|
||
reside in the individual end systems that constitute the group.
|
||
Consequently, it is possible that a GSA and a unicast SA can
|
||
simultaneously use the same SPI. A multicast-capable IPsec
|
||
implementation MUST correctly de-multiplex inbound traffic even in
|
||
the context of SPI collisions.
|
||
|
||
Each entry in the SA Database (SAD) (Section 4.4.2) must indicate
|
||
whether the SA lookup makes use of the destination IP address, or the
|
||
destination and source IP addresses, in addition to the SPI. For
|
||
multicast SAs, the protocol field is not employed for SA lookups.
|
||
For each inbound, IPsec-protected packet, an implementation must
|
||
conduct its search of the SAD such that it finds the entry that
|
||
matches the "longest" SA identifier. In this context, if two or more
|
||
SAD entries match based on the SPI value, then the entry that also
|
||
matches based on destination address, or destination and source
|
||
address (as indicated in the SAD entry) is the "longest" match. This
|
||
implies a logical ordering of the SAD search as follows:
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 12]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
1. Search the SAD for a match on the combination of SPI,
|
||
destination address, and source address. If an SAD entry
|
||
matches, then process the inbound packet with that
|
||
matching SAD entry. Otherwise, proceed to step 2.
|
||
|
||
2. Search the SAD for a match on both SPI and destination address.
|
||
If the SAD entry matches, then process the inbound packet
|
||
with that matching SAD entry. Otherwise, proceed to step 3.
|
||
|
||
3. Search the SAD for a match on only SPI if the receiver has
|
||
chosen to maintain a single SPI space for AH and ESP, and on
|
||
both SPI and protocol, otherwise. If an SAD entry matches,
|
||
then process the inbound packet with that matching SAD entry.
|
||
Otherwise, discard the packet and log an auditable event.
|
||
|
||
In practice, an implementation may choose any method (or none at all)
|
||
to accelerate this search, although its externally visible behavior
|
||
MUST be functionally equivalent to having searched the SAD in the
|
||
above order. For example, a software-based implementation could
|
||
index into a hash table by the SPI. The SAD entries in each hash
|
||
table bucket's linked list could be kept sorted to have those SAD
|
||
entries with the longest SA identifiers first in that linked list.
|
||
Those SAD entries having the shortest SA identifiers could be sorted
|
||
so that they are the last entries in the linked list. A
|
||
hardware-based implementation may be able to effect the longest match
|
||
search intrinsically, using commonly available Ternary
|
||
Content-Addressable Memory (TCAM) features.
|
||
|
||
The indication of whether source and destination address matching is
|
||
required to map inbound IPsec traffic to SAs MUST be set either as a
|
||
side effect of manual SA configuration or via negotiation using an SA
|
||
management protocol, e.g., IKE or Group Domain of Interpretation
|
||
(GDOI) [RFC3547]. Typically, Source-Specific Multicast (SSM) [HC03]
|
||
groups use a 3-tuple SA identifier composed of an SPI, a destination
|
||
multicast address, and source address. An Any-Source Multicast group
|
||
SA requires only an SPI and a destination multicast address as an
|
||
identifier.
|
||
|
||
If different classes of traffic (distinguished by Differentiated
|
||
Services Code Point (DSCP) bits [NiBlBaBL98], [Gro02]) are sent on
|
||
the same SA, and if the receiver is employing the optional
|
||
anti-replay feature available in both AH and ESP, this could result
|
||
in inappropriate discarding of lower priority packets due to the
|
||
windowing mechanism used by this feature. Therefore, a sender SHOULD
|
||
put traffic of different classes, but with the same selector values,
|
||
on different SAs to support Quality of Service (QoS) appropriately.
|
||
To permit this, the IPsec implementation MUST permit establishment
|
||
and maintenance of multiple SAs between a given sender and receiver,
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 13]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
with the same selectors. Distribution of traffic among these
|
||
parallel SAs to support QoS is locally determined by the sender and
|
||
is not negotiated by IKE. The receiver MUST process the packets from
|
||
the different SAs without prejudice. These requirements apply to
|
||
both transport and tunnel mode SAs. In the case of tunnel mode SAs,
|
||
the DSCP values in question appear in the inner IP header. In
|
||
transport mode, the DSCP value might change en route, but this should
|
||
not cause problems with respect to IPsec processing since the value
|
||
is not employed for SA selection and MUST NOT be checked as part of
|
||
SA/packet validation. However, if significant re-ordering of packets
|
||
occurs in an SA, e.g., as a result of changes to DSCP values en
|
||
route, this may trigger packet discarding by a receiver due to
|
||
application of the anti-replay mechanism.
|
||
|
||
DISCUSSION: Although the DSCP [NiBlBaBL98, Gro02] and Explicit
|
||
Congestion Notification (ECN) [RaFlBl01] fields are not "selectors",
|
||
as that term in used in this architecture, the sender will need a
|
||
mechanism to direct packets with a given (set of) DSCP values to the
|
||
appropriate SA. This mechanism might be termed a "classifier".
|
||
|
||
As noted above, two types of SAs are defined: transport mode and
|
||
tunnel mode. IKE creates pairs of SAs, so for simplicity, we choose
|
||
to require that both SAs in a pair be of the same mode, transport or
|
||
tunnel.
|
||
|
||
A transport mode SA is an SA typically employed between a pair of
|
||
hosts to provide end-to-end security services. When security is
|
||
desired between two intermediate systems along a path (vs. end-to-end
|
||
use of IPsec), transport mode MAY be used between security gateways
|
||
or between a security gateway and a host. In the case where
|
||
transport mode is used between security gateways or between a
|
||
security gateway and a host, transport mode may be used to support
|
||
in-IP tunneling (e.g., IP-in-IP [Per96] or Generic Routing
|
||
Encapsulation (GRE) tunneling [FaLiHaMeTr00] or dynamic routing
|
||
[ToEgWa04]) over transport mode SAs. To clarify, the use of
|
||
transport mode by an intermediate system (e.g., a security gateway)
|
||
is permitted only when applied to packets whose source address (for
|
||
outbound packets) or destination address (for inbound packets) is an
|
||
address belonging to the intermediate system itself. The access
|
||
control functions that are an important part of IPsec are
|
||
significantly limited in this context, as they cannot be applied to
|
||
the end-to-end headers of the packets that traverse a transport mode
|
||
SA used in this fashion. Thus, this way of using transport mode
|
||
should be evaluated carefully before being employed in a specific
|
||
context.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 14]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
In IPv4, a transport mode security protocol header appears
|
||
immediately after the IP header and any options, and before any next
|
||
layer protocols (e.g., TCP or UDP). In IPv6, the security protocol
|
||
header appears after the base IP header and selected extension
|
||
headers, but may appear before or after destination options; it MUST
|
||
appear before next layer protocols (e.g., TCP, UDP, Stream Control
|
||
Transmission Protocol (SCTP)). In the case of ESP, a transport mode
|
||
SA provides security services only for these next layer protocols,
|
||
not for the IP header or any extension headers preceding the ESP
|
||
header. In the case of AH, the protection is also extended to
|
||
selected portions of the IP header preceding it, selected portions of
|
||
extension headers, and selected options (contained in the IPv4
|
||
header, IPv6 Hop-by-Hop extension header, or IPv6 Destination
|
||
extension headers). For more details on the coverage afforded by AH,
|
||
see the AH specification [Ken05b].
|
||
|
||
A tunnel mode SA is essentially an SA applied to an IP tunnel, with
|
||
the access controls applied to the headers of the traffic inside the
|
||
tunnel. Two hosts MAY establish a tunnel mode SA between themselves.
|
||
Aside from the two exceptions below, whenever either end of a
|
||
security association is a security gateway, the SA MUST be tunnel
|
||
mode. Thus, an SA between two security gateways is typically a
|
||
tunnel mode SA, as is an SA between a host and a security gateway.
|
||
The two exceptions are as follows.
|
||
|
||
o Where traffic is destined for a security gateway, e.g., Simple
|
||
Network Management Protocol (SNMP) commands, the security gateway
|
||
is acting as a host and transport mode is allowed. In this case,
|
||
the SA terminates at a host (management) function within a
|
||
security gateway and thus merits different treatment.
|
||
|
||
o As noted above, security gateways MAY support a transport mode SA
|
||
to provide security for IP traffic between two intermediate
|
||
systems along a path, e.g., between a host and a security gateway
|
||
or between two security gateways.
|
||
|
||
Several concerns motivate the use of tunnel mode for an SA involving
|
||
a security gateway. For example, if there are multiple paths (e.g.,
|
||
via different security gateways) to the same destination behind a
|
||
security gateway, it is important that an IPsec packet be sent to the
|
||
security gateway with which the SA was negotiated. Similarly, a
|
||
packet that might be fragmented en route must have all the fragments
|
||
delivered to the same IPsec instance for reassembly prior to
|
||
cryptographic processing. Also, when a fragment is processed by
|
||
IPsec and transmitted, then fragmented en route, it is critical that
|
||
there be inner and outer headers to retain the fragmentation state
|
||
data for the pre- and post-IPsec packet formats. Hence there are
|
||
several reasons for employing tunnel mode when either end of an SA is
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 15]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
a security gateway. (Use of an IP-in-IP tunnel in conjunction with
|
||
transport mode can also address these fragmentation issues. However,
|
||
this configuration limits the ability of IPsec to enforce access
|
||
control policies on traffic.)
|
||
|
||
Note: AH and ESP cannot be applied using transport mode to IPv4
|
||
packets that are fragments. Only tunnel mode can be employed in such
|
||
cases. For IPv6, it would be feasible to carry a plaintext fragment
|
||
on a transport mode SA; however, for simplicity, this restriction
|
||
also applies to IPv6 packets. See Section 7 for more details on
|
||
handling plaintext fragments on the protected side of the IPsec
|
||
barrier.
|
||
|
||
For a tunnel mode SA, there is an "outer" IP header that specifies
|
||
the IPsec processing source and destination, plus an "inner" IP
|
||
header that specifies the (apparently) ultimate source and
|
||
destination for the packet. The security protocol header appears
|
||
after the outer IP header, and before the inner IP header. If AH is
|
||
employed in tunnel mode, portions of the outer IP header are afforded
|
||
protection (as above), as well as all of the tunneled IP packet
|
||
(i.e., all of the inner IP header is protected, as well as next layer
|
||
protocols). If ESP is employed, the protection is afforded only to
|
||
the tunneled packet, not to the outer header.
|
||
|
||
In summary,
|
||
|
||
a) A host implementation of IPsec MUST support both transport and
|
||
tunnel mode. This is true for native, BITS, and BITW
|
||
implementations for hosts.
|
||
|
||
b) A security gateway MUST support tunnel mode and MAY support
|
||
transport mode. If it supports transport mode, that should be
|
||
used only when the security gateway is acting as a host, e.g., for
|
||
network management, or to provide security between two
|
||
intermediate systems along a path.
|
||
|
||
4.2. SA Functionality
|
||
|
||
The set of security services offered by an SA depends on the security
|
||
protocol selected, the SA mode, the endpoints of the SA, and the
|
||
election of optional services within the protocol.
|
||
|
||
For example, both AH and ESP offer integrity and authentication
|
||
services, but the coverage differs for each protocol and differs for
|
||
transport vs. tunnel mode. If the integrity of an IPv4 option or
|
||
IPv6 extension header must be protected en route between sender and
|
||
receiver, AH can provide this service, except for IP or extension
|
||
headers that may change in a fashion not predictable by the sender.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 16]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
However, the same security may be achieved in some contexts by
|
||
applying ESP to a tunnel carrying a packet.
|
||
|
||
The granularity of access control provided is determined by the
|
||
choice of the selectors that define each SA. Moreover, the
|
||
authentication means employed by IPsec peers, e.g., during creation
|
||
of an IKE (vs. child) SA also affects the granularity of the access
|
||
control afforded.
|
||
|
||
If confidentiality is selected, then an ESP (tunnel mode) SA between
|
||
two security gateways can offer partial traffic flow confidentiality.
|
||
The use of tunnel mode allows the inner IP headers to be encrypted,
|
||
concealing the identities of the (ultimate) traffic source and
|
||
destination. Moreover, ESP payload padding also can be invoked to
|
||
hide the size of the packets, further concealing the external
|
||
characteristics of the traffic. Similar traffic flow confidentiality
|
||
services may be offered when a mobile user is assigned a dynamic IP
|
||
address in a dialup context, and establishes a (tunnel mode) ESP SA
|
||
to a corporate firewall (acting as a security gateway). Note that
|
||
fine-granularity SAs generally are more vulnerable to traffic
|
||
analysis than coarse-granularity ones that are carrying traffic from
|
||
many subscribers.
|
||
|
||
Note: A compliant implementation MUST NOT allow instantiation of an
|
||
ESP SA that employs both NULL encryption and no integrity algorithm.
|
||
An attempt to negotiate such an SA is an auditable event by both
|
||
initiator and responder. The audit log entry for this event SHOULD
|
||
include the current date/time, local IKE IP address, and remote IKE
|
||
IP address. The initiator SHOULD record the relevant SPD entry.
|
||
|
||
4.3. Combining SAs
|
||
|
||
This document does not require support for nested security
|
||
associations or for what RFC 2401 [RFC2401] called "SA bundles".
|
||
These features still can be effected by appropriate configuration of
|
||
both the SPD and the local forwarding functions (for inbound and
|
||
outbound traffic), but this capability is outside of the IPsec module
|
||
and thus the scope of this specification. As a result, management of
|
||
nested/bundled SAs is potentially more complex and less assured than
|
||
under the model implied by RFC 2401 [RFC2401]. An implementation
|
||
that provides support for nested SAs SHOULD provide a management
|
||
interface that enables a user or administrator to express the nesting
|
||
requirement, and then create the appropriate SPD entries and
|
||
forwarding table entries to effect the requisite processing. (See
|
||
Appendix E for an example of how to configure nested SAs.)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 17]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
4.4. Major IPsec Databases
|
||
|
||
Many of the details associated with processing IP traffic in an IPsec
|
||
implementation are largely a local matter, not subject to
|
||
standardization. However, some external aspects of the processing
|
||
must be standardized to ensure interoperability and to provide a
|
||
minimum management capability that is essential for productive use of
|
||
IPsec. This section describes a general model for processing IP
|
||
traffic relative to IPsec functionality, in support of these
|
||
interoperability and functionality goals. The model described below
|
||
is nominal; implementations need not match details of this model as
|
||
presented, but the external behavior of implementations MUST
|
||
correspond to the externally observable characteristics of this model
|
||
in order to be compliant.
|
||
|
||
There are three nominal databases in this model: the Security Policy
|
||
Database (SPD), the Security Association Database (SAD), and the Peer
|
||
Authorization Database (PAD). The first specifies the policies that
|
||
determine the disposition of all IP traffic inbound or outbound from
|
||
a host or security gateway (Section 4.4.1). The second database
|
||
contains parameters that are associated with each established (keyed)
|
||
SA (Section 4.4.2). The third database, the PAD, provides a link
|
||
between an SA management protocol (such as IKE) and the SPD (Section
|
||
4.4.3).
|
||
|
||
Multiple Separate IPsec Contexts
|
||
|
||
If an IPsec implementation acts as a security gateway for multiple
|
||
subscribers, it MAY implement multiple separate IPsec contexts.
|
||
Each context MAY have and MAY use completely independent
|
||
identities, policies, key management SAs, and/or IPsec SAs. This
|
||
is for the most part a local implementation matter. However, a
|
||
means for associating inbound (SA) proposals with local contexts
|
||
is required. To this end, if supported by the key management
|
||
protocol in use, context identifiers MAY be conveyed from
|
||
initiator to responder in the signaling messages, with the result
|
||
that IPsec SAs are created with a binding to a particular context.
|
||
For example, a security gateway that provides VPN service to
|
||
multiple customers will be able to associate each customer's
|
||
traffic with the correct VPN.
|
||
|
||
Forwarding vs Security Decisions
|
||
|
||
The IPsec model described here embodies a clear separation between
|
||
forwarding (routing) and security decisions, to accommodate a wide
|
||
range of contexts where IPsec may be employed. Forwarding may be
|
||
trivial, in the case where there are only two interfaces, or it
|
||
may be complex, e.g., if the context in which IPsec is implemented
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 18]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
employs a sophisticated forwarding function. IPsec assumes only
|
||
that outbound and inbound traffic that has passed through IPsec
|
||
processing is forwarded in a fashion consistent with the context
|
||
in which IPsec is implemented. Support for nested SAs is
|
||
optional; if required, it requires coordination between forwarding
|
||
tables and SPD entries to cause a packet to traverse the IPsec
|
||
boundary more than once.
|
||
|
||
"Local" vs "Remote"
|
||
|
||
In this document, with respect to IP addresses and ports, the
|
||
terms "Local" and "Remote" are used for policy rules. "Local"
|
||
refers to the entity being protected by an IPsec implementation,
|
||
i.e., the "source" address/port of outbound packets or the
|
||
"destination" address/port of inbound packets. "Remote" refers to
|
||
a peer entity or peer entities. The terms "source" and
|
||
"destination" are used for packet header fields.
|
||
|
||
"Non-initial" vs "Initial" Fragments
|
||
|
||
Throughout this document, the phrase "non-initial fragments" is
|
||
used to mean fragments that do not contain all of the selector
|
||
values that may be needed for access control (e.g., they might not
|
||
contain Next Layer Protocol, source and destination ports, ICMP
|
||
message type/code, Mobility Header type). And the phrase "initial
|
||
fragment" is used to mean a fragment that contains all the
|
||
selector values needed for access control. However, it should be
|
||
noted that for IPv6, which fragment contains the Next Layer
|
||
Protocol and ports (or ICMP message type/code or Mobility Header
|
||
type [Mobip]) will depend on the kind and number of extension
|
||
headers present. The "initial fragment" might not be the first
|
||
fragment, in this context.
|
||
|
||
4.4.1. The Security Policy Database (SPD)
|
||
|
||
An SA is a management construct used to enforce security policy for
|
||
traffic crossing the IPsec boundary. Thus, an essential element of
|
||
SA processing is an underlying Security Policy Database (SPD) that
|
||
specifies what services are to be offered to IP datagrams and in what
|
||
fashion. The form of the database and its interface are outside the
|
||
scope of this specification. However, this section specifies minimum
|
||
management functionality that must be provided, to allow a user or
|
||
system administrator to control whether and how IPsec is applied to
|
||
traffic transmitted or received by a host or transiting a security
|
||
gateway. The SPD, or relevant caches, must be consulted during the
|
||
processing of all traffic (inbound and outbound), including traffic
|
||
not protected by IPsec, that traverses the IPsec boundary. This
|
||
includes IPsec management traffic such as IKE. An IPsec
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 19]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
implementation MUST have at least one SPD, and it MAY support
|
||
multiple SPDs, if appropriate for the context in which the IPsec
|
||
implementation operates. There is no requirement to maintain SPDs on
|
||
a per-interface basis, as was specified in RFC 2401 [RFC2401].
|
||
However, if an implementation supports multiple SPDs, then it MUST
|
||
include an explicit SPD selection function that is invoked to select
|
||
the appropriate SPD for outbound traffic processing. The inputs to
|
||
this function are the outbound packet and any local metadata (e.g.,
|
||
the interface via which the packet arrived) required to effect the
|
||
SPD selection function. The output of the function is an SPD
|
||
identifier (SPD-ID).
|
||
|
||
The SPD is an ordered database, consistent with the use of Access
|
||
Control Lists (ACLs) or packet filters in firewalls, routers, etc.
|
||
The ordering requirement arises because entries often will overlap
|
||
due to the presence of (non-trivial) ranges as values for selectors.
|
||
Thus, a user or administrator MUST be able to order the entries to
|
||
express a desired access control policy. There is no way to impose a
|
||
general, canonical order on SPD entries, because of the allowed use
|
||
of wildcards for selector values and because the different types of
|
||
selectors are not hierarchically related.
|
||
|
||
Processing Choices: DISCARD, BYPASS, PROTECT
|
||
|
||
An SPD must discriminate among traffic that is afforded IPsec
|
||
protection and traffic that is allowed to bypass IPsec. This
|
||
applies to the IPsec protection to be applied by a sender and to
|
||
the IPsec protection that must be present at the receiver. For
|
||
any outbound or inbound datagram, three processing choices are
|
||
possible: DISCARD, BYPASS IPsec, or PROTECT using IPsec. The
|
||
first choice refers to traffic that is not allowed to traverse the
|
||
IPsec boundary (in the specified direction). The second choice
|
||
refers to traffic that is allowed to cross the IPsec boundary
|
||
without IPsec protection. The third choice refers to traffic that
|
||
is afforded IPsec protection, and for such traffic the SPD must
|
||
specify the security protocols to be employed, their mode,
|
||
security service options, and the cryptographic algorithms to be
|
||
used.
|
||
|
||
SPD-S, SPD-I, SPD-O
|
||
|
||
An SPD is logically divided into three pieces. The SPD-S (secure
|
||
traffic) contains entries for all traffic subject to IPsec
|
||
protection. SPD-O (outbound) contains entries for all outbound
|
||
traffic that is to be bypassed or discarded. SPD-I (inbound) is
|
||
applied to inbound traffic that will be bypassed or discarded.
|
||
All three of these can be decorrelated (with the exception noted
|
||
above for native host implementations) to facilitate caching. If
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 20]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
an IPsec implementation supports only one SPD, then the SPD
|
||
consists of all three parts. If multiple SPDs are supported, some
|
||
of them may be partial, e.g., some SPDs might contain only SPD-I
|
||
entries, to control inbound bypassed traffic on a per-interface
|
||
basis. The split allows SPD-I to be consulted without having to
|
||
consult SPD-S, for such traffic. Since the SPD-I is just a part
|
||
of the SPD, if a packet that is looked up in the SPD-I cannot be
|
||
matched to an entry there, then the packet MUST be discarded.
|
||
Note that for outbound traffic, if a match is not found in SPD-S,
|
||
then SPD-O must be checked to see if the traffic should be
|
||
bypassed. Similarly, if SPD-O is checked first and no match is
|
||
found, then SPD-S must be checked. In an ordered,
|
||
non-decorrelated SPD, the entries for the SPD-S, SPD-I, and SPD-O
|
||
are interleaved. So there is one lookup in the SPD.
|
||
|
||
SPD Entries
|
||
|
||
Each SPD entry specifies packet disposition as BYPASS, DISCARD, or
|
||
PROTECT. The entry is keyed by a list of one or more selectors.
|
||
The SPD contains an ordered list of these entries. The required
|
||
selector types are defined in Section 4.4.1.1. These selectors are
|
||
used to define the granularity of the SAs that are created in
|
||
response to an outbound packet or in response to a proposal from a
|
||
peer. The detailed structure of an SPD entry is described in
|
||
Section 4.4.1.2. Every SPD SHOULD have a nominal, final entry that
|
||
matches anything that is otherwise unmatched, and discards it.
|
||
|
||
The SPD MUST permit a user or administrator to specify policy
|
||
entries as follows:
|
||
|
||
- SPD-I: For inbound traffic that is to be bypassed or discarded,
|
||
the entry consists of the values of the selectors that apply to
|
||
the traffic to be bypassed or discarded.
|
||
|
||
- SPD-O: For outbound traffic that is to be bypassed or
|
||
discarded, the entry consists of the values of the selectors
|
||
that apply to the traffic to be bypassed or discarded.
|
||
|
||
- SPD-S: For traffic that is to be protected using IPsec, the
|
||
entry consists of the values of the selectors that apply to the
|
||
traffic to be protected via AH or ESP, controls on how to
|
||
create SAs based on these selectors, and the parameters needed
|
||
to effect this protection (e.g., algorithms, modes, etc.). Note
|
||
that an SPD-S entry also contains information such as "populate
|
||
from packet" (PFP) flag (see paragraphs below on "How To Derive
|
||
the Values for an SAD entry") and bits indicating whether the
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 21]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
SA lookup makes use of the local and remote IP addresses in
|
||
addition to the SPI (see AH [Ken05b] or ESP [Ken05a]
|
||
specifications).
|
||
|
||
Representing Directionality in an SPD Entry
|
||
|
||
For traffic protected by IPsec, the Local and Remote address and
|
||
ports in an SPD entry are swapped to represent directionality,
|
||
consistent with IKE conventions. In general, the protocols that
|
||
IPsec deals with have the property of requiring symmetric SAs with
|
||
flipped Local/Remote IP addresses. However, for ICMP, there is
|
||
often no such bi-directional authorization requirement.
|
||
Nonetheless, for the sake of uniformity and simplicity, SPD
|
||
entries for ICMP are specified in the same way as for other
|
||
protocols. Note also that for ICMP, Mobility Header, and
|
||
non-initial fragments, there are no port fields in these packets.
|
||
ICMP has message type and code and Mobility Header has mobility
|
||
header type. Thus, SPD entries have provisions for expressing
|
||
access controls appropriate for these protocols, in lieu of the
|
||
normal port field controls. For bypassed or discarded traffic,
|
||
separate inbound and outbound entries are supported, e.g., to
|
||
permit unidirectional flows if required.
|
||
|
||
OPAQUE and ANY
|
||
|
||
For each selector in an SPD entry, in addition to the literal
|
||
values that define a match, there are two special values: ANY and
|
||
OPAQUE. ANY is a wildcard that matches any value in the
|
||
corresponding field of the packet, or that matches packets where
|
||
that field is not present or is obscured. OPAQUE indicates that
|
||
the corresponding selector field is not available for examination
|
||
because it may not be present in a fragment, it does not exist for
|
||
the given Next Layer Protocol, or prior application of IPsec may
|
||
have encrypted the value. The ANY value encompasses the OPAQUE
|
||
value. Thus, OPAQUE need be used only when it is necessary to
|
||
distinguish between the case of any allowed value for a field, vs.
|
||
the absence or unavailability (e.g., due to encryption) of the
|
||
field.
|
||
|
||
How to Derive the Values for an SAD Entry
|
||
|
||
For each selector in an SPD entry, the entry specifies how to
|
||
derive the corresponding values for a new SA Database (SAD, see
|
||
Section 4.4.2) entry from those in the SPD and the packet. The
|
||
goal is to allow an SAD entry and an SPD cache entry to be created
|
||
based on specific selector values from the packet, or from the
|
||
matching SPD entry. For outbound traffic, there are SPD-S cache
|
||
entries and SPD-O cache entries. For inbound traffic not
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 22]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
protected by IPsec, there are SPD-I cache entries and there is the
|
||
SAD, which represents the cache for inbound IPsec-protected
|
||
traffic (see Section 4.4.2). If IPsec processing is specified for
|
||
an entry, a "populate from packet" (PFP) flag may be asserted for
|
||
one or more of the selectors in the SPD entry (Local IP address;
|
||
Remote IP address; Next Layer Protocol; and, depending on Next
|
||
Layer Protocol, Local port and Remote port, or ICMP type/code, or
|
||
Mobility Header type). If asserted for a given selector X, the
|
||
flag indicates that the SA to be created should take its value for
|
||
X from the value in the packet. Otherwise, the SA should take its
|
||
value(s) for X from the value(s) in the SPD entry. Note: In the
|
||
non-PFP case, the selector values negotiated by the SA management
|
||
protocol (e.g., IKEv2) may be a subset of those in the SPD entry,
|
||
depending on the SPD policy of the peer. Also, whether a single
|
||
flag is used for, e.g., source port, ICMP type/code, and Mobility
|
||
Header (MH) type, or a separate flag is used for each, is a local
|
||
matter.
|
||
|
||
The following example illustrates the use of the PFP flag in the
|
||
context of a security gateway or a BITS/BITW implementation.
|
||
Consider an SPD entry where the allowed value for Remote address
|
||
is a range of IPv4 addresses: 192.0.2.1 to 192.0.2.10. Suppose an
|
||
outbound packet arrives with a destination address of 192.0.2.3,
|
||
and there is no extant SA to carry this packet. The value used
|
||
for the SA created to transmit this packet could be either of the
|
||
two values shown below, depending on what the SPD entry for this
|
||
selector says is the source of the selector value:
|
||
|
||
PFP flag value example of new
|
||
for the Remote SAD dest. address
|
||
addr. selector selector value
|
||
--------------- ------------
|
||
a. PFP TRUE 192.0.2.3 (one host)
|
||
b. PFP FALSE 192.0.2.1 to 192.0.2.10 (range of hosts)
|
||
|
||
Note that if the SPD entry above had a value of ANY for the Remote
|
||
address, then the SAD selector value would have to be ANY for case
|
||
(b), but would still be as illustrated for case (a). Thus, the
|
||
PFP flag can be used to prohibit sharing of an SA, even among
|
||
packets that match the same SPD entry.
|
||
|
||
Management Interface
|
||
|
||
For every IPsec implementation, there MUST be a management
|
||
interface that allows a user or system administrator to manage the
|
||
SPD. The interface must allow the user (or administrator) to
|
||
specify the security processing to be applied to every packet that
|
||
traverses the IPsec boundary. (In a native host IPsec
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 23]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
implementation making use of a socket interface, the SPD may not
|
||
need to be consulted on a per-packet basis, as noted at the end of
|
||
Section 4.4.1.1 and in Section 5.) The management interface for
|
||
the SPD MUST allow creation of entries consistent with the
|
||
selectors defined in Section 4.4.1.1, and MUST support (total)
|
||
ordering of these entries, as seen via this interface. The SPD
|
||
entries' selectors are analogous to the ACL or packet filters
|
||
commonly found in a stateless firewall or packet filtering router
|
||
and which are currently managed this way.
|
||
|
||
In host systems, applications MAY be allowed to create SPD
|
||
entries. (The means of signaling such requests to the IPsec
|
||
implementation are outside the scope of this standard.) However,
|
||
the system administrator MUST be able to specify whether or not a
|
||
user or application can override (default) system policies. The
|
||
form of the management interface is not specified by this document
|
||
and may differ for hosts vs. security gateways, and within hosts
|
||
the interface may differ for socket-based vs. BITS
|
||
implementations. However, this document does specify a standard
|
||
set of SPD elements that all IPsec implementations MUST support.
|
||
|
||
Decorrelation
|
||
|
||
The processing model described in this document assumes the
|
||
ability to decorrelate overlapping SPD entries to permit caching,
|
||
which enables more efficient processing of outbound traffic in
|
||
security gateways and BITS/BITW implementations. Decorrelation
|
||
[CoSa04] is only a means of improving performance and simplifying
|
||
the processing description. This RFC does not require a compliant
|
||
implementation to make use of decorrelation. For example, native
|
||
host implementations typically make use of caching implicitly
|
||
because they bind SAs to socket interfaces, and thus there is no
|
||
requirement to be able to decorrelate SPD entries in these
|
||
implementations.
|
||
|
||
Note: Unless otherwise qualified, the use of "SPD" refers to the
|
||
body of policy information in both ordered or decorrelated
|
||
(unordered) state. Appendix B provides an algorithm that can be
|
||
used to decorrelate SPD entries, but any algorithm that produces
|
||
equivalent output may be used. Note that when an SPD entry is
|
||
decorrelated all the resulting entries MUST be linked together, so
|
||
that all members of the group derived from an individual, SPD
|
||
entry (prior to decorrelation) can all be placed into caches and
|
||
into the SAD at the same time. For example, suppose one starts
|
||
with an entry A (from an ordered SPD) that when decorrelated,
|
||
yields entries A1, A2, and A3. When a packet comes along that
|
||
matches, say A2, and triggers the creation of an SA, the SA
|
||
management protocol (e.g., IKEv2) negotiates A. And all 3
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 24]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
decorrelated entries, A1, A2, and A3, are placed in the
|
||
appropriate SPD-S cache and linked to the SA. The intent is that
|
||
use of a decorrelated SPD ought not to create more SAs than would
|
||
have resulted from use of a not-decorrelated SPD.
|
||
|
||
If a decorrelated SPD is employed, there are three options for
|
||
what an initiator sends to a peer via an SA management protocol
|
||
(e.g., IKE). By sending the complete set of linked, decorrelated
|
||
entries that were selected from the SPD, a peer is given the best
|
||
possible information to enable selection of the appropriate SPD
|
||
entry at its end, especially if the peer has also decorrelated its
|
||
SPD. However, if a large number of decorrelated entries are
|
||
linked, this may create large packets for SA negotiation, and
|
||
hence fragmentation problems for the SA management protocol.
|
||
|
||
Alternatively, the original entry from the (correlated) SPD may be
|
||
retained and passed to the SA management protocol. Passing the
|
||
correlated SPD entry keeps the use of a decorrelated SPD a local
|
||
matter, not visible to peers, and avoids possible fragmentation
|
||
concerns, although it provides less precise information to a
|
||
responder for matching against the responder's SPD.
|
||
|
||
An intermediate approach is to send a subset of the complete set
|
||
of linked, decorrelated SPD entries. This approach can avoid the
|
||
fragmentation problems cited above yet provide better information
|
||
than the original, correlated entry. The major shortcoming of
|
||
this approach is that it may cause additional SAs to be created
|
||
later, since only a subset of the linked, decorrelated entries are
|
||
sent to a peer. Implementers are free to employ any of the
|
||
approaches cited above.
|
||
|
||
A responder uses the traffic selector proposals it receives via an
|
||
SA management protocol to select an appropriate entry in its SPD.
|
||
The intent of the matching is to select an SPD entry and create an
|
||
SA that most closely matches the intent of the initiator, so that
|
||
traffic traversing the resulting SA will be accepted at both ends.
|
||
If the responder employs a decorrelated SPD, it SHOULD use the
|
||
decorrelated SPD entries for matching, as this will generally
|
||
result in creation of SAs that are more likely to match the intent
|
||
of both peers. If the responder has a correlated SPD, then it
|
||
SHOULD match the proposals against the correlated entries. For
|
||
IKEv2, use of a decorrelated SPD offers the best opportunity for a
|
||
responder to generate a "narrowed" response.
|
||
|
||
In all cases, when a decorrelated SPD is available, the
|
||
decorrelated entries are used to populate the SPD-S cache. If the
|
||
SPD is not decorrelated, caching is not allowed and an ordered
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 25]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
search of SPD MUST be performed to verify that inbound traffic
|
||
arriving on an SA is consistent with the access control policy
|
||
expressed in the SPD.
|
||
|
||
Handling Changes to the SPD While the System Is Running
|
||
|
||
If a change is made to the SPD while the system is running, a
|
||
check SHOULD be made of the effect of this change on extant SAs.
|
||
An implementation SHOULD check the impact of an SPD change on
|
||
extant SAs and SHOULD provide a user/administrator with a
|
||
mechanism for configuring what actions to take, e.g., delete an
|
||
affected SA, allow an affected SA to continue unchanged, etc.
|
||
|
||
4.4.1.1. Selectors
|
||
|
||
An SA may be fine-grained or coarse-grained, depending on the
|
||
selectors used to define the set of traffic for the SA. For example,
|
||
all traffic between two hosts may be carried via a single SA, and
|
||
afforded a uniform set of security services. Alternatively, traffic
|
||
between a pair of hosts might be spread over multiple SAs, depending
|
||
on the applications being used (as defined by the Next Layer Protocol
|
||
and related fields, e.g., ports), with different security services
|
||
offered by different SAs. Similarly, all traffic between a pair of
|
||
security gateways could be carried on a single SA, or one SA could be
|
||
assigned for each communicating host pair. The following selector
|
||
parameters MUST be supported by all IPsec implementations to
|
||
facilitate control of SA granularity. Note that both Local and
|
||
Remote addresses should either be IPv4 or IPv6, but not a mix of
|
||
address types. Also, note that the Local/Remote port selectors (and
|
||
ICMP message type and code, and Mobility Header type) may be labeled
|
||
as OPAQUE to accommodate situations where these fields are
|
||
inaccessible due to packet fragmentation.
|
||
|
||
- Remote IP Address(es) (IPv4 or IPv6): This is a list of ranges
|
||
of IP addresses (unicast, broadcast (IPv4 only)). This
|
||
structure allows expression of a single IP address (via a
|
||
trivial range), or a list of addresses (each a trivial range),
|
||
or a range of addresses (low and high values, inclusive), as
|
||
well as the most generic form of a list of ranges. Address
|
||
ranges are used to support more than one remote system sharing
|
||
the same SA, e.g., behind a security gateway.
|
||
|
||
- Local IP Address(es) (IPv4 or IPv6): This is a list of ranges of
|
||
IP addresses (unicast, broadcast (IPv4 only)). This structure
|
||
allows expression of a single IP address (via a trivial range),
|
||
or a list of addresses (each a trivial range), or a range of
|
||
addresses (low and high values, inclusive), as well as the most
|
||
generic form of a list of ranges. Address ranges are used to
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 26]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
support more than one source system sharing the same SA, e.g.,
|
||
behind a security gateway. Local refers to the address(es)
|
||
being protected by this implementation (or policy entry).
|
||
|
||
Note: The SPD does not include support for multicast address
|
||
entries. To support multicast SAs, an implementation should
|
||
make use of a Group SPD (GSPD) as defined in [RFC3740]. GSPD
|
||
entries require a different structure, i.e., one cannot use the
|
||
symmetric relationship associated with local and remote address
|
||
values for unicast SAs in a multicast context. Specifically,
|
||
outbound traffic directed to a multicast address on an SA would
|
||
not be received on a companion, inbound SA with the multicast
|
||
address as the source.
|
||
|
||
- Next Layer Protocol: Obtained from the IPv4 "Protocol" or the
|
||
IPv6 "Next Header" fields. This is an individual protocol
|
||
number, ANY, or for IPv6 only, OPAQUE. The Next Layer Protocol
|
||
is whatever comes after any IP extension headers that are
|
||
present. To simplify locating the Next Layer Protocol, there
|
||
SHOULD be a mechanism for configuring which IPv6 extension
|
||
headers to skip. The default configuration for which protocols
|
||
to skip SHOULD include the following protocols: 0 (Hop-by-hop
|
||
options), 43 (Routing Header), 44 (Fragmentation Header), and 60
|
||
(Destination Options). Note: The default list does NOT include
|
||
51 (AH) or 50 (ESP). From a selector lookup point of view,
|
||
IPsec treats AH and ESP as Next Layer Protocols.
|
||
|
||
Several additional selectors depend on the Next Layer Protocol
|
||
value:
|
||
|
||
* If the Next Layer Protocol uses two ports (as do TCP, UDP,
|
||
SCTP, and others), then there are selectors for Local and
|
||
Remote Ports. Each of these selectors has a list of ranges
|
||
of values. Note that the Local and Remote ports may not be
|
||
available in the case of receipt of a fragmented packet or if
|
||
the port fields have been protected by IPsec (encrypted);
|
||
thus, a value of OPAQUE also MUST be supported. Note: In a
|
||
non-initial fragment, port values will not be available. If
|
||
a port selector specifies a value other than ANY or OPAQUE,
|
||
it cannot match packets that are non-initial fragments. If
|
||
the SA requires a port value other than ANY or OPAQUE, an
|
||
arriving fragment without ports MUST be discarded. (See
|
||
Section 7, "Handling Fragments".)
|
||
|
||
* If the Next Layer Protocol is a Mobility Header, then there
|
||
is a selector for IPv6 Mobility Header message type (MH type)
|
||
[Mobip]. This is an 8-bit value that identifies a particular
|
||
mobility message. Note that the MH type may not be available
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 27]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
in the case of receipt of a fragmented packet. (See Section
|
||
7, "Handling Fragments".) For IKE, the IPv6 Mobility Header
|
||
message type (MH type) is placed in the most significant
|
||
eight bits of the 16-bit local "port" selector.
|
||
|
||
* If the Next Layer Protocol value is ICMP, then there is a
|
||
16-bit selector for the ICMP message type and code. The
|
||
message type is a single 8-bit value, which defines the type
|
||
of an ICMP message, or ANY. The ICMP code is a single 8-bit
|
||
value that defines a specific subtype for an ICMP message.
|
||
For IKE, the message type is placed in the most significant 8
|
||
bits of the 16-bit selector and the code is placed in the
|
||
least significant 8 bits. This 16-bit selector can contain a
|
||
single type and a range of codes, a single type and ANY code,
|
||
and ANY type and ANY code. Given a policy entry with a range
|
||
of Types (T-start to T-end) and a range of Codes (C-start to
|
||
C-end), and an ICMP packet with Type t and Code c, an
|
||
implementation MUST test for a match using
|
||
|
||
(T-start*256) + C-start <= (t*256) + c <= (T-end*256) +
|
||
C-end
|
||
|
||
Note that the ICMP message type and code may not be available
|
||
in the case of receipt of a fragmented packet. (See Section
|
||
7, "Handling Fragments".)
|
||
|
||
- Name: This is not a selector like the others above. It is not
|
||
acquired from a packet. A name may be used as a symbolic
|
||
identifier for an IPsec Local or Remote address. Named SPD
|
||
entries are used in two ways:
|
||
|
||
1. A named SPD entry is used by a responder (not an initiator)
|
||
in support of access control when an IP address would not be
|
||
appropriate for the Remote IP address selector, e.g., for
|
||
"road warriors". The name used to match this field is
|
||
communicated during the IKE negotiation in the ID payload.
|
||
In this context, the initiator's Source IP address (inner IP
|
||
header in tunnel mode) is bound to the Remote IP address in
|
||
the SAD entry created by the IKE negotiation. This address
|
||
overrides the Remote IP address value in the SPD, when the
|
||
SPD entry is selected in this fashion. All IPsec
|
||
implementations MUST support this use of names.
|
||
|
||
2. A named SPD entry may be used by an initiator to identify a
|
||
user for whom an IPsec SA will be created (or for whom
|
||
traffic may be bypassed). The initiator's IP source address
|
||
(from inner IP header in tunnel mode) is used to replace the
|
||
following if and when they are created:
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 28]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
- local address in the SPD cache entry
|
||
- local address in the outbound SAD entry
|
||
- remote address in the inbound SAD entry
|
||
|
||
Support for this use is optional for multi-user, native host
|
||
implementations and not applicable to other implementations.
|
||
Note that this name is used only locally; it is not
|
||
communicated by the key management protocol. Also, name
|
||
forms other than those used for case 1 above (responder) are
|
||
applicable in the initiator context (see below).
|
||
|
||
An SPD entry can contain both a name (or a list of names) and
|
||
also values for the Local or Remote IP address.
|
||
|
||
For case 1, responder, the identifiers employed in named SPD
|
||
entries are one of the following four types:
|
||
|
||
a. a fully qualified user name string (email), e.g.,
|
||
mozart@foo.example.com
|
||
(this corresponds to ID_RFC822_ADDR in IKEv2)
|
||
|
||
b. a fully qualified DNS name, e.g.,
|
||
foo.example.com
|
||
(this corresponds to ID_FQDN in IKEv2)
|
||
|
||
c. X.500 distinguished name, e.g., [WaKiHo97],
|
||
CN = Stephen T. Kent, O = BBN Technologies,
|
||
SP = MA, C = US
|
||
(this corresponds to ID_DER_ASN1_DN in IKEv2, after
|
||
decoding)
|
||
|
||
d. a byte string
|
||
(this corresponds to Key_ID in IKEv2)
|
||
|
||
For case 2, initiator, the identifiers employed in named SPD
|
||
entries are of type byte string. They are likely to be Unix
|
||
UIDs, Windows security IDs, or something similar, but could
|
||
also be a user name or account name. In all cases, this
|
||
identifier is only of local concern and is not transmitted.
|
||
|
||
The IPsec implementation context determines how selectors are used.
|
||
For example, a native host implementation typically makes use of a
|
||
socket interface. When a new connection is established, the SPD can
|
||
be consulted and an SA bound to the socket. Thus, traffic sent via
|
||
that socket need not result in additional lookups to the SPD (SPD-O
|
||
and SPD-S) cache. In contrast, a BITS, BITW, or security gateway
|
||
implementation needs to look at each packet and perform an
|
||
SPD-O/SPD-S cache lookup based on the selectors.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 29]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
4.4.1.2. Structure of an SPD Entry
|
||
|
||
This section contains a prose description of an SPD entry. Also,
|
||
Appendix C provides an example of an ASN.1 definition of an SPD
|
||
entry.
|
||
|
||
This text describes the SPD in a fashion that is intended to map
|
||
directly into IKE payloads to ensure that the policy required by SPD
|
||
entries can be negotiated through IKE. Unfortunately, the semantics
|
||
of the version of IKEv2 published concurrently with this document
|
||
[Kau05] do not align precisely with those defined for the SPD.
|
||
Specifically, IKEv2 does not enable negotiation of a single SA that
|
||
binds multiple pairs of local and remote addresses and ports to a
|
||
single SA. Instead, when multiple local and remote addresses and
|
||
ports are negotiated for an SA, IKEv2 treats these not as pairs, but
|
||
as (unordered) sets of local and remote values that can be
|
||
arbitrarily paired. Until IKE provides a facility that conveys the
|
||
semantics that are expressed in the SPD via selector sets (as
|
||
described below), users MUST NOT include multiple selector sets in a
|
||
single SPD entry unless the access control intent aligns with the IKE
|
||
"mix and match" semantics. An implementation MAY warn users, to
|
||
alert them to this problem if users create SPD entries with multiple
|
||
selector sets, the syntax of which indicates possible conflicts with
|
||
current IKE semantics.
|
||
|
||
The management GUI can offer the user other forms of data entry and
|
||
display, e.g., the option of using address prefixes as well as
|
||
ranges, and symbolic names for protocols, ports, etc. (Do not confuse
|
||
the use of symbolic names in a management interface with the SPD
|
||
selector "Name".) Note that Remote/Local apply only to IP addresses
|
||
and ports, not to ICMP message type/code or Mobility Header type.
|
||
Also, if the reserved, symbolic selector value OPAQUE or ANY is
|
||
employed for a given selector type, only that value may appear in the
|
||
list for that selector, and it must appear only once in the list for
|
||
that selector. Note that ANY and OPAQUE are local syntax conventions
|
||
-- IKEv2 negotiates these values via the ranges indicated below:
|
||
|
||
ANY: start = 0 end = <max>
|
||
OPAQUE: start = <max> end = 0
|
||
|
||
An SPD is an ordered list of entries each of which contains the
|
||
following fields.
|
||
|
||
o Name -- a list of IDs. This quasi-selector is optional.
|
||
The forms that MUST be supported are described above in
|
||
Section 4.4.1.1 under "Name".
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 30]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
o PFP flags -- one per traffic selector. A given flag, e.g.,
|
||
for Next Layer Protocol, applies to the relevant selector
|
||
across all "selector sets" (see below) contained in an SPD
|
||
entry. When creating an SA, each flag specifies for the
|
||
corresponding traffic selector whether to instantiate the
|
||
selector from the corresponding field in the packet that
|
||
triggered the creation of the SA or from the value(s) in
|
||
the corresponding SPD entry (see Section 4.4.1, "How to
|
||
Derive the Values for an SAD Entry"). Whether a single
|
||
flag is used for, e.g., source port, ICMP type/code, and
|
||
MH type, or a separate flag is used for each, is a local
|
||
matter. There are PFP flags for:
|
||
- Local Address
|
||
- Remote Address
|
||
- Next Layer Protocol
|
||
- Local Port, or ICMP message type/code or Mobility
|
||
Header type (depending on the next layer protocol)
|
||
- Remote Port, or ICMP message type/code or Mobility
|
||
Header type (depending on the next layer protocol)
|
||
|
||
o One to N selector sets that correspond to the "condition"
|
||
for applying a particular IPsec action. Each selector set
|
||
contains:
|
||
- Local Address
|
||
- Remote Address
|
||
- Next Layer Protocol
|
||
- Local Port, or ICMP message type/code or Mobility
|
||
Header type (depending on the next layer protocol)
|
||
- Remote Port, or ICMP message type/code or Mobility
|
||
Header type (depending on the next layer protocol)
|
||
|
||
Note: The "next protocol" selector is an individual value
|
||
(unlike the local and remote IP addresses) in a selector
|
||
set entry. This is consistent with how IKEv2 negotiates
|
||
the Traffic Selector (TS) values for an SA. It also makes
|
||
sense because one may need to associate different port
|
||
fields with different protocols. It is possible to
|
||
associate multiple protocols (and ports) with a single SA
|
||
by specifying multiple selector sets for that SA.
|
||
|
||
o Processing info -- which action is required -- PROTECT,
|
||
BYPASS, or DISCARD. There is just one action that goes
|
||
with all the selector sets, not a separate action for each
|
||
set. If the required processing is PROTECT, the entry
|
||
contains the following information.
|
||
- IPsec mode -- tunnel or transport
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 31]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
- (if tunnel mode) local tunnel address -- For a
|
||
non-mobile host, if there is just one interface, this
|
||
is straightforward; if there are multiple
|
||
interfaces, this must be statically configured. For a
|
||
mobile host, the specification of the local address
|
||
is handled externally to IPsec.
|
||
- (if tunnel mode) remote tunnel address -- There is no
|
||
standard way to determine this. See 4.5.3, "Locating
|
||
a Security Gateway".
|
||
- Extended Sequence Number -- Is this SA using extended
|
||
sequence numbers?
|
||
- stateful fragment checking -- Is this SA using
|
||
stateful fragment checking? (See Section 7 for more
|
||
details.)
|
||
- Bypass DF bit (T/F) -- applicable to tunnel mode SAs
|
||
- Bypass DSCP (T/F) or map to unprotected DSCP values
|
||
(array) if needed to restrict bypass of DSCP values --
|
||
applicable to tunnel mode SAs
|
||
- IPsec protocol -- AH or ESP
|
||
- algorithms -- which ones to use for AH, which ones to
|
||
use for ESP, which ones to use for combined mode,
|
||
ordered by decreasing priority
|
||
|
||
It is a local matter as to what information is kept with regard to
|
||
handling extant SAs when the SPD is changed.
|
||
|
||
4.4.1.3. More Regarding Fields Associated with Next Layer Protocols
|
||
|
||
Additional selectors are often associated with fields in the Next
|
||
Layer Protocol header. A particular Next Layer Protocol can have
|
||
zero, one, or two selectors. There may be situations where there
|
||
aren't both local and remote selectors for the fields that are
|
||
dependent on the Next Layer Protocol. The IPv6 Mobility Header has
|
||
only a Mobility Header message type. AH and ESP have no further
|
||
selector fields. A system may be willing to send an ICMP message
|
||
type and code that it does not want to receive. In the descriptions
|
||
below, "port" is used to mean a field that is dependent on the Next
|
||
Layer Protocol.
|
||
|
||
A. If a Next Layer Protocol has no "port" selectors, then
|
||
the Local and Remote "port" selectors are set to OPAQUE in
|
||
the relevant SPD entry, e.g.,
|
||
|
||
Local's
|
||
next layer protocol = AH
|
||
"port" selector = OPAQUE
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 32]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Remote's
|
||
next layer protocol = AH
|
||
"port" selector = OPAQUE
|
||
|
||
B. Even if a Next Layer Protocol has only one selector, e.g.,
|
||
Mobility Header type, then the Local and Remote "port"
|
||
selectors are used to indicate whether a system is
|
||
willing to send and/or receive traffic with the specified
|
||
"port" values. For example, if Mobility Headers of a
|
||
specified type are allowed to be sent and received via an
|
||
SA, then the relevant SPD entry would be set as follows:
|
||
|
||
Local's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = Mobility Header message type
|
||
|
||
Remote's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = Mobility Header message type
|
||
|
||
If Mobility Headers of a specified type are allowed to be
|
||
sent but NOT received via an SA, then the relevant SPD
|
||
entry would be set as follows:
|
||
|
||
Local's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = Mobility Header message type
|
||
|
||
Remote's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = OPAQUE
|
||
|
||
If Mobility Headers of a specified type are allowed to be
|
||
received but NOT sent via an SA, then the relevant SPD
|
||
entry would be set as follows:
|
||
|
||
Local's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = OPAQUE
|
||
|
||
Remote's
|
||
next layer protocol = Mobility Header
|
||
"port" selector = Mobility Header message type
|
||
|
||
C. If a system is willing to send traffic with a particular
|
||
"port" value but NOT receive traffic with that kind of
|
||
port value, the system's traffic selectors are set as
|
||
follows in the relevant SPD entry:
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 33]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Local's
|
||
next layer protocol = ICMP
|
||
"port" selector = <specific ICMP type & code>
|
||
|
||
Remote's
|
||
next layer protocol = ICMP
|
||
"port" selector = OPAQUE
|
||
|
||
D. To indicate that a system is willing to receive traffic
|
||
with a particular "port" value but NOT send that kind of
|
||
traffic, the system's traffic selectors are set as follows
|
||
in the relevant SPD entry:
|
||
|
||
Local's
|
||
next layer protocol = ICMP
|
||
"port" selector = OPAQUE
|
||
|
||
Remote's
|
||
next layer protocol = ICMP
|
||
"port" selector = <specific ICMP type & code>
|
||
|
||
For example, if a security gateway is willing to allow
|
||
systems behind it to send ICMP traceroutes, but is not
|
||
willing to let outside systems run ICMP traceroutes to
|
||
systems behind it, then the security gateway's traffic
|
||
selectors are set as follows in the relevant SPD entry:
|
||
|
||
Local's
|
||
next layer protocol = 1 (ICMPv4)
|
||
"port" selector = 30 (traceroute)
|
||
|
||
Remote's
|
||
next layer protocol = 1 (ICMPv4)
|
||
"port" selector = OPAQUE
|
||
|
||
4.4.2. Security Association Database (SAD)
|
||
|
||
In each IPsec implementation, there is a nominal Security Association
|
||
Database (SAD), in which each entry defines the parameters associated
|
||
with one SA. Each SA has an entry in the SAD. For outbound
|
||
processing, each SAD entry is pointed to by entries in the SPD-S part
|
||
of the SPD cache. For inbound processing, for unicast SAs, the SPI
|
||
is used either alone to look up an SA or in conjunction with the
|
||
IPsec protocol type. If an IPsec implementation supports multicast,
|
||
the SPI plus destination address, or SPI plus destination and source
|
||
addresses are used to look up the SA. (See Section 4.1 for details on
|
||
the algorithm that MUST be used for mapping inbound IPsec datagrams
|
||
to SAs.) The following parameters are associated with each entry in
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 34]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
the SAD. They should all be present except where otherwise noted,
|
||
e.g., AH Authentication algorithm. This description does not purport
|
||
to be a MIB, only a specification of the minimal data items required
|
||
to support an SA in an IPsec implementation.
|
||
|
||
For each of the selectors defined in Section 4.4.1.1, the entry for
|
||
an inbound SA in the SAD MUST be initially populated with the value
|
||
or values negotiated at the time the SA was created. (See the
|
||
paragraph in Section 4.4.1 under "Handling Changes to the SPD while
|
||
the System is Running" for guidance on the effect of SPD changes on
|
||
extant SAs.) For a receiver, these values are used to check that the
|
||
header fields of an inbound packet (after IPsec processing) match the
|
||
selector values negotiated for the SA. Thus, the SAD acts as a cache
|
||
for checking the selectors of inbound traffic arriving on SAs. For
|
||
the receiver, this is part of verifying that a packet arriving on an
|
||
SA is consistent with the policy for the SA. (See Section 6 for rules
|
||
for ICMP messages.) These fields can have the form of specific
|
||
values, ranges, ANY, or OPAQUE, as described in Section 4.4.1.1,
|
||
"Selectors". Note also that there are a couple of situations in
|
||
which the SAD can have entries for SAs that do not have corresponding
|
||
entries in the SPD. Since this document does not mandate that the
|
||
SAD be selectively cleared when the SPD is changed, SAD entries can
|
||
remain when the SPD entries that created them are changed or deleted.
|
||
Also, if a manually keyed SA is created, there could be an SAD entry
|
||
for this SA that does not correspond to any SPD entry.
|
||
|
||
Note: The SAD can support multicast SAs, if manually configured. An
|
||
outbound multicast SA has the same structure as a unicast SA. The
|
||
source address is that of the sender, and the destination address is
|
||
the multicast group address. An inbound, multicast SA must be
|
||
configured with the source addresses of each peer authorized to
|
||
transmit to the multicast SA in question. The SPI value for a
|
||
multicast SA is provided by a multicast group controller, not by the
|
||
receiver, as for a unicast SA. Because an SAD entry may be required
|
||
to accommodate multiple, individual IP source addresses that were
|
||
part of an SPD entry (for unicast SAs), the required facility for
|
||
inbound, multicast SAs is a feature already present in an IPsec
|
||
implementation. However, because the SPD has no provisions for
|
||
accommodating multicast entries, this document does not specify an
|
||
automated way to create an SAD entry for a multicast, inbound SA.
|
||
Only manually configured SAD entries can be created to accommodate
|
||
inbound, multicast traffic.
|
||
|
||
Implementation Guidance: This document does not specify how an SPD-S
|
||
entry refers to the corresponding SAD entry, as this is an
|
||
implementation-specific detail. However, some implementations (based
|
||
on experience from RFC 2401) are known to have problems in this
|
||
regard. In particular, simply storing the (remote tunnel header IP
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 35]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
address, remote SPI) pair in the SPD cache is not sufficient, since
|
||
the pair does not always uniquely identify a single SAD entry. For
|
||
instance, two hosts behind the same NAT could choose the same SPI
|
||
value. The situation also may arise if a host is assigned an IP
|
||
address (e.g., via DHCP) previously used by some other host, and the
|
||
SAs associated with the old host have not yet been deleted via dead
|
||
peer detection mechanisms. This may lead to packets being sent over
|
||
the wrong SA or, if key management ensures the pair is unique,
|
||
denying the creation of otherwise valid SAs. Thus, implementors
|
||
should implement links between the SPD cache and the SAD in a way
|
||
that does not engender such problems.
|
||
|
||
4.4.2.1. Data Items in the SAD
|
||
|
||
The following data items MUST be in the SAD:
|
||
|
||
o Security Parameter Index (SPI): a 32-bit value selected by the
|
||
receiving end of an SA to uniquely identify the SA. In an SAD
|
||
entry for an outbound SA, the SPI is used to construct the
|
||
packet's AH or ESP header. In an SAD entry for an inbound SA, the
|
||
SPI is used to map traffic to the appropriate SA (see text on
|
||
unicast/multicast in Section 4.1).
|
||
|
||
o Sequence Number Counter: a 64-bit counter used to generate the
|
||
Sequence Number field in AH or ESP headers. 64-bit sequence
|
||
numbers are the default, but 32-bit sequence numbers are also
|
||
supported if negotiated.
|
||
|
||
o Sequence Counter Overflow: a flag indicating whether overflow of
|
||
the sequence number counter should generate an auditable event and
|
||
prevent transmission of additional packets on the SA, or whether
|
||
rollover is permitted. The audit log entry for this event SHOULD
|
||
include the SPI value, current date/time, Local Address, Remote
|
||
Address, and the selectors from the relevant SAD entry.
|
||
|
||
o Anti-Replay Window: a 64-bit counter and a bit-map (or equivalent)
|
||
used to determine whether an inbound AH or ESP packet is a replay.
|
||
|
||
Note: If anti-replay has been disabled by the receiver for an SA,
|
||
e.g., in the case of a manually keyed SA, then the Anti-Replay
|
||
Window is ignored for the SA in question. 64-bit sequence numbers
|
||
are the default, but this counter size accommodates 32-bit
|
||
sequence numbers as well.
|
||
|
||
o AH Authentication algorithm, key, etc. This is required only if
|
||
AH is supported.
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 36]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
o ESP Encryption algorithm, key, mode, IV, etc. If a combined mode
|
||
algorithm is used, these fields will not be applicable.
|
||
|
||
o ESP integrity algorithm, keys, etc. If the integrity service is
|
||
not selected, these fields will not be applicable. If a combined
|
||
mode algorithm is used, these fields will not be applicable.
|
||
|
||
o ESP combined mode algorithms, key(s), etc. This data is used when
|
||
a combined mode (encryption and integrity) algorithm is used with
|
||
ESP. If a combined mode algorithm is not used, these fields are
|
||
not applicable.
|
||
|
||
o Lifetime of this SA: a time interval after which an SA must be
|
||
replaced with a new SA (and new SPI) or terminated, plus an
|
||
indication of which of these actions should occur. This may be
|
||
expressed as a time or byte count, or a simultaneous use of both
|
||
with the first lifetime to expire taking precedence. A compliant
|
||
implementation MUST support both types of lifetimes, and MUST
|
||
support a simultaneous use of both. If time is employed, and if
|
||
IKE employs X.509 certificates for SA establishment, the SA
|
||
lifetime must be constrained by the validity intervals of the
|
||
certificates, and the NextIssueDate of the Certificate Revocation
|
||
Lists (CRLs) used in the IKE exchange for the SA. Both initiator
|
||
and responder are responsible for constraining the SA lifetime in
|
||
this fashion. Note: The details of how to handle the refreshing
|
||
of keys when SAs expire is a local matter. However, one
|
||
reasonable approach is:
|
||
|
||
(a) If byte count is used, then the implementation SHOULD count the
|
||
number of bytes to which the IPsec cryptographic algorithm is
|
||
applied. For ESP, this is the encryption algorithm (including
|
||
Null encryption) and for AH, this is the authentication
|
||
algorithm. This includes pad bytes, etc. Note that
|
||
implementations MUST be able to handle having the counters at
|
||
the ends of an SA get out of synch, e.g., because of packet
|
||
loss or because the implementations at each end of the SA
|
||
aren't doing things the same way.
|
||
|
||
(b) There SHOULD be two kinds of lifetime -- a soft lifetime that
|
||
warns the implementation to initiate action such as setting up
|
||
a replacement SA, and a hard lifetime when the current SA ends
|
||
and is destroyed.
|
||
|
||
(c) If the entire packet does not get delivered during the SA's
|
||
lifetime, the packet SHOULD be discarded.
|
||
|
||
o IPsec protocol mode: tunnel or transport. Indicates which mode of
|
||
AH or ESP is applied to traffic on this SA.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 37]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
o Stateful fragment checking flag. Indicates whether or not
|
||
stateful fragment checking applies to this SA.
|
||
|
||
o Bypass DF bit (T/F) -- applicable to tunnel mode SAs where both
|
||
inner and outer headers are IPv4.
|
||
|
||
o DSCP values -- the set of DSCP values allowed for packets carried
|
||
over this SA. If no values are specified, no DSCP-specific
|
||
filtering is applied. If one or more values are specified, these
|
||
are used to select one SA among several that match the traffic
|
||
selectors for an outbound packet. Note that these values are NOT
|
||
checked against inbound traffic arriving on the SA.
|
||
|
||
o Bypass DSCP (T/F) or map to unprotected DSCP values (array) if
|
||
needed to restrict bypass of DSCP values -- applicable to tunnel
|
||
mode SAs. This feature maps DSCP values from an inner header to
|
||
values in an outer header, e.g., to address covert channel
|
||
signaling concerns.
|
||
|
||
o Path MTU: any observed path MTU and aging variables.
|
||
|
||
o Tunnel header IP source and destination address -- both addresses
|
||
must be either IPv4 or IPv6 addresses. The version implies the
|
||
type of IP header to be used. Only used when the IPsec protocol
|
||
mode is tunnel.
|
||
|
||
4.4.2.2. Relationship between SPD, PFP flag, packet, and SAD
|
||
|
||
For each selector, the following tables show the relationship
|
||
between the value in the SPD, the PFP flag, the value in the
|
||
triggering packet, and the resulting value in the SAD. Note that
|
||
the administrative interface for IPsec can use various syntactic
|
||
options to make it easier for the administrator to enter rules.
|
||
For example, although a list of ranges is what IKEv2 sends, it
|
||
might be clearer and less error prone for the user to enter a
|
||
single IP address or IP address prefix.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 38]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Value in
|
||
Triggering Resulting SAD
|
||
Selector SPD Entry PFP Packet Entry
|
||
-------- ---------------- --- ------------ --------------
|
||
loc addr list of ranges 0 IP addr "S" list of ranges
|
||
ANY 0 IP addr "S" ANY
|
||
list of ranges 1 IP addr "S" "S"
|
||
ANY 1 IP addr "S" "S"
|
||
|
||
rem addr list of ranges 0 IP addr "D" list of ranges
|
||
ANY 0 IP addr "D" ANY
|
||
list of ranges 1 IP addr "D" "D"
|
||
ANY 1 IP addr "D" "D"
|
||
|
||
protocol list of prot's* 0 prot. "P" list of prot's*
|
||
ANY** 0 prot. "P" ANY
|
||
OPAQUE**** 0 prot. "P" OPAQUE
|
||
|
||
list of prot's* 0 not avail. discard packet
|
||
ANY** 0 not avail. ANY
|
||
OPAQUE**** 0 not avail. OPAQUE
|
||
|
||
list of prot's* 1 prot. "P" "P"
|
||
ANY** 1 prot. "P" "P"
|
||
OPAQUE**** 1 prot. "P" ***
|
||
|
||
list of prot's* 1 not avail. discard packet
|
||
ANY** 1 not avail. discard packet
|
||
OPAQUE**** 1 not avail. ***
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 39]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
If the protocol is one that has two ports, then there will be
|
||
selectors for both Local and Remote ports.
|
||
|
||
Value in
|
||
Triggering Resulting SAD
|
||
Selector SPD Entry PFP Packet Entry
|
||
-------- ---------------- --- ------------ --------------
|
||
loc port list of ranges 0 src port "s" list of ranges
|
||
ANY 0 src port "s" ANY
|
||
OPAQUE 0 src port "s" OPAQUE
|
||
|
||
list of ranges 0 not avail. discard packet
|
||
ANY 0 not avail. ANY
|
||
OPAQUE 0 not avail. OPAQUE
|
||
|
||
list of ranges 1 src port "s" "s"
|
||
ANY 1 src port "s" "s"
|
||
OPAQUE 1 src port "s" ***
|
||
|
||
list of ranges 1 not avail. discard packet
|
||
ANY 1 not avail. discard packet
|
||
OPAQUE 1 not avail. ***
|
||
|
||
|
||
rem port list of ranges 0 dst port "d" list of ranges
|
||
ANY 0 dst port "d" ANY
|
||
OPAQUE 0 dst port "d" OPAQUE
|
||
|
||
list of ranges 0 not avail. discard packet
|
||
ANY 0 not avail. ANY
|
||
OPAQUE 0 not avail. OPAQUE
|
||
|
||
list of ranges 1 dst port "d" "d"
|
||
ANY 1 dst port "d" "d"
|
||
OPAQUE 1 dst port "d" ***
|
||
|
||
list of ranges 1 not avail. discard packet
|
||
ANY 1 not avail. discard packet
|
||
OPAQUE 1 not avail. ***
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 40]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
If the protocol is mobility header, then there will be a selector
|
||
for mh type.
|
||
|
||
Value in
|
||
Triggering Resulting SAD
|
||
Selector SPD Entry PFP Packet Entry
|
||
-------- ---------------- --- ------------ --------------
|
||
mh type list of ranges 0 mh type "T" list of ranges
|
||
ANY 0 mh type "T" ANY
|
||
OPAQUE 0 mh type "T" OPAQUE
|
||
|
||
list of ranges 0 not avail. discard packet
|
||
ANY 0 not avail. ANY
|
||
OPAQUE 0 not avail. OPAQUE
|
||
|
||
list of ranges 1 mh type "T" "T"
|
||
ANY 1 mh type "T" "T"
|
||
OPAQUE 1 mh type "T" ***
|
||
|
||
list of ranges 1 not avail. discard packet
|
||
ANY 1 not avail. discard packet
|
||
OPAQUE 1 not avail. ***
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 41]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
If the protocol is ICMP, then there will be a 16-bit selector for
|
||
ICMP type and ICMP code. Note that the type and code are bound to
|
||
each other, i.e., the codes apply to the particular type. This
|
||
16-bit selector can contain a single type and a range of codes, a
|
||
single type and ANY code, and ANY type and ANY code.
|
||
|
||
Value in
|
||
Triggering Resulting SAD
|
||
Selector SPD Entry PFP Packet Entry
|
||
--------- ---------------- --- ------------ --------------
|
||
ICMP type a single type & 0 type "t" & single type &
|
||
and code range of codes code "c" range of codes
|
||
a single type & 0 type "t" & single type &
|
||
ANY code code "c" ANY code
|
||
ANY type & ANY 0 type "t" & ANY type &
|
||
code code "c" ANY code
|
||
OPAQUE 0 type "t" & OPAQUE
|
||
code "c"
|
||
|
||
a single type & 0 not avail. discard packet
|
||
range of codes
|
||
a single type & 0 not avail. discard packet
|
||
ANY code
|
||
ANY type & 0 not avail. ANY type &
|
||
ANY code ANY code
|
||
OPAQUE 0 not avail. OPAQUE
|
||
|
||
a single type & 1 type "t" & "t" and "c"
|
||
range of codes code "c"
|
||
a single type & 1 type "t" & "t" and "c"
|
||
ANY code code "c"
|
||
ANY type & 1 type "t" & "t" and "c"
|
||
ANY code code "c"
|
||
OPAQUE 1 type "t" & ***
|
||
code "c"
|
||
|
||
a single type & 1 not avail. discard packet
|
||
range of codes
|
||
a single type & 1 not avail. discard packet
|
||
ANY code
|
||
ANY type & 1 not avail. discard packet
|
||
ANY code
|
||
OPAQUE 1 not avail. ***
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 42]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
If the name selector is used:
|
||
|
||
Value in
|
||
Triggering Resulting SAD
|
||
Selector SPD Entry PFP Packet Entry
|
||
--------- ---------------- --- ------------ --------------
|
||
name list of user or N/A N/A N/A
|
||
system names
|
||
|
||
* "List of protocols" is the information, not the way
|
||
that the SPD or SAD or IKEv2 have to represent this
|
||
information.
|
||
** 0 (zero) is used by IKE to indicate ANY for
|
||
protocol.
|
||
*** Use of PFP=1 with an OPAQUE value is an error and
|
||
SHOULD be prohibited by an IPsec implementation.
|
||
**** The protocol field cannot be OPAQUE in IPv4. This
|
||
table entry applies only to IPv6.
|
||
|
||
4.4.3. Peer Authorization Database (PAD)
|
||
|
||
The Peer Authorization Database (PAD) provides the link between the
|
||
SPD and a security association management protocol such as IKE. It
|
||
embodies several critical functions:
|
||
|
||
o identifies the peers or groups of peers that are authorized
|
||
to communicate with this IPsec entity
|
||
o specifies the protocol and method used to authenticate each
|
||
peer
|
||
o provides the authentication data for each peer
|
||
o constrains the types and values of IDs that can be asserted
|
||
by a peer with regard to child SA creation, to ensure that the
|
||
peer does not assert identities for lookup in the SPD that it
|
||
is not authorized to represent, when child SAs are created
|
||
o peer gateway location info, e.g., IP address(es) or DNS names,
|
||
MAY be included for peers that are known to be "behind" a
|
||
security gateway
|
||
|
||
The PAD provides these functions for an IKE peer when the peer acts
|
||
as either the initiator or the responder.
|
||
|
||
To perform these functions, the PAD contains an entry for each peer
|
||
or group of peers with which the IPsec entity will communicate. An
|
||
entry names an individual peer (a user, end system or security
|
||
gateway) or specifies a group of peers (using ID matching rules
|
||
defined below). The entry specifies the authentication protocol
|
||
(e.g., IKEv1, IKEv2, KINK) method used (e.g., certificates or pre-
|
||
shared secrets) and the authentication data (e.g., the pre-shared
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 43]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
secret or the trust anchor relative to which the peer's certificate
|
||
will be validated). For certificate-based authentication, the entry
|
||
also may provide information to assist in verifying the revocation
|
||
status of the peer, e.g., a pointer to a CRL repository or the name
|
||
of an Online Certificate Status Protocol (OCSP) server associated
|
||
with the peer or with the trust anchor associated with the peer.
|
||
|
||
Each entry also specifies whether the IKE ID payload will be used as
|
||
a symbolic name for SPD lookup, or whether the remote IP address
|
||
provided in traffic selector payloads will be used for SPD lookups
|
||
when child SAs are created.
|
||
|
||
Note that the PAD information MAY be used to support creation of more
|
||
than one tunnel mode SA at a time between two peers, e.g., two
|
||
tunnels to protect the same addresses/hosts, but with different
|
||
tunnel endpoints.
|
||
|
||
4.4.3.1. PAD Entry IDs and Matching Rules
|
||
|
||
The PAD is an ordered database, where the order is defined by an
|
||
administrator (or a user in the case of a single-user end system).
|
||
Usually, the same administrator will be responsible for both the PAD
|
||
and SPD, since the two databases must be coordinated. The ordering
|
||
requirement for the PAD arises for the same reason as for the SPD,
|
||
i.e., because use of "star name" entries allows for overlaps in the
|
||
set of IKE IDs that could match a specific entry.
|
||
|
||
Six types of IDs are supported for entries in the PAD, consistent
|
||
with the symbolic name types and IP addresses used to identify SPD
|
||
entries. The ID for each entry acts as the index for the PAD, i.e.,
|
||
it is the value used to select an entry. All of these ID types can
|
||
be used to match IKE ID payload types. The six types are:
|
||
|
||
o DNS name (specific or partial)
|
||
o Distinguished Name (complete or sub-tree constrained)
|
||
o RFC 822 email address (complete or partially qualified)
|
||
o IPv4 address (range)
|
||
o IPv6 address (range)
|
||
o Key ID (exact match only)
|
||
|
||
The first three name types can accommodate sub-tree matching as well
|
||
as exact matches. A DNS name may be fully qualified and thus match
|
||
exactly one name, e.g., foo.example.com. Alternatively, the name may
|
||
encompass a group of peers by being partially specified, e.g., the
|
||
string ".example.com" could be used to match any DNS name ending in
|
||
these two domain name components.
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 44]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Similarly, a Distinguished Name may specify a complete Distinguished
|
||
Name to match exactly one entry, e.g., CN = Stephen, O = BBN
|
||
Technologies, SP = MA, C = US. Alternatively, an entry may encompass
|
||
a group of peers by specifying a sub-tree, e.g., an entry of the form
|
||
"C = US, SP = MA" might be used to match all DNs that contain these
|
||
two attributes as the top two Relative Distinguished Names (RDNs).
|
||
|
||
For an RFC 822 e-mail addresses, the same options exist. A complete
|
||
address such as foo@example.com matches one entity, but a sub-tree
|
||
name such as "@example.com" could be used to match all the entities
|
||
with names ending in those two domain names to the right of the @.
|
||
|
||
The specific syntax used by an implementation to accommodate sub-tree
|
||
matching for distinguished names, domain names or RFC 822 e-mail
|
||
addresses is a local matter. But, at a minimum, sub-tree matching of
|
||
the sort described above MUST be supported. (Substring matching
|
||
within a DN, DNS name, or RFC 822 address MAY be supported, but is
|
||
not required.)
|
||
|
||
For IPv4 and IPv6 addresses, the same address range syntax used for
|
||
SPD entries MUST be supported. This allows specification of an
|
||
individual address (via a trivial range), an address prefix (by
|
||
choosing a range that adheres to Classless Inter-Domain Routing
|
||
(CIDR)-style prefixes), or an arbitrary address range.
|
||
|
||
The Key ID field is defined as an OCTET string in IKE. For this name
|
||
type, only exact-match syntax MUST be supported (since there is no
|
||
explicit structure for this ID type). Additional matching functions
|
||
MAY be supported for this ID type.
|
||
|
||
4.4.3.2. IKE Peer Authentication Data
|
||
|
||
Once an entry is located based on an ordered search of the PAD based
|
||
on ID field matching, it is necessary to verify the asserted
|
||
identity, i.e., to authenticate the asserted ID. For each PAD entry,
|
||
there is an indication of the type of authentication to be performed.
|
||
This document requires support for two required authentication data
|
||
types:
|
||
|
||
- X.509 certificate
|
||
- pre-shared secret
|
||
|
||
For authentication based on an X.509 certificate, the PAD entry
|
||
contains a trust anchor via which the end entity (EE) certificate for
|
||
the peer must be verifiable, either directly or via a certificate
|
||
path. See RFC 3280 for the definition of a trust anchor. An entry
|
||
used with certificate-based authentication MAY include additional
|
||
data to facilitate certificate revocation status, e.g., a list of
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 45]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
appropriate OCSP responders or CRL repositories, and associated
|
||
authentication data. For authentication based on a pre-shared
|
||
secret, the PAD contains the pre-shared secret to be used by IKE.
|
||
|
||
This document does not require that the IKE ID asserted by a peer be
|
||
syntactically related to a specific field in an end entity
|
||
certificate that is employed to authenticate the identity of that
|
||
peer. However, it often will be appropriate to impose such a
|
||
requirement, e.g., when a single entry represents a set of peers each
|
||
of whom may have a distinct SPD entry. Thus, implementations MUST
|
||
provide a means for an administrator to require a match between an
|
||
asserted IKE ID and the subject name or subject alt name in a
|
||
certificate. The former is applicable to IKE IDs expressed as
|
||
distinguished names; the latter is appropriate for DNS names, RFC 822
|
||
e-mail addresses, and IP addresses. Since KEY ID is intended for
|
||
identifying a peer authenticated via a pre-shared secret, there is no
|
||
requirement to match this ID type to a certificate field.
|
||
|
||
See IKEv1 [HarCar98] and IKEv2 [Kau05] for details of how IKE
|
||
performs peer authentication using certificates or pre-shared
|
||
secrets.
|
||
|
||
This document does not mandate support for any other authentication
|
||
methods, although such methods MAY be employed.
|
||
|
||
4.4.3.3. Child SA Authorization Data
|
||
|
||
Once an IKE peer is authenticated, child SAs may be created. Each
|
||
PAD entry contains data to constrain the set of IDs that can be
|
||
asserted by an IKE peer, for matching against the SPD. Each PAD
|
||
entry indicates whether the IKE ID is to be used as a symbolic name
|
||
for SPD matching, or whether an IP address asserted in a traffic
|
||
selector payload is to be used.
|
||
|
||
If the entry indicates that the IKE ID is to be used, then the PAD
|
||
entry ID field defines the authorized set of IDs. If the entry
|
||
indicates that child SAs traffic selectors are to be used, then an
|
||
additional data element is required, in the form of IPv4 and/or IPv6
|
||
address ranges. (A peer may be authorized for both address types, so
|
||
there MUST be provision for both a v4 and a v6 address range.)
|
||
|
||
4.4.3.4. How the PAD Is Used
|
||
|
||
During the initial IKE exchange, the initiator and responder each
|
||
assert their identity via the IKE ID payload and send an AUTH payload
|
||
to verify the asserted identity. One or more CERT payloads may be
|
||
transmitted to facilitate the verification of each asserted identity.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 46]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
When an IKE entity receives an IKE ID payload, it uses the asserted
|
||
ID to locate an entry in the PAD, using the matching rules described
|
||
above. The PAD entry specifies the authentication method to be
|
||
employed for the identified peer. This ensures that the right method
|
||
is used for each peer and that different methods can be used for
|
||
different peers. The entry also specifies the authentication data
|
||
that will be used to verify the asserted identity. This data is
|
||
employed in conjunction with the specified method to authenticate the
|
||
peer, before any CHILD SAs are created.
|
||
|
||
Child SAs are created based on the exchange of traffic selector
|
||
payloads, either at the end of the initial IKE exchange or in
|
||
subsequent CREATE_CHILD_SA exchanges. The PAD entry for the (now
|
||
authenticated) IKE peer is used to constrain creation of child SAs;
|
||
specifically, the PAD entry specifies how the SPD is searched using a
|
||
traffic selector proposal from a peer. There are two choices: either
|
||
the IKE ID asserted by the peer is used to find an SPD entry via its
|
||
symbolic name, or peer IP addresses asserted in traffic selector
|
||
payloads are used for SPD lookups based on the remote IP address
|
||
field portion of an SPD entry. It is necessary to impose these
|
||
constraints on creation of child SAs to prevent an authenticated peer
|
||
from spoofing IDs associated with other, legitimate peers.
|
||
|
||
Note that because the PAD is checked before searching for an SPD
|
||
entry, this safeguard protects an initiator against spoofing attacks.
|
||
For example, assume that IKE A receives an outbound packet destined
|
||
for IP address X, a host served by a security gateway. RFC 2401
|
||
[RFC2401] and this document do not specify how A determines the
|
||
address of the IKE peer serving X. However, any peer contacted by A
|
||
as the presumed representative for X must be registered in the PAD in
|
||
order to allow the IKE exchange to be authenticated. Moreover, when
|
||
the authenticated peer asserts that it represents X in its traffic
|
||
selector exchange, the PAD will be consulted to determine if the peer
|
||
in question is authorized to represent X. Thus, the PAD provides a
|
||
binding of address ranges (or name sub-spaces) to peers, to counter
|
||
such attacks.
|
||
|
||
4.5. SA and Key Management
|
||
|
||
All IPsec implementations MUST support both manual and automated SA
|
||
and cryptographic key management. The IPsec protocols, AH and ESP,
|
||
are largely independent of the associated SA management techniques,
|
||
although the techniques involved do affect some of the security
|
||
services offered by the protocols. For example, the optional
|
||
anti-replay service available for AH and ESP requires automated SA
|
||
management. Moreover, the granularity of key distribution employed
|
||
with IPsec determines the granularity of authentication provided. In
|
||
general, data origin authentication in AH and ESP is limited by the
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 47]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
extent to which secrets used with the integrity algorithm (or with a
|
||
key management protocol that creates such secrets) are shared among
|
||
multiple possible sources.
|
||
|
||
The following text describes the minimum requirements for both types
|
||
of SA management.
|
||
|
||
4.5.1. Manual Techniques
|
||
|
||
The simplest form of management is manual management, in which a
|
||
person manually configures each system with keying material and SA
|
||
management data relevant to secure communication with other systems.
|
||
Manual techniques are practical in small, static environments but
|
||
they do not scale well. For example, a company could create a
|
||
virtual private network (VPN) using IPsec in security gateways at
|
||
several sites. If the number of sites is small, and since all the
|
||
sites come under the purview of a single administrative domain, this
|
||
might be a feasible context for manual management techniques. In
|
||
this case, the security gateway might selectively protect traffic to
|
||
and from other sites within the organization using a manually
|
||
configured key, while not protecting traffic for other destinations.
|
||
It also might be appropriate when only selected communications need
|
||
to be secured. A similar argument might apply to use of IPsec
|
||
entirely within an organization for a small number of hosts and/or
|
||
gateways. Manual management techniques often employ statically
|
||
configured, symmetric keys, though other options also exist.
|
||
|
||
4.5.2. Automated SA and Key Management
|
||
|
||
Widespread deployment and use of IPsec requires an Internet-standard,
|
||
scalable, automated, SA management protocol. Such support is
|
||
required to facilitate use of the anti-replay features of AH and ESP,
|
||
and to accommodate on-demand creation of SAs, e.g., for user- and
|
||
session-oriented keying. (Note that the notion of "rekeying" an SA
|
||
actually implies creation of a new SA with a new SPI, a process that
|
||
generally implies use of an automated SA/key management protocol.)
|
||
|
||
The default automated key management protocol selected for use with
|
||
IPsec is IKEv2 [Kau05]. This document assumes the availability of
|
||
certain functions from the key management protocol that are not
|
||
supported by IKEv1. Other automated SA management protocols MAY be
|
||
employed.
|
||
|
||
When an automated SA/key management protocol is employed, the output
|
||
from this protocol is used to generate multiple keys for a single SA.
|
||
This also occurs because distinct keys are used for each of the two
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 48]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
SAs created by IKE. If both integrity and confidentiality are
|
||
employed, then a minimum of four keys are required. Additionally,
|
||
some cryptographic algorithms may require multiple keys, e.g., 3DES.
|
||
|
||
The Key Management System may provide a separate string of bits for
|
||
each key or it may generate one string of bits from which all keys
|
||
are extracted. If a single string of bits is provided, care needs to
|
||
be taken to ensure that the parts of the system that map the string
|
||
of bits to the required keys do so in the same fashion at both ends
|
||
of the SA. To ensure that the IPsec implementations at each end of
|
||
the SA use the same bits for the same keys, and irrespective of which
|
||
part of the system divides the string of bits into individual keys,
|
||
the encryption keys MUST be taken from the first (left-most,
|
||
high-order) bits and the integrity keys MUST be taken from the
|
||
remaining bits. The number of bits for each key is defined in the
|
||
relevant cryptographic algorithm specification RFC. In the case of
|
||
multiple encryption keys or multiple integrity keys, the
|
||
specification for the cryptographic algorithm must specify the order
|
||
in which they are to be selected from a single string of bits
|
||
provided to the cryptographic algorithm.
|
||
|
||
4.5.3. Locating a Security Gateway
|
||
|
||
This section discusses issues relating to how a host learns about the
|
||
existence of relevant security gateways and, once a host has
|
||
contacted these security gateways, how it knows that these are the
|
||
correct security gateways. The details of where the required
|
||
information is stored is a local matter, but the Peer Authorization
|
||
Database (PAD) described in Section 4.4 is the most likely candidate.
|
||
(Note: S* indicates a system that is running IPsec, e.g., SH1 and SG2
|
||
below.)
|
||
|
||
Consider a situation in which a remote host (SH1) is using the
|
||
Internet to gain access to a server or other machine (H2) and there
|
||
is a security gateway (SG2), e.g., a firewall, through which H1's
|
||
traffic must pass. An example of this situation would be a mobile
|
||
host crossing the Internet to his home organization's firewall (SG2).
|
||
This situation raises several issues:
|
||
|
||
1. How does SH1 know/learn about the existence of the security
|
||
gateway SG2?
|
||
|
||
2. How does it authenticate SG2, and once it has authenticated SG2,
|
||
how does it confirm that SG2 has been authorized to represent H2?
|
||
|
||
3. How does SG2 authenticate SH1 and verify that SH1 is authorized to
|
||
contact H2?
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 49]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
4. How does SH1 know/learn about any additional gateways that provide
|
||
alternate paths to H2?
|
||
|
||
To address these problems, an IPsec-supporting host or security
|
||
gateway MUST have an administrative interface that allows the
|
||
user/administrator to configure the address of one or more security
|
||
gateways for ranges of destination addresses that require its use.
|
||
This includes the ability to configure information for locating and
|
||
authenticating one or more security gateways and verifying the
|
||
authorization of these gateways to represent the destination host.
|
||
(The authorization function is implied in the PAD.) This document
|
||
does not address the issue of how to automate the
|
||
discovery/verification of security gateways.
|
||
|
||
4.6. SAs and Multicast
|
||
|
||
The receiver-orientation of the SA implies that, in the case of
|
||
unicast traffic, the destination system will select the SPI value.
|
||
By having the destination select the SPI value, there is no potential
|
||
for manually configured SAs to conflict with automatically configured
|
||
(e.g., via a key management protocol) SAs or for SAs from multiple
|
||
sources to conflict with each other. For multicast traffic, there
|
||
are multiple destination systems associated with a single SA. So
|
||
some system or person will need to coordinate among all multicast
|
||
groups to select an SPI or SPIs on behalf of each multicast group and
|
||
then communicate the group's IPsec information to all of the
|
||
legitimate members of that multicast group via mechanisms not defined
|
||
here.
|
||
|
||
Multiple senders to a multicast group SHOULD use a single Security
|
||
Association (and hence SPI) for all traffic to that group when a
|
||
symmetric key encryption or integrity algorithm is employed. In such
|
||
circumstances, the receiver knows only that the message came from a
|
||
system possessing the key for that multicast group. In such
|
||
circumstances, a receiver generally will not be able to authenticate
|
||
which system sent the multicast traffic. Specifications for other,
|
||
more general multicast approaches are deferred to the IETF Multicast
|
||
Security Working Group.
|
||
|
||
5. IP Traffic Processing
|
||
|
||
As mentioned in Section 4.4.1, "The Security Policy Database (SPD)",
|
||
the SPD (or associated caches) MUST be consulted during the
|
||
processing of all traffic that crosses the IPsec protection boundary,
|
||
including IPsec management traffic. If no policy is found in the SPD
|
||
that matches a packet (for either inbound or outbound traffic), the
|
||
packet MUST be discarded. To simplify processing, and to allow for
|
||
very fast SA lookups (for SG/BITS/BITW), this document introduces the
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 50]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
notion of an SPD cache for all outbound traffic (SPD-O plus SPD-S),
|
||
and a cache for inbound, non-IPsec-protected traffic (SPD-I). (As
|
||
mentioned earlier, the SAD acts as a cache for checking the selectors
|
||
of inbound IPsec-protected traffic arriving on SAs.) There is
|
||
nominally one cache per SPD. For the purposes of this specification,
|
||
it is assumed that each cached entry will map to exactly one SA.
|
||
Note, however, exceptions arise when one uses multiple SAs to carry
|
||
traffic of different priorities (e.g., as indicated by distinct DSCP
|
||
values) but the same selectors. Note also, that there are a couple
|
||
of situations in which the SAD can have entries for SAs that do not
|
||
have corresponding entries in the SPD. Since this document does not
|
||
mandate that the SAD be selectively cleared when the SPD is changed,
|
||
SAD entries can remain when the SPD entries that created them are
|
||
changed or deleted. Also, if a manually keyed SA is created, there
|
||
could be an SAD entry for this SA that does not correspond to any SPD
|
||
entry.
|
||
|
||
Since SPD entries may overlap, one cannot safely cache these entries
|
||
in general. Simple caching might result in a match against a cache
|
||
entry, whereas an ordered search of the SPD would have resulted in a
|
||
match against a different entry. But, if the SPD entries are first
|
||
decorrelated, then the resulting entries can safely be cached. Each
|
||
cached entry will indicate that matching traffic should be bypassed
|
||
or discarded, appropriately. (Note: The original SPD entry might
|
||
result in multiple SAs, e.g., because of PFP.) Unless otherwise
|
||
noted, all references below to the "SPD" or "SPD cache" or "cache"
|
||
are to a decorrelated SPD (SPD-I, SPD-O, SPD-S) or the SPD cache
|
||
containing entries from the decorrelated SPD.
|
||
|
||
Note: In a host IPsec implementation based on sockets, the SPD will
|
||
be consulted whenever a new socket is created to determine what, if
|
||
any, IPsec processing will be applied to the traffic that will flow
|
||
on that socket. This provides an implicit caching mechanism, and the
|
||
portions of the preceding discussion that address caching can be
|
||
ignored in such implementations.
|
||
|
||
Note: It is assumed that one starts with a correlated SPD because
|
||
that is how users and administrators are accustomed to managing these
|
||
sorts of access control lists or firewall filter rules. Then the
|
||
decorrelation algorithm is applied to build a list of cache-able SPD
|
||
entries. The decorrelation is invisible at the management interface.
|
||
|
||
For inbound IPsec traffic, the SAD entry selected by the SPI serves
|
||
as the cache for the selectors to be matched against arriving IPsec
|
||
packets, after AH or ESP processing has been performed.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 51]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
5.1. Outbound IP Traffic Processing (protected-to-unprotected)
|
||
|
||
First consider the path for traffic entering the implementation via a
|
||
protected interface and exiting via an unprotected interface.
|
||
|
||
Unprotected Interface
|
||
^
|
||
|
|
||
(nested SAs) +----------+
|
||
-------------------|Forwarding|<-----+
|
||
| +----------+ |
|
||
| ^ |
|
||
| | BYPASS |
|
||
V +-----+ |
|
||
+-------+ | SPD | +--------+
|
||
...| SPD-I |.................|Cache|.....|PROCESS |...IPsec
|
||
| (*) | | (*) |---->|(AH/ESP)| boundary
|
||
+-------+ +-----+ +--------+
|
||
| +-------+ / ^
|
||
| |DISCARD| <--/ |
|
||
| +-------+ |
|
||
| |
|
||
| +-------------+
|
||
|---------------->|SPD Selection|
|
||
+-------------+
|
||
^
|
||
| +------+
|
||
| -->| ICMP |
|
||
| / +------+
|
||
|/
|
||
|
|
||
|
|
||
Protected Interface
|
||
|
||
|
||
Figure 2. Processing Model for Outbound Traffic
|
||
(*) = The SPD caches are shown here. If there
|
||
is a cache miss, then the SPD is checked.
|
||
There is no requirement that an
|
||
implementation buffer the packet if
|
||
there is a cache miss.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 52]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
IPsec MUST perform the following steps when processing outbound
|
||
packets:
|
||
|
||
1. When a packet arrives from the subscriber (protected) interface,
|
||
invoke the SPD selection function to obtain the SPD-ID needed to
|
||
choose the appropriate SPD. (If the implementation uses only one
|
||
SPD, this step is a no-op.)
|
||
|
||
2. Match the packet headers against the cache for the SPD specified
|
||
by the SPD-ID from step 1. Note that this cache contains entries
|
||
from SPD-O and SPD-S.
|
||
|
||
3a. If there is a match, then process the packet as specified by the
|
||
matching cache entry, i.e., BYPASS, DISCARD, or PROTECT using AH
|
||
or ESP. If IPsec processing is applied, there is a link from the
|
||
SPD cache entry to the relevant SAD entry (specifying the mode,
|
||
cryptographic algorithms, keys, SPI, PMTU, etc.). IPsec
|
||
processing is as previously defined, for tunnel or transport
|
||
modes and for AH or ESP, as specified in their respective RFCs
|
||
[Ken05b, Ken05a]. Note that the SA PMTU value, plus the value of
|
||
the stateful fragment checking flag (and the DF bit in the IP
|
||
header of the outbound packet) determine whether the packet can
|
||
(must) be fragmented prior to or after IPsec processing, or if it
|
||
must be discarded and an ICMP PMTU message is sent.
|
||
|
||
3b. If no match is found in the cache, search the SPD (SPD-S and
|
||
SPD-O parts) specified by SPD-ID. If the SPD entry calls for
|
||
BYPASS or DISCARD, create one or more new outbound SPD cache
|
||
entries and if BYPASS, create one or more new inbound SPD cache
|
||
entries. (More than one cache entry may be created since a
|
||
decorrelated SPD entry may be linked to other such entries that
|
||
were created as a side effect of the decorrelation process.) If
|
||
the SPD entry calls for PROTECT, i.e., creation of an SA, the key
|
||
management mechanism (e.g., IKEv2) is invoked to create the SA.
|
||
If SA creation succeeds, a new outbound (SPD-S) cache entry is
|
||
created, along with outbound and inbound SAD entries, otherwise
|
||
the packet is discarded. (A packet that triggers an SPD lookup
|
||
MAY be discarded by the implementation, or it MAY be processed
|
||
against the newly created cache entry, if one is created.) Since
|
||
SAs are created in pairs, an SAD entry for the corresponding
|
||
inbound SA also is created, and it contains the selector values
|
||
derived from the SPD entry (and packet, if any PFP flags were
|
||
"true") used to create the inbound SA, for use in checking
|
||
inbound traffic delivered via the SA.
|
||
|
||
4. The packet is passed to the outbound forwarding function
|
||
(operating outside of the IPsec implementation), to select the
|
||
interface to which the packet will be directed. This function
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 53]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
may cause the packet to be passed back across the IPsec boundary,
|
||
for additional IPsec processing, e.g., in support of nested SAs.
|
||
If so, there MUST be an entry in SPD-I database that permits
|
||
inbound bypassing of the packet, otherwise the packet will be
|
||
discarded. If necessary, i.e., if there is more than one SPD-I,
|
||
the traffic being looped back MAY be tagged as coming from this
|
||
internal interface. This would allow the use of a different
|
||
SPD-I for "real" external traffic vs. looped traffic, if needed.
|
||
|
||
Note: With the exception of IPv4 and IPv6 transport mode, an SG,
|
||
BITS, or BITW implementation MAY fragment packets before applying
|
||
IPsec. (This applies only to IPv4. For IPv6 packets, only the
|
||
originator is allowed to fragment them.) The device SHOULD have a
|
||
configuration setting to disable this. The resulting fragments are
|
||
evaluated against the SPD in the normal manner. Thus, fragments not
|
||
containing port numbers (or ICMP message type and code, or Mobility
|
||
Header type) will only match rules having port (or ICMP message type
|
||
and code, or MH type) selectors of OPAQUE or ANY. (See Section 7 for
|
||
more details.)
|
||
|
||
Note: With regard to determining and enforcing the PMTU of an SA, the
|
||
IPsec system MUST follow the steps described in Section 8.2.
|
||
|
||
5.1.1. Handling an Outbound Packet That Must Be Discarded
|
||
|
||
If an IPsec system receives an outbound packet that it finds it must
|
||
discard, it SHOULD be capable of generating and sending an ICMP
|
||
message to indicate to the sender of the outbound packet that the
|
||
packet was discarded. The type and code of the ICMP message will
|
||
depend on the reason for discarding the packet, as specified below.
|
||
The reason SHOULD be recorded in the audit log. The audit log entry
|
||
for this event SHOULD include the reason, current date/time, and the
|
||
selector values from the packet.
|
||
|
||
a. The selectors of the packet matched an SPD entry requiring the
|
||
packet to be discarded.
|
||
|
||
IPv4 Type = 3 (destination unreachable) Code = 13
|
||
(Communication Administratively Prohibited)
|
||
|
||
IPv6 Type = 1 (destination unreachable) Code = 1
|
||
(Communication with destination administratively
|
||
prohibited)
|
||
|
||
b1. The IPsec system successfully reached the remote peer but was
|
||
unable to negotiate the SA required by the SPD entry matching the
|
||
packet because, for example, the remote peer is administratively
|
||
prohibited from communicating with the initiator, the initiating
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 54]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
peer was unable to authenticate itself to the remote peer, the
|
||
remote peer was unable to authenticate itself to the initiating
|
||
peer, or the SPD at the remote peer did not have a suitable
|
||
entry.
|
||
|
||
IPv4 Type = 3 (destination unreachable) Code = 13
|
||
(Communication Administratively Prohibited)
|
||
|
||
IPv6 Type = 1 (destination unreachable) Code = 1
|
||
(Communication with destination administratively
|
||
prohibited)
|
||
|
||
b2. The IPsec system was unable to set up the SA required by the SPD
|
||
entry matching the packet because the IPsec peer at the other end
|
||
of the exchange could not be contacted.
|
||
|
||
IPv4 Type = 3 (destination unreachable) Code = 1 (host
|
||
unreachable)
|
||
|
||
IPv6 Type = 1 (destination unreachable) Code = 3 (address
|
||
unreachable)
|
||
|
||
Note that an attacker behind a security gateway could send packets
|
||
with a spoofed source address, W.X.Y.Z, to an IPsec entity causing it
|
||
to send ICMP messages to W.X.Y.Z. This creates an opportunity for a
|
||
denial of service (DoS) attack among hosts behind a security gateway.
|
||
To address this, a security gateway SHOULD include a management
|
||
control to allow an administrator to configure an IPsec
|
||
implementation to send or not send the ICMP messages under these
|
||
circumstances, and if this facility is selected, to rate limit the
|
||
transmission of such ICMP responses.
|
||
|
||
5.1.2. Header Construction for Tunnel Mode
|
||
|
||
This section describes the handling of the inner and outer IP
|
||
headers, extension headers, and options for AH and ESP tunnels, with
|
||
regard to outbound traffic processing. This includes how to
|
||
construct the encapsulating (outer) IP header, how to process fields
|
||
in the inner IP header, and what other actions should be taken for
|
||
outbound, tunnel mode traffic. The general processing described here
|
||
is modeled after RFC 2003, "IP Encapsulation within IP" [Per96]:
|
||
|
||
o The outer IP header Source Address and Destination Address
|
||
identify the "endpoints" of the tunnel (the encapsulator and
|
||
decapsulator). The inner IP header Source Address and Destination
|
||
Addresses identify the original sender and recipient of the
|
||
datagram (from the perspective of this tunnel), respectively.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 55]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
(See footnote 3 after the table in 5.1.2.1 for more details on the
|
||
encapsulating source IP address.)
|
||
|
||
o The inner IP header is not changed except as noted below for TTL
|
||
(or Hop Limit) and the DS/ECN Fields. The inner IP header
|
||
otherwise remains unchanged during its delivery to the tunnel exit
|
||
point.
|
||
|
||
o No change to IP options or extension headers in the inner header
|
||
occurs during delivery of the encapsulated datagram through the
|
||
tunnel.
|
||
|
||
Note: IPsec tunnel mode is different from IP-in-IP tunneling (RFC
|
||
2003 [Per96]) in several ways:
|
||
|
||
o IPsec offers certain controls to a security administrator to
|
||
manage covert channels (which would not normally be a concern for
|
||
tunneling) and to ensure that the receiver examines the right
|
||
portions of the received packet with respect to application of
|
||
access controls. An IPsec implementation MAY be configurable with
|
||
regard to how it processes the outer DS field for tunnel mode for
|
||
transmitted packets. For outbound traffic, one configuration
|
||
setting for the outer DS field will operate as described in the
|
||
following sections on IPv4 and IPv6 header processing for IPsec
|
||
tunnels. Another will allow the outer DS field to be mapped to a
|
||
fixed value, which MAY be configured on a per-SA basis. (The value
|
||
might really be fixed for all traffic outbound from a device, but
|
||
per-SA granularity allows that as well.) This configuration option
|
||
allows a local administrator to decide whether the covert channel
|
||
provided by copying these bits outweighs the benefits of copying.
|
||
|
||
o IPsec describes how to handle ECN or DS and provides the ability
|
||
to control propagation of changes in these fields between
|
||
unprotected and protected domains. In general, propagation from a
|
||
protected to an unprotected domain is a covert channel and thus
|
||
controls are provided to manage the bandwidth of this channel.
|
||
Propagation of ECN values in the other direction are controlled so
|
||
that only legitimate ECN changes (indicating occurrence of
|
||
congestion between the tunnel endpoints) are propagated. By
|
||
default, DS propagation from an unprotected domain to a protected
|
||
domain is not permitted. However, if the sender and receiver do
|
||
not share the same DS code space, and the receiver has no way of
|
||
learning how to map between the two spaces, then it may be
|
||
appropriate to deviate from the default. Specifically, an IPsec
|
||
implementation MAY be configurable in terms of how it processes
|
||
the outer DS field for tunnel mode for received packets. It may
|
||
be configured to either discard the outer DS value (the default)
|
||
OR to overwrite the inner DS field with the outer DS field. If
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 56]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
offered, the discard vs. overwrite behavior MAY be configured on a
|
||
per-SA basis. This configuration option allows a local
|
||
administrator to decide whether the vulnerabilities created by
|
||
copying these bits outweigh the benefits of copying. See
|
||
[RFC2983] for further information on when each of these behaviors
|
||
may be useful, and also for the possible need for diffserv traffic
|
||
conditioning prior or subsequent to IPsec processing (including
|
||
tunnel decapsulation).
|
||
|
||
o IPsec allows the IP version of the encapsulating header to be
|
||
different from that of the inner header.
|
||
|
||
The tables in the following sub-sections show the handling for the
|
||
different header/option fields ("constructed" means that the value in
|
||
the outer field is constructed independently of the value in the
|
||
inner).
|
||
|
||
5.1.2.1. IPv4: Header Construction for Tunnel Mode
|
||
|
||
<-- How Outer Hdr Relates to Inner Hdr -->
|
||
Outer Hdr at Inner Hdr at
|
||
IPv4 Encapsulator Decapsulator
|
||
Header fields: -------------------- ------------
|
||
version 4 (1) no change
|
||
header length constructed no change
|
||
DS Field copied from inner hdr (5) no change
|
||
ECN Field copied from inner hdr constructed (6)
|
||
total length constructed no change
|
||
ID constructed no change
|
||
flags (DF,MF) constructed, DF (4) no change
|
||
fragment offset constructed no change
|
||
TTL constructed (2) decrement (2)
|
||
protocol AH, ESP no change
|
||
checksum constructed constructed (2)(6)
|
||
src address constructed (3) no change
|
||
dest address constructed (3) no change
|
||
Options never copied no change
|
||
|
||
Notes:
|
||
|
||
(1) The IP version in the encapsulating header can be different
|
||
from the value in the inner header.
|
||
|
||
(2) The TTL in the inner header is decremented by the encapsulator
|
||
prior to forwarding and by the decapsulator if it forwards the
|
||
packet. (The IPv4 checksum changes when the TTL changes.)
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 57]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Note: Decrementing the TTL value is a normal part of
|
||
forwarding a packet. Thus, a packet originating from the same
|
||
node as the encapsulator does not have its TTL decremented,
|
||
since the sending node is originating the packet rather than
|
||
forwarding it. This applies to BITS and native IPsec
|
||
implementations in hosts and routers. However, the IPsec
|
||
processing model includes an external forwarding capability.
|
||
TTL processing can be used to prevent looping of packets,
|
||
e.g., due to configuration errors, within the context of this
|
||
processing model.
|
||
|
||
(3) Local and Remote addresses depend on the SA, which is used to
|
||
determine the Remote address, which in turn determines which
|
||
Local address (net interface) is used to forward the packet.
|
||
|
||
Note: For multicast traffic, the destination address, or
|
||
source and destination addresses, may be required for
|
||
demuxing. In that case, it is important to ensure consistency
|
||
over the lifetime of the SA by ensuring that the source
|
||
address that appears in the encapsulating tunnel header is the
|
||
same as the one that was negotiated during the SA
|
||
establishment process. There is an exception to this general
|
||
rule, i.e., a mobile IPsec implementation will update its
|
||
source address as it moves.
|
||
|
||
(4) Configuration determines whether to copy from the inner header
|
||
(IPv4 only), clear, or set the DF.
|
||
|
||
(5) If the packet will immediately enter a domain for which the
|
||
DSCP value in the outer header is not appropriate, that value
|
||
MUST be mapped to an appropriate value for the domain
|
||
[NiBlBaBL98]. See RFC 2475 [BBCDWW98] for further
|
||
information.
|
||
|
||
(6) If the ECN field in the inner header is set to ECT(0) or
|
||
ECT(1), where ECT is ECN-Capable Transport (ECT), and if the
|
||
ECN field in the outer header is set to Congestion Experienced
|
||
(CE), then set the ECN field in the inner header to CE;
|
||
otherwise, make no change to the ECN field in the inner
|
||
header. (The IPv4 checksum changes when the ECN changes.)
|
||
|
||
Note: IPsec does not copy the options from the inner header into the
|
||
outer header, nor does IPsec construct the options in the outer
|
||
header. However, post-IPsec code MAY insert/construct options for
|
||
the outer header.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 58]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
5.1.2.2. IPv6: Header Construction for Tunnel Mode
|
||
|
||
<-- How Outer Hdr Relates Inner Hdr --->
|
||
Outer Hdr at Inner Hdr at
|
||
IPv6 Encapsulator Decapsulator
|
||
Header fields: -------------------- ------------
|
||
version 6 (1) no change
|
||
DS Field copied from inner hdr (5) no change (9)
|
||
ECN Field copied from inner hdr constructed (6)
|
||
flow label copied or configured (8) no change
|
||
payload length constructed no change
|
||
next header AH,ESP,routing hdr no change
|
||
hop limit constructed (2) decrement (2)
|
||
src address constructed (3) no change
|
||
dest address constructed (3) no change
|
||
Extension headers never copied (7) no change
|
||
|
||
Notes:
|
||
|
||
(1) - (6) See Section 5.1.2.1.
|
||
|
||
(7) IPsec does not copy the extension headers from the inner
|
||
packet into outer headers, nor does IPsec construct extension
|
||
headers in the outer header. However, post-IPsec code MAY
|
||
insert/construct extension headers for the outer header.
|
||
|
||
(8) See [RaCoCaDe04]. Copying is acceptable only for end systems,
|
||
not SGs. If an SG copied flow labels from the inner header to
|
||
the outer header, collisions might result.
|
||
|
||
(9) An implementation MAY choose to provide a facility to pass the
|
||
DS value from the outer header to the inner header, on a per-
|
||
SA basis, for received tunnel mode packets. The motivation
|
||
for providing this feature is to accommodate situations in
|
||
which the DS code space at the receiver is different from that
|
||
of the sender and the receiver has no way of knowing how to
|
||
translate from the sender's space. There is a danger in
|
||
copying this value from the outer header to the inner header,
|
||
since it enables an attacker to modify the outer DSCP value in
|
||
a fashion that may adversely affect other traffic at the
|
||
receiver. Hence the default behavior for IPsec
|
||
implementations is NOT to permit such copying.
|
||
|
||
5.2. Processing Inbound IP Traffic (unprotected-to-protected)
|
||
|
||
Inbound processing is somewhat different from outbound processing,
|
||
because of the use of SPIs to map IPsec-protected traffic to SAs.
|
||
The inbound SPD cache (SPD-I) is applied only to bypassed or
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 59]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
discarded traffic. If an arriving packet appears to be an IPsec
|
||
fragment from an unprotected interface, reassembly is performed prior
|
||
to IPsec processing. The intent for any SPD cache is that a packet
|
||
that fails to match any entry is then referred to the corresponding
|
||
SPD. Every SPD SHOULD have a nominal, final entry that catches
|
||
anything that is otherwise unmatched, and discards it. This ensures
|
||
that non-IPsec-protected traffic that arrives and does not match any
|
||
SPD-I entry will be discarded.
|
||
|
||
Unprotected Interface
|
||
|
|
||
V
|
||
+-----+ IPsec protected
|
||
------------------->|Demux|-------------------+
|
||
| +-----+ |
|
||
| | |
|
||
| Not IPsec | |
|
||
| | |
|
||
| V |
|
||
| +-------+ +---------+ |
|
||
| |DISCARD|<---|SPD-I (*)| |
|
||
| +-------+ +---------+ |
|
||
| | |
|
||
| |-----+ |
|
||
| | | |
|
||
| | V |
|
||
| | +------+ |
|
||
| | | ICMP | |
|
||
| | +------+ |
|
||
| | V
|
||
+---------+ | +-----------+
|
||
....|SPD-O (*)|............|...................|PROCESS(**)|...IPsec
|
||
+---------+ | | (AH/ESP) | Boundary
|
||
^ | +-----------+
|
||
| | +---+ |
|
||
| BYPASS | +-->|IKE| |
|
||
| | | +---+ |
|
||
| V | V
|
||
| +----------+ +---------+ +----+
|
||
|--------<------|Forwarding|<---------|SAD Check|-->|ICMP|
|
||
nested SAs +----------+ | (***) | +----+
|
||
| +---------+
|
||
V
|
||
Protected Interface
|
||
|
||
Figure 3. Processing Model for Inbound Traffic
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 60]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
(*) = The caches are shown here. If there is
|
||
a cache miss, then the SPD is checked.
|
||
There is no requirement that an
|
||
implementation buffer the packet if
|
||
there is a cache miss.
|
||
(**) = This processing includes using the
|
||
packet's SPI, etc., to look up the SA
|
||
in the SAD, which forms a cache of the
|
||
SPD for inbound packets (except for
|
||
cases noted in Sections 4.4.2 and 5).
|
||
See step 3a below.
|
||
(***) = This SAD check refers to step 4 below.
|
||
|
||
Prior to performing AH or ESP processing, any IP fragments that
|
||
arrive via the unprotected interface are reassembled (by IP). Each
|
||
inbound IP datagram to which IPsec processing will be applied is
|
||
identified by the appearance of the AH or ESP values in the IP Next
|
||
Protocol field (or of AH or ESP as a next layer protocol in the IPv6
|
||
context).
|
||
|
||
IPsec MUST perform the following steps:
|
||
|
||
1. When a packet arrives, it may be tagged with the ID of the
|
||
interface (physical or virtual) via which it arrived, if
|
||
necessary, to support multiple SPDs and associated SPD-I caches.
|
||
(The interface ID is mapped to a corresponding SPD-ID.)
|
||
|
||
2. The packet is examined and demuxed into one of two categories:
|
||
- If the packet appears to be IPsec protected and it is addressed
|
||
to this device, an attempt is made to map it to an active SA
|
||
via the SAD. Note that the device may have multiple IP
|
||
addresses that may be used in the SAD lookup, e.g., in the case
|
||
of protocols such as SCTP.
|
||
- Traffic not addressed to this device, or addressed to this
|
||
device and not AH or ESP, is directed to SPD-I lookup. (This
|
||
implies that IKE traffic MUST have an explicit BYPASS entry in
|
||
the SPD.) If multiple SPDs are employed, the tag assigned to
|
||
the packet in step 1 is used to select the appropriate SPD-I
|
||
(and cache) to search. SPD-I lookup determines whether the
|
||
action is DISCARD or BYPASS.
|
||
|
||
3a. If the packet is addressed to the IPsec device and AH or ESP is
|
||
specified as the protocol, the packet is looked up in the SAD.
|
||
For unicast traffic, use only the SPI (or SPI plus protocol).
|
||
For multicast traffic, use the SPI plus the destination or SPI
|
||
plus destination and source addresses, as specified in Section
|
||
4.1. In either case (unicast or multicast), if there is no match,
|
||
discard the traffic. This is an auditable event. The audit log
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 61]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
entry for this event SHOULD include the current date/time, SPI,
|
||
source and destination of the packet, IPsec protocol, and any
|
||
other selector values of the packet that are available. If the
|
||
packet is found in the SAD, process it accordingly (see step 4).
|
||
|
||
3b. If the packet is not addressed to the device or is addressed to
|
||
this device and is not AH or ESP, look up the packet header in
|
||
the (appropriate) SPD-I cache. If there is a match and the
|
||
packet is to be discarded or bypassed, do so. If there is no
|
||
cache match, look up the packet in the corresponding SPD-I and
|
||
create a cache entry as appropriate. (No SAs are created in
|
||
response to receipt of a packet that requires IPsec protection;
|
||
only BYPASS or DISCARD cache entries can be created this way.) If
|
||
there is no match, discard the traffic. This is an auditable
|
||
event. The audit log entry for this event SHOULD include the
|
||
current date/time, SPI if available, IPsec protocol if available,
|
||
source and destination of the packet, and any other selector
|
||
values of the packet that are available.
|
||
|
||
3c. Processing of ICMP messages is assumed to take place on the
|
||
unprotected side of the IPsec boundary. Unprotected ICMP
|
||
messages are examined and local policy is applied to determine
|
||
whether to accept or reject these messages and, if accepted, what
|
||
action to take as a result. For example, if an ICMP unreachable
|
||
message is received, the implementation must decide whether to
|
||
act on it, reject it, or act on it with constraints. (See Section
|
||
6.)
|
||
|
||
4. Apply AH or ESP processing as specified, using the SAD entry
|
||
selected in step 3a above. Then match the packet against the
|
||
inbound selectors identified by the SAD entry to verify that the
|
||
received packet is appropriate for the SA via which it was
|
||
received.
|
||
|
||
5. If an IPsec system receives an inbound packet on an SA and the
|
||
packet's header fields are not consistent with the selectors for
|
||
the SA, it MUST discard the packet. This is an auditable event.
|
||
The audit log entry for this event SHOULD include the current
|
||
date/time, SPI, IPsec protocol(s), source and destination of the
|
||
packet, any other selector values of the packet that are
|
||
available, and the selector values from the relevant SAD entry.
|
||
The system SHOULD also be capable of generating and sending an
|
||
IKE notification of INVALID_SELECTORS to the sender (IPsec peer),
|
||
indicating that the received packet was discarded because of
|
||
failure to pass selector checks.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 62]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
To minimize the impact of a DoS attack, or a mis-configured peer, the
|
||
IPsec system SHOULD include a management control to allow an
|
||
administrator to configure the IPsec implementation to send or not
|
||
send this IKE notification, and if this facility is selected, to rate
|
||
limit the transmission of such notifications.
|
||
|
||
After traffic is bypassed or processed through IPsec, it is handed to
|
||
the inbound forwarding function for disposition. This function may
|
||
cause the packet to be sent (outbound) across the IPsec boundary for
|
||
additional inbound IPsec processing, e.g., in support of nested SAs.
|
||
If so, then as with ALL outbound traffic that is to be bypassed, the
|
||
packet MUST be matched against an SPD-O entry. Ultimately, the
|
||
packet should be forwarded to the destination host or process for
|
||
disposition.
|
||
|
||
6. ICMP Processing
|
||
|
||
This section describes IPsec handling of ICMP traffic. There are two
|
||
categories of ICMP traffic: error messages (e.g., type = destination
|
||
unreachable) and non-error messages (e.g., type = echo). This
|
||
section applies exclusively to error messages. Disposition of
|
||
non-error, ICMP messages (that are not addressed to the IPsec
|
||
implementation itself) MUST be explicitly accounted for using SPD
|
||
entries.
|
||
|
||
The discussion in this section applies to ICMPv6 as well as to
|
||
ICMPv4. Also, a mechanism SHOULD be provided to allow an
|
||
administrator to cause ICMP error messages (selected, all, or none)
|
||
to be logged as an aid to problem diagnosis.
|
||
|
||
6.1. Processing ICMP Error Messages Directed to an IPsec Implementation
|
||
|
||
6.1.1. ICMP Error Messages Received on the Unprotected Side of the
|
||
Boundary
|
||
|
||
Figure 3 in Section 5.2 shows a distinct ICMP processing module on
|
||
the unprotected side of the IPsec boundary, for processing ICMP
|
||
messages (error or otherwise) that are addressed to the IPsec device
|
||
and that are not protected via AH or ESP. An ICMP message of this
|
||
sort is unauthenticated, and its processing may result in denial or
|
||
degradation of service. This suggests that, in general, it would be
|
||
desirable to ignore such messages. However, many ICMP messages will
|
||
be received by hosts or security gateways from unauthenticated
|
||
sources, e.g., routers in the public Internet. Ignoring these ICMP
|
||
messages can degrade service, e.g., because of a failure to process
|
||
PMTU message and redirection messages. Thus, there is also a
|
||
motivation for accepting and acting upon unauthenticated ICMP
|
||
messages.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 63]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
To accommodate both ends of this spectrum, a compliant IPsec
|
||
implementation MUST permit a local administrator to configure an
|
||
IPsec implementation to accept or reject unauthenticated ICMP
|
||
traffic. This control MUST be at the granularity of ICMP type and
|
||
MAY be at the granularity of ICMP type and code. Additionally, an
|
||
implementation SHOULD incorporate mechanisms and parameters for
|
||
dealing with such traffic. For example, there could be the ability
|
||
to establish a minimum PMTU for traffic (on a per destination basis),
|
||
to prevent receipt of an unauthenticated ICMP from setting the PMTU
|
||
to a trivial size.
|
||
|
||
If an ICMP PMTU message passes the checks above and the system is
|
||
configured to accept it, then there are two possibilities. If the
|
||
implementation applies fragmentation on the ciphertext side of the
|
||
boundary, then the accepted PMTU information is passed to the
|
||
forwarding module (outside of the IPsec implementation), which uses
|
||
it to manage outbound packet fragmentation. If the implementation is
|
||
configured to effect plaintext side fragmentation, then the PMTU
|
||
information is passed to the plaintext side and processed as
|
||
described in Section 8.2.
|
||
|
||
6.1.2. ICMP Error Messages Received on the Protected Side of the
|
||
Boundary
|
||
|
||
These ICMP messages are not authenticated, but they do come from
|
||
sources on the protected side of the IPsec boundary. Thus, these
|
||
messages generally are viewed as more "trustworthy" than their
|
||
counterparts arriving from sources on the unprotected side of the
|
||
boundary. The major security concern here is that a compromised host
|
||
or router might emit erroneous ICMP error messages that could degrade
|
||
service for other devices "behind" the security gateway, or that
|
||
could even result in violations of confidentiality. For example, if
|
||
a bogus ICMP redirect were consumed by a security gateway, it could
|
||
cause the forwarding table on the protected side of the boundary to
|
||
be modified so as to deliver traffic to an inappropriate destination
|
||
"behind" the gateway. Thus, implementers MUST provide controls to
|
||
allow local administrators to constrain the processing of ICMP error
|
||
messages received on the protected side of the boundary, and directed
|
||
to the IPsec implementation. These controls are of the same type as
|
||
those employed on the unprotected side, described above in Section
|
||
6.1.1.
|
||
|
||
6.2. Processing Protected, Transit ICMP Error Messages
|
||
|
||
When an ICMP error message is transmitted via an SA to a device
|
||
"behind" an IPsec implementation, both the payload and the header of
|
||
the ICMP message require checking from an access control perspective.
|
||
If one of these messages is forwarded to a host behind a security
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 64]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
gateway, the receiving host IP implementation will make decisions
|
||
based on the payload, i.e., the header of the packet that purportedly
|
||
triggered the error response. Thus, an IPsec implementation MUST be
|
||
configurable to check that this payload header information is
|
||
consistent with the SA via which it arrives. (This means that the
|
||
payload header, with source and destination address and port fields
|
||
reversed, matches the traffic selectors for the SA.) If this sort of
|
||
check is not performed, then, for example, anyone with whom the
|
||
receiving IPsec system (A) has an active SA could send an ICMP
|
||
Destination Unreachable message that refers to any host/net with
|
||
which A is currently communicating, and thus effect a highly
|
||
efficient DoS attack regarding communication with other peers of A.
|
||
Normal IPsec receiver processing of traffic is not sufficient to
|
||
protect against such attacks. However, not all contexts may require
|
||
such checks, so it is also necessary to allow a local administrator
|
||
to configure an implementation to NOT perform such checks.
|
||
|
||
To accommodate both policies, the following convention is adopted.
|
||
If an administrator wants to allow ICMP error messages to be carried
|
||
by an SA without inspection of the payload, then configure an SPD
|
||
entry that explicitly allows for carriage of such traffic. If an
|
||
administrator wants IPsec to check the payload of ICMP error messages
|
||
for consistency, then do not create any SPD entries that accommodate
|
||
carriage of such traffic based on the ICMP packet header. This
|
||
convention motivates the following processing description.
|
||
|
||
IPsec senders and receivers MUST support the following processing for
|
||
ICMP error messages that are sent and received via SAs.
|
||
|
||
If an SA exists that accommodates an outbound ICMP error message,
|
||
then the message is mapped to the SA and only the IP and ICMP headers
|
||
are checked upon receipt, just as would be the case for other
|
||
traffic. If no SA exists that matches the traffic selectors
|
||
associated with an ICMP error message, then the SPD is searched to
|
||
determine if such an SA can be created. If so, the SA is created and
|
||
the ICMP error message is transmitted via that SA. Upon receipt,
|
||
this message is subject to the usual traffic selector checks at the
|
||
receiver. This processing is exactly what would happen for traffic
|
||
in general, and thus does not represent any special processing for
|
||
ICMP error messages.
|
||
|
||
If no SA exists that would carry the outbound ICMP message in
|
||
question, and if no SPD entry would allow carriage of this outbound
|
||
ICMP error message, then an IPsec implementation MUST map the message
|
||
to the SA that would carry the return traffic associated with the
|
||
packet that triggered the ICMP error message. This requires an IPsec
|
||
implementation to detect outbound ICMP error messages that map to no
|
||
extant SA or SPD entry, and treat them specially with regard to SA
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 65]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
creation and lookup. The implementation extracts the header for the
|
||
packet that triggered the error (from the ICMP message payload),
|
||
reverses the source and destination IP address fields, extracts the
|
||
protocol field, and reverses the port fields (if accessible). It
|
||
then uses this extracted information to locate an appropriate, active
|
||
outbound SA, and transmits the error message via this SA. If no such
|
||
SA exists, no SA will be created, and this is an auditable event.
|
||
|
||
If an IPsec implementation receives an inbound ICMP error message on
|
||
an SA, and the IP and ICMP headers of the message do not match the
|
||
traffic selectors for the SA, the receiver MUST process the received
|
||
message in a special fashion. Specifically, the receiver must
|
||
extract the header of the triggering packet from the ICMP payload,
|
||
and reverse fields as described above to determine if the packet is
|
||
consistent with the selectors for the SA via which the ICMP error
|
||
message was received. If the packet fails this check, the IPsec
|
||
implementation MUST NOT forwarded the ICMP message to the
|
||
destination. This is an auditable event.
|
||
|
||
7. Handling Fragments (on the protected side of the IPsec boundary)
|
||
|
||
Earlier sections of this document describe mechanisms for (a)
|
||
fragmenting an outbound packet after IPsec processing has been
|
||
applied and reassembling it at the receiver before IPsec processing
|
||
and (b) handling inbound fragments received from the unprotected side
|
||
of the IPsec boundary. This section describes how an implementation
|
||
should handle the processing of outbound plaintext fragments on the
|
||
protected side of the IPsec boundary. (See Appendix D, "Fragment
|
||
Handling Rationale".) In particular, it addresses:
|
||
|
||
o mapping an outbound non-initial fragment to the right SA
|
||
(or finding the right SPD entry)
|
||
o verifying that a received non-initial fragment is
|
||
authorized for the SA via which it was received
|
||
o mapping outbound and inbound non-initial fragments to the
|
||
right SPD-O/SPD-I entry or the relevant cache entry, for
|
||
BYPASS/DISCARD traffic
|
||
|
||
Note: In Section 4.1, transport mode SAs have been defined to not
|
||
carry fragments (IPv4 or IPv6). Note also that in Section 4.4.1, two
|
||
special values, ANY and OPAQUE, were defined for selectors and that
|
||
ANY includes OPAQUE. The term "non-trivial" is used to mean that the
|
||
selector has a value other than OPAQUE or ANY.
|
||
|
||
Note: The term "non-initial fragment" is used here to indicate a
|
||
fragment that does not contain all the selector values that may be
|
||
needed for access control. As observed in Section 4.4.1, depending
|
||
on the Next Layer Protocol, in addition to Ports, the ICMP message
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 66]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
type/code or Mobility Header type could be missing from non-initial
|
||
fragments. Also, for IPv6, even the first fragment might NOT contain
|
||
the Next Layer Protocol or Ports (or ICMP message type/code, or
|
||
Mobility Header type) depending on the kind and number of extension
|
||
headers present. If a non-initial fragment contains the Port (or
|
||
ICMP type and code or Mobility Header type) but not the Next Layer
|
||
Protocol, then unless there is an SPD entry for the relevant
|
||
Local/Remote addresses with ANY for Next Layer Protocol and Port (or
|
||
ICMP type and code or Mobility Header type), the fragment would not
|
||
contain all the selector information needed for access control.
|
||
|
||
To address the above issues, three approaches have been defined:
|
||
|
||
o Tunnel mode SAs that carry initial and non-initial fragments
|
||
(See Section 7.1.)
|
||
o Separate tunnel mode SAs for non-initial fragments (See
|
||
Section 7.2.)
|
||
o Stateful fragment checking (See Section 7.3.)
|
||
|
||
7.1. Tunnel Mode SAs that Carry Initial and Non-Initial Fragments
|
||
|
||
All implementations MUST support tunnel mode SAs that are configured
|
||
to pass traffic without regard to port field (or ICMP type/code or
|
||
Mobility Header type) values. If the SA will carry traffic for
|
||
specified protocols, the selector set for the SA MUST specify the
|
||
port fields (or ICMP type/code or Mobility Header type) as ANY. An
|
||
SA defined in this fashion will carry all traffic including initial
|
||
and non-initial fragments for the indicated Local/Remote addresses
|
||
and specified Next Layer protocol(s). If the SA will carry traffic
|
||
without regard to a specific protocol value (i.e., ANY is specified
|
||
as the (Next Layer) protocol selector value), then the port field
|
||
values are undefined and MUST be set to ANY as well. (As noted in
|
||
4.4.1, ANY includes OPAQUE as well as all specific values.)
|
||
|
||
7.2. Separate Tunnel Mode SAs for Non-Initial Fragments
|
||
|
||
An implementation MAY support tunnel mode SAs that will carry only
|
||
non-initial fragments, separate from non-fragmented packets and
|
||
initial fragments. The OPAQUE value will be used to specify port (or
|
||
ICMP type/code or Mobility Header type) field selectors for an SA to
|
||
carry such fragments. Receivers MUST perform a minimum offset check
|
||
on IPv4 (non-initial) fragments to protect against overlapping
|
||
fragment attacks when SAs of this type are employed. Because such
|
||
checks cannot be performed on IPv6 non-initial fragments, users and
|
||
administrators are advised that carriage of such fragments may be
|
||
dangerous, and implementers may choose to NOT support such SAs for
|
||
IPv6 traffic. Also, an SA of this sort will carry all non-initial
|
||
fragments that match a specified Local/Remote address pair and
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 67]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
protocol value, i.e., the fragments carried on this SA belong to
|
||
packets that if not fragmented, might have gone on separate SAs of
|
||
differing security. Therefore, users and administrators are advised
|
||
to protect such traffic using ESP (with integrity) and the
|
||
"strongest" integrity and encryption algorithms in use between both
|
||
peers. (Determination of the "strongest" algorithms requires
|
||
imposing an ordering of the available algorithms, a local
|
||
determination at the discretion of the initiator of the SA.)
|
||
|
||
Specific port (or ICMP type/code or Mobility Header type) selector
|
||
values will be used to define SAs to carry initial fragments and
|
||
non-fragmented packets. This approach can be used if a user or
|
||
administrator wants to create one or more tunnel mode SAs between the
|
||
same Local/Remote addresses that discriminate based on port (or ICMP
|
||
type/code or Mobility Header type) fields. These SAs MUST have
|
||
non-trivial protocol selector values, otherwise approach #1 above
|
||
MUST be used.
|
||
|
||
Note: In general, for the approach described in this section, one
|
||
needs only a single SA between two implementations to carry all
|
||
non-initial fragments. However, if one chooses to have multiple SAs
|
||
between the two implementations for QoS differentiation, then one
|
||
might also want multiple SAs to carry fragments-without-ports, one
|
||
for each supported QoS class. Since support for QoS via distinct SAs
|
||
is a local matter, not mandated by this document, the choice to have
|
||
multiple SAs to carry non-initial fragments should also be local.
|
||
|
||
7.3. Stateful Fragment Checking
|
||
|
||
An implementation MAY support some form of stateful fragment checking
|
||
for a tunnel mode SA with non-trivial port (or ICMP type/code or MH
|
||
type) field values (not ANY or OPAQUE). Implementations that will
|
||
transmit non-initial fragments on a tunnel mode SA that makes use of
|
||
non-trivial port (or ICMP type/code or MH type) selectors MUST notify
|
||
a peer via the IKE NOTIFY NON_FIRST_FRAGMENTS_ALSO payload.
|
||
|
||
The peer MUST reject this proposal if it will not accept non-initial
|
||
fragments in this context. If an implementation does not
|
||
successfully negotiate transmission of non-initial fragments for such
|
||
an SA, it MUST NOT send such fragments over the SA. This standard
|
||
does not specify how peers will deal with such fragments, e.g., via
|
||
reassembly or other means, at either sender or receiver. However, a
|
||
receiver MUST discard non-initial fragments that arrive on an SA with
|
||
non-trivial port (or ICMP type/code or MH type) selector values
|
||
unless this feature has been negotiated. Also, the receiver MUST
|
||
discard non-initial fragments that do not comply with the security
|
||
policy applied to the overall packet. Discarding such packets is an
|
||
auditable event. Note that in network configurations where fragments
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 68]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
of a packet might be sent or received via different security gateways
|
||
or BITW implementations, stateful strategies for tracking fragments
|
||
may fail.
|
||
|
||
7.4. BYPASS/DISCARD Traffic
|
||
|
||
All implementations MUST support DISCARDing of fragments using the
|
||
normal SPD packet classification mechanisms. All implementations
|
||
MUST support stateful fragment checking to accommodate BYPASS traffic
|
||
for which a non-trivial port range is specified. The concern is that
|
||
BYPASS of a cleartext, non-initial fragment arriving at an IPsec
|
||
implementation could undermine the security afforded IPsec-protected
|
||
traffic directed to the same destination. For example, consider an
|
||
IPsec implementation configured with an SPD entry that calls for
|
||
IPsec protection of traffic between a specific source/destination
|
||
address pair, and for a specific protocol and destination port, e.g.,
|
||
TCP traffic on port 23 (Telnet). Assume that the implementation also
|
||
allows BYPASS of traffic from the same source/destination address
|
||
pair and protocol, but for a different destination port, e.g., port
|
||
119 (NNTP). An attacker could send a non-initial fragment (with a
|
||
forged source address) that, if bypassed, could overlap with
|
||
IPsec-protected traffic from the same source and thus violate the
|
||
integrity of the IPsec-protected traffic. Requiring stateful
|
||
fragment checking for BYPASS entries with non-trivial port ranges
|
||
prevents attacks of this sort. As noted above, in network
|
||
configurations where fragments of a packet might be sent or received
|
||
via different security gateways or BITW implementations, stateful
|
||
strategies for tracking fragments may fail.
|
||
|
||
8. Path MTU/DF Processing
|
||
|
||
The application of AH or ESP to an outbound packet increases the size
|
||
of a packet and thus may cause a packet to exceed the PMTU for the SA
|
||
via which the packet will travel. An IPsec implementation also may
|
||
receive an unprotected ICMP PMTU message and, if it chooses to act
|
||
upon the message, the result will affect outbound traffic processing.
|
||
This section describes the processing required of an IPsec
|
||
implementation to deal with these two PMTU issues.
|
||
|
||
8.1. DF Bit
|
||
|
||
All IPsec implementations MUST support the option of copying the DF
|
||
bit from an outbound packet to the tunnel mode header that it emits,
|
||
when traffic is carried via a tunnel mode SA. This means that it
|
||
MUST be possible to configure the implementation's treatment of the
|
||
DF bit (set, clear, copy from inner header) for each SA. This
|
||
applies to SAs where both inner and outer headers are IPv4.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 69]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
8.2. Path MTU (PMTU) Discovery
|
||
|
||
This section discusses IPsec handling for unprotected Path MTU
|
||
Discovery messages. ICMP PMTU is used here to refer to an ICMP
|
||
message for:
|
||
|
||
IPv4 (RFC 792 [Pos81b]):
|
||
- Type = 3 (Destination Unreachable)
|
||
- Code = 4 (Fragmentation needed and DF set)
|
||
- Next-Hop MTU in the low-order 16 bits of the
|
||
second word of the ICMP header (labeled "unused"
|
||
in RFC 792), with high-order 16 bits set to zero)
|
||
|
||
IPv6 (RFC 2463 [CD98]):
|
||
- Type = 2 (Packet Too Big)
|
||
- Code = 0 (Fragmentation needed)
|
||
- Next-Hop MTU in the 32-bit MTU field of the ICMP6
|
||
message
|
||
|
||
8.2.1. Propagation of PMTU
|
||
|
||
When an IPsec implementation receives an unauthenticated PMTU
|
||
message, and it is configured to process (vs. ignore) such messages,
|
||
it maps the message to the SA to which it corresponds. This mapping
|
||
is effected by extracting the header information from the payload of
|
||
the PMTU message and applying the procedure described in Section 5.2.
|
||
The PMTU determined by this message is used to update the SAD PMTU
|
||
field, taking into account the size of the AH or ESP header that will
|
||
be applied, any crypto synchronization data, and the overhead imposed
|
||
by an additional IP header, in the case of a tunnel mode SA.
|
||
|
||
In a native host implementation, it is possible to maintain PMTU data
|
||
at the same granularity as for unprotected communication, so there is
|
||
no loss of functionality. Signaling of the PMTU information is
|
||
internal to the host. For all other IPsec implementation options,
|
||
the PMTU data must be propagated via a synthesized ICMP PMTU. In
|
||
these cases, the IPsec implementation SHOULD wait for outbound
|
||
traffic to be mapped to the SAD entry. When such traffic arrives, if
|
||
the traffic would exceed the updated PMTU value the traffic MUST be
|
||
handled as follows:
|
||
|
||
Case 1: Original (cleartext) packet is IPv4 and has the DF
|
||
bit set. The implementation SHOULD discard the packet
|
||
and send a PMTU ICMP message.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 70]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Case 2: Original (cleartext) packet is IPv4 and has the DF
|
||
bit clear. The implementation SHOULD fragment (before or
|
||
after encryption per its configuration) and then forward
|
||
the fragments. It SHOULD NOT send a PMTU ICMP message.
|
||
|
||
Case 3: Original (cleartext) packet is IPv6. The implementation
|
||
SHOULD discard the packet and send a PMTU ICMP message.
|
||
|
||
8.2.2. PMTU Aging
|
||
|
||
In all IPsec implementations, the PMTU associated with an SA MUST be
|
||
"aged" and some mechanism is required to update the PMTU in a timely
|
||
manner, especially for discovering if the PMTU is smaller than
|
||
required by current network conditions. A given PMTU has to remain
|
||
in place long enough for a packet to get from the source of the SA to
|
||
the peer, and to propagate an ICMP error message if the current PMTU
|
||
is too big.
|
||
|
||
Implementations SHOULD use the approach described in the Path MTU
|
||
Discovery document (RFC 1191 [MD90], Section 6.3), which suggests
|
||
periodically resetting the PMTU to the first-hop data-link MTU and
|
||
then letting the normal PMTU Discovery processes update the PMTU as
|
||
necessary. The period SHOULD be configurable.
|
||
|
||
9. Auditing
|
||
|
||
IPsec implementations are not required to support auditing. For the
|
||
most part, the granularity of auditing is a local matter. However,
|
||
several auditable events are identified in this document, and for
|
||
each of these events a minimum set of information that SHOULD be
|
||
included in an audit log is defined. Additional information also MAY
|
||
be included in the audit log for each of these events, and additional
|
||
events, not explicitly called out in this specification, also MAY
|
||
result in audit log entries. There is no requirement for the
|
||
receiver to transmit any message to the purported transmitter in
|
||
response to the detection of an auditable event, because of the
|
||
potential to induce denial of service via such action.
|
||
|
||
10. Conformance Requirements
|
||
|
||
All IPv4 IPsec implementations MUST comply with all requirements of
|
||
this document. All IPv6 implementations MUST comply with all
|
||
requirements of this document.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 71]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
11. Security Considerations
|
||
|
||
The focus of this document is security; hence security considerations
|
||
permeate this specification.
|
||
|
||
IPsec imposes stringent constraints on bypass of IP header data in
|
||
both directions, across the IPsec barrier, especially when tunnel
|
||
mode SAs are employed. Some constraints are absolute, while others
|
||
are subject to local administrative controls, often on a per-SA
|
||
basis. For outbound traffic, these constraints are designed to limit
|
||
covert channel bandwidth. For inbound traffic, the constraints are
|
||
designed to prevent an adversary who has the ability to tamper with
|
||
one data stream (on the unprotected side of the IPsec barrier) from
|
||
adversely affecting other data streams (on the protected side of the
|
||
barrier). The discussion in Section 5 dealing with processing DSCP
|
||
values for tunnel mode SAs illustrates this concern.
|
||
|
||
If an IPsec implementation is configured to pass ICMP error messages
|
||
over SAs based on the ICMP header values, without checking the header
|
||
information from the ICMP message payload, serious vulnerabilities
|
||
may arise. Consider a scenario in which several sites (A, B, and C)
|
||
are connected to one another via ESP-protected tunnels: A-B, A-C, and
|
||
B-C. Also assume that the traffic selectors for each tunnel specify
|
||
ANY for protocol and port fields and IP source/destination address
|
||
ranges that encompass the address range for the systems behind the
|
||
security gateways serving each site. This would allow a host at site
|
||
B to send an ICMP Destination Unreachable message to any host at site
|
||
A, that declares all hosts on the net at site C to be unreachable.
|
||
This is a very efficient DoS attack that could have been prevented if
|
||
the ICMP error messages were subjected to the checks that IPsec
|
||
provides, if the SPD is suitably configured, as described in Section
|
||
6.2.
|
||
|
||
12. IANA Considerations
|
||
|
||
The IANA has assigned the value (3) for the asn1-modules registry and
|
||
has assigned the object identifier 1.3.6.1.5.8.3.1 for the SPD
|
||
module. See Appendix C, "ASN.1 for an SPD Entry".
|
||
|
||
13. Differences from RFC 2401
|
||
|
||
This architecture document differs substantially from RFC 2401
|
||
[RFC2401] in detail and in organization, but the fundamental notions
|
||
are unchanged.
|
||
|
||
o The processing model has been revised to address new IPsec
|
||
scenarios, improve performance, and simplify implementation. This
|
||
includes a separation between forwarding (routing) and SPD
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 72]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
selection, several SPD changes, and the addition of an outbound SPD
|
||
cache and an inbound SPD cache for bypassed or discarded traffic.
|
||
There is also a new database, the Peer Authorization Database
|
||
(PAD). This provides a link between an SA management protocol
|
||
(such as IKE) and the SPD.
|
||
|
||
o There is no longer a requirement to support nested SAs or "SA
|
||
bundles". Instead this functionality can be achieved through SPD
|
||
and forwarding table configuration. An example of a configuration
|
||
has been added in Appendix E.
|
||
|
||
o SPD entries were redefined to provide more flexibility. Each SPD
|
||
entry now consists of 1 to N sets of selectors, where each selector
|
||
set contains one protocol and a "list of ranges" can now be
|
||
specified for the Local IP address, Remote IP address, and whatever
|
||
fields (if any) are associated with the Next Layer Protocol (Local
|
||
Port, Remote Port, ICMP message type and code, and Mobility Header
|
||
type). An individual value for a selector is represented via a
|
||
trivial range and ANY is represented via a range than spans all
|
||
values for the selector. An example of an ASN.1 description is
|
||
included in Appendix C.
|
||
|
||
o TOS (IPv4) and Traffic Class (IPv6) have been replaced by DSCP and
|
||
ECN. The tunnel section has been updated to explain how to handle
|
||
DSCP and ECN bits.
|
||
|
||
o For tunnel mode SAs, an SG, BITS, or BITW implementation is now
|
||
allowed to fragment packets before applying IPsec. This applies
|
||
only to IPv4. For IPv6 packets, only the originator is allowed to
|
||
fragment them.
|
||
|
||
o When security is desired between two intermediate systems along a
|
||
path or between an intermediate system and an end system, transport
|
||
mode may now be used between security gateways and between a
|
||
security gateway and a host.
|
||
|
||
o This document clarifies that for all traffic that crosses the IPsec
|
||
boundary, including IPsec management traffic, the SPD or associated
|
||
caches must be consulted.
|
||
|
||
o This document defines how to handle the situation of a security
|
||
gateway with multiple subscribers requiring separate IPsec
|
||
contexts.
|
||
|
||
o A definition of reserved SPIs has been added.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 73]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
o Text has been added explaining why ALL IP packets must be checked
|
||
-- IPsec includes minimal firewall functionality to support access
|
||
control at the IP layer.
|
||
|
||
o The tunnel section has been updated to clarify how to handle the IP
|
||
options field and IPv6 extension headers when constructing the
|
||
outer header.
|
||
|
||
o SA mapping for inbound traffic has been updated to be consistent
|
||
with the changes made in AH and ESP for support of unicast and
|
||
multicast SAs.
|
||
|
||
o Guidance has been added regarding how to handle the covert channel
|
||
created in tunnel mode by copying the DSCP value to outer header.
|
||
|
||
o Support for AH in both IPv4 and IPv6 is no longer required.
|
||
|
||
o PMTU handling has been updated. The appendix on
|
||
PMTU/DF/Fragmentation has been deleted.
|
||
|
||
o Three approaches have been added for handling plaintext fragments
|
||
on the protected side of the IPsec boundary. Appendix D documents
|
||
the rationale behind them.
|
||
|
||
o Added revised text describing how to derive selector values for SAs
|
||
(from the SPD entry or from the packet, etc.)
|
||
|
||
o Added a new table describing the relationship between selector
|
||
values in an SPD entry, the PFP flag, and resulting selector values
|
||
in the corresponding SAD entry.
|
||
|
||
o Added Appendix B to describe decorrelation.
|
||
|
||
o Added text describing how to handle an outbound packet that must be
|
||
discarded.
|
||
|
||
o Added text describing how to handle a DISCARDED inbound packet,
|
||
i.e., one that does not match the SA upon which it arrived.
|
||
|
||
o IPv6 mobility header has been added as a possible Next Layer
|
||
Protocol. IPv6 Mobility Header message type has been added as a
|
||
selector.
|
||
|
||
o ICMP message type and code have been added as selectors.
|
||
|
||
o The selector "data sensitivity level" has been removed to simplify
|
||
things.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 74]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
o Updated text describing handling ICMP error messages. The appendix
|
||
on "Categorization of ICMP Messages" has been deleted.
|
||
|
||
o The text for the selector name has been updated and clarified.
|
||
|
||
o The "Next Layer Protocol" has been further explained and a default
|
||
list of protocols to skip when looking for the Next Layer Protocol
|
||
has been added.
|
||
|
||
o The text has been amended to say that this document assumes use of
|
||
IKEv2 or an SA management protocol with comparable features.
|
||
|
||
o Text has been added clarifying the algorithm for mapping inbound
|
||
IPsec datagrams to SAs in the presence of multicast SAs.
|
||
|
||
o The appendix "Sequence Space Window Code Example" has been removed.
|
||
|
||
o With respect to IP addresses and ports, the terms "Local" and
|
||
"Remote" are used for policy rules (replacing source and
|
||
destination). "Local" refers to the entity being protected by an
|
||
IPsec implementation, i.e., the "source" address/port of outbound
|
||
packets or the "destination" address/port of inbound packets.
|
||
"Remote" refers to a peer entity or peer entities. The terms
|
||
"source" and "destination" are still used for packet header fields.
|
||
|
||
14. Acknowledgements
|
||
|
||
The authors would like to acknowledge the contributions of Ran
|
||
Atkinson, who played a critical role in initial IPsec activities, and
|
||
who authored the first series of IPsec standards: RFCs 1825-1827; and
|
||
Charlie Lynn, who made significant contributions to the second series
|
||
of IPsec standards (RFCs 2401, 2402, and 2406) and to the current
|
||
versions, especially with regard to IPv6 issues. The authors also
|
||
would like to thank the members of the IPsec and MSEC working groups
|
||
who have contributed to the development of this protocol
|
||
specification.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 75]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Appendix A: Glossary
|
||
|
||
This section provides definitions for several key terms that are
|
||
employed in this document. Other documents provide additional
|
||
definitions and background information relevant to this technology,
|
||
e.g., [Shi00], [VK83], and [HA94]. Included in this glossary are
|
||
generic security service and security mechanism terms, plus
|
||
IPsec-specific terms.
|
||
|
||
Access Control
|
||
A security service that prevents unauthorized use of a resource,
|
||
including the prevention of use of a resource in an unauthorized
|
||
manner. In the IPsec context, the resource to which access is
|
||
being controlled is often:
|
||
|
||
o for a host, computing cycles or data
|
||
o for a security gateway, a network behind the gateway
|
||
or bandwidth on that network.
|
||
|
||
Anti-replay
|
||
See "Integrity" below.
|
||
|
||
Authentication
|
||
Used informally to refer to the combination of two nominally
|
||
distinct security services, data origin authentication and
|
||
connectionless integrity. See the definitions below for each of
|
||
these services.
|
||
|
||
Availability
|
||
When viewed as a security service, addresses the security concerns
|
||
engendered by attacks against networks that deny or degrade
|
||
service. For example, in the IPsec context, the use of
|
||
anti-replay mechanisms in AH and ESP support availability.
|
||
|
||
Confidentiality
|
||
The security service that protects data from unauthorized
|
||
disclosure. The primary confidentiality concern in most instances
|
||
is unauthorized disclosure of application-level data, but
|
||
disclosure of the external characteristics of communication also
|
||
can be a concern in some circumstances. Traffic flow
|
||
confidentiality is the service that addresses this latter concern
|
||
by concealing source and destination addresses, message length, or
|
||
frequency of communication. In the IPsec context, using ESP in
|
||
tunnel mode, especially at a security gateway, can provide some
|
||
level of traffic flow confidentiality. (See also "Traffic
|
||
Analysis" below.)
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 76]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Data Origin Authentication
|
||
A security service that verifies the identity of the claimed
|
||
source of data. This service is usually bundled with
|
||
connectionless integrity service.
|
||
|
||
Encryption
|
||
A security mechanism used to transform data from an intelligible
|
||
form (plaintext) into an unintelligible form (ciphertext), to
|
||
provide confidentiality. The inverse transformation process is
|
||
designated "decryption". Often the term "encryption" is used to
|
||
generically refer to both processes.
|
||
|
||
Integrity
|
||
A security service that ensures that modifications to data are
|
||
detectable. Integrity comes in various flavors to match
|
||
application requirements. IPsec supports two forms of integrity:
|
||
connectionless and a form of partial sequence integrity.
|
||
Connectionless integrity is a service that detects modification of
|
||
an individual IP datagram, without regard to the ordering of the
|
||
datagram in a stream of traffic. The form of partial sequence
|
||
integrity offered in IPsec is referred to as anti-replay
|
||
integrity, and it detects arrival of duplicate IP datagrams
|
||
(within a constrained window). This is in contrast to
|
||
connection-oriented integrity, which imposes more stringent
|
||
sequencing requirements on traffic, e.g., to be able to detect
|
||
lost or re-ordered messages. Although authentication and
|
||
integrity services often are cited separately, in practice they
|
||
are intimately connected and almost always offered in tandem.
|
||
|
||
Protected vs. Unprotected
|
||
"Protected" refers to the systems or interfaces that are inside
|
||
the IPsec protection boundary, and "unprotected" refers to the
|
||
systems or interfaces that are outside the IPsec protection
|
||
boundary. IPsec provides a boundary through which traffic passes.
|
||
There is an asymmetry to this barrier, which is reflected in the
|
||
processing model. Outbound data, if not discarded or bypassed, is
|
||
protected via the application of AH or ESP and the addition of the
|
||
corresponding headers. Inbound data, if not discarded or
|
||
bypassed, is processed via the removal of AH or ESP headers. In
|
||
this document, inbound traffic enters an IPsec implementation from
|
||
the "unprotected" interface. Outbound traffic enters the
|
||
implementation via the "protected" interface, or is internally
|
||
generated by the implementation on the "protected" side of the
|
||
boundary and directed toward the "unprotected" interface. An
|
||
IPsec implementation may support more than one interface on either
|
||
or both sides of the boundary. The protected interface may be
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 77]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
internal, e.g., in a host implementation of IPsec. The protected
|
||
interface may link to a socket layer interface presented by the
|
||
OS.
|
||
|
||
Security Association (SA)
|
||
A simplex (uni-directional) logical connection, created for
|
||
security purposes. All traffic traversing an SA is provided the
|
||
same security processing. In IPsec, an SA is an Internet-layer
|
||
abstraction implemented through the use of AH or ESP. State data
|
||
associated with an SA is represented in the SA Database (SAD).
|
||
|
||
Security Gateway
|
||
An intermediate system that acts as the communications interface
|
||
between two networks. The set of hosts (and networks) on the
|
||
external side of the security gateway is termed unprotected (they
|
||
are generally at least less protected than those "behind" the SG),
|
||
while the networks and hosts on the internal side are viewed as
|
||
protected. The internal subnets and hosts served by a security
|
||
gateway are presumed to be trusted by virtue of sharing a common,
|
||
local, security administration. In the IPsec context, a security
|
||
gateway is a point at which AH and/or ESP is implemented in order
|
||
to serve a set of internal hosts, providing security services for
|
||
these hosts when they communicate with external hosts also
|
||
employing IPsec (either directly or via another security gateway).
|
||
|
||
Security Parameters Index (SPI)
|
||
An arbitrary 32-bit value that is used by a receiver to identify
|
||
the SA to which an incoming packet should be bound. For a unicast
|
||
SA, the SPI can be used by itself to specify an SA, or it may be
|
||
used in conjunction with the IPsec protocol type. Additional IP
|
||
address information is used to identify multicast SAs. The SPI is
|
||
carried in AH and ESP protocols to enable the receiving system to
|
||
select the SA under which a received packet will be processed. An
|
||
SPI has only local significance, as defined by the creator of the
|
||
SA (usually the receiver of the packet carrying the SPI); thus an
|
||
SPI is generally viewed as an opaque bit string. However, the
|
||
creator of an SA may choose to interpret the bits in an SPI to
|
||
facilitate local processing.
|
||
|
||
Traffic Analysis
|
||
The analysis of network traffic flow for the purpose of deducing
|
||
information that is useful to an adversary. Examples of such
|
||
information are frequency of transmission, the identities of the
|
||
conversing parties, sizes of packets, and flow identifiers
|
||
[Sch94].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 78]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Appendix B: Decorrelation
|
||
|
||
This appendix is based on work done for caching of policies in the IP
|
||
Security Policy Working Group by Luis Sanchez, Matt Condell, and John
|
||
Zao.
|
||
|
||
Two SPD entries are correlated if there is a non-null intersection
|
||
between the values of corresponding selectors in each entry. Caching
|
||
correlated SPD entries can lead to incorrect policy enforcement. A
|
||
solution to this problem, which still allows for caching, is to
|
||
remove the ambiguities by decorrelating the entries. That is, the
|
||
SPD entries must be rewritten so that for every pair of entries there
|
||
exists a selector for which there is a null intersection between the
|
||
values in both of the entries. Once the entries are decorrelated,
|
||
there is no longer any ordering requirement on them, since only one
|
||
entry will match any lookup. The next section describes
|
||
decorrelation in more detail and presents an algorithm that may be
|
||
used to implement decorrelation.
|
||
|
||
B.1. Decorrelation Algorithm
|
||
|
||
The basic decorrelation algorithm takes each entry in a correlated
|
||
SPD and divides it into a set of entries using a tree structure.
|
||
The nodes of the tree are the selectors that may overlap between the
|
||
policies. At each node, the algorithm creates a branch for each of
|
||
the values of the selector. It also creates one branch for the
|
||
complement of the union of all selector values. Policies are then
|
||
formed by traversing the tree from the root to each leaf. The
|
||
policies at the leaves are compared to the set of already
|
||
decorrelated policy rules. Each policy at a leaf is either
|
||
completely overridden by a policy in the already decorrelated set and
|
||
is discarded or is decorrelated with all the policies in the
|
||
decorrelated set and is added to it.
|
||
|
||
The basic algorithm does not guarantee an optimal set of decorrelated
|
||
entries. That is, the entries may be broken up into smaller sets
|
||
than is necessary, though they will still provide all the necessary
|
||
policy information. Some extensions to the basic algorithm are
|
||
described later to improve this and improve the performance of the
|
||
algorithm.
|
||
|
||
C A set of ordered, correlated entries (a correlated SPD).
|
||
Ci The ith entry in C.
|
||
U The set of decorrelated entries being built from C.
|
||
Ui The ith entry in U.
|
||
Sik The kth selection for policy Ci.
|
||
Ai The action for policy Ci.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 79]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
A policy (SPD entry) P may be expressed as a sequence of selector
|
||
values and an action (BYPASS, DISCARD, or PROTECT):
|
||
|
||
Ci = Si1 x Si2 x ... x Sik -> Ai
|
||
|
||
1) Put C1 in set U as U1
|
||
|
||
For each policy Cj (j > 1) in C
|
||
|
||
2) If Cj is decorrelated with every entry in U, then add it to U.
|
||
|
||
3) If Cj is correlated with one or more entries in U, create a tree
|
||
rooted at the policy Cj that partitions Cj into a set of decorrelated
|
||
entries. The algorithm starts with a root node where no selectors
|
||
have yet been chosen.
|
||
|
||
A) Choose a selector in Cj, Sjn, that has not yet been chosen when
|
||
traversing the tree from the root to this node. If there are no
|
||
selectors not yet used, continue to the next unfinished branch
|
||
until all branches have been completed. When the tree is
|
||
completed, go to step D.
|
||
|
||
T is the set of entries in U that are correlated with the entry
|
||
at this node.
|
||
|
||
The entry at this node is the entry formed by the selector
|
||
values of each of the branches between the root and this node.
|
||
Any selector values that are not yet represented by branches
|
||
assume the corresponding selector value in Cj, since the values
|
||
in Cj represent the maximum value for each selector.
|
||
|
||
B) Add a branch to the tree for each value of the selector Sjn that
|
||
appears in any of the entries in T. (If the value is a superset
|
||
of the value of Sjn in Cj, then use the value in Cj, since that
|
||
value represents the universal set.) Also add a branch for the
|
||
complement of the union of all the values of the selector Sjn
|
||
in T. When taking the complement, remember that the universal
|
||
set is the value of Sjn in Cj. A branch need not be created
|
||
for the null set.
|
||
|
||
C) Repeat A and B until the tree is completed.
|
||
|
||
D) The entry to each leaf now represents an entry that is a subset
|
||
of Cj. The entries at the leaves completely partition Cj in
|
||
such a way that each entry is either completely overridden by
|
||
an entry in U, or is decorrelated with the entries in U.
|
||
|
||
Add all the decorrelated entries at the leaves of the tree to U.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 80]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
4) Get next Cj and go to 2.
|
||
|
||
5) When all entries in C have been processed, then U will contain an
|
||
decorrelated version of C.
|
||
|
||
There are several optimizations that can be made to this algorithm.
|
||
A few of them are presented here.
|
||
|
||
It is possible to optimize, or at least improve, the amount of
|
||
branching that occurs by carefully choosing the order of the
|
||
selectors used for the next branch. For example, if a selector Sjn
|
||
can be chosen so that all the values for that selector in T are equal
|
||
to or a superset of the value of Sjn in Cj, then only a single branch
|
||
needs to be created (since the complement will be null).
|
||
|
||
Branches of the tree do not have to proceed with the entire
|
||
decorrelation algorithm. For example, if a node represents an entry
|
||
that is decorrelated with all the entries in U, then there is no
|
||
reason to continue decorrelating that branch. Also, if a branch is
|
||
completely overridden by an entry in U, then there is no reason to
|
||
continue decorrelating the branch.
|
||
|
||
An additional optimization is to check to see if a branch is
|
||
overridden by one of the CORRELATED entries in set C that has already
|
||
been decorrelated. That is, if the branch is part of decorrelating
|
||
Cj, then check to see if it was overridden by an entry Cm, m < j.
|
||
This is a valid check, since all the entries Cm are already expressed
|
||
in U.
|
||
|
||
Along with checking if an entry is already decorrelated in step 2,
|
||
check if Cj is overridden by any entry in U. If it is, skip it since
|
||
it is not relevant. An entry x is overridden by another entry y if
|
||
every selector in x is equal to or a subset of the corresponding
|
||
selector in entry y.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 81]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Appendix C: ASN.1 for an SPD Entry
|
||
|
||
This appendix is included as an additional way to describe SPD
|
||
entries, as defined in Section 4.4.1. It uses ASN.1 syntax that has
|
||
been successfully compiled. This syntax is merely illustrative and
|
||
need not be employed in an implementation to achieve compliance. The
|
||
SPD description in Section 4.4.1 is normative.
|
||
|
||
SPDModule
|
||
|
||
{iso(1) org (3) dod (6) internet (1) security (5) mechanisms (5)
|
||
ipsec (8) asn1-modules (3) spd-module (1) }
|
||
|
||
DEFINITIONS IMPLICIT TAGS ::=
|
||
|
||
BEGIN
|
||
|
||
IMPORTS
|
||
RDNSequence FROM PKIX1Explicit88
|
||
{ iso(1) identified-organization(3)
|
||
dod(6) internet(1) security(5) mechanisms(5) pkix(7)
|
||
id-mod(0) id-pkix1-explicit(18) } ;
|
||
|
||
-- An SPD is a list of policies in decreasing order of preference
|
||
SPD ::= SEQUENCE OF SPDEntry
|
||
|
||
SPDEntry ::= CHOICE {
|
||
iPsecEntry IPsecEntry, -- PROTECT traffic
|
||
bypassOrDiscard [0] BypassOrDiscardEntry } -- DISCARD/BYPASS
|
||
|
||
IPsecEntry ::= SEQUENCE { -- Each entry consists of
|
||
name NameSets OPTIONAL,
|
||
pFPs PacketFlags, -- Populate from packet flags
|
||
-- Applies to ALL of the corresponding
|
||
-- traffic selectors in the SelectorLists
|
||
condition SelectorLists, -- Policy "condition"
|
||
processing Processing -- Policy "action"
|
||
}
|
||
|
||
BypassOrDiscardEntry ::= SEQUENCE {
|
||
bypass BOOLEAN, -- TRUE BYPASS, FALSE DISCARD
|
||
condition InOutBound }
|
||
|
||
InOutBound ::= CHOICE {
|
||
outbound [0] SelectorLists,
|
||
inbound [1] SelectorLists,
|
||
bothways [2] BothWays }
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 82]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
BothWays ::= SEQUENCE {
|
||
inbound SelectorLists,
|
||
outbound SelectorLists }
|
||
|
||
NameSets ::= SEQUENCE {
|
||
passed SET OF Names-R, -- Matched to IKE ID by
|
||
-- responder
|
||
local SET OF Names-I } -- Used internally by IKE
|
||
-- initiator
|
||
|
||
Names-R ::= CHOICE { -- IKEv2 IDs
|
||
dName RDNSequence, -- ID_DER_ASN1_DN
|
||
fqdn FQDN, -- ID_FQDN
|
||
rfc822 [0] RFC822Name, -- ID_RFC822_ADDR
|
||
keyID OCTET STRING } -- KEY_ID
|
||
|
||
Names-I ::= OCTET STRING -- Used internally by IKE
|
||
-- initiator
|
||
|
||
FQDN ::= IA5String
|
||
|
||
RFC822Name ::= IA5String
|
||
|
||
PacketFlags ::= BIT STRING {
|
||
-- if set, take selector value from packet
|
||
-- establishing SA
|
||
-- else use value in SPD entry
|
||
localAddr (0),
|
||
remoteAddr (1),
|
||
protocol (2),
|
||
localPort (3),
|
||
remotePort (4) }
|
||
|
||
SelectorLists ::= SET OF SelectorList
|
||
|
||
SelectorList ::= SEQUENCE {
|
||
localAddr AddrList,
|
||
remoteAddr AddrList,
|
||
protocol ProtocolChoice }
|
||
|
||
Processing ::= SEQUENCE {
|
||
extSeqNum BOOLEAN, -- TRUE 64 bit counter, FALSE 32 bit
|
||
seqOverflow BOOLEAN, -- TRUE rekey, FALSE terminate & audit
|
||
fragCheck BOOLEAN, -- TRUE stateful fragment checking,
|
||
-- FALSE no stateful fragment checking
|
||
lifetime SALifetime,
|
||
spi ManualSPI,
|
||
algorithms ProcessingAlgs,
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 83]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
tunnel TunnelOptions OPTIONAL } -- if absent, use
|
||
-- transport mode
|
||
|
||
SALifetime ::= SEQUENCE {
|
||
seconds [0] INTEGER OPTIONAL,
|
||
bytes [1] INTEGER OPTIONAL }
|
||
|
||
ManualSPI ::= SEQUENCE {
|
||
spi INTEGER,
|
||
keys KeyIDs }
|
||
|
||
KeyIDs ::= SEQUENCE OF OCTET STRING
|
||
|
||
ProcessingAlgs ::= CHOICE {
|
||
ah [0] IntegrityAlgs, -- AH
|
||
esp [1] ESPAlgs} -- ESP
|
||
|
||
ESPAlgs ::= CHOICE {
|
||
integrity [0] IntegrityAlgs, -- integrity only
|
||
confidentiality [1] ConfidentialityAlgs, -- confidentiality
|
||
-- only
|
||
both [2] IntegrityConfidentialityAlgs,
|
||
combined [3] CombinedModeAlgs }
|
||
|
||
IntegrityConfidentialityAlgs ::= SEQUENCE {
|
||
integrity IntegrityAlgs,
|
||
confidentiality ConfidentialityAlgs }
|
||
|
||
-- Integrity Algorithms, ordered by decreasing preference
|
||
IntegrityAlgs ::= SEQUENCE OF IntegrityAlg
|
||
|
||
-- Confidentiality Algorithms, ordered by decreasing preference
|
||
ConfidentialityAlgs ::= SEQUENCE OF ConfidentialityAlg
|
||
|
||
-- Integrity Algorithms
|
||
IntegrityAlg ::= SEQUENCE {
|
||
algorithm IntegrityAlgType,
|
||
parameters ANY -- DEFINED BY algorithm -- OPTIONAL }
|
||
|
||
IntegrityAlgType ::= INTEGER {
|
||
none (0),
|
||
auth-HMAC-MD5-96 (1),
|
||
auth-HMAC-SHA1-96 (2),
|
||
auth-DES-MAC (3),
|
||
auth-KPDK-MD5 (4),
|
||
auth-AES-XCBC-96 (5)
|
||
-- tbd (6..65535)
|
||
}
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 84]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
-- Confidentiality Algorithms
|
||
ConfidentialityAlg ::= SEQUENCE {
|
||
algorithm ConfidentialityAlgType,
|
||
parameters ANY -- DEFINED BY algorithm -- OPTIONAL }
|
||
|
||
ConfidentialityAlgType ::= INTEGER {
|
||
encr-DES-IV64 (1),
|
||
encr-DES (2),
|
||
encr-3DES (3),
|
||
encr-RC5 (4),
|
||
encr-IDEA (5),
|
||
encr-CAST (6),
|
||
encr-BLOWFISH (7),
|
||
encr-3IDEA (8),
|
||
encr-DES-IV32 (9),
|
||
encr-RC4 (10),
|
||
encr-NULL (11),
|
||
encr-AES-CBC (12),
|
||
encr-AES-CTR (13)
|
||
-- tbd (14..65535)
|
||
}
|
||
|
||
CombinedModeAlgs ::= SEQUENCE OF CombinedModeAlg
|
||
|
||
CombinedModeAlg ::= SEQUENCE {
|
||
algorithm CombinedModeType,
|
||
parameters ANY -- DEFINED BY algorithm} -- defined outside
|
||
-- of this document for AES modes.
|
||
|
||
CombinedModeType ::= INTEGER {
|
||
comb-AES-CCM (1),
|
||
comb-AES-GCM (2)
|
||
-- tbd (3..65535)
|
||
}
|
||
|
||
TunnelOptions ::= SEQUENCE {
|
||
dscp DSCP,
|
||
ecn BOOLEAN, -- TRUE Copy CE to inner header
|
||
df DF,
|
||
addresses TunnelAddresses }
|
||
|
||
TunnelAddresses ::= CHOICE {
|
||
ipv4 IPv4Pair,
|
||
ipv6 [0] IPv6Pair }
|
||
|
||
IPv4Pair ::= SEQUENCE {
|
||
local OCTET STRING (SIZE(4)),
|
||
remote OCTET STRING (SIZE(4)) }
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 85]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
IPv6Pair ::= SEQUENCE {
|
||
local OCTET STRING (SIZE(16)),
|
||
remote OCTET STRING (SIZE(16)) }
|
||
|
||
DSCP ::= SEQUENCE {
|
||
copy BOOLEAN, -- TRUE copy from inner header
|
||
-- FALSE do not copy
|
||
mapping OCTET STRING OPTIONAL} -- points to table
|
||
-- if no copy
|
||
|
||
DF ::= INTEGER {
|
||
clear (0),
|
||
set (1),
|
||
copy (2) }
|
||
|
||
ProtocolChoice::= CHOICE {
|
||
anyProt AnyProtocol, -- for ANY protocol
|
||
noNext [0] NoNextLayerProtocol, -- has no next layer
|
||
-- items
|
||
oneNext [1] OneNextLayerProtocol, -- has one next layer
|
||
-- item
|
||
twoNext [2] TwoNextLayerProtocol, -- has two next layer
|
||
-- items
|
||
fragment FragmentNoNext } -- has no next layer
|
||
-- info
|
||
|
||
AnyProtocol ::= SEQUENCE {
|
||
id INTEGER (0), -- ANY protocol
|
||
nextLayer AnyNextLayers }
|
||
|
||
AnyNextLayers ::= SEQUENCE { -- with either
|
||
first AnyNextLayer, -- ANY next layer selector
|
||
second AnyNextLayer } -- ANY next layer selector
|
||
|
||
NoNextLayerProtocol ::= INTEGER (2..254)
|
||
|
||
FragmentNoNext ::= INTEGER (44) -- Fragment identifier
|
||
|
||
OneNextLayerProtocol ::= SEQUENCE {
|
||
id INTEGER (1..254), -- ICMP, MH, ICMPv6
|
||
nextLayer NextLayerChoice } -- ICMP Type*256+Code
|
||
-- MH Type*256
|
||
|
||
TwoNextLayerProtocol ::= SEQUENCE {
|
||
id INTEGER (2..254), -- Protocol
|
||
local NextLayerChoice, -- Local and
|
||
remote NextLayerChoice } -- Remote ports
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 86]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
NextLayerChoice ::= CHOICE {
|
||
any AnyNextLayer,
|
||
opaque [0] OpaqueNextLayer,
|
||
range [1] NextLayerRange }
|
||
|
||
-- Representation of ANY in next layer field
|
||
AnyNextLayer ::= SEQUENCE {
|
||
start INTEGER (0),
|
||
end INTEGER (65535) }
|
||
|
||
-- Representation of OPAQUE in next layer field.
|
||
-- Matches IKE convention
|
||
OpaqueNextLayer ::= SEQUENCE {
|
||
start INTEGER (65535),
|
||
end INTEGER (0) }
|
||
|
||
-- Range for a next layer field
|
||
NextLayerRange ::= SEQUENCE {
|
||
start INTEGER (0..65535),
|
||
end INTEGER (0..65535) }
|
||
|
||
-- List of IP addresses
|
||
AddrList ::= SEQUENCE {
|
||
v4List IPv4List OPTIONAL,
|
||
v6List [0] IPv6List OPTIONAL }
|
||
|
||
-- IPv4 address representations
|
||
IPv4List ::= SEQUENCE OF IPv4Range
|
||
|
||
IPv4Range ::= SEQUENCE { -- close, but not quite right ...
|
||
ipv4Start OCTET STRING (SIZE (4)),
|
||
ipv4End OCTET STRING (SIZE (4)) }
|
||
|
||
-- IPv6 address representations
|
||
IPv6List ::= SEQUENCE OF IPv6Range
|
||
|
||
IPv6Range ::= SEQUENCE { -- close, but not quite right ...
|
||
ipv6Start OCTET STRING (SIZE (16)),
|
||
ipv6End OCTET STRING (SIZE (16)) }
|
||
|
||
END
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 87]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Appendix D: Fragment Handling Rationale
|
||
|
||
There are three issues that must be resolved regarding processing of
|
||
(plaintext) fragments in IPsec:
|
||
|
||
- mapping a non-initial, outbound fragment to the right SA
|
||
(or finding the right SPD entry)
|
||
- verifying that a received, non-initial fragment is authorized
|
||
for the SA via which it is received
|
||
- mapping outbound and inbound non-initial fragments to the
|
||
right SPD/cache entry, for BYPASS/DISCARD traffic
|
||
|
||
The first and third issues arise because we need a deterministic
|
||
algorithm for mapping traffic to SAs (and SPD/cache entries). All
|
||
three issues are important because we want to make sure that
|
||
non-initial fragments that cross the IPsec boundary do not cause the
|
||
access control policies in place at the receiver (or transmitter) to
|
||
be violated.
|
||
|
||
D.1. Transport Mode and Fragments
|
||
|
||
First, we note that transport mode SAs have been defined to not carry
|
||
fragments. This is a carryover from RFC 2401, where transport mode
|
||
SAs always terminated at endpoints. This is a fundamental
|
||
requirement because, in the worst case, an IPv4 fragment to which
|
||
IPsec was applied might then be fragmented (as a ciphertext packet),
|
||
en route to the destination. IP fragment reassembly procedures at
|
||
the IPsec receiver would not be able to distinguish between pre-IPsec
|
||
fragments and fragments created after IPsec processing.
|
||
|
||
For IPv6, only the sender is allowed to fragment a packet. As for
|
||
IPv4, an IPsec implementation is allowed to fragment tunnel mode
|
||
packets after IPsec processing, because it is the sender relative to
|
||
the (outer) tunnel header. However, unlike IPv4, it would be
|
||
feasible to carry a plaintext fragment on a transport mode SA,
|
||
because the fragment header in IPv6 would appear after the AH or ESP
|
||
header, and thus would not cause confusion at the receiver with
|
||
respect to reassembly. Specifically, the receiver would not attempt
|
||
reassembly for the fragment until after IPsec processing. To keep
|
||
things simple, this specification prohibits carriage of fragments on
|
||
transport mode SAs for IPv6 traffic.
|
||
|
||
When only end systems used transport mode SAs, the prohibition on
|
||
carriage of fragments was not a problem, since we assumed that the
|
||
end system could be configured to not offer a fragment to IPsec. For
|
||
a native host implementation, this seems reasonable, and, as someone
|
||
already noted, RFC 2401 warned that a BITS implementation might have
|
||
to reassemble fragments before performing an SA lookup. (It would
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 88]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
then apply AH or ESP and could re-fragment the packet after IPsec
|
||
processing.) Because a BITS implementation is assumed to be able to
|
||
have access to all traffic emanating from its host, even if the host
|
||
has multiple interfaces, this was deemed a reasonable mandate.
|
||
|
||
In this specification, it is acceptable to use transport mode in
|
||
cases where the IPsec implementation is not the ultimate destination,
|
||
e.g., between two SGs. In principle, this creates a new opportunity
|
||
for outbound, plaintext fragments to be mapped to a transport mode SA
|
||
for IPsec processing. However, in these new contexts in which a
|
||
transport mode SA is now approved for use, it seems likely that we
|
||
can continue to prohibit transmission of fragments, as seen by IPsec,
|
||
i.e., packets that have an "outer header" with a non-zero fragment
|
||
offset field. For example, in an IP overlay network, packets being
|
||
sent over transport mode SAs are IP-in-IP tunneled and thus have the
|
||
necessary inner header to accommodate fragmentation prior to IPsec
|
||
processing. When carried via a transport mode SA, IPsec would not
|
||
examine the inner IP header for such traffic, and thus would not
|
||
consider the packet to be a fragment.
|
||
|
||
D.2. Tunnel Mode and Fragments
|
||
|
||
For tunnel mode SAs, it has always been the case that outbound
|
||
fragments might arrive for processing at an IPsec implementation.
|
||
The need to accommodate fragmented outbound packets can pose a
|
||
problem because a non-initial fragment generally will not contain the
|
||
port fields associated with a next layer protocol such as TCP, UDP,
|
||
or SCTP. Thus, depending on the SPD configuration for a given IPsec
|
||
implementation, plaintext fragments might or might not pose a
|
||
problem.
|
||
|
||
For example, if the SPD requires that all traffic between two address
|
||
ranges is offered IPsec protection (no BYPASS or DISCARD SPD entries
|
||
apply to this address range), then it should be easy to carry
|
||
non-initial fragments on the SA defined for this address range, since
|
||
the SPD entry implies an intent to carry ALL traffic between the
|
||
address ranges. But, if there are multiple SPD entries that could
|
||
match a fragment, and if these entries reference different subsets of
|
||
port fields (vs. ANY), then it is not possible to map an outbound
|
||
non-initial fragment to the right entry, unambiguously. (If we choose
|
||
to allow carriage of fragments on transport mode SAs for IPv6, the
|
||
problems arises in that context as well.)
|
||
|
||
This problem largely, though not exclusively, motivated the
|
||
definition of OPAQUE as a selector value for port fields in RFC 2401.
|
||
The other motivation for OPAQUE is the observation that port fields
|
||
might not be accessible due to the prior application of IPsec. For
|
||
example, if a host applied IPsec to its traffic and that traffic
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 89]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
arrived at an SG, these fields would be encrypted. The algorithm
|
||
specified for locating the "next layer protocol" described in RFC
|
||
2401 also motivated use of OPAQUE to accommodate an encrypted next
|
||
layer protocol field in such circumstances. Nonetheless, the primary
|
||
use of the OPAQUE value was to match traffic selector fields in
|
||
packets that did not contain port fields (non-initial fragments), or
|
||
packets in which the port fields were already encrypted (as a result
|
||
of nested application of IPsec). RFC 2401 was ambiguous in
|
||
discussing the use of OPAQUE vs. ANY, suggesting in some places that
|
||
ANY might be an alternative to OPAQUE.
|
||
|
||
We gain additional access control capability by defining both ANY and
|
||
OPAQUE values. OPAQUE can be defined to match only fields that are
|
||
not accessible. We could define ANY as the complement of OPAQUE,
|
||
i.e., it would match all values but only for accessible port fields.
|
||
We have therefore simplified the procedure employed to locate the
|
||
next layer protocol in this document, so that we treat ESP and AH as
|
||
next layer protocols. As a result, the notion of an encrypted next
|
||
layer protocol field has vanished, and there is also no need to worry
|
||
about encrypted port fields either. And accordingly, OPAQUE will be
|
||
applicable only to non-initial fragments.
|
||
|
||
Since we have adopted the definitions above for ANY and OPAQUE, we
|
||
need to clarify how these values work when the specified protocol
|
||
does not have port fields, and when ANY is used for the protocol
|
||
selector. Accordingly, if a specific protocol value is used as a
|
||
selector, and if that protocol has no port fields, then the port
|
||
field selectors are to be ignored and ANY MUST be specified as the
|
||
value for the port fields. (In this context, ICMP TYPE and CODE
|
||
values are lumped together as a single port field (for IKEv2
|
||
negotiation), as is the IPv6 Mobility Header TYPE value.) If the
|
||
protocol selector is ANY, then this should be treated as equivalent
|
||
to specifying a protocol for which no port fields are defined, and
|
||
thus the port selectors should be ignored, and MUST be set to ANY.
|
||
|
||
D.3. The Problem of Non-Initial Fragments
|
||
|
||
For an SG implementation, it is obvious that fragments might arrive
|
||
from end systems behind the SG. A BITW implementation also may
|
||
encounter fragments from a host or gateway behind it. (As noted
|
||
earlier, native host implementations and BITS implementations
|
||
probably can avoid the problems described below.) In the worst case,
|
||
fragments from a packet might arrive at distinct BITW or SG
|
||
instantiations and thus preclude reassembly as a solution option.
|
||
Hence, in RFC 2401 we adopted a general requirement that fragments
|
||
must be accommodated in tunnel mode for all implementations. However,
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 90]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
RFC 2401 did not provide a perfect solution. The use of OPAQUE as a
|
||
selector value for port fields (a SHOULD in RFC 2401) allowed an SA
|
||
to carry non-initial fragments.
|
||
|
||
Using the features defined in RFC 2401, if one defined an SA between
|
||
two IPsec (SG or BITW) implementations using the OPAQUE value for
|
||
both port fields, then all non-initial fragments matching the
|
||
source/destination (S/D) address and protocol values for the SA would
|
||
be mapped to that SA. Initial fragments would NOT map to this SA, if
|
||
we adopt a strict definition of OPAQUE. However, RFC 2401 did not
|
||
provide detailed guidance on this and thus it may not have been
|
||
apparent that use of this feature would essentially create a
|
||
"non-initial fragment only" SA.
|
||
|
||
In the course of discussing the "fragment-only" SA approach, it was
|
||
noted that some subtle problems, problems not considered in RFC 2401,
|
||
would have to be avoided. For example, an SA of this sort must be
|
||
configured to offer the "highest quality" security services for any
|
||
traffic between the indicated S/D addresses (for the specified
|
||
protocol). This is necessary to ensure that any traffic captured by
|
||
the fragment-only SA is not offered degraded security relative to
|
||
what it would have been offered if the packet were not fragmented. A
|
||
possible problem here is that we may not be able to identify the
|
||
"highest quality" security services defined for use between two IPsec
|
||
implementation, since the choice of security protocols, options, and
|
||
algorithms is a lattice, not a totally ordered set. (We might safely
|
||
say that BYPASS < AH < ESP w/integrity, but it gets complicated if we
|
||
have multiple ESP encryption or integrity algorithm options.) So, one
|
||
has to impose a total ordering on these security parameters to make
|
||
this work, but this can be done locally.
|
||
|
||
However, this conservative strategy has a possible performance
|
||
downside. If most traffic traversing an IPsec implementation for a
|
||
given S/D address pair (and specified protocol) is bypassed, then a
|
||
fragment-only SA for that address pair might cause a dramatic
|
||
increase in the volume of traffic afforded crypto processing. If the
|
||
crypto implementation cannot support high traffic rates, this could
|
||
cause problems. (An IPsec implementation that is capable of line rate
|
||
or near line rate crypto performance would not be adversely affected
|
||
by this SA configuration approach. Nonetheless, the performance
|
||
impact is a potential concern, specific to implementation
|
||
capabilities.)
|
||
|
||
Another concern is that non-initial fragments sent over a dedicated
|
||
SA might be used to effect overlapping reassembly attacks, when
|
||
combined with an apparently acceptable initial fragment. (This sort
|
||
of attack assumes creation of bogus fragments and is not a side
|
||
effect of normal fragmentation.) This concern is easily addressed in
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 91]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
IPv4, by checking the fragment offset value to ensure that no
|
||
non-initial fragments have a small enough offset to overlap port
|
||
fields that should be contained in the initial fragment. Recall that
|
||
the IPv4 MTU minimum is 576 bytes, and the max IP header length is 60
|
||
bytes, so any ports should be present in the initial fragment. If we
|
||
require all non-initial fragments to have an offset of, say, 128 or
|
||
greater, just to be on the safe side, this should prevent successful
|
||
attacks of this sort. If the intent is only to protect against this
|
||
sort of reassembly attack, this check need be implemented only by a
|
||
receiver.
|
||
|
||
IPv6 also has a fragment offset, carried in the fragmentation
|
||
extension header. However, IPv6 extension headers are variable in
|
||
length and there is no analogous max header length value that we can
|
||
use to check non-initial fragments, to reject ones that might be used
|
||
for an attack of the sort noted above. A receiver would need to
|
||
maintain state analogous to reassembly state, to provide equivalent
|
||
protection. So, only for IPv4 is it feasible to impose a fragment
|
||
offset check that would reject attacks designed to circumvent port
|
||
field checks by IPsec (or firewalls) when passing non-initial
|
||
fragments.
|
||
|
||
Another possible concern is that in some topologies and SPD
|
||
configurations this approach might result in an access control
|
||
surprise. The notion is that if we create an SA to carry ALL
|
||
(non-initial) fragments, then that SA would carry some traffic that
|
||
might otherwise arrive as plaintext via a separate path, e.g., a path
|
||
monitored by a proxy firewall. But, this concern arises only if the
|
||
other path allows initial fragments to traverse it without requiring
|
||
reassembly, presumably a bad idea for a proxy firewall. Nonetheless,
|
||
this does represent a potential problem in some topologies and under
|
||
certain assumptions with respect to SPD and (other) firewall rule
|
||
sets, and administrators need to be warned of this possibility.
|
||
|
||
A less serious concern is that non-initial fragments sent over a
|
||
non-initial fragment-only SA might represent a DoS opportunity, in
|
||
that they could be sent when no valid, initial fragment will ever
|
||
arrive. This might be used to attack hosts behind an SG or BITW
|
||
device. However, the incremental risk posed by this sort of attack,
|
||
which can be mounted only by hosts behind an SG or BITW device, seems
|
||
small.
|
||
|
||
If we interpret the ANY selector value as encompassing OPAQUE, then a
|
||
single SA with ANY values for both port fields would be able to
|
||
accommodate all traffic matching the S/D address and protocol traffic
|
||
selectors, an alternative to using the OPAQUE value. But, using ANY
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 92]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
here precludes multiple, distinct SAs between the same IPsec
|
||
implementations for the same address pairs and protocol. So, it is
|
||
not an exactly equivalent alternative.
|
||
|
||
Fundamentally, fragment handling problems arise only when more than
|
||
one SA is defined with the same S/D address and protocol selector
|
||
values, but with different port field selector values.
|
||
|
||
D.4. BYPASS/DISCARD Traffic
|
||
|
||
We also have to address the non-initial fragment processing issue for
|
||
BYPASS/DISCARD entries, independent of SA processing. This is
|
||
largely a local matter for two reasons:
|
||
|
||
1) We have no means for coordinating SPD entries for such
|
||
traffic between IPsec implementations since IKE is not
|
||
invoked.
|
||
2) Many of these entries refer to traffic that is NOT
|
||
directed to or received from a location that is using
|
||
IPsec. So there is no peer IPsec implementation with
|
||
which to coordinate via any means.
|
||
|
||
However, this document should provide guidance here, consistent with
|
||
our goal of offering a well-defined, access control function for all
|
||
traffic, relative to the IPsec boundary. To that end, this document
|
||
says that implementations MUST support fragment reassembly for
|
||
BYPASS/DISCARD traffic when port fields are specified. An
|
||
implementation also MUST permit a user or administrator to accept
|
||
such traffic or reject such traffic using the SPD conventions
|
||
described in Section 4.4.1. The concern is that BYPASS of a
|
||
cleartext, non-initial fragment arriving at an IPsec implementation
|
||
could undermine the security afforded IPsec-protected traffic
|
||
directed to the same destination. For example, consider an IPsec
|
||
implementation configured with an SPD entry that calls for
|
||
IPsec-protection of traffic between a specific source/destination
|
||
address pair, and for a specific protocol and destination port, e.g.,
|
||
TCP traffic on port 23 (Telnet). Assume that the implementation also
|
||
allows BYPASS of traffic from the same source/destination address
|
||
pair and protocol, but for a different destination port, e.g., port
|
||
119 (NNTP). An attacker could send a non-initial fragment (with a
|
||
forged source address) that, if bypassed, could overlap with
|
||
IPsec-protected traffic from the same source and thus violate the
|
||
integrity of the IPsec-protected traffic. Requiring stateful
|
||
fragment checking for BYPASS entries with non-trivial port ranges
|
||
prevents attacks of this sort.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 93]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
D.5. Just say no to ports?
|
||
|
||
It has been suggested that we could avoid the problems described
|
||
above by not allowing port field selectors to be used in tunnel mode.
|
||
But the discussion above shows this to be an unnecessarily stringent
|
||
approach, i.e., since no problems arise for the native OS and BITS
|
||
implementations. Moreover, some WG members have described scenarios
|
||
where use of tunnel mode SAs with (non-trivial) port field selectors
|
||
is appropriate. So the challenge is defining a strategy that can
|
||
deal with this problem in BITW and SG contexts. Also note that
|
||
BYPASS/DISCARD entries in the SPD that make use of ports pose the
|
||
same problems, irrespective of tunnel vs. transport mode notions.
|
||
|
||
Some folks have suggested that a firewall behind an SG or BITW should
|
||
be left to enforce port-level access controls and the effects of
|
||
fragmentation. However, this seems to be an incongruous suggestion
|
||
in that elsewhere in IPsec (e.g., in IKE payloads) we are concerned
|
||
about firewalls that always discard fragments. If many firewalls
|
||
don't pass fragments in general, why should we expect them to deal
|
||
with fragments in this case? So, this analysis rejects the suggestion
|
||
of disallowing use of port field selectors with tunnel mode SAs.
|
||
|
||
D.6. Other Suggested Solutions
|
||
|
||
One suggestion is to reassemble fragments at the sending IPsec
|
||
implementation, and thus avoid the problem entirely. This approach
|
||
is invisible to a receiver and thus could be adopted as a purely
|
||
local implementation option.
|
||
|
||
A more sophisticated version of this suggestion calls for
|
||
establishing and maintaining minimal state from each initial fragment
|
||
encountered, to allow non-initial fragments to be matched to the
|
||
right SAs or SPD/cache entries. This implies an extension to the
|
||
current processing model (and the old one). The IPsec implementation
|
||
would intercept all fragments; capture Source/Destination IP
|
||
addresses, protocol, packet ID, and port fields from initial
|
||
fragments; and then use this data to map non-initial fragments to SAs
|
||
that require port fields. If this approach is employed, the receiver
|
||
needs to employ an equivalent scheme, as it too must verify that
|
||
received fragments are consistent with SA selector values. A
|
||
non-initial fragment that arrives prior to an initial fragment could
|
||
be cached or discarded, awaiting arrival of the corresponding initial
|
||
fragment.
|
||
|
||
A downside of both approaches noted above is that they will not
|
||
always work. When a BITW device or SG is configured in a topology
|
||
that might allow some fragments for a packet to be processed at
|
||
different SGs or BITW devices, then there is no guarantee that all
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 94]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
fragments will ever arrive at the same IPsec device. This approach
|
||
also raises possible processing problems. If the sender caches
|
||
non-initial fragments until the corresponding initial fragment
|
||
arrives, buffering problems might arise, especially at high speeds.
|
||
If the non-initial fragments are discarded rather than cached, there
|
||
is no guarantee that traffic will ever pass, e.g., retransmission
|
||
will result in different packet IDs that cannot be matched with prior
|
||
transmissions. In any case, housekeeping procedures will be needed
|
||
to decide when to delete the fragment state data, adding some
|
||
complexity to the system. Nonetheless, this is a viable solution in
|
||
some topologies, and these are likely to be common topologies.
|
||
|
||
The Working Group rejected an earlier version of the convention of
|
||
creating an SA to carry only non-initial fragments, something that
|
||
was supported implicitly under the RFC 2401 model via use of OPAQUE
|
||
port fields, but never clearly articulated in RFC 2401. The
|
||
(rejected) text called for each non-initial fragment to be treated as
|
||
protocol 44 (the IPv6 fragment header protocol ID) by the sender and
|
||
receiver. This approach has the potential to make IPv4 and IPv6
|
||
fragment handling more uniform, but it does not fundamentally change
|
||
the problem, nor does it address the issue of fragment handling for
|
||
BYPASS/DISCARD traffic. Given the fragment overlap attack problem
|
||
that IPv6 poses, it does not seem that it is worth the effort to
|
||
adopt this strategy.
|
||
|
||
D.7. Consistency
|
||
|
||
Earlier, the WG agreed to allow an IPsec BITS, BITW, or SG to perform
|
||
fragmentation prior to IPsec processing. If this fragmentation is
|
||
performed after SA lookup at the sender, there is no "mapping to the
|
||
right SA" problem. But, the receiver still needs to be able to
|
||
verify that the non-initial fragments are consistent with the SA via
|
||
which they are received. Since the initial fragment might be lost en
|
||
route, the receiver encounters all of the potential problems noted
|
||
above. Thus, if we are to be consistent in our decisions, we need to
|
||
say how a receiver will deal with the non-initial fragments that
|
||
arrive.
|
||
|
||
D.8. Conclusions
|
||
|
||
There is no simple, uniform way to handle fragments in all contexts.
|
||
Different approaches work better in different contexts. Thus, this
|
||
document offers 3 choices -- one MUST and two MAYs. At some point in
|
||
the future, if the community gains experience with the two MAYs, they
|
||
may become SHOULDs or MUSTs or other approaches may be proposed.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 95]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Appendix E: Example of Supporting Nested SAs via SPD and Forwarding
|
||
Table Entries
|
||
|
||
This appendix provides an example of how to configure the SPD and
|
||
forwarding tables to support a nested pair of SAs, consistent with
|
||
the new processing model. For simplicity, this example assumes just
|
||
one SPD-I.
|
||
|
||
The goal in this example is to support a transport mode SA from A to
|
||
C, carried over a tunnel mode SA from A to B. For example, A might
|
||
be a laptop connected to the public Internet, B might be a firewall
|
||
that protects a corporate network, and C might be a server on the
|
||
corporate network that demands end-to-end authentication of A's
|
||
traffic.
|
||
|
||
+---+ +---+ +---+
|
||
| A |=====| B | | C |
|
||
| |------------| |
|
||
| |=====| | | |
|
||
+---+ +---+ +---+
|
||
|
||
A's SPD contains entries of the form:
|
||
|
||
Next Layer
|
||
Rule Local Remote Protocol Action
|
||
---- ----- ------ ---------- -----------------------
|
||
1 C A ESP BYPASS
|
||
2 A C ICMP,ESP PROTECT(ESP,tunnel,integr+conf)
|
||
3 A C ANY PROTECT(ESP,transport,integr-only)
|
||
4 A B ICMP,IKE BYPASS
|
||
|
||
A's unprotected-side forwarding table is set so that outbound packets
|
||
destined for C are looped back to the protected side. A's
|
||
protected-side forwarding table is set so that inbound ESP packets
|
||
are looped back to the unprotected side. A's forwarding tables
|
||
contain entries of the form:
|
||
|
||
Unprotected-side forwarding table
|
||
|
||
Rule Local Remote Protocol Action
|
||
---- ----- ------ -------- ---------------------------
|
||
1 A C ANY loop back to protected side
|
||
2 A B ANY forward to B
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 96]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Protected-side forwarding table
|
||
|
||
Rule Local Remote Protocol Action
|
||
---- ----- ------ -------- -----------------------------
|
||
1 A C ESP loop back to unprotected side
|
||
|
||
An outbound TCP packet from A to C would match SPD rule 3 and have
|
||
transport mode ESP applied to it. The unprotected-side forwarding
|
||
table would then loop back the packet. The packet is compared
|
||
against SPD-I (see Figure 2), matches SPD rule 1, and so it is
|
||
BYPASSed. The packet is treated as an outbound packet and compared
|
||
against the SPD for a third time. This time it matches SPD rule 2,
|
||
so ESP is applied in tunnel mode. This time the forwarding table
|
||
doesn't loop back the packet, because the outer destination address
|
||
is B, so the packet goes out onto the wire.
|
||
|
||
An inbound TCP packet from C to A is wrapped in two ESP headers; the
|
||
outer header (ESP in tunnel mode) shows B as the source, whereas the
|
||
inner header (ESP transport mode) shows C as the source. Upon
|
||
arrival at A, the packet would be mapped to an SA based on the SPI,
|
||
have the outer header removed, and be decrypted and
|
||
integrity-checked. Then it would be matched against the SAD
|
||
selectors for this SA, which would specify C as the source and A as
|
||
the destination, derived from SPD rule 2. The protected-side
|
||
forwarding function would then send it back to the unprotected side
|
||
based on the addresses and the next layer protocol (ESP), indicative
|
||
of nesting. It is compared against SPD-O (see Figure 3) and found to
|
||
match SPD rule 1, so it is BYPASSed. The packet is mapped to an SA
|
||
based on the SPI, integrity-checked, and compared against the SAD
|
||
selectors derived from SPD rule 3. The forwarding function then
|
||
passes it up to the next layer, because it isn't an ESP packet.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 97]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
References
|
||
|
||
Normative References
|
||
|
||
[BBCDWW98] Blake, S., Black, D., Carlson, M., Davies, E., Wang,
|
||
Z., and W. Weiss, "An Architecture for Differentiated
|
||
Service", RFC 2475, December 1998.
|
||
|
||
[Bra97] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Level", BCP 14, RFC 2119, March 1997.
|
||
|
||
[CD98] Conta, A. and S. Deering, "Internet Control Message
|
||
Protocol (ICMPv6) for the Internet Protocol Version 6
|
||
(IPv6) Specification", RFC 2463, December 1998.
|
||
|
||
[DH98] Deering, S., and R. Hinden, "Internet Protocol,
|
||
Version 6 (IPv6) Specification", RFC 2460, December
|
||
1998.
|
||
|
||
[Eas05] 3rd Eastlake, D., "Cryptographic Algorithm
|
||
Implementation Requirements For Encapsulating Security
|
||
Payload (ESP) and Authentication Header (AH)", RFC
|
||
4305, December 2005.
|
||
|
||
[HarCar98] Harkins, D. and D. Carrel, "The Internet Key Exchange
|
||
(IKE)", RFC 2409, November 1998.
|
||
|
||
[Kau05] Kaufman, C., Ed., "The Internet Key Exchange (IKEv2)
|
||
Protocol", RFC 4306, December 2005.
|
||
|
||
[Ken05a] Kent, S., "IP Encapsulating Security Payload (ESP)",
|
||
RFC 4303, December 2005.
|
||
|
||
[Ken05b] Kent, S., "IP Authentication Header", RFC 4302,
|
||
December 2005.
|
||
|
||
[MD90] Mogul, J. and S. Deering, "Path MTU discovery", RFC
|
||
1191, November 1990.
|
||
|
||
[Mobip] Johnson, D., Perkins, C., and J. Arkko, "Mobility
|
||
Support in IPv6", RFC 3775, June 2004.
|
||
|
||
[Pos81a] Postel, J., "Internet Protocol", STD 5, RFC 791,
|
||
September 1981.
|
||
|
||
[Pos81b] Postel, J., "Internet Control Message Protocol", RFC
|
||
792, September 1981.
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 98]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
[Sch05] Schiller, J., "Cryptographic Algorithms for use in the
|
||
Internet Key Exchange Version 2 (IKEv2)", RFC 4307,
|
||
December 2005.
|
||
|
||
[WaKiHo97] Wahl, M., Kille, S., and T. Howes, "Lightweight
|
||
Directory Access Protocol (v3): UTF-8 String
|
||
Representation of Distinguished Names", RFC 2253,
|
||
December 1997.
|
||
|
||
Informative References
|
||
|
||
[CoSa04] Condell, M., and L. Sanchez, "On the Deterministic
|
||
Enforcement of Un-ordered Security Policies", BBN
|
||
Technical Memo 1346, March 2004.
|
||
|
||
[FaLiHaMeTr00] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P.
|
||
Traina, "Generic Routing Encapsulation (GRE)", RFC
|
||
2784, March 2000.
|
||
|
||
[Gro02] Grossman, D., "New Terminology and Clarifications for
|
||
Diffserv", RFC 3260, April 2002.
|
||
[HC03] Holbrook, H. and B. Cain, "Source Specific Multicast
|
||
for IP", Work in Progress, November 3, 2002.
|
||
|
||
[HA94] Haller, N. and R. Atkinson, "On Internet
|
||
Authentication", RFC 1704, October 1994.
|
||
|
||
[NiBlBaBL98] Nichols, K., Blake, S., Baker, F., and D. Black,
|
||
"Definition of the Differentiated Services Field (DS
|
||
Field) in the IPv4 and IPv6 Headers", RFC 2474,
|
||
December 1998.
|
||
|
||
[Per96] Perkins, C., "IP Encapsulation within IP", RFC 2003,
|
||
October 1996.
|
||
|
||
[RaFlBl01] Ramakrishnan, K., Floyd, S., and D. Black, "The
|
||
Addition of Explicit Congestion Notification (ECN) to
|
||
IP", RFC 3168, September 2001.
|
||
|
||
[RFC2401] Kent, S. and R. Atkinson, "Security Architecture for
|
||
the Internet Protocol", RFC 2401, November 1998.
|
||
|
||
[RFC2983] Black, D., "Differentiated Services and Tunnels", RFC
|
||
2983, October 2000.
|
||
|
||
[RFC3547] Baugher, M., Weis, B., Hardjono, T., and H. Harney,
|
||
"The Group Domain of Interpretation", RFC 3547, July
|
||
2003.
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 99]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
[RFC3740] Hardjono, T. and B. Weis, "The Multicast Group
|
||
Security Architecture", RFC 3740, March 2004.
|
||
|
||
[RaCoCaDe04] Rajahalme, J., Conta, A., Carpenter, B., and S.
|
||
Deering, "IPv6 Flow Label Specification", RFC 3697,
|
||
March 2004.
|
||
|
||
[Sch94] Schneier, B., Applied Cryptography, Section 8.6, John
|
||
Wiley & Sons, New York, NY, 1994.
|
||
|
||
[Shi00] Shirey, R., "Internet Security Glossary", RFC 2828,
|
||
May 2000.
|
||
|
||
[SMPT01] Shacham, A., Monsour, B., Pereira, R., and M. Thomas,
|
||
"IP Payload Compression Protocol (IPComp)", RFC 3173,
|
||
September 2001.
|
||
|
||
[ToEgWa04] Touch, J., Eggert, L., and Y. Wang, "Use of IPsec
|
||
Transport Mode for Dynamic Routing", RFC 3884,
|
||
September 2004.
|
||
|
||
[VK83] V.L. Voydock & S.T. Kent, "Security Mechanisms in
|
||
High-level Networks", ACM Computing Surveys, Vol. 15,
|
||
No. 2, June 1983.
|
||
|
||
Authors' Addresses
|
||
|
||
Stephen Kent
|
||
BBN Technologies
|
||
10 Moulton Street
|
||
Cambridge, MA 02138
|
||
USA
|
||
|
||
Phone: +1 (617) 873-3988
|
||
EMail: kent@bbn.com
|
||
|
||
|
||
Karen Seo
|
||
BBN Technologies
|
||
10 Moulton Street
|
||
Cambridge, MA 02138
|
||
USA
|
||
|
||
Phone: +1 (617) 873-3152
|
||
EMail: kseo@bbn.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 100]
|
||
|
||
RFC 4301 Security Architecture for IP December 2005
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2005).
|
||
|
||
This document is subject to the rights, licenses and restrictions
|
||
contained in BCP 78, and except as set forth therein, the authors
|
||
retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
this document or the extent to which any license under such rights
|
||
might or might not be available; nor does it represent that it has
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at ietf-
|
||
ipr@ietf.org.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kent & Seo Standards Track [Page 101]
|
||
|