summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc4987.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc4987.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc4987.txt')
-rw-r--r--doc/rfc/rfc4987.txt1067
1 files changed, 1067 insertions, 0 deletions
diff --git a/doc/rfc/rfc4987.txt b/doc/rfc/rfc4987.txt
new file mode 100644
index 0000000..636c337
--- /dev/null
+++ b/doc/rfc/rfc4987.txt
@@ -0,0 +1,1067 @@
+
+
+
+
+
+
+Network Working Group W. Eddy
+Request for Comments: 4987 Verizon
+Category: Informational August 2007
+
+
+ TCP SYN Flooding Attacks and Common Mitigations
+
+Status of This Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The IETF Trust (2007).
+
+Abstract
+
+ This document describes TCP SYN flooding attacks, which have been
+ well-known to the community for several years. Various
+ countermeasures against these attacks, and the trade-offs of each,
+ are described. This document archives explanations of the attack and
+ common defense techniques for the benefit of TCP implementers and
+ administrators of TCP servers or networks, but does not make any
+ standards-level recommendations.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 2. Attack Description . . . . . . . . . . . . . . . . . . . . . . 2
+ 2.1. History . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2.2. Theory of Operation . . . . . . . . . . . . . . . . . . . 3
+ 3. Common Defenses . . . . . . . . . . . . . . . . . . . . . . . 6
+ 3.1. Filtering . . . . . . . . . . . . . . . . . . . . . . . . 6
+ 3.2. Increasing Backlog . . . . . . . . . . . . . . . . . . . . 7
+ 3.3. Reducing SYN-RECEIVED Timer . . . . . . . . . . . . . . . 7
+ 3.4. Recycling the Oldest Half-Open TCB . . . . . . . . . . . . 7
+ 3.5. SYN Cache . . . . . . . . . . . . . . . . . . . . . . . . 8
+ 3.6. SYN Cookies . . . . . . . . . . . . . . . . . . . . . . . 8
+ 3.7. Hybrid Approaches . . . . . . . . . . . . . . . . . . . . 10
+ 3.8. Firewalls and Proxies . . . . . . . . . . . . . . . . . . 10
+ 4. Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+ 5. Security Considerations . . . . . . . . . . . . . . . . . . . 13
+ 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13
+ 7. Informative References . . . . . . . . . . . . . . . . . . . . 13
+ Appendix A. SYN Cookies Description . . . . . . . . . . . . . . . 16
+
+
+
+
+Eddy Informational [Page 1]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+1. Introduction
+
+ The SYN flooding attack is a denial-of-service method affecting hosts
+ that run TCP server processes. The attack takes advantage of the
+ state retention TCP performs for some time after receiving a SYN
+ segment to a port that has been put into the LISTEN state. The basic
+ idea is to exploit this behavior by causing a host to retain enough
+ state for bogus half-connections that there are no resources left to
+ establish new legitimate connections.
+
+ This SYN flooding attack has been well-known to the community for
+ many years, and has been observed in the wild by network operators
+ and end hosts. A number of methods have been developed and deployed
+ to make SYN flooding less effective. Despite the notoriety of the
+ attack, and the widely available countermeasures, the RFC series only
+ documented the vulnerability as an example motivation for ingress
+ filtering [RFC2827], and has not suggested any mitigation techniques
+ for TCP implementations. This document addresses both points, but
+ does not define any standards. Formal specifications and
+ requirements of defense mechanisms are outside the scope of this
+ document. Many defenses only impact an end host's implementation
+ without changing interoperability. These may not require
+ standardization, but their side-effects should at least be well
+ understood.
+
+ This document intentionally focuses on SYN flooding attacks from an
+ individual end host or application's perspective, as a means to deny
+ service to that specific entity. High packet-rate attacks that
+ target the network's packet-processing capability and capacity have
+ been observed operationally. Since such attacks target the network,
+ and not a TCP implementation, they are out of scope for this
+ document, whether or not they happen to use TCP SYN segments as part
+ of the attack, as the nature of the packets used is irrelevant in
+ comparison to the packet-rate in such attacks.
+
+ The majority of this document consists of three sections. Section 2
+ explains the SYN flooding attack in greater detail. Several common
+ mitigation techniques are described in Section 3. An analysis and
+ discussion of these techniques and their use is presented in
+ Section 4. Further information on SYN cookies is contained in
+ Appendix A.
+
+2. Attack Description
+
+ This section describes both the history and the technical basis of
+ the SYN flooding attack.
+
+
+
+
+
+Eddy Informational [Page 2]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+2.1. History
+
+ The TCP SYN flooding weakness was discovered as early as 1994 by Bill
+ Cheswick and Steve Bellovin [B96]. They included, and then removed,
+ a paragraph on the attack in their book "Firewalls and Internet
+ Security: Repelling the Wily Hacker" [CB94]. Unfortunately, no
+ countermeasures were developed within the next two years.
+
+ The SYN flooding attack was first publicized in 1996, with the
+ release of a description and exploit tool in Phrack Magazine
+ [P48-13]. Aside from some minor inaccuracies, this article is of
+ high enough quality to be useful, and code from the article was
+ widely distributed and used.
+
+ By September of 1996, SYN flooding attacks had been observed in the
+ wild. Particularly, an attack against one ISP's mail servers caused
+ well-publicized outages. CERT quickly released an advisory on the
+ attack [CA-96.21]. SYN flooding was particularly serious in
+ comparison to other known denial-of-service attacks at the time.
+ Rather than relying on the common brute-force tactic of simply
+ exhausting the network's resources, SYN flooding targets end-host
+ resources, which require fewer packets to deplete.
+
+ The community quickly developed many widely differing techniques for
+ preventing or limiting the impact of SYN flooding attacks. Many of
+ these have been deployed to varying degrees on the Internet, in both
+ end hosts and intervening routers. Some of these techniques have
+ become important pieces of the TCP implementations in certain
+ operating systems, although some significantly diverge from the TCP
+ specification and none of these techniques have yet been standardized
+ or sanctioned by the IETF process.
+
+2.2. Theory of Operation
+
+ As described in RFC 793, a TCP implementation may allow the LISTEN
+ state to be entered with either all, some, or none of the pair of IP
+ addresses and port numbers specified by the application. In many
+ common applications like web servers, none of the remote host's
+ information is pre-known or preconfigured, so that a connection can
+ be established with any client whose details are unknown to the
+ server ahead of time. This type of "unbound" LISTEN is the target of
+ SYN flooding attacks due to the way it is typically implemented by
+ operating systems.
+
+ For success, the SYN flooding attack relies on the victim host TCP
+ implementation's behavior. In particular, it assumes that the victim
+ allocates state for every TCP SYN segment when it is received, and
+ that there is a limit on the amount of such state than can be kept at
+
+
+
+Eddy Informational [Page 3]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ any time. The current base TCP specification, RFC 793 [RFC0793],
+ describes the standard processing of incoming SYN segments. RFC 793
+ describes the concept of a Transmission Control Block (TCB) data
+ structure to store all the state information for an individual
+ connection. In practice, operating systems may implement this
+ concept rather differently, but the key is that each TCP connection
+ requires some memory space.
+
+ Per RFC 793, when a SYN is received for a local TCP port where a
+ connection is in the LISTEN state, then the state transitions to SYN-
+ RECEIVED, and some of the TCB is initialized with information from
+ the header fields of the received SYN segment. In practice, many
+ operating systems do not alter the TCB in LISTEN, but instead make a
+ copy of the TCB and perform the state transition and update on the
+ copy. This is done so that the local TCP port may be shared amongst
+ several distinct connections. This TCB-copying behavior is not
+ actually essential for this purpose, but influences the way in which
+ applications that wish to handle multiple simultaneous connections
+ through a single TCP port are written. The crucial result of this
+ behavior is that, instead of updating already-allocated memory, new
+ (or unused) memory must be devoted to the copied TCB.
+
+ As an example, in the Linux 2.6.10 networking code, a "sock"
+ structure is used to implement the TCB concept. By examination, this
+ structure takes over 1300 bytes to store in memory. In other systems
+ that implement less-complex TCP algorithms and options, the overhead
+ may be less, although it typically exceeds 280 bytes [SKK+97].
+
+ To protect host memory from being exhausted by connection requests,
+ the number of TCB structures that can be resident at any time is
+ usually limited by operating system kernels. Systems vary on whether
+ limits are globally applied or local to a particular port number.
+ There is also variation on whether the limits apply to fully
+ established connections as well as those in SYN-RECEIVED. Commonly,
+ systems implement a parameter to the typical listen() system call
+ that allows the application to suggest a value for this limit, called
+ the backlog. When the backlog limit is reached, then either incoming
+ SYN segments are ignored, or uncompleted connections in the backlog
+ are replaced. The concept of using a backlog is not described in the
+ standards documents, so the failure behavior when the backlog is
+ reached might differ between stacks (for instance, TCP RSTs might be
+ generated). The exact failure behavior will determine whether
+ initiating hosts continue to retransmit SYN segments over time, or
+ quickly cease. These differences in implementation are acceptable
+ since they only affect the behavior of the local stack when its
+ resources are constrained, and do not cause interoperability
+ problems.
+
+
+
+
+Eddy Informational [Page 4]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ The SYN flooding attack does not attempt to overload the network's
+ resources or the end host's memory, but merely attempts to exhaust
+ the backlog of half-open connections associated with a port number.
+ The goal is to send a quick barrage of SYN segments from IP addresses
+ (often spoofed) that will not generate replies to the SYN-ACKs that
+ are produced. By keeping the backlog full of bogus half-opened
+ connections, legitimate requests will be rejected. Three important
+ attack parameters for success are the size of the barrage, the
+ frequency with which barrages are generated, and the means of
+ selecting IP addresses to spoof.
+
+ Barrage Size
+
+ To be effective, the size of the barrage must be made large enough
+ to reach the backlog. Ideally, the barrage size is no larger than
+ the backlog, minimizing the volume of traffic the attacker must
+ source. Typical default backlog values vary from a half-dozen to
+ several dozen, so the attack might be tailored to the particular
+ value determined by the victim host and application. On machines
+ intended to be servers, especially for a high volume of traffic,
+ the backlogs are often administratively configured to higher
+ values.
+
+ Barrage Frequency
+
+ To limit the lifetime of half-opened connection state, TCP
+ implementations commonly reclaim memory from half-opened
+ connections if they do not become fully opened after some time
+ period. For instance, a timer of 75 seconds [SKK+97] might be set
+ when the first SYN-ACK is sent, and on expiration cause SYN-ACK
+ retransmissions to cease and the TCB to be released. The TCP
+ specifications do not include this behavior of giving up on
+ connection establishment after an arbitrary time. Some purists
+ have expressed that the TCP implementation should continue
+ retransmitting SYN and SYN-ACK segments without artificial bounds
+ (but with exponential backoff to some conservative rate) until the
+ application gives up. Despite this, common operating systems
+ today do implement some artificial limit on half-open TCB
+ lifetime. For instance, backing off and stopping after a total of
+ 511 seconds can be observed in 4.4 BSD-Lite [Ste95], and is still
+ practiced in some operating systems derived from this code.
+
+ To remain effective, a SYN flooding attack needs to send new
+ barrages of bogus connection requests as soon as the TCBs from the
+ previous barrage begin to be reclaimed. The frequency of barrages
+ are tailored to the victim TCP implementation's TCB reclamation
+ timer. Frequencies higher than needed source more packets,
+ potentially drawing more attention, and frequencies that are too
+
+
+
+Eddy Informational [Page 5]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ low will allow windows of time where legitimate connections can be
+ established.
+
+ IP Address Selection
+
+ For an effective attack, it is important that the spoofed IP
+ addresses be unresponsive to the SYN-ACK segments that the victim
+ will generate. If addresses of normal connected hosts are used,
+ then those hosts will send the victim a TCP reset segment that
+ will immediately free the corresponding TCB and allow room in the
+ backlog for legitimate connections to be made. The code
+ distributed in the original Phrack article used a single source
+ address for all spoofed SYN segments. This makes the attack
+ segments somewhat easier to identify and filter. A strong
+ attacker will have a list of unresponsive and unrelated addresses
+ that it chooses spoofed source addresses from.
+
+ It is important to note that this attack is directed at particular
+ listening applications on a host, and not the host itself or the
+ network. The attack also attempts to prevent only the establishment
+ of new incoming connections to the victim port, and does not impact
+ outgoing connection requests, nor previously established connections
+ to the victim port.
+
+ In practice, an attacker might choose not to use spoofed IP
+ addresses, but instead to use a multitude of hosts to initiate a SYN
+ flooding attack. For instance, a collection of compromised hosts
+ under the attacker's control (i.e., a "botnet") could be used. In
+ this case, each host utilized in the attack would have to suppress
+ its operating system's native response to the SYN-ACKs coming from
+ the target. It is also possible for the attack TCP segments to
+ arrive in a more continuous fashion than the "barrage" terminology
+ used here suggests; as long as the rate of new SYNs exceeds the rate
+ at which TCBs are reaped, the attack will be successful.
+
+3. Common Defenses
+
+ This section discusses a number of defense techniques that are known
+ to the community, many of which are available in off-the-shelf
+ products.
+
+3.1. Filtering
+
+ Since in the absence of an army of controlled hosts, the ability to
+ send packets with spoofed source IP addresses is required for this
+ attack to work, removing an attacker's ability to send spoofed IP
+ packets is an effective solution that requires no modifications to
+ TCP. The filtering techniques described in RFCs 2827, 3013, and 3704
+
+
+
+Eddy Informational [Page 6]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ represent the best current practices for packet filtering based on IP
+ addresses [RFC2827][RFC3013][RFC3704]. While perfectly effective,
+ end hosts should not rely on filtering policies to prevent attacks
+ from spoofed segments, as global deployment of filters is neither
+ guaranteed nor likely. An attacker with the ability to use a group
+ of compromised hosts or to rapidly change between different access
+ providers will also make filtering an impotent solution.
+
+3.2. Increasing Backlog
+
+ An obvious attempt at a defense is for end hosts to use a larger
+ backlog. Lemon has shown that in FreeBSD 4.4, this tactic has some
+ serious negative aspects as the size of the backlog grows [Lem02].
+ The implementation has not been designed to scale past backlogs of a
+ few hundred, and the data structures and search algorithms that it
+ uses are inefficient with larger backlogs. It is reasonable to
+ assume that other TCP implementations have similar design factors
+ that limit their performance with large backlogs, and there seems to
+ be no compelling reason why stacks should be re-engineered to support
+ extremely large backlogs, since other solutions are available.
+ However, experiments with large backlogs using efficient data
+ structures and search algorithms have not been conducted, to our
+ knowledge.
+
+3.3. Reducing SYN-RECEIVED Timer
+
+ Another quickly implementable defense is shortening the timeout
+ period between receiving a SYN and reaping the created TCB for lack
+ of progress. Decreasing the timer that limits the lifetime of TCBs
+ in SYN-RECEIVED is also flawed. While a shorter timer will keep
+ bogus connection attempts from persisting for as long in the backlog,
+ and thus free up space for legitimate connections sooner, it can
+ prevent some fraction of legitimate connections from becoming fully
+ established. This tactic is also ineffective because it only
+ requires the attacker to increase the barrage frequency by a linearly
+ proportional amount. This timer reduction is sometimes implemented
+ as a response to crossing some threshold in the backlog occupancy, or
+ some rate of SYN reception.
+
+3.4. Recycling the Oldest Half-Open TCB
+
+ Once the entire backlog is exhausted, some implementations allow
+ incoming SYNs to overwrite the oldest half-open TCB entry. This
+ works under the assumption that legitimate connections can be fully
+ established in less time than the backlog can be filled by incoming
+ attack SYNs. This can fail when the attacking packet rate is high
+ and/or the backlog size is small, and is not a robust defense.
+
+
+
+
+Eddy Informational [Page 7]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+3.5. SYN Cache
+
+ The SYN cache, best described by Lemon [Lem02], is based on
+ minimizing the amount of state that a SYN allocates, i.e., not
+ immediately allocating a full TCB. The full state allocation is
+ delayed until the connection has been fully established. Hosts
+ implementing a SYN cache have some secret bits that they select from
+ the incoming SYN segments. The secret bits are hashed along with the
+ IP addresses and TCP ports of a segment, and the hash value
+ determines the location in a global hash table where the incomplete
+ TCB is stored. There is a bucket limit for each hash value, and when
+ this limit is reached, the oldest entry is dropped.
+
+ The SYN cache technique is effective because the secret bits prevent
+ an attacker from being able to target specific hash values for
+ overflowing the bucket limit, and it bounds both the CPU time and
+ memory requirements. Lemon's evaluation of the SYN cache shows that
+ even under conditions where a SYN flooding attack is not being
+ performed, due to the modified processing path, connection
+ establishment is slightly more expedient. Under active attack, SYN
+ cache performance was observed to approximately linearly shift the
+ distribution of times to establish legitimate connections to about
+ 15% longer than when not under attack [Lem02].
+
+ If data accompanies the SYN segment, then this data is not
+ acknowledged or stored by the receiver, and will require
+ retransmission. This does not affect the reliability of TCP's data
+ transfer service, but it does affect its performance to some small
+ extent. SYNs carrying data are used by the T/TCP extensions
+ [RFC1644]. While T/TCP is implemented in a number of popular
+ operating systems [GN00], it currently seems to be rarely used.
+ Measurements at one site's border router [All07] logged 2,545,785 SYN
+ segments (not SYN-ACKs), of which 36 carried the T/TCP CCNEW option
+ (or 0.001%). These came from 26 unique hosts, and no other T/TCP
+ options were seen. 2,287 SYN segments with data were seen (or 0.09%
+ of all SYN segments), all of which had exactly 24 bytes of data.
+ These observations indicate that issues with SYN caches and data on
+ SYN segments may not be significant in deployment.
+
+3.6. SYN Cookies
+
+ SYN cookies go a step further and allocate no state at all for
+ connections in SYN-RECEIVED. Instead, they encode most of the state
+ (and all of the strictly required) state that they would normally
+ keep into the sequence number transmitted on the SYN-ACK. If the SYN
+ was not spoofed, then the acknowledgement number (along with several
+ other fields) in the ACK that completes the handshake can be used to
+ reconstruct the state to be put into the TCB. To date, one of the
+
+
+
+Eddy Informational [Page 8]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ best references on SYN cookies can be found on Dan Bernstein's web
+ site [cr.yp.to]. This technique exploits the long-understood low
+ entropy in TCP header fields [RFC1144][RFC4413]. In Appendix A, we
+ describe the SYN cookie technique, to avoid the possibility that the
+ web page will become unavailable.
+
+ The exact mechanism for encoding state into the SYN-ACK sequence
+ number can be implementation dependent. A common consideration is
+ that to prevent replay, some time-dependent random bits must be
+ embedded in the sequence number. One technique used 7 bits for these
+ bits and 25 bits for the other data [Lem02]. One way to encode these
+ bits has been to XOR the initial sequence number received with a
+ truncated cryptographic hash of the IP address and TCP port number
+ pairs, and secret bits. In practice, this hash has been generated
+ using MD5 [RFC1321]. Any similar one-way hash could be used instead
+ without impacting interoperability since the hash value is checked by
+ the same host who generates it.
+
+ The problem with SYN cookies is that commonly implemented schemes are
+ incompatible with some TCP options, if the cookie generation scheme
+ does not consider them. For example, an encoding of the Maximum
+ Segment Size (MSS) advertised on the SYN has been accommodated by
+ using 2 sequence number bits to represent 4 predefined common MSS
+ values. Similar techniques would be required for some other TCP
+ options, while negotiated use of other TCP options can be detected
+ implicitly. A timestamp on the ACK, as an example, indicates that
+ Timestamp use was successfully negotiated on the SYN and SYN-ACK,
+ while the reception of a Selective Acknowledgement (SACK) option at
+ some point during the connection implies that SACK was negotiated.
+ Note that SACK blocks should normally not be sent by a host using TCP
+ cookies unless they are first received. For the common
+ unidirectional data flow in many TCP connections, this can be a
+ problem, as it limits SACK usage. For this reason, SYN cookies
+ typically are not used by default on systems that implement them, and
+ are only enabled either under high-stress conditions indicative of an
+ attack, or via administrative action.
+
+ Recently, a new SYN cookie technique developed for release in FreeBSD
+ 7.0 leverages the bits of the Timestamp option in addition to the
+ sequence number bits for encoding state. Since the Timestamp value
+ is echoed back in the Timestamp Echo field of the ACK packet, any
+ state stored in the Timestamp option can be restored similarly to the
+ way that it is from the sequence number / acknowledgement in a basic
+ SYN cookie. Using the Timestamp bits, it is possible to explicitly
+ store state bits for things like send and receive window scales,
+ SACK-allowed, and TCP-MD5-enabled, for which there is no room in a
+ typical SYN cookie. This use of Timestamps to improve the
+ compromises inherent in SYN cookies is unique to the FreeBSD
+
+
+
+Eddy Informational [Page 9]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ implementation, to our knowledge. A limitation is that the technique
+ can only be used if the SYN itself contains a Timestamp option, but
+ this option seems to be widely implemented today, and hosts that
+ support window scaling and SACK typically support timestamps as well.
+
+ Similarly to SYN caches, SYN cookies do not handle application data
+ piggybacked on the SYN segment.
+
+ Another problem with SYN cookies is for applications where the first
+ application data is sent by the passive host. If this host is
+ handling a large number of connections, then packet loss may be
+ likely. When a handshake-completing ACK from the initiator is lost,
+ the passive side's application layer never is notified of the
+ connection's existence and never sends data, even though the
+ initiator thinks that the connection has been successfully
+ established. An example application where the first application-
+ layer data is sent by the passive side is SMTP, if implemented
+ according to RFC 2821, where a "service ready" message is sent by the
+ passive side after the TCP handshake is completed.
+
+ Although SYN cookie implementations exist and are deployed, the use
+ of SYN cookies is often disabled in default configurations, so it is
+ unclear how much operational experience actually exists with them or
+ if using them opens up new vulnerabilities. Anecdotes of incidents
+ where SYN cookies have been used on typical web servers seem to
+ indicate that the added processing burden of computing MD5 sums for
+ every SYN packet received is not significant in comparison to the
+ loss of application availability when undefended. For some
+ computationally constrained mobile or embedded devices, this
+ situation might be different.
+
+3.7. Hybrid Approaches
+
+ The SYN cache and SYN cookie techniques can be combined. For
+ example, in the event that the cache becomes full, then SYN cookies
+ can be sent instead of purging cache entries upon the arrival of new
+ SYNs. Such hybrid approaches may provide a strong combination of the
+ positive aspects of each approach. Lemon has demonstrated the
+ utility of this hybrid [Lem02].
+
+3.8. Firewalls and Proxies
+
+ Firewall-based tactics may also be used to defend end hosts from SYN
+ flooding attacks. The basic concept is to offload the connection
+ establishment procedures onto a firewall that screens connection
+ attempts until they are completed and then proxies them back to
+ protected end hosts. This moves the problem away from end hosts to
+ become the firewall's or proxy's problem, and may introduce other
+
+
+
+Eddy Informational [Page 10]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ problems related to altering TCP's expected end-to-end semantics. A
+ common tactic used in these firewall and proxy products is to
+ implement one of the end host based techniques discussed above, and
+ screen incoming SYNs from the protected network until the connection
+ is fully established. This is accomplished by spoofing the source
+ addresses of several packets to the initiator and listener at various
+ stages of the handshake [Eddy06].
+
+4. Analysis
+
+ Several of the defenses discussed in the previous section rely on
+ changes to behavior inside the network; via router filtering,
+ firewalls, and proxies. These may be highly effective, and often
+ require no modification or configuration of end-host software. Given
+ the mobile nature and dynamic connectivity of many end hosts, it is
+ optimistic for TCP implementers to assume the presence of such
+ protective devices. TCP implementers should provide some means of
+ defense to SYN flooding attacks in end-host implementations.
+
+ Among end-host modifications, the SYN cache and SYN cookie approaches
+ seem to be the only viable techniques discovered to date. Increasing
+ the backlog and reducing the SYN-RECEIVED timer are measurably
+ problematic. The SYN cache implies a higher memory footprint than
+ SYN cookies; however, SYN cookies may not be fully compatible with
+ some TCP options, and may hamper development of future TCP extensions
+ that require state. For these reasons, SYN cookies should not be
+ enabled by default on systems that provide them. SYN caches do not
+ have the same negative implications and may be enabled as a default
+ mode of processing.
+
+ In October of 1996, Dave Borman implemented a SYN cache at BSDi for
+ BSD/OS, which was given to the community with no restrictions. This
+ code seems to be the basis for the SYN cache implementations adopted
+ later in other BSD variants. The cache was used when the backlog
+ became full, rather than by default, as we have described. A note to
+ the tcp-impl mailing list explains that this code does not retransmit
+ SYN-ACKs [B97]. More recent implementations have chosen to reverse
+ this decision and retransmit SYN-ACKs. It is known that loss of SYN-
+ ACK packets is not uncommon [SD01] and can severely slow the
+ performance of connections when initial retransmission timers for
+ SYNs are overly conservative (as in some operating systems) or
+ retransmitted SYNs are lost. Furthermore, if a SYN flooding attacker
+ has a high sending rate, loss of retransmitted SYNs is likely, so if
+ SYN-ACKs are not retransmitted, the chance of efficiently
+ establishing legitimate connections is reduced.
+
+
+
+
+
+
+Eddy Informational [Page 11]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ In 1997, NetBSD incorporated a modified version of Borman's code.
+ Two notable differences from the original code stem from the decision
+ to use the cache by default (for all connections). This implied the
+ need to perform retransmissions for SYN-ACKs, and to use larger
+ structures to keep more complete data. The original structure was 32
+ bytes long for IPv4 connections and 56 bytes with IPv6 support, while
+ the current FreeBSD structure is 196 bytes long. As previously
+ cited, Lemon implemented the SYN cache and cookie techniques in
+ FreeBSD 4.4 [Lem02]. Lemon notes that a SYN cache structure took up
+ 160 bytes compared to 736 for the full TCB (now 196 bytes for the
+ cache structure). We have examined the OpenBSD 3.6 code and
+ determined that it includes a similar SYN cache.
+
+ Linux 2.6.5 code, also by examination, contains a SYN cookie
+ implementation that encodes 8 MSS values, and does not use SYN
+ cookies by default. This functionality has been present in the Linux
+ kernel for several years previous to 2.6.5.
+
+ When a SYN cache and/or SYN cookies are implemented with IPv6, the
+ IPv6 flow label value used on the SYN-ACK should be consistent with
+ the flow label used for the rest of the packets within that flow.
+ There have been implementation bugs that caused random flow labels to
+ be used in SYN-ACKs generated by SYN cache and SYN cookie code
+ [MM05].
+
+ Beginning with Windows 2000, Microsoft's Windows operating systems
+ have had a "TCP SYN attack protection" feature, which can be toggled
+ on or off in the registry. This defaulted to off, until Windows 2003
+ SP1, in which it is on by default. With this feature enabled, when
+ the number of half-open connections and half-open connections with
+ retransmitted SYN-ACKs exceeds configurable thresholds, then the
+ number of times that SYN-ACKs are retransmitted before giving up is
+ reduced, and the "Route Cache Entry" creation is delayed, which
+ prevents some features (e.g., window scaling) from being used
+ [win2k3-wp].
+
+ Several vendors of commercial firewall products sell devices that can
+ mitigate SYN flooding's effects on end hosts by proxying connections.
+
+ Discovery and exploitation of the SYN flooding vulnerability in TCP's
+ design provided a valuable lesson for protocol designers. The Stream
+ Control Transmission Protocol [RFC2960], which was designed more
+ recently, incorporated a 4-way handshake with a stateless cookie-
+ based component for the listening end. In this way, the passive-
+ opening side has better evidence that the initiator really exists at
+ the given address before it allocates any state. The Host Identity
+ Protocol base exchange [MNJH07] is similarly designed as a 4-way
+ handshake, but also involves a puzzle sent to the initiator that must
+
+
+
+Eddy Informational [Page 12]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ be solved before any state is reserved by the responder. The general
+ concept of designing statelessness into protocol setup to avoid
+ denial-of-service attacks has been discussed by Aura and Nikander
+ [AN97].
+
+5. Security Considerations
+
+ The SYN flooding attack on TCP has been described in numerous other
+ publications, and the details and code needed to perform the attack
+ have been easily available for years. Describing the attack in this
+ document does not pose any danger of further publicizing this
+ weakness in unmodified TCP stacks. Several widely deployed operating
+ systems implement the mitigation techniques that this document
+ discusses for defeating SYN flooding attacks. In at least some
+ cases, these operating systems do not enable these countermeasures by
+ default; however, the mechanisms for defeating SYN flooding are well
+ deployed, and easily enabled by end-users. The publication of this
+ document should not influence the number of SYN flooding attacks
+ observed, and might increase the robustness of the Internet to such
+ attacks by encouraging use of the commonly available mitigations.
+
+6. Acknowledgements
+
+ A conversation with Ted Faber was the impetus for writing this
+ document. Comments and suggestions from Joe Touch, Dave Borman,
+ Fernando Gont, Jean-Baptiste Marchand, Christian Huitema, Caitlin
+ Bestler, Pekka Savola, Andre Oppermann, Alfred Hoenes, Mark Allman,
+ Lars Eggert, Pasi Eronen, Warren Kumari, David Malone, Ron Bonica,
+ and Lisa Dusseault were useful in strengthening this document. The
+ original work on TCP SYN cookies presented in Appendix A is due to
+ D.J. Bernstein.
+
+ Work on this document was performed at NASA's Glenn Research Center.
+ Funding was partially provided by a combination of NASA's Advanced
+ Communications, Navigation, and Surveillance Architectures and System
+ Technologies (ACAST) project, the Sensis Corporation, NASA's Space
+ Communications Architecture Working Group, and NASA's Earth Science
+ Technology Office.
+
+7. Informative References
+
+ [AN97] Aura, T. and P. Nikander, "Stateless Connections",
+ Proceedings of the First International Conference on
+ Information and Communication Security, 1997.
+
+ [All07] Allman, M., "personal communication", February 2007.
+
+
+
+
+
+Eddy Informational [Page 13]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ [B96] Bennahum, D., "PANIX ATTACK", MEME 2.12, October 1996,
+ <http://memex.org/meme2-12.html>.
+
+ [B97] Borman, D., "Re: SYN/RST cookies (was Re: a quick
+ clarification...)", IETF tcp-impl mailing list,
+ June 1997.
+
+ [CA-96.21] CERT, "CERT Advisory CA-1996-21 TCP SYN Flooding and IP
+ Spoofing Attacks", September 1996.
+
+ [CB94] Cheswick, W. and S. Bellovin, "Firewalls and Internet
+ Security", ISBN: 0201633574, January 1994.
+
+ [Eddy06] Eddy, W., "Defenses Against TCP SYN Flooding Attacks",
+ Cisco Internet Protocol Journal Volume 8, Number 4,
+ December 2006.
+
+ [GN00] Griffin, M. and J. Nelson, "T/TCP: TCP for
+ Transactions", Linux Journal, February 2000.
+
+ [Lem02] Lemon, J., "Resisting SYN Flood DoS Attacks with a SYN
+ Cache", BSDCON 2002, February 2002.
+
+ [MM05] McGann, O. and D. Malone, "Flow Label Filtering
+ Feasibility", European Conference on Computer Network
+ Defense 2005, December 2005.
+
+ [MNJH07] Moskowitz, R., Nikander, P., Jokela, P., and T.
+ Henderson, "Host Identity Protocol", Work in Progress,
+ June 2007.
+
+ [P48-13] daemon9, route, and infinity, "Project Neptune", Phrack
+ Magazine, Volume 7, Issue 48, File 13 of 18, July 1996.
+
+ [RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
+ RFC 793, September 1981.
+
+ [RFC1144] Jacobson, V., "Compressing TCP/IP headers for low-speed
+ serial links", RFC 1144, February 1990.
+
+ [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm",
+ RFC 1321, April 1992.
+
+ [RFC1644] Braden, B., "T/TCP -- TCP Extensions for Transactions
+ Functional Specification", RFC 1644, July 1994.
+
+
+
+
+
+
+Eddy Informational [Page 14]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering:
+ Defeating Denial of Service Attacks which employ IP
+ Source Address Spoofing", BCP 38, RFC 2827, May 2000.
+
+ [RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C.,
+ Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M.,
+ Zhang, L., and V. Paxson, "Stream Control Transmission
+ Protocol", RFC 2960, October 2000.
+
+ [RFC3013] Killalea, T., "Recommended Internet Service Provider
+ Security Services and Procedures", BCP 46, RFC 3013,
+ November 2000.
+
+ [RFC3704] Baker, F. and P. Savola, "Ingress Filtering for
+ Multihomed Networks", BCP 84, RFC 3704, March 2004.
+
+ [RFC4413] West, M. and S. McCann, "TCP/IP Field Behavior",
+ RFC 4413, March 2006.
+
+ [SD01] Seddigh, N. and M. Devetsikiotis, "Studies of TCP's
+ Retransmission Timeout Mechanism", Proceedings of the
+ 2001 IEEE International Conference on Communications
+ (ICC 2001), volume 6, pages 1834-1840, June 2001.
+
+ [SKK+97] Schuba, C., Krsul, I., Kuhn, M., Spafford, E., Sundaram,
+ A., and D. Zamboni, "Analysis of a Denial of Service
+ Attack on TCP", Proceedings of the 1997 IEEE Symposium
+ on Security and Privacy 1997.
+
+ [Ste95] Stevens, W. and G. Wright, "TCP/IP Illustrated, Volume
+ 2: The Implementation", January 1995.
+
+ [cr.yp.to] Bernstein, D., "SYN cookies", visited in December 2005,
+ <http://cr.yp.to/syncookies.html>.
+
+ [win2k3-wp] Microsoft Corporation, "Microsoft Windows Server 2003
+ TCP/IP Implementation Details", White Paper, July 2005.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Eddy Informational [Page 15]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+Appendix A. SYN Cookies Description
+
+ This information is taken from Bernstein's web page on SYN cookies
+ [cr.yp.to]. This is a rewriting of the technical information on that
+ web page and not a full replacement. There are other slightly
+ different ways of implementing the SYN cookie concept than the exact
+ means described here, although the basic idea of encoding data into
+ the SYN-ACK sequence number is constant.
+
+ A SYN cookie is an initial sequence number sent in the SYN-ACK, that
+ is chosen based on the connection initiator's initial sequence
+ number, MSS, a time counter, and the relevant addresses and port
+ numbers. The actual bits comprising the SYN cookie are chosen to be
+ the bitwise difference (exclusive-or) between the SYN's sequence
+ number and a 32 bit quantity computed so that the top five bits come
+ from a 32-bit counter value modulo 32, where the counter increases
+ every 64 seconds, the next 3 bits encode a usable MSS near to the one
+ in the SYN, and the bottom 24 bits are a server-selected secret
+ function of pair of IP addresses, the pair of port numbers, and the
+ 32-bit counter used for the first 5 bits. This means of selecting an
+ initial sequence number for use in the SYN-ACK complies with the rule
+ that TCP sequence numbers increase slowly.
+
+ When a connection in LISTEN receives a SYN segment, it can generate a
+ SYN cookie and send it in the sequence number of a SYN-ACK, without
+ allocating any other state. If an ACK comes back, the difference
+ between the acknowledged sequence number and the sequence number of
+ the ACK segment can be checked against recent values of the counter
+ and the secret function's output given those counter values and the
+ IP addresses and port numbers in the ACK segment. If there is a
+ match, the connection can be accepted, since it is statistically very
+ likely that the other side received the SYN cookie and did not simply
+ guess a valid cookie value. If there is not a match, the connection
+ can be rejected under the heuristic that it is probably not in
+ response to a recently sent SYN-ACK.
+
+ With SYN cookies enabled, a host will be able to remain responsive
+ even when under a SYN flooding attack. The largest price to be paid
+ for using SYN cookies is in the disabling of the window scaling
+ option, which disables high performance.
+
+ Bernstein's web page [cr.yp.to] contains more information about the
+ initial conceptualization and implementation of SYN cookies, and
+ archives of emails documenting this history. It also lists some
+ false negative claims that have been made about SYN cookies, and
+ discusses reducing the vulnerability of SYN cookie implementations to
+ blind connection forgery by an attacker guessing valid cookies.
+
+
+
+
+Eddy Informational [Page 16]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ The best description of the exact SYN cookie algorithms is in a part
+ of an email from Bernstein, that is archived on the web site (notice
+ it does not set the top five bits from the counter modulo 32, as the
+ previous description did, but instead uses 29 bits from the second
+ MD5 operation and 3 bits for the index into the MSS table;
+ establishing the secret values is also not discussed). The remainder
+ of this section is excerpted from Bernstein's email [cr.yp.to]:
+
+ Here's what an implementation would involve:
+
+ Maintain two (constant) secret keys, sec1 and sec2.
+
+ Maintain a (constant) sorted table of 8 common MSS values,
+ msstab[8].
+
+ Keep track of a "last overflow time".
+
+ Maintain a counter that increases slowly over time and never
+ repeats, such as "number of seconds since 1970, shifted right 6
+ bits".
+
+ When a SYN comes in from (saddr,sport) to (daddr,dport) with
+ ISN x, find the largest i for which msstab[i] <= the incoming
+ MSS. Compute
+
+ z = MD5(sec1,saddr,sport,daddr,dport,sec1)
+
+ + x
+
+ + (counter << 24)
+
+ + (MD5(sec2,counter,saddr,sport,daddr,dport,sec2) % (1 <<
+ 24))
+
+ and then
+
+ y = (i << 29) + (z % (1 << 29))
+
+ Create a TCB as usual, with y as our ISN. Send back a SYNACK.
+
+ Exception: _If_ we're out of memory for TCBs, set the "last
+ overflow time" to the current time. Send the SYNACK anyway,
+ with all fancy options turned off.
+
+ When an ACK comes back, follow this procedure to find a TCB:
+
+
+
+
+
+
+Eddy Informational [Page 17]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+ (1) Look for a (saddr,sport,daddr,dport) TCB. If it's there,
+ done.
+
+ (2) If the "last overflow time" is earlier than a few minutes
+ ago, give up.
+
+ (3) Figure out whether our alleged ISN makes sense. This
+ means recomputing y as above, for each of the counters
+ that could have been used in the last few minutes (say,
+ the last four counters), and seeing whether any of the y's
+ match the ISN in the bottom 29 bits. If none of them do,
+ give up.
+
+ (4) Create a new TCB. The top three bits of our ISN give a
+ usable MSS. Turn off all fancy options.
+
+Author's Address
+
+ Wesley M. Eddy
+ Verizon Federal Network Systems
+ NASA Glenn Research Center
+ 21000 Brookpark Rd, MS 54-5
+ Cleveland, OH 44135
+
+ Phone: 216-433-6682
+ EMail: weddy@grc.nasa.gov
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Eddy Informational [Page 18]
+
+RFC 4987 TCP SYN Flooding August 2007
+
+
+Full Copyright Statement
+
+ Copyright (C) The IETF Trust (2007).
+
+ 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, THE IETF TRUST 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.
+
+
+
+
+
+
+
+Eddy Informational [Page 19]
+