One document matched: draft-blake-ipv6-flow-label-nonce-01.xml
<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
There has to be one entity for each item to be referenced.
An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC0768 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml">
<!ENTITY RFC0793 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0793.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC1948 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1948.xml">
<!ENTITY RFC2385 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2385.xml">
<!ENTITY RFC2460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC2827 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2827.xml">
<!ENTITY RFC3493 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3493.xml">
<!ENTITY RFC3542 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3542.xml">
<!ENTITY RFC3550 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3550.xml">
<!ENTITY RFC3697 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3697.xml">
<!ENTITY RFC3704 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3704.xml">
<!ENTITY RFC3828 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3828.xml">
<!ENTITY RFC4086 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4086.xml">
<!ENTITY RFC4301 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4301.xml">
<!ENTITY RFC4340 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4340.xml">
<!ENTITY RFC4443 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4443.xml">
<!ENTITY RFC4953 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4953.xml">
<!ENTITY RFC4960 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4960.xml">
<!ENTITY RFC4987 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4987.xml">
<!ENTITY RFC5082 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5082.xml">
<!ENTITY I-D.ietf-tcpm-icmp-attacks SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tcpm-icmp-attacks-03.xml">
<!ENTITY I-D.ietf-tcpm-tcpsecure SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tcpm-tcpsecure-10.xml">
<!ENTITY I-D.ietf-tsvwg-port-randomization SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tsvwg-port-randomization-02.xml">
<!ENTITY I-D.ietf-tcpm-tcp-auth-opt SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tcpm-tcp-auth-opt-01.xml">
<!ENTITY I-D.weaver-dnsext-comprehensive-resolver SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-weaver-dnsext-comprehensive-resolver-00.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
(Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="no" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
(using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-blake-ipv6-flow-label-nonce-01" ipr="full3978">
<!-- category values: std, bcp, info, exp, and historic
ipr values: full3978, noModification3978, noDerivatives3978
you can add the attributes updates="NNNN" and obsoletes="NNNN"
they will automatically be output with "(if approved)" -->
<!-- ***** FRONT MATTER ***** -->
<front>
<title abbrev="Flow Label as Transport-Layer Nonce">
Use of the IPv6 Flow Label as a Transport-Layer Nonce to Defend Against Off-Path Spoofing Attacks</title>
<author fullname="Steven Blake" initials="S.B." surname="Blake">
<organization>Extreme Networks</organization>
<address>
<postal>
<street>Pamlico Building One, Suite 100</street>
<street>3306/08 E. NC Hwy 54</street>
<city>RTP</city>
<region>NC</region>
<code>27709</code>
<country>USA</country>
</postal>
<phone>+1 919 884 3211</phone>
<email>sblake@extremenetworks.com</email>
</address>
</author>
<date month="November" year="2008" />
<!-- Meta-data Declarations -->
<area>Transport</area>
<workgroup>Internet Engineering Task Force</workgroup>
<!-- WG name at the upperleft corner of the doc,
IETF is fine for individual submissions.
If this element is not present, the default is "Network Working Group",
which is used by the RFC Editor as a nod to the history of the
IETF. -->
<keyword>IPv6</keyword>
<keyword>flow label</keyword>
<keyword>TCP</keyword>
<keyword>nonce</keyword>
<!-- Keywords will be incorporated into HTML output files in a meta tag but
they have no effect on text or nroff output. If you submit your draft
to the RFC Editor, the keywords will be used for the search engine. -->
<abstract>
<t>
TCP and other transport-layer protocols are vulnerable to spoofing
attacks from off-path hosts. These attacks can be prevented through
the use of cryptographic authentication. However, it is difficult
to use cryptographic authentication in all circumstances.
A variety of obfuscation techniques -- such as initial sequence number
randomization and source port randomization -- increase the effort
required of an attacker to successfully guess the packet header
fields which uniquely identify a transport connection. This
memo proposes the use of the IPv6 Flow Label field as a random,
per-connection nonce value, to add entropy to the set of packet
header fields used to identify a transport connection.
This mechanism is easily implementable, allows for incremental
deployment, and is fully compliant with the rules for Flow Label use
defined in RFC 3697.
</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>
Recent effort has been directed towards identifying and reducing the
vulnerability of TCP <xref target="RFC0793" /> to a variety of
"blind" spoofed packet injection attacks from hosts that are off-path
(i.e., not able to intercept communications between a pair of hosts)
<xref target="RFC4953" /><xref target="RFC5082" />
<xref target="I-D.ietf-tcpm-icmp-attacks" />
<xref target="I-D.ietf-tcpm-tcpsecure" />
<xref target="I-D.ietf-tsvwg-port-randomization" />. Off-path
spoofing attacks against TCP require an attacker to correctly guess
the 4-tuple of header fields <IP source address, TCP source port,
IP destination address, TCP destination port> uniquely identifying
a TCP connection, along with a valid (in-receive window) value for the
32-bit TCP sequence number. By correctly guessing values for these
fields, an attacker is then able to inject ACK, DATA, RST, of SYN segments
into a TCP connection, enabling throughput reduction,
data corruption, or connection termination. Similarly, by correctly
guessing values for these fields, an attacker is able to forge ICMP
messages to a host, with similar negative consequences
<xref target="I-D.ietf-tcpm-icmp-attacks" />.
</t>
<t>
Increased use of long-duration connections by applications,
as well as faster access link speeds, increase the ability of
attackers to transmit a sufficient number of spoof packets to
successfully attack a connection, especially when either the
destination or source ports are easily guessable. Cryptographic
authentication mechanisms such as the TCP MD5 Authentication Option
<xref target="RFC2385" />, TCP Authentication Option
<xref target="I-D.ietf-tcpm-tcp-auth-opt" />, and IPsec
<xref target="RFC4301" /> can secure against these attacks,
as well as some on-path (man-in-the-middle) attacks. However, key
management and computational overhead makes the deployment of
cryptographic authentication prohibitively expensive in some
environments and for applications.
</t>
<t>
Network ingress filtering of IP source addresses has been widely
deployed at network boundaries, significantly reducing the set of
networks that a particular host can inject spoof packets into
<xref target="RFC2827" /><xref target="RFC3704" />. But network
ingress filtering is not universally deployed, leaving many networks
vulnerable to spoofed packet attacks. Note also that network ingress
filtering typically provides no protection against ICMP spoofing
attacks, since the attacker does not need to spoof the IP source
address in the ICMP packet header (only the IP destination address
in the ICMP message payload).
</t>
<t>
Obfuscation techniques can be employed to increase the effort required
of an attacker. Initial sequence number randomization
<xref target="RFC1948" />
<xref target="I-D.ietf-tcpm-tcpsecure" /> can be implemented
by both the client (the host initiating a connection) and server.
For typical window sizes of approximately 32 Kbytes, this technique
forces an attacker to send approximately 57000 RST packets on
average to reset a connection <xref target="RFC4953" />.
Source port randomization
<xref target="I-D.ietf-tsvwg-port-randomization" /> can also be
implemented by a client to increase the number of guesses an attacker
must make to successfully attack a connection. This mechanism can
provide an additional ~15 bits of entropy (depending on
implementation). Source port randomization can also be used with
other transport protocols.
</t>
<t>
Both obfuscation schemes are compliant with
<xref target="RFC0793" />, and are incrementally deployable. Both
schemes used in combination introduce somewhat less than 32 bits of
entropy (~16 + ~15). However, as access link speeds (and
consequently, receive windows) increase in size, the amount of entropy
declines just as the number of spoof packets an attacker can generate
in a given interval increases.
<xref target="I-D.weaver-dnsext-comprehensive-resolver" />
argues that 40 bits of entropy is desirable to make off-path spoofing
attacks impractical.
</t>
<t>
IPv6 <xref target="RFC2460" /> includes a 20-bit Flow Label field,
which can be used by hosts to uniquely label a uni-directional sequence
of packets from a host to a particular unicast, anycast, or multicast
destination. The tuple of <IP source address, IP destination
address, Flow Label> uniquely identifies a particular flow during
its lifetime (plus a subsequent quarantine period). Rules for the
generation and usage of Flow Label values are defined in
<xref target="RFC3697" />. Because transport-layer port fields may be
located at a variable offset within a packet due to IPv6 extension
headers, or may be obscured due to encryption, the Flow Label provides
a fixed field in the IPv6 header to facilitate flow classification in
routers.
</t>
<t>
While originally intended to facilitate flow-specific packet handling
in routers (e.g., QoS, fast switching), the Flow Label can also be
used by hosts to uniquely label one or more transport connections.
An originating host can select a random Flow Label value at the beginning
of a connection, and continue to use it for the connection's duration.
The host (or hosts for multicast) at the other end of the connection
can record this Flow Label value, and use it as part of the connection
demultiplexing key, while also labeling response packets with the
same or a different Flow Label value. The originating host can similarly
record the Flow Label value in response packets, and use it as part
of its connection demultiplexing key. In this way an additional 20 bits
of entropy is added to the set of header fields used to identify
a transport connection. When used in addition to source port
randomization, the total amount of entropy is approximately 34-35 bits.
When initial sequence number randomization is also used (i.e., in
TCP), the entropy is increased to > 40 bits, making off-path
snooping attacks impractical.
</t>
<t>
The concept of labeling transport connections to prevent off-path
spoofing attacks was proposed in <xref target="McGann05" />,
in the context of stateful firewalls. This scheme may be useful for
other transport protocols such as SCTP <xref target="RFC4960" />,
UDP <xref target="RFC0768" />, UDP-Lite <xref target="RFC3828" />,
DCCP <xref target="RFC4340" />, and RTP <xref target="RFC3550" />.
Host implementations in compliance with <xref target="RFC3697" />
which do not allocate multiple flows to a single transport connection
will either label all packets in the connection with a Flow Label value
of 0, or with some other constant. Therefore, this scheme is
incrementally deployable by either peer in a connection.
</t>
<t>
<xref target="Flow_Label_Rules" /> specifies additional requirements
on Flow Label generation. <xref target="TCP_Considerations" /> describes
the use of this scheme with TCP.
<xref target="UDP_Considerations" /> describes the use of this
scheme with UDP and UDP-Lite.
<xref target="SCTP_Considerations" /> describes the use of this scheme
with SCTP.
<xref target="DCCP_Considerations" /> describes the use of this scheme
with DCCP.
<xref target="RTP_Considerations" /> describes the use of this
scheme with RTP over UDP or DCCP.
</t>
</section>
<section title="Requirements Language">
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in
<xref target="RFC2119" />.
</t>
</section>
<section anchor="Flow_Label_Rules" title="Additional Requirements on
Flow Label Value Generation and Use">
<t>
<xref target="RFC3697" /> specifies the rules governing use of the
IPv6 Flow Label. The primary requirements relevant to our purpose
are as follows (quoting directly):
</t>
<t>
<list style="symbols">
<t>
The Flow Label value set by the source MUST be delivered unchanged
to the destination node(s).
</t>
<t>
To enable Flow Label based classification, source nodes SHOULD
assign each unrelated transport connection and application data
stream to a new flow.
</t>
<t>
The source node SHOULD be able to select unused Flow Label values
for flows not requesting a specific value to be used.
</t>
<t>
A source node MUST ensure that it does not unintentionally reuse
Flow Label values it is currently using or has recently used
when creating new flows.
</t>
<t>
Flow Label values previously used with a specific pair of source
and destination addresses MUST NOT be assigned to new flows
with the same address pair within 120 seconds of the termination
of the previous flow.
</t>
<t>
The source node SHOULD provide the means for the applications
and transport protocols to specify quarantine periods longer than
the default 120 seconds for individual flows.
</t>
<t>
To avoid accidental Flow Label value reuse, the source node SHOULD
select the new Flow Label value in a well-defined sequence, (e.g.,
sequential or pseudo-random) and use an initial value that avoids
reuse of recently used Flow Label values each time the system
restarts. The initial value SHOULD be derived from a previous
value stored in non-volatile memory, or in the absence of such
history, a randomly generated initial value using techniques that
produce good randomness properties SHOULD be used.
</t>
</list>
</t>
<t>
We wish to use the Flow Label value as an unguessable nonce. Hence,
the following additional requirements are implied:
</t>
<t>
<list style="symbols">
<t>
Source hosts MUST assign each unrelated transport connection and
application data stream to a new flow.
</t>
<t>
Source hosts MUST be able to select unused Flow Label values
for flows not requesting a specific value to be used. The selected
Flow Label value must remain constant for the duration of the flow.
</t>
<t>
The Flow Label value MUST be practically unguessable, in a manner
similar to the TCP source port or initial sequence number when they are
randomized. A random number generator with good randomness properties
(i.e., uniformly distributed) as specified in
<xref target="RFC4086" /> MUST be used to generate Flow Label values
not explicitly requested by an application.
</t>
<t>
Flow Label state for a transport connection or application data stream
MUST be cleaned-up by the destination host(s) as part of the
transport connection/application data stream state clean-up.
</t>
<t>
Flow Label values previously used with a specific pair of source
and destination addresses MUST NOT be assigned to new flows
with the same address pair within X seconds of the termination
of the previous flow, where X is the maximum of either 120 seconds,
or the duration for which transport connection state might linger at
a destination host after traffic flow has ceased (e.g., TIME-WAIT
state in TCP).
</t>
</list>
</t>
<t>
For this application of the Flow Label field, it would not pose a
problem if multiple flows from a source host in unrelated transport
connections/application data streams coincidentally shared the
same Flow Label value, as long as the other previous requirements are
adhered to. However, the prohibition in <xref target="RFC3697" />
against simultaneous reuse of Flow Label values MUST be observed.
Any application request to assign a specific Flow Label value already
in use by another flow MUST be rejected.
</t>
<t>
Transport-specific requirements on Flow Label use are provided in
the subsequent sections. However, as a general requirement, if a
packet is received on a transport connection/application data stream
with an unexpected Flow Label value, the packet MUST be silently
discarded. If excessive Flow Label errors are received, this event
SHOULD be logged.
</t>
<t>
ICMPv6 error messages contain the IPv6 header of the packet triggering
the error <xref target="RFC4443" />. A host receiving an ICMPv6
error message can validate the Flow Label value in the message payload
to protect against ICMPv6 spoofing attacks
<xref target="I-D.ietf-tcpm-icmp-attacks" />.
</t>
<t>
Use of the Flow Label value as an unguessable nonce is incrementally
deployable, whether a source host fails to support setting the
Flow Label to a non-zero value, or a destination host fails to
check its value. However, a Flow Label value of 0 is easily guessable,
so resistance to spoofing attacks is not improved. Hosts SHOULD NOT
rely on the mechanisms defined in this document when operating in
high-threat environments.
</t>
<t>
The additional requirements given here for Flow Label generation and
use are not in conflict with the requirements in
<xref target="RFC3697" />. Therefore, additional applications of the
Flow Label field (e.g., for special QoS handling, load balancing, etc.)
can be applied simultaneously with the use of the Flow Label field as a
transport-layer nonce, so long as an additional application does not
limit the permissible values of the Flow Label in any way which violates
the requirement that the value be unpredictable.
</t>
</section>
<section anchor="TCP_Considerations" title="TCP Considerations">
<t>
Uni-directional traffic in a TCP connection is assumed to constitute a
single flow, and hence MUST be assigned a unique Flow Label value by the
source host; either explicitly by the application or automatically by
the host's TCP/IP stack. Given the Flow Label value's additional use
as a packet classification field in routers (for QoS or other purposes),
there is no compelling reason to sub-divide traffic within a TCP
connection into multiple flows for classification purposes.
</t>
<t>
For this application of the Flow Label field, it would not pose a
problem if multiple TCP connections from a source host (whether to one
or a multiple of destination hosts) reused the same Flow Label value.
However, because of the additional uses of the Flow Label field, a
host MUST NOT assign the same Flow Label value to multiple TCP
connections. Both directions of traffic flow in a TCP connection
are not required to share the same Flow Label value, nor are they
prohibited from doing so.
</t>
<t>
A host originating a TCP connection (client) selects a unique Flow Label
value for the connection, which it stores as the OUTGOING_FLOW_ID in
its Transport Control Block (TCB) for this connection. The Flow Label
selection algorithm can run simultaneously with TCP source port
and initial sequence number selection (e.g., by generating a single
random variable and assigning bit-ranges within it to each field).
This Flow Label value is included in the first (and subsequent) SYN
packet(s) sent to the destination host (server). The server receiving
the first SYN packet records the Flow Label value in its TCB for this
connection as the INCOMING_FLOW_ID. The server then selects a unique
Flow Label value for the connection, which it stores as the
OUTGOING_FLOW_ID in the connection's TCB. It includes this Flow Label
value in the first (and subsequent) SYN-ACK packet(s) sent to the client.
The client receiving the SYN-ACK packet from the server records the Flow
Label value in its TCB for this connection as the INCOMING_FLOW_ID. It
sends all additional packets of the connection to the server using
OUTGOING_FLOW_ID, and checks all incoming packets of the connection
from the server to ensure that they include INCOMING_FLOW_ID. The
server performs identical processing. Any packets received with
a Flow Label value that does not match INCOMING_FLOW_ID MUST be silently
discarded. If a significant number of such packets are received, this
event SHOULD be logged.
</t>
<t>
When a server implements a SYN cache and/or SYN cookies, the Flow Label
value used in the SYN-ACK packet MUST be consistent with the Flow
Label value used in subsequent packets <xref target="McGann05" />
<xref target="RFC4987" />.
For the SYN cache case, this can be handled easily by including
INCOMING_FLOW_ID and OUTGOING_FLOW_ID as part of each cache entry.
For SYN cookies, one approach to satisfying the requirement without
storing state is to derive the Flow Label value from a hash of the
the connection 4-tuple plus a random secret <xref target="McGann05" />.
Another approach is to use the Flow Label value received in the SYN
(INCOMING_FLOW_ID) as the Flow Label value in the SYN-ACK
(OUTGOING_FLOW_ID). When the connection is established, the same
Flow Label value will be used in both directions of traffic.
This approach leaves a small window of vulnerability to spoofing
before the connection is established.
</t>
<t>
<xref target="RFC0793" /> specifies that a connection should remain
in TIME_WAIT state for 2 * MSL (Maximum Segment Lifetime) seconds.
<xref target="RFC0793" /> specifies MSL as 120 seconds, although
many implementations default to a lower value. The Flow Label value
quarantine period MUST be no less than the maximum of either 2 * MSL
for the connection, or 120 seconds.
</t>
<t>
The specified behavior at the client and server will work even if either
the client or server fails to set a non-zero outgoing Flow Label value,
or check the incoming Flow Label value. However, resistance to
spoofing attacks is not improved. Further, no mechanism for detecting
whether a peer is supporting the Flow Label nonce is defined.
Therefore, some cryptographic authentication mechanism SHOULD BE used
when operating in a high-threat environment
<xref target="RFC2385" /><xref target="I-D.ietf-tcpm-tcp-auth-opt" />
<xref target="RFC4301" />.
</t>
</section>
<section anchor="UDP_Considerations" title="UDP Considerations">
<t>
UDP is a connectionless protocol, which is also vulnerable to
spoofing attacks. The level of vulnerability is specific to each
application-layer protocol running over UDP. Source port randomization
can be utilized with UDP, but UDP does not have sequence numbers, so it
is arguably more vulnerable than TCP with source port and initial
sequence number randomization. With the exception of connected
SOCk_DGRAM sockets, UDP/IP stacks (usually) do not maintain sufficient
state to maintain INCOMING_FLOW_ID or OUTGOING_FLOW_ID values for each
application data stream between a source host and a destination host
or multicast group. Therefore, Flow Label generation and validation
must happen at the application layer.
</t>
<t>
For purposes of discussion, we define a UDP connection as a flow
of traffic matching the tuple <IP source address, UDP source port,
IP destination/group address, UDP destination port>. Note that
a UDP connection consists of uni-directional traffic flow between a
pair of hosts, or between a host and the receivers of a multicast
group. UDP applications MUST assign each connection to a unique
flow, and hence MUST assign each connection a unique Flow Label
value. One exception is where multiple application data streams are
multiplexed onto the same address/port pairs. In this case UDP
applications MUST assign application data streams to unique flows
(as appropriate for the intended QoS or other handling), and MUST use
application-layer demultiplexing to associate incoming data streams
with flows. Maintenance of INCOMING_FLOW_ID and OUTGOING_FLOW_ID
values for each flow MUST be provided by the application. Applications
MUST check the Flow Label value of a received packet against
INCOMING_FLOW_ID for the associated flow, and MUST silently discard the
packet if the values do not match. If a significant number of such
packets are received, this event SHOULD be logged. Note that
an alternative to multiplexing multiple application data streams
onto the same address/port pair is to utilize different source and/or
destination port values for each data stream.
</t>
<t>
There is no standard sockets API for either setting the Flow Label value
in outgoing packets, nor retrieving it in incoming packets
<xref target="RFC3493" /><xref target="RFC3542" />. There is also
no standard sockets API for specifying that a non-zero Flow Label value
be used in outgoing packets. Therefore the requirements above
cannot be satisfied, except where a non-standard API is available,
or the functionality is provided automatically within the UDP/IP stack.
It would be worthwhile to define a standard sockets API for Flow Label
management.
</t>
<t>
One application where the use of the Flow Label as a nonce would
be beneficial is in protection against blind DNS cache poisoning
attacks <xref target="I-D.weaver-dnsext-comprehensive-resolver" />.
If DNS queries are each assigned a unique Flow Label value, and if DNS
servers send responses with an outgoing Flow Label value equal to the
incoming Flow Label value received in the request, then the client can
validate with high-probability that the request was generated by the
targeted server, since the UDP source port, DNS transaction ID, and
Flow Label together provide approximately 51 bits of entropy.
</t>
<t>
UDP-Lite <xref target="RFC3828" /> differs from UDP by allowing an
application to exclude parts of the payload from the UDP-Lite
checksum. Since the Flow Label field is not part of the UDP-Lite
pseudo header <xref target="RFC2460" />, its value could be altered by
data transmission errors (that are not corrected or rejected by the
data link layer) that are not detected by the destination. Therefore,
UDP-Lite applications SHOULD NOT check the Flow Label value received
in packets of a data stream carried over UDP-Lite.
</t>
</section>
<section anchor="SCTP_Considerations" title="SCTP Considerations">
<t>
Use of the Flow Label with SCTP will be discussed in a subsequent
revision of this document.
</t>
<!--
- Discuss issues regarding whether the same flow label value can be
used for multiple connections to a destination.
- Discuss why it doesn't make sense to use multiple flow label values
for a single SCTP connection.
- Should the same Flow Label value be used when the sending address
changes (multi-homing feature)?
- Are there sub-flows in SCTP that would benefit from different
Flow Label values?
- Is there a SCTP Security Considerations document?
- RFC 5062
-->
</section>
<section anchor="DCCP_Considerations" title="DCCP Considerations">
<t>
Use of the Flow Label with DCCP will be discussed in a subsequent
revision of this document.
</t>
<!--
DCCP is a connection-oriented transport protocol which does not
attempt to provide reliable in-order delivery of packets
<xref target="RFC4340" />. DCCP incorporates a larger sequence
number space than TCP, and stronger sequence number checking rules,
making it more difficult for an attacker to correctly guess a
valid sequence numbers in a spoof packet. DCCP also incorporates
the Init Cookie option to protect against SYN-flood-like attacks.
</t>
<t>
Unidirectional traffic in a DCCP connection is assumed to constitute
a single flow, and hence MUST be assigned a unique Flo Label value
by the source host.
- Elaborate on the UDP section if necessary.
- Is there a DCCP Security Considerations document?
-->
</section>
<section anchor="RTP_Considerations" title="RTP Considerations">
<t>
Use of the Flow Label with RTP applications will be discussed in a
subsequent revision of this document.
</t>
<!--
- May eliminate this and cover it in the UDP or DCCP conderations.
- Elaborate on the UDP/DCCP sections as necessary.
- Are there notions of sub-flows within an RTP stream?
- Is there a RTP Security Considerations Document?
- see draft-ietf-avt-srtp-not-mandatory-00
-->
</section>
<section anchor="Acknowledgements" title="Acknowledgements">
<t>
<xref target="McGann05" /> describes the use of the
Flow Label as a transport-layer nonce. If others are aware of when
and where this concept might have been discussed previously, please
contact the author.
</t>
<t>
The author would like to thank Brian Carpenter for his valuable
feedback.
</t>
<t>
This document was produced using the xml2rfc tool
<xref target="RFC2629" />.
</t>
</section>
<!-- Possibly a 'Contributors' section ... -->
<section anchor="IANA" title="IANA Considerations">
<t>
This memo includes no request to IANA.
</t>
</section>
<section anchor="Security" title="Security Considerations">
<t>
This memo describes the use of the IPv6 Flow Label as a
transport-layer nonce to help protect transport connections and
application data streams from blind spoofed packet injection
attacks. Blind spoofed packet injection attacks have been described
in several publications, and are well known to the community. This
memo addresses the use of this mechanism with different transport
protocols. This mechanism is only applicable for hosts
communicating via the IPv6 protocol. This mechanism does not
provide protection for any on-path (man-in-the-middle attacks);
therefore, additional security mechanisms must be used in high threat
environments.
</t>
</section>
</middle>
<!-- *****BACK MATTER ***** -->
<back>
<references title="Normative References">
&RFC0768;
&RFC0793;
&RFC2119;
&RFC2460;
&RFC3550;
&RFC3697;
&RFC3828;
&RFC4086;
&RFC4340;
&RFC4443;
&RFC4960;
</references>
<references title="Informative References">
&RFC1948;
&RFC2385;
&RFC2629;
&RFC2827;
&RFC3493;
&RFC3542;
&RFC3704;
&RFC4301;
&RFC4953;
&RFC4987;
&RFC5082;
&I-D.ietf-tcpm-icmp-attacks;
&I-D.ietf-tcpm-tcpsecure;
&I-D.ietf-tsvwg-port-randomization;
&I-D.ietf-tcpm-tcp-auth-opt;
&I-D.weaver-dnsext-comprehensive-resolver;
<reference anchor="McGann05">
<front>
<title>Flow Label Filtering Feasibility</title>
<author initials='O.' surname='McGann' fullname='Orla McGann'>
<organization>HEAnet, Ltd.</organization>
</author>
<author initials='D.' surname='Malone' fullname='David Malone'>
<organization>The Hamilton Institute</organization>
</author>
<date month='December' year='2005' />
</front>
<seriesInfo name='European Conference on'
value='Computer Network Defence'/>
</reference>
</references>
</back>
</rfc>
<!-- Change Log
-00 First draft
-01 Second draft. Adds Security Considerations.
-->
| PAFTECH AB 2003-2026 | 2026-04-21 17:51:24 |