1068 lines
46 KiB
Plaintext
1068 lines
46 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group S. Floyd
|
||
Request for Comments: 3360 ICIR
|
||
BCP: 60 August 2002
|
||
Category: Best Current Practice
|
||
|
||
|
||
Inappropriate TCP Resets Considered Harmful
|
||
|
||
Status of this Memo
|
||
|
||
This document specifies an Internet Best Current Practices for the
|
||
Internet Community, and requests discussion and suggestions for
|
||
improvements. Distribution of this memo is unlimited.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2002). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
This document is being written because there are a number of
|
||
firewalls in the Internet that inappropriately reset a TCP connection
|
||
upon receiving certain TCP SYN packets, in particular, packets with
|
||
flags set in the Reserved field of the TCP header. In this document
|
||
we argue that this practice is not conformant with TCP standards, and
|
||
is an inappropriate overloading of the semantics of the TCP reset.
|
||
We also consider the longer-term consequences of this and similar
|
||
actions as obstacles to the evolution of the Internet infrastructure.
|
||
|
||
1. Introduction
|
||
|
||
TCP uses the RST (Reset) bit in the TCP header to reset a TCP
|
||
connection. Resets are appropriately sent in response to a
|
||
connection request to a nonexistent connection, for example. The TCP
|
||
receiver of the reset aborts the TCP connection, and notifies the
|
||
application [RFC793, RFC1122, Ste94].
|
||
|
||
Unfortunately, a number of firewalls and load-balancers in the
|
||
current Internet send a reset in response to a TCP SYN packet that
|
||
use flags from the Reserved field in the TCP header. Section 3 below
|
||
discusses the specific example of firewalls that send resets in
|
||
response to TCP SYN packets from ECN-capable hosts.
|
||
|
||
This document is being written to inform administrators of web
|
||
servers and firewalls of this problem, in an effort to encourage the
|
||
deployment of bug-fixes [FIXES]. A second purpose of this document
|
||
is to consider the longer-term consequences of such middlebox
|
||
behavior on the more general evolution of protocols in the Internet.
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 1]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
2. The history of TCP resets.
|
||
|
||
This section gives a brief history of the use of the TCP reset in the
|
||
TCP standards, and argues that sending a reset in response to a SYN
|
||
packet that uses bits from the Reserved field of the TCP header is
|
||
non-compliant behavior.
|
||
|
||
RFC 793 contained the original specification of TCP in September,
|
||
1981 [RFC793]. This document defined the RST bit in the TCP header,
|
||
and explained that reset was devised to prevent old duplicate
|
||
connection initiations from causing confusion in TCP's three-way
|
||
handshake. The reset is also used when a host receives data for a
|
||
TCP connection that no longer exists.
|
||
|
||
RFC 793 states the following, in Section 5:
|
||
|
||
"As a general rule, reset (RST) must be sent whenever a segment
|
||
arrives which apparently is not intended for the current connection.
|
||
A reset must not be sent if it is not clear that this is the case."
|
||
|
||
RFC 1122 "amends, corrects, and supplements" RFC 793. RFC 1122 says
|
||
nothing specific about sending resets, or not sending resets, in
|
||
response to flags in the TCP Reserved field.
|
||
|
||
Thus, there is nothing in RFC 793 or RFC 1122 that suggests that it
|
||
is acceptable to send a reset simply because a SYN packet uses
|
||
Reserved flags in the TCP header, and RFC 793 explicitly forbids
|
||
sending a reset for this reason.
|
||
|
||
RFC 793 and RFC 1122 both include Jon Postel's famous robustness
|
||
principle, also from RFC 791: "Be liberal in what you accept, and
|
||
conservative in what you send." RFC 1122 reiterates that this
|
||
robustness principle "is particularly important in the Internet
|
||
layer, where one misbehaving host can deny Internet service to many
|
||
other hosts." The discussion of the robustness principle in RFC 1122
|
||
also states that "adaptability to change must be designed into all
|
||
levels of Internet host software". The principle "be liberal in what
|
||
you accept" doesn't carry over in a clear way (if at all) to the
|
||
world of firewalls, but the issue of "adaptability to change" is
|
||
crucial nevertheless. The challenge is to protect legitimate
|
||
security interests without completely blocking the ability of the
|
||
Internet to evolve to support new applications, protocols, and
|
||
functionality.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 2]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
2.1. The TCP Reserved Field
|
||
|
||
RFC 793 says that the Reserved field in the TCP header is reserved
|
||
for future use, and must be zero. A rephrasing more consistent with
|
||
the rest of the document would have been to say that the Reserved
|
||
field should be zero when sent and ignored when received, unless
|
||
specified otherwise by future standards actions. However, the
|
||
phrasing in RFC 793 does not permit sending resets in response to TCP
|
||
packets with a non-zero Reserved field, as is explained in the
|
||
section above.
|
||
|
||
2.2. Behavior of and Requirements for Internet Firewalls
|
||
|
||
RFC 2979 on the Behavior of and Requirements for Internet Firewalls
|
||
[RFC2979], an Informational RFC, contains the following:
|
||
|
||
"Applications have to continue to work properly in the presence of
|
||
firewalls. This translates into the following transparency rule: The
|
||
introduction of a firewall and any associated tunneling or access
|
||
negotiation facilities MUST NOT cause unintended failures of
|
||
legitimate and standards-compliant usage that would work were the
|
||
firewall not present."
|
||
|
||
"A necessary corollary to this requirement is that when such failures
|
||
do occur it is incumbent on the firewall and associated software to
|
||
address the problem: Changes to either implementations of existing
|
||
standard protocols or the protocols themselves MUST NOT be
|
||
necessary."
|
||
|
||
"Note that this requirement only applies to legitimate protocol usage
|
||
and gratuitous failures -- a firewall is entitled to block any sort
|
||
of access that a site deems illegitimate, regardless of whether or
|
||
not the attempted access is standards-compliant."
|
||
|
||
We would note that RFC 2979 is an Informational RFC. RFC 2026 on
|
||
Internet Standards Process says the following in Section 4.2.2: "An
|
||
`Informational' specification is published for the general
|
||
information of the Internet community, and does not represent an
|
||
Internet community consensus or recommendation" [RFC2026].
|
||
|
||
2.3. Sending Resets as a Congestion Control Mechanism
|
||
|
||
Some firewalls and hosts send resets in response to SYN packets as a
|
||
congestion control mechanism, for example, when their listen queues
|
||
are full. These resets are sent without regard to the contents of
|
||
the TCP Reserved field. Possibly in response to the use of resets as
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 3]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
a congestion control mechanism, several popular TCP implementations
|
||
immediately resend a SYN packet in response to a reset, up to four
|
||
times.
|
||
|
||
We would recommend that the TCP reset not be used as a congestion
|
||
control mechanism, because this overloads the semantics of the reset
|
||
message, and inevitably leads to more aggressive behavior from TCP
|
||
implementations in response to a reset. We would suggest that simply
|
||
dropping the SYN packet is the most effective response to congestion.
|
||
The TCP sender will retransmit the SYN packet, using the default
|
||
value for the Retransmission Timeout (RTO), backing-off the
|
||
retransmit timer after each retransmit.
|
||
|
||
2.4. Resets in Response to Changes in the Precedence Field
|
||
|
||
RFC 793 includes the following in Section 5:
|
||
|
||
"If an incoming segment has a security level, or compartment, or
|
||
precedence which does not exactly match the level, and compartment,
|
||
and precedence requested for the connection, a reset is sent and
|
||
connection goes to the CLOSED state."
|
||
|
||
The "precedence" refers to the (old) Precedence field in the (old)
|
||
ToS field in the IP header. The "security" and "compartment" refer
|
||
to the obsolete IP Security option. When it was written, this was
|
||
consistent with the guideline elsewhere in RFC 793 that resets should
|
||
only be sent when a segment arrives which apparently is not intended
|
||
for the current connection.
|
||
|
||
RFC 2873 on "TCP Processing of the IPv4 Precedence Field" discusses
|
||
specific problems raised by the sending of resets when the precedence
|
||
field has changed [RFC2873]. RFC 2873, currently a Proposed
|
||
Standard, specifies that TCP must ignore the precedence of all
|
||
received segments, and must not send a reset in response to changes
|
||
in the precedence field. We discuss this here to clarify that this
|
||
issue never permitted the sending of a reset in response to a segment
|
||
with a non-zero TCP Reserved field.
|
||
|
||
2.5. Resets in Response to Illegal Option Lengths
|
||
|
||
RFC 1122 says the following in Section 4.2.2.5 about TCP options
|
||
[RFC1122]:
|
||
|
||
"A TCP MUST be able to receive a TCP option in any segment. A TCP
|
||
MUST ignore without error any TCP option it does not implement,
|
||
assuming that the option has a length field (all TCP options defined
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 4]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
in the future will have length fields). TCP MUST be prepared to
|
||
handle an illegal option length (e.g., zero) without crashing; a
|
||
suggested procedure is to reset the connection and log the reason."
|
||
|
||
This makes sense, as a TCP receiver is unable to interpret the rest
|
||
of the data on a segment that has a TCP option with an illegal option
|
||
length. Again, we discuss this here to clarify that this issue never
|
||
permitted the sending of a reset in response to a segment with a
|
||
non-zero TCP Reserved field.
|
||
|
||
3. The Specific Example of ECN
|
||
|
||
This section has a brief explanation of ECN (Explicit Congestion
|
||
Notification) in general, and the ECN-setup SYN packet in particular.
|
||
|
||
The Internet is based on end-to-end congestion control, and
|
||
historically the Internet has used packet drops as the only method
|
||
for routers to indicate congestion to the end nodes. ECN is a recent
|
||
addition to the IP architecture to allow routers to set a bit in the
|
||
IP packet header to inform end-nodes of congestion, instead of
|
||
dropping the packet. ECN requires the cooperation of the transport
|
||
end-nodes.
|
||
|
||
The ECN specification, RFC 2481, was an Experimental RFC from January
|
||
1999 until June 2001, when a revised document [RFC3168] was approved
|
||
as Proposed Standard. More information about ECN is available from
|
||
the ECN Web Page [ECN].
|
||
|
||
The use of ECN with TCP requires that both TCP end-nodes have been
|
||
upgraded to support the use of ECN, and that both end-nodes agree to
|
||
use ECN with this particular TCP connection. This negotiation of ECN
|
||
support between the two TCP end-nodes uses two flags that have been
|
||
allocated from the Reserved field in the TCP header [RFC2481].
|
||
|
||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
| | | U | A | P | R | S | F |
|
||
| Header Length | Reserved | R | C | S | S | Y | I |
|
||
| | | G | K | H | T | N | N |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
|
||
Figure 1: The previous definition of bytes 13 and 14 of the TCP
|
||
header.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 5]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
| | | C | E | U | A | P | R | S | F |
|
||
| Header Length | Reserved | W | C | R | C | S | S | Y | I |
|
||
| | | R | E | G | K | H | T | N | N |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
|
||
Figure 2: The current definition of bytes 13 and 14 of the TCP
|
||
Header, from RFC 3168.
|
||
|
||
The two ECN flags in the TCP header are defined from the last two
|
||
bits in the Reserved field of the TCP header. Bit 9 in the Reserved
|
||
field of the TCP header is designated as the ECN-Echo flag (ECE), and
|
||
Bit 8 is designated as the Congestion Window Reduced (CWR) flag. To
|
||
negotiate ECN usage, the TCP sender sends an "ECN-setup SYN packet",
|
||
a TCP SYN packet with the ECE and CWR flags set. If the TCP host at
|
||
the other end wishes to use ECN for this connection, then it sends an
|
||
"ECN-setup SYN-ACK packet", a TCP SYN packet with the ECE flag set
|
||
and the CWR flag not set. Otherwise, the TCP host at the other end
|
||
returns a SYN-ACK packet with neither the ECE nor the CWR flag set.
|
||
|
||
So now back to TCP resets. When a TCP host negotiating ECN sends an
|
||
ECN-setup SYN packet, an old TCP implementation is expected to ignore
|
||
those flags in the Reserved field, and to send a plain SYN-ACK packet
|
||
in response. However, there are some broken firewalls and load-
|
||
balancers in the Internet that instead respond to an ECN-setup SYN
|
||
packet with a reset. Following the deployment of ECN-enabled end
|
||
nodes, there were widespread complaints that ECN-capable hosts could
|
||
not access a number of websites [Kelson00]. This has been
|
||
investigated by the Linux community, and by the TBIT project [TBIT]
|
||
in data taken from September, 2000, up to March, 2002, and has been
|
||
discussed in an article in Enterprise Linux Today [Cou01]. Some of
|
||
the offending equipment has been identified, and a web page [FIXES]
|
||
contains a list of non-compliant products and the fixes posted by the
|
||
vendors. In March 2002, six months after ECN was approved as
|
||
Proposed Standard, ECN-setup SYN packets were answered by a reset
|
||
from 203 of the 12,364 web sites tested, and ECN-setup SYN packets
|
||
were dropped for 420 of the web sites. Installing software that
|
||
blocks packets using flags in TCP's Reserved field is considerably
|
||
easier than uninstalling that software later on.
|
||
|
||
3.1. ECN: The Work-Around.
|
||
|
||
A work-around for maintaining connectivity in the face of the broken
|
||
equipment was described in [Floyd00], and has been specified in RFC
|
||
3168 as a procedure that may be included in TCP implementations. We
|
||
describe this work-around briefly below.
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 6]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
To provide robust connectivity even in the presence of faulty
|
||
equipment, a TCP host that receives a reset in response to the
|
||
transmission of an ECN-setup SYN packet may resend the SYN with CWR
|
||
and ECE cleared. This would result in a TCP connection being
|
||
established without using ECN. This also has the unfortunate result
|
||
of the ECN-capable TCP host not responding properly to the first
|
||
valid reset. If a second reset is sent in response to the second
|
||
SYN, which had CWR and ECE cleared, then the TCP host should respond
|
||
properly by aborting the connection.
|
||
|
||
Similarly, a host that receives no reply to an ECN-setup SYN within
|
||
the normal SYN retransmission timeout interval may resend the SYN and
|
||
any subsequent SYN retransmissions with CWR and ECE cleared. To
|
||
overcome normal packet loss that results in the original SYN being
|
||
lost, the originating host may retransmit one or more ECN-setup SYN
|
||
packets before giving up and retransmitting the SYN with the CWR and
|
||
ECE bits cleared.
|
||
|
||
Some TCP implementors have so far decided not to deploy these
|
||
workarounds, for the following reasons:
|
||
|
||
* The work-arounds would result in ECN-capable hosts not responding
|
||
properly to the first valid reset received in response to a SYN
|
||
packet.
|
||
|
||
* The work-arounds would limit ECN functionality in environments
|
||
without broken equipment, by disabling ECN where the first SYN or
|
||
SYN-ACK packet was dropped in the network.
|
||
|
||
* The work-arounds in many cases would involve a delay of six seconds
|
||
or more before connectivity is established with the remote server,
|
||
in the case of broken equipment that drops ECN-setup SYN packets.
|
||
By accommodating this broken equipment, the work-arounds have been
|
||
judged as implicitly accepting both this delay and the broken
|
||
equipment that would be causing this delay.
|
||
|
||
One possibility would be for such work-arounds to be configurable by
|
||
the user.
|
||
|
||
One unavoidable consequence of the work-around of resending a
|
||
modified SYN packet in response to a reset is to further erode the
|
||
semantics of the TCP reset. Thus, when a box sends a reset, the TCP
|
||
host receiving that reset does not know if the reset was sent simply
|
||
because of the ECN-related flags in the TCP header, or because of
|
||
some more fundamental problem. Therefore, the TCP host resends the
|
||
TCP SYN packet without the ECN-related flags in the TCP header. The
|
||
ultimate consequence of this absence of clear communications from the
|
||
middlebox to the end-nodes could be an extended spiral of
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 7]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
communications specified for transport protocols, as end nodes
|
||
attempt to sacrifice as little functionality as possible in the
|
||
process of determining which packets will and will not be forwarded
|
||
to the other end. This is discussed in more detail in Section 6.1
|
||
below.
|
||
|
||
4. On Combating Obstacles to the Proper Evolution of the Internet
|
||
Infrastructure
|
||
|
||
One of the reasons that this issue of inappropriate resets is
|
||
important (to me) is that it has complicated the deployment of ECN in
|
||
the Internet (though it has fortunately not blocked the deployment
|
||
completely). It has also added an unnecessary obstacle to the future
|
||
effectiveness of ECN.
|
||
|
||
However, a second, more general reason why this issue is important is
|
||
that the presence of equipment in the Internet that rejects valid TCP
|
||
packets limits the future evolution of TCP, completely aside from the
|
||
issue of ECN. That is, the widespread deployment of equipment that
|
||
rejects TCP packets that use Reserved flags in the TCP header could
|
||
effectively prevent the deployment of new mechanisms that use any of
|
||
these Reserved flags. It doesn't matter if these new mechanisms have
|
||
the protection of Experimental or Proposed Standard status from the
|
||
IETF, because the broken equipment in the Internet does not stop to
|
||
look up the current status of the protocols before rejecting the
|
||
packets. TCP is good, and useful, but it would be a pity for the
|
||
deployment of broken equipment in the Internet to result in the
|
||
"freezing" of TCP in its current state, without the ability to use
|
||
the Reserved flags in the future evolution of TCP.
|
||
|
||
In the specific case of middleboxes that block TCP SYN packets
|
||
attempting to negotiate ECN, the work-around described in Section 3.1
|
||
is sufficient to ensure that end-nodes could still establish
|
||
connectivity. However, there are likely to be additional uses of the
|
||
TCP Reserved Field standardized in the next year or two, and these
|
||
additional uses might not coexist quite as successfully with
|
||
middleboxes that send resets. Consider the difficulties that could
|
||
result if a path changes in the middle of a connection's lifetime,
|
||
and the middleboxes on the old and new paths have different policies
|
||
about exactly which flags in the TCP Reserved field they would and
|
||
would not block.
|
||
|
||
Taking the wider view, the existence of web servers or firewalls that
|
||
send inappropriate resets is only one example of functionality in the
|
||
Internet that restricts the future evolution of the Internet. The
|
||
impact of all of these small restrictions taken together presents a
|
||
considerable obstacle to the development of the Internet
|
||
architecture.
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 8]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
5. Issues for Transport Protocols
|
||
|
||
One lesson for designers of transport protocols is that transport
|
||
protocols will have to protect themselves from the unknown and
|
||
seemingly arbitrary actions of firewalls, normalizers, and other
|
||
middleboxes in the network. For the moment, for TCP, this means
|
||
sending a non-ECN-setup SYN when a reset is received in response to
|
||
an ECN-setup SYN packet. Defensive actions on the side of transport
|
||
protocols could include using Reserved flags in the SYN packet before
|
||
using them in data traffic, to protect against middleboxes that block
|
||
packets using those flags. It is possible that transport protocols
|
||
will also have to add additional checks during the course of the
|
||
connection lifetime to check for interference from middleboxes along
|
||
the path.
|
||
|
||
The ECN standards document, RFC 3168, contains an extensive
|
||
discussion in Section 18 on "Possible Changes to the ECN Field in the
|
||
Network", but includes the following about possible changes to the
|
||
TCP header:
|
||
|
||
"This document does not consider potential dangers introduced by
|
||
changes in the transport header within the network. We note that
|
||
when IPsec is used, the transport header is protected both in tunnel
|
||
and transport modes [ESP, AH]."
|
||
|
||
With the current modification of transport-level headers in the
|
||
network by firewalls (as discussed below in Section 6.2), future
|
||
protocol designers might no longer have the luxury of ignoring the
|
||
possible impact of changes to the transport header within the
|
||
network.
|
||
|
||
Transport protocols will also have to respond in some fashion to an
|
||
ICMP code of "Communication Administratively Prohibited" if
|
||
middleboxes start to use this form of the ICMP Destination
|
||
Unreachable message to indicate that the packet is using
|
||
functionality not allowed [RFC1812].
|
||
|
||
6. Issues for Middleboxes
|
||
|
||
Given that some middleboxes are going to drop some packets because
|
||
they use functionality not allowed by the middlebox, the larger issue
|
||
remains of how middleboxes should communicate the reason for this
|
||
action to the end-nodes, if at all. One suggestion, for
|
||
consideration in more depth in a separate document, would be that
|
||
firewalls send an ICMP Destination Unreachable message with the code
|
||
"Communication Administratively Prohibited" [B01].
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 9]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
We acknowledge that this is not an ideal solution, for several
|
||
reasons. First, middleboxes along the reverse path might block these
|
||
ICMP messages. Second, some firewall operators object to explicit
|
||
communication because it reveals too much information about security
|
||
policies. And third, the response of transport protocols to such an
|
||
ICMP message is not yet specified.
|
||
|
||
However, an ICMP "Administratively Prohibited" message could be a
|
||
reasonable addition, for firewalls willing to use explicit
|
||
communication. One possibility, again to be explored in a separate
|
||
document, would be for the ICMP "Administratively Prohibited" message
|
||
to be modified to convey additional information to the end host.
|
||
|
||
We would note that this document does not consider middleboxes that
|
||
block complete transport protocols. We also note that this document
|
||
is not addressing firewalls that send resets in response to a TCP SYN
|
||
packet to a firewalled-off TCP port. Such a use of resets seems
|
||
consistent with the semantics of TCP reset. This document is only
|
||
considering the problems caused by middleboxes that block specific
|
||
packets within a transport protocol when other packets from that
|
||
transport protocol are forwarded by the middlebox unaltered.
|
||
|
||
One complication is that once a mechanism is installed in a firewall
|
||
to block a particular functionality, it can take considerable effort
|
||
for network administrators to "un-install" that block. It has been
|
||
suggested that tweakable settings on firewalls could make recovery
|
||
from future incidents less painful all around. Again, because this
|
||
document does not address more general issues about firewalls, the
|
||
issue of greater firewall flexibility, and the attendant possible
|
||
security risks, belongs in a separate document.
|
||
|
||
6.1. Current Choices for Firewalls
|
||
|
||
Given a firewall that has decided to drop TCP packets that use
|
||
reserved bits in the TCP header, one question is whether the firewall
|
||
should also send a Reset, in order to prevent the TCP connection from
|
||
consuming unnecessary resources at the TCP sender waiting for the
|
||
retransmit timeout. We would argue that whether or not the firewall
|
||
feels compelled to drop the TCP packet, it is not appropriate to send
|
||
a TCP reset. Sending a TCP reset in response to prohibited
|
||
functionality would continue the current overloading of the semantics
|
||
of the TCP reset in a way that could be counterproductive all around.
|
||
|
||
As an example, Section 2.3 has already observed that some firewalls
|
||
send resets in response to TCP SYN packets as a congestion control
|
||
mechanism. Possibly in response to this (or perhaps in response to
|
||
something else), some popular TCP implementations immediately resend
|
||
a SYN packet in response to a reset, up to four times. Other TCP
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 10]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
implementations, in conformance to the standards, don't resend SYN
|
||
packets after receiving a reset. The more aggressive TCP
|
||
implementations increase congestion for others, but also increase
|
||
their own chances of eventually getting through. Giving these fluid
|
||
semantics for the TCP reset, one might expect more TCP
|
||
implementations to start resending SYN packets in response to a
|
||
reset, completely apart from any issues having to do with ECN.
|
||
Obviously, this weakens the effectiveness of the reset when used for
|
||
its original purpose, of responding to TCP packets that apparently
|
||
are not intended for the current connection.
|
||
|
||
If we add to this mix the use of the TCP reset by firewalls in
|
||
response to TCP packets using reserved bits in the TCP header, this
|
||
muddies the waters further. Because TCP resets could be sent due to
|
||
congestion, or to prohibited functionality, or because a packet was
|
||
received from a previous TCP connection, TCP implementations (or,
|
||
more properly, TCP implementors) would now have an incentive to be
|
||
even more persistent in resending SYN packets in response to TCP
|
||
resets. In addition to the incentive mentioned above of resending
|
||
TCP SYN packets to increase one's odds of eventually getting through
|
||
in a time of congestion, the TCP reset might have been due to
|
||
prohibited functionality instead of congestion, so the TCP
|
||
implementation might resend SYN packets in different forms to
|
||
determine exactly which functionality is being prohibited. Such a
|
||
continual changing of the semantics of the TCP reset could be
|
||
expected to lead to a continued escalation of measures and
|
||
countermeasures between firewalls and end-hosts, with little
|
||
productive benefit to either side.
|
||
|
||
It could be argued that *dropping* the TCP SYN packet due to the use
|
||
of prohibited functionality leads to overloading of the semantics of
|
||
a packet drop, in the same way that the reset leads to overloading
|
||
the semantics of a reset. This is true; from the viewpoint of end-
|
||
system response to messages with overloaded semantics, it would be
|
||
preferable to have an explicit indication about prohibited
|
||
functionality (for those firewalls for some reason willing to use
|
||
explicit indications). But given a firewall's choice between sending
|
||
a reset or just dropping the packet, we would argue that just
|
||
dropping the packet does less damage, in terms of giving an incentive
|
||
to end-hosts to adopt counter-measures. It is true that just
|
||
dropping the packet, without sending a reset, results in delay for
|
||
the TCP connection in resending the SYN packet without the prohibited
|
||
functionality. However, sending a reset has the undesirable longer-
|
||
term effect of giving an incentive to future TCP implementations to
|
||
add more baroque combinations of resending SYN packets in response to
|
||
a reset, because the TCP sender can't tell if the reset is for a
|
||
standard reason, for congestion, or for the prohibited functionality
|
||
of option X or reserved bit Y in the TCP header.
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 11]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
6.2. The Complications of Modifying Packet Headers in the Network
|
||
|
||
In addition to firewalls that send resets in response to ECN-setup
|
||
SYN packets and firewalls that drop ECN-setup SYN packets, there also
|
||
exist firewalls that by default zero the flags in the TCP Reserved
|
||
field, including the two flags used for ECN. We note that in some
|
||
cases this could have unintended and undesirable consequences.
|
||
|
||
If a firewall zeros the ECN-related flags in the TCP header in the
|
||
initial SYN packet, then the TCP connection will be set up without
|
||
using ECN, and the ECN-related flags in the TCP header will be sent
|
||
zeroed-out in all of the subsequent packets in this connection. This
|
||
will accomplish the firewall's purpose of blocking ECN, while
|
||
allowing the TCP connection to proceed efficiently and smoothly
|
||
without using ECN.
|
||
|
||
If for some reason the ECN-related flags in the TCP header aren't
|
||
zeroed in the initial SYN packet from host A to host B, but the
|
||
firewall does zero those flags in the responding SYN/ACK packet from
|
||
host B to host A, the consequence could be to subvert end-to-end
|
||
congestion control for this connection. The ECN specifications were
|
||
not written to ensure robust operation in the presence of the
|
||
arbitrary zeroing of TCP header fields within the network, because it
|
||
didn't occur to the authors of the protocol at the time that this was
|
||
a requirement in protocol design.
|
||
|
||
Similarly, if the ECN-related flags in the TCP header are not zeroed
|
||
in either the SYN or the SYN/ACK packet, but the firewall does zero
|
||
these flags in later packets in that TCP connection, this could also
|
||
have the unintended consequence of subverting end-to-end congestion
|
||
control for this connection. The details of these possible
|
||
interactions are not crucial for this document, and are described in
|
||
the appendix. However, our conclusion, both for the ECN-related
|
||
flags in the TCP header and for future uses of the four other bits in
|
||
the TCP Reserved field, would be that if it is required for firewalls
|
||
to be able to block the use of a new function being added to a
|
||
protocol, this is best addressed in the initial design phase by joint
|
||
cooperation between the firewall community and the protocol
|
||
designers.
|
||
|
||
7. Conclusions
|
||
|
||
Our conclusion is that it is not conformant with current standards
|
||
for a firewall, load-balancer, or web-server to respond with a reset
|
||
to a TCP SYN packet simply because the packet uses flags in the TCP
|
||
Reserved field. More specifically, it is not conformant to respond
|
||
with a reset to a TCP SYN packet simply because the ECE and CWR flags
|
||
are set in the IP header. We would urge vendors to make available
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 12]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
fixes for any nonconformant code, and we could urge ISPs and system
|
||
administrators to deploy these fixes in their web servers and
|
||
firewalls.
|
||
|
||
We don't claim that it violates any standard for middleboxes to
|
||
arbitrarily drop packets that use flags in the TCP Reserved field,
|
||
but we would argue that behavior of this kind, without a clear method
|
||
for informing the end-nodes of the reasons for these actions, could
|
||
present a significant obstacle to the development of TCP. More work
|
||
is clearly needed to reconcile the conflicting interests of providing
|
||
security while at the same time allowing the careful evolution of
|
||
Internet protocols.
|
||
|
||
8. Acknowledgements
|
||
|
||
This document results from discussions and activity by many people,
|
||
so I will refrain from trying to acknowledge all of them here. My
|
||
specific thanks go to Ran Atkinson, Steve Bellovin, Alex Cannara,
|
||
Dennis Ferguson, Ned Freed, Mark Handley, John Klensin, Allison
|
||
Mankin, Jitendra Padhye, Vern Paxson, K. K. Ramakrishnan, Jamal Hadi
|
||
Salim, Pekka Savola, Alex Snoeren, and Dan Wing for feedback on this
|
||
document, and to the End-to-End Research Group, the IAB, and the IESG
|
||
for discussion of these issues. I thank Mikael Olsson for numerous
|
||
rounds of feedback. I also thank the members of the Firewall Wizards
|
||
mailing list for feedback (generally of disagreement) on an earlier
|
||
draft of this document.
|
||
|
||
Email discussions with a number of people, including Dax Kelson,
|
||
Alexey Kuznetsov, Kacheong Poon, David Reed, Jamal Hadi-Salim, and
|
||
Venkat Venkatsubra, have addressed the issues raised by non-
|
||
conformant equipment in the Internet that does not respond to TCP SYN
|
||
packets with the ECE and CWR flags set. We thank Mark Handley,
|
||
Jitentra Padhye, and others for discussions on the TCP initialization
|
||
procedures.
|
||
|
||
9. Normative References
|
||
|
||
[RFC793] Postel, J., "Transmission Control Protocol - DARPA
|
||
Internet Program Protocol Specification", STD 7, RFC 793,
|
||
September 1981.
|
||
|
||
[RFC1122] Braden, R., "Requirements for Internet Hosts --
|
||
Communication Layers", STD 3, RFC 1122, October 1989.
|
||
|
||
[RFC1812] Baker, F., "Requirements for IP Version 4 Routers", RFC
|
||
1812, June 1995.
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 13]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
[RFC2026] Bradner, S., "The Internet Standards Process -- Revision
|
||
3", BCP 9, RFC 2026, October 1996.
|
||
|
||
[RFC2481] Ramakrishnan, K. and S. Floyd, "A Proposal to add Explicit
|
||
Congestion Notification (ECN) to IP", RFC 2481, January
|
||
1999.
|
||
|
||
[RFC2873] Xiao, X., Hannan, A., Paxson, V., and E. Crabbe, "TCP
|
||
Processing of the IPv4 Precedence Field, RFC 2873, June
|
||
2000.
|
||
|
||
[RFC2979] Freed, N., " Behavior of and Requirements for Internet
|
||
Firewalls", RFC 2979, October 2000.
|
||
|
||
[RFC3168] Ramakrishnan, K., Floyd, S. and D. Black, "The Addition
|
||
of Explicit Congestion Notification (ECN) to IP", RFC
|
||
3168, September 2001.
|
||
|
||
10. Informative References
|
||
|
||
[B01] Bellovin, S., "A "Reason" Field for ICMP "Administratively
|
||
Prohibited" Messages", Work in Progress.
|
||
|
||
[Cou01] Scott Courtney, Why Can't My 2.4 Kernel See Some Web
|
||
Sites?, Enterprise Linux Today, Apr 17, 2001. URL
|
||
"http://eltoday.com/article.php3?ltsn=2001-04-17-001-14-
|
||
PS".
|
||
|
||
[ECN] "The ECN Web Page", URL
|
||
"http://www.icir.org/floyd/ecn.html".
|
||
|
||
[FIXES] ECN-under-Linux Unofficial Vendor Support Page, URL
|
||
"http://gtf.org/garzik/ecn/".
|
||
|
||
[Floyd00] Sally Floyd, Negotiating ECN-Capability in a TCP
|
||
connection, October 2, 2000, email to the end2end-interest
|
||
mailing list. URL
|
||
"http://www.icir.org/floyd/papers/ECN.Oct2000.txt".
|
||
|
||
[Kelson00] Dax Kelson, note sent to the Linux kernel mailing list,
|
||
September 10, 2000.
|
||
|
||
[QUESO] Toby Miller, Intrusion Detection Level Analysis of Nmap
|
||
and Queso, August 30, 2000. URL
|
||
"http://www.securityfocus.com/infocus/1225".
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 14]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
[Ste94] Stevens, W., "TCP/IP Illustrated, Volume 1: The
|
||
Protocols", Addison-Wesley, 1994.
|
||
|
||
[SFO01] FreeBSD ipfw Filtering Evasion Vulnerability, Security
|
||
Focus Online, January 23, 2001. URL
|
||
"http://www.securityfocus.com/bid/2293".
|
||
|
||
[TBIT] Jitendra Padhye and Sally Floyd, Identifying the TCP
|
||
Behavior of Web Servers, SIGCOMM, August 2001. URL
|
||
"http://www.icir.org/tbit/".
|
||
|
||
11. Security Considerations
|
||
|
||
One general risk of using Reserved flags in TCP is the risk of
|
||
providing additional information about the configuration of the host
|
||
in question. However, TCP is sufficiently loosely specified as it
|
||
is, with sufficiently many variants and options, that port-scanning
|
||
tools such as Nmap and Queso do rather well in identifying the
|
||
configuration of hosts even without the use of Reserved flags.
|
||
|
||
The security considerations and all other considerations of a
|
||
possible ICMP Destination Unreachable message with the code
|
||
"Communication Administratively Prohibited" will be discussed in a
|
||
separate document.
|
||
|
||
The traditional concern of firewalls is to prevent unauthorized
|
||
access to systems, to prevent DoS attacks and other attacks from
|
||
subverting the end-user terminal, and to protect end systems from
|
||
buggy code. We are aware of one security vulnerability reported from
|
||
the use of the Reserved flags in the TCP header [SFO01]. A packet
|
||
filter intended only to let through packets in established
|
||
connections can let pass a packet not in an established connection if
|
||
the packet has the ECE flag set in the reserved field. "Exploitation
|
||
of this vulnerability may allow for unauthorized remote access to
|
||
otherwise protected services." It is also possible that an
|
||
implementation of TCP could appear that has buggy code associated
|
||
with the use of Reserved flags in the TCP header, but we are not
|
||
aware of any such implementation at the moment.
|
||
|
||
Unfortunately, misconceived security concerns are one of the reasons
|
||
for the problems described in this document in the first place. An
|
||
August, 2000, article on "Intrusion Detection Level Analysis of Nmap
|
||
and Queso" described the port-scanning tool Queso as sending SYN
|
||
packets with the last two Reserved bits in the TCP header set, and
|
||
said the following: "[QUESO] is easy to identify, if you see [these
|
||
two Reserved bits and the SYN bit] set in the 13th byte of the TCP
|
||
header, you know that someone has malicious intentions for your
|
||
network." As is documented on the TBIT Web Page, the middleboxes
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 15]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
that block SYNs using the two ECN-related Reserved flags in the TCP
|
||
header do not block SYNs using other Reserved flags in the TCP
|
||
header.
|
||
|
||
One lesson appears to be that anyone can effectively "attack" a new
|
||
TCP function simply by using that function in their publicly-
|
||
available port-scanning tool, thus causing middleboxes of all kinds
|
||
to block the use of that function.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 16]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
12. Appendix: The Complications of Modifying Packet Headers
|
||
|
||
In this section we first show that if the ECN-related flags in the
|
||
TCP header aren't zeroed in the initial SYN packet from Host A to
|
||
Host B, but are zeroed in the responding SYN/ACK packet from Host B
|
||
to Host A, the consequence could be to subvert end-to-end congestion
|
||
control for this connection.
|
||
|
||
Assume that the ECN-setup SYN packet from Host A is received by Host
|
||
B, but the ECN-setup SYN/ACK from Host B is modified by a firewall in
|
||
the network to a non-ECN-setup SYN/ACK, as in Figure 3 below. RFC
|
||
3168 does not specify that the ACK packet in any way should echo the
|
||
TCP flags received in the SYN/ACK packet, because it had not occurred
|
||
to the designers that these flags would be modified within the
|
||
network.
|
||
|
||
Host A Firewall or router Host B
|
||
-----------------------------------------------------------------
|
||
Sends ECN-setup SYN ----------------> Receives ECN-setup SYN
|
||
<- Sends ECN-setup SYN/ACK
|
||
<- Firewall zeros flags
|
||
Receives non-ECN-setup SYN/ACK
|
||
Sends ACK and data ----------------> Receives ACK and data
|
||
<- Sends data packet with ECT
|
||
<- Router sets CE
|
||
Receives data packet with ECT and CE
|
||
|
||
Figure 3: ECN-related flags in SYN/ACK packet cleared in network.
|
||
|
||
Following RFC 3168, Host A has received a non-ECN-setup SYN/ACK
|
||
packet, and must not set ECT on data packets. Host B, however, does
|
||
not know that Host A has received a non-ECN-setup SYN/ACK packet, and
|
||
Host B may set ECT on data packets. RFC 3168 does not require Host A
|
||
to respond properly to data packets received from Host B with the ECT
|
||
and CE codepoints set in the IP header. Thus, the data sender, Host
|
||
B, might never be informed about the congestion encountered in the
|
||
network, thus violating end-to-end congestion control.
|
||
|
||
Next we show that if the ECN-related flags in the TCP header are not
|
||
zeroed in either the SYN or the SYN/ACK packet, but the firewall does
|
||
zero these flags in later packets in that TCP connection, this could
|
||
also have the unintended consequence of subverting end-to-end
|
||
congestion control for this connection. Figure 4 shows this
|
||
scenario.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 17]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
Host A Firewall or router Host B
|
||
-----------------------------------------------------------------
|
||
Sends ECN-setup SYN ----------------> Receives ECN-setup SYN
|
||
Receives ECN-setup SYN/ACK <------------ Sends ECN-setup SYN/ACK
|
||
Sends ACK and data ----------------> Receives ACK and data
|
||
<- Sends data packet with ECT
|
||
<- Router sets CE
|
||
Receives data packet with ECT and CE
|
||
Sends ACK with ECE ->
|
||
Firewall resets ECE ->
|
||
Receives plain ACK
|
||
|
||
Figure 4: ECN-related flags in ACK packet cleared in network.
|
||
|
||
The ECN-related flags are not changed by the network in the ECN-setup
|
||
SYN and SYN/ACK packets for the scenario in Figure 4, and both end
|
||
nodes are free to use ECN, and to set the ECT flag in the ECN field
|
||
in the IP header. However, if the firewall clears the ECE flag in
|
||
the TCP header in ACK packets from Node A to Node B, then Node B will
|
||
never hear about the congestion that its earlier data packets
|
||
encountered in the network, thus subverting end-to-end congestion
|
||
control for this connection.
|
||
|
||
Additional complications will arise when/if the use of the ECN nonce
|
||
in TCP becomes standardized in the IETF [RFC3168], as this could
|
||
involve the specification of an additional flag from the TCP Reserved
|
||
field for feedback from the TCP data receiver to the TCP data sender.
|
||
The primary motivation for the ECN nonce is to allow mechanisms for
|
||
the data sender to verify that network elements are not erasing the
|
||
CE codepoint, and that data receivers are properly reporting to the
|
||
sender the receipt of packets with the CE codepoint set.
|
||
|
||
13. IANA Considerations
|
||
|
||
There are no IANA considerations in this document.
|
||
|
||
14. Author's Address
|
||
|
||
Sally Floyd
|
||
ICIR (ICSI Center for Internet Research)
|
||
|
||
Phone: +1 (510) 666-2989
|
||
EMail: floyd@icir.org
|
||
URL: http://www.icir.org/floyd/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 18]
|
||
|
||
RFC 3360 Inappropriate TCP Resets August 2002
|
||
|
||
|
||
15. Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2002). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published
|
||
and distributed, in whole or in part, without restriction of any
|
||
kind, provided that the above copyright notice and this paragraph are
|
||
included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be
|
||
followed, or as required to translate it into languages other than
|
||
English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||
TASK FORCE DISCLAIMS 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.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Floyd Best Current Practice [Page 19]
|
||
|