home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc1337.txt < prev    next >
Text File  |  1996-05-07  |  23KB  |  379 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                          R. Braden Request for Comments: 1337                                           ISI                                                                 May 1992 
  8.  
  9.                   TIME-WAIT Assassination Hazards in TCP 
  10.  
  11. Status of This Memo 
  12.  
  13.    This memo provides information for the Internet community.  It does    not specify an Internet standard.  Distribution of this memo is    unlimited. 
  14.  
  15. Abstract 
  16.  
  17.    This note describes some theoretically-possible failure modes for TCP    connections and discusses possible remedies.  In particular, one very    simple fix is identified. 
  18.  
  19. 1. INTRODUCTION 
  20.  
  21.    Experiments to validate the recently-proposed TCP extensions [RFC-    1323] have led to the discovery of a new class of TCP failures, which    have been dubbed the "TIME-WAIT Assassination hazards".  This note    describes these hazards, gives examples, and discusses possible    prevention measures. 
  22.  
  23.    The failures in question all result from old duplicate segments.  In    brief, the TCP mechanisms to protect against old duplicate segments    are [RFC-793]: 
  24.  
  25.    (1)  The 3-way handshake rejects old duplicate initial <SYN>         segments, avoiding the hazard of replaying a connection. 
  26.  
  27.    (2)  Sequence numbers are used to reject old duplicate data and ACK         segments from the current incarnation of a given connection         (defined by a particular host and port pair).  Sequence numbers         are also used to reject old duplicate <SYN,ACK> segments. 
  28.  
  29.         For very high-speed connections, Jacobson's PAWS ("Protect         Against Wrapped Sequences") mechanism [RFC-1323] effectively         extends the sequence numbers so wrap-around will not introduce a         hazard within the same incarnation. 
  30.  
  31.    (3)  There are two mechanisms to avoid hazards due to old duplicate         segments from an earlier instance of the same connection; see         the Appendix to [RFC-1185] for details. 
  32.  
  33.  
  34.  
  35.  Braden                                                          [Page 1] 
  36.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  37.  
  38.          For "short and slow" connections [RFC-1185], the clock-driven         ISN (initial sequence number) selection prevents the overlap of         the sequence spaces of the old and new incarnations [RFC-793].         (The algorithm used by Berkeley BSD TCP for stepping ISN         complicates the analysis slightly but does not change the         conclusions.) 
  39.  
  40.    (4)  TIME-WAIT state removes the hazard of old duplicates for "fast"         or "long" connections, in which clock-driven ISN selection is         unable to prevent overlap of the old and new sequence spaces.         The TIME-WAIT delay allows all old duplicate segments time         enough to die in the Internet before the connection is reopened. 
  41.  
  42.    (5)  After a system crash, the Quiet Time at system startup allows         old duplicates to disappear before any connections are opened.     Our new observation is that (4) is unreliable: TIME-WAIT state can be    prematurely terminated ("assassinated") by an old duplicate data or    ACK segment from the current or an earlier incarnation of the same    connection.  We refer to this as "TIME-WAIT Assassination" (TWA). 
  43.  
  44.    Figure 1 shows an example of TIME-WAIT assassination.  Segments 1-5    are copied exactly from Figure 13 of RFC-793, showing a normal close    handshake.  Packets 5.1, 5.2, and 5.3 are an extension to this    sequence, illustrating TWA.   Here 5.1 is *any* old segment that is    unacceptable to TCP A.  It might be unacceptable because of its    sequence number or because of an old PAWS timestamp.  In either case,    TCP A sends an ACK segment 5.2 for its current SND.NXT and RCV.NXT.    Since it has no state for this connection, TCP B reflects this as RST    segment 5.3, which assassinates the TIME-WAIT state at A! 
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. Braden                                                          [Page 2] 
  67.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  68.  
  69.  
  70.  
  71.        TCP A                                                TCP B 
  72.  
  73.    1.  ESTABLISHED                                          ESTABLISHED 
  74.  
  75.        (Close)    2.  FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT 
  76.  
  77.    3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT 
  78.  
  79.                                                             (Close)    4.  TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK 
  80.  
  81.    5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED 
  82.  
  83.   - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  84.  
  85.    5.1. TIME-WAIT   <--  <SEQ=255><ACK=33> ... old duplicate 
  86.  
  87.    5.2  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>    -->  ???? 
  88.  
  89.    5.3  CLOSED      <-- <SEQ=301><CTL=RST>             <--  ????       (prematurely) 
  90.  
  91.                          Figure 1.  TWA Example 
  92.  
  93.     Note that TWA is not at all an unlikely event if there are any    duplicate segments that may be delayed in the network.  Furthermore,    TWA cannot be prevented by PAWS timestamps; the event may happen    within the same tick of the timestamp clock.  TWA is a consequence of    TCP's half-open connection discovery mechanism (see pp 33-34 of    [RFC-793]), which is designed to clean up after a system crash. 
  94.  
  95. 2. The TWA Hazards 
  96.  
  97.    2.1 Introduction 
  98.  
  99.       If the connection is immediately reopened after a TWA event, the       new incarnation will be exposed to old duplicate segments (except       for the initial <SYN> segment, which is handled by the 3-way       handshake).  There are three possible hazards that result: 
  100.  
  101.       H1.  Old duplicate data may be accepted erroneously. 
  102.  
  103.       H2.  The new connection may be de-synchronized, with the two ends            in permanent disagreement on the state.  Following the spec            of RFC-793, this desynchronization results in an infinite ACK 
  104.  
  105.  
  106.  
  107. Braden                                                          [Page 3] 
  108.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  109.  
  110.             loop.  (It might be reasonable to change this aspect of RFC-            793 and kill the connection instead.) 
  111.  
  112.            This hazard results from acknowledging something that was not            sent.  This may result from an old duplicate ACK or as a            side-effect of hazard H1. 
  113.  
  114.       H3.  The new connection may die. 
  115.  
  116.            A duplicate segment (data or ACK) arriving in SYN-SENT state            may kill the new connection after it has apparently opened            successfully. 
  117.  
  118.       Each of these hazards requires that the seqence space of the new       connection overlap to some extent with the sequence space of the       previous incarnation.  As noted above, this is only possible for       "fast" or "long" connections.  Since these hazards all require the       coincidence of an old duplicate falling into a particular range of       new sequence numbers, they are much less probable than TWA itself. 
  119.  
  120.       TWA and the three hazards H1, H2, and H3 have been demonstrated on       a stock Sun OS 4.1.1 TCP running in an simulated environment that       massively duplicates segments.  This environment is far more       hazardous than most real TCP's must cope with, and the conditions       were carefully tuned to create the necessary conditions for the       failures.  However, these demonstrations are in effect an       existence proof for the hazards. 
  121.  
  122.       We now present example scenarios for each of these hazards.  Each       scenario is assumed to follow immediately after a TWA event       terminated the previous incarnation of the same connection. 
  123.  
  124.    2.2  HAZARD H1: Acceptance of erroneous old duplicate data. 
  125.  
  126.       Without the protection of the TIME-WAIT delay, it is possible for       erroneous old duplicate data from the earlier incarnation to be       accepted.  Figure 2 shows precisely how this might happen. 
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  Braden                                                          [Page 4] 
  141.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  142.  
  143.  
  144.  
  145.            TCP A                                                 TCP B 
  146.  
  147.       1. ESTABL.  --> <SEQ=400><ACK=101><DATA=100><CTL=ACK> --> ESTABL. 
  148.  
  149.       2. ESTABL.  <--     <SEQ=101><ACK=500><CTL=ACK>     <--   ESTABL. 
  150.  
  151.       3.  (old dupl)...<SEQ=560><ACK=101><DATA=80><CTL=ACK> --> ESTABL. 
  152.  
  153.       4. ESTABL.  <--     <SEQ=101><ACK=500><CTL=ACK>     <--   ESTABL. 
  154.  
  155.       5. ESTABL.  --> <SEQ=500><ACK=101><DATA=100><CTL=ACK> --> ESTABL. 
  156.  
  157.       6.             ...  <SEQ=101><ACK=640><CTL=ACK>     <--   ESTABL. 
  158.  
  159.      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  160.  
  161.       7a. ESTABL. --> <SEQ=600><ACK=101><DATA=100><CTL=ACK> --> ESTABL. 
  162.  
  163.       8a. ESTABL.  <--    <SEQ=101><ACK=640><CTL=ACK> ... 
  164.  
  165.       9a. ESTABL. --> <SEQ=700><ACK=101><DATA=100><CTL=ACK> --> ESTABL. 
  166.  
  167.                     Figure 2: Accepting Erroneous Data 
  168.  
  169.       The connection has already been successfully reopened after the       assumed TWA event.  Segment 1 is a normal data segment and segment       2 is the corresponding ACK segment.  Old duplicate data segment 3       from the earlier incarnation happens to fall within the current       receive window, resulting in a duplicate ACK segment #4.  The       erroneous data is queued and "lurks" in the TCP reassembly queue       until data segment 5 overlaps it.  At that point, either 80 or 40       bytes of erroneous data is delivered to the user B; the choice       depends upon the particulars of the reassembly algorithm, which       may accept the first or the last duplicate data. 
  170.  
  171.       As a result, B sends segment 6, an ACK for sequence = 640, which       is 40 beyond any data sent by A.  Assume for the present that this       ACK arrives at A *after* A has sent segment 7a, the next full data       segment.  In that case, the ACK segment 8a acknowledges data that       has been sent, and the error goes undetected.  Another possible       continuation after segment 6 leads to hazard H3, shown below. 
  172.  
  173.    2.3  HAZARD H2: De-synchronized Connection 
  174.  
  175.       This hazard may result either as a side effect of H1 or directly       from an old duplicate ACK that happens to be acceptable but       acknowledges something that has not been sent. 
  176.  
  177.  
  178.  
  179. Braden                                                          [Page 5] 
  180.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  181.  
  182.        Referring to Figure 2 above, suppose that the ACK generated by the       old duplicate data segment arrived before the next data segment       had been sent.  The result is an infinite ACK loop, as shown by       the following alternate continuation of Figure 2. 
  183.  
  184.      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -       7b. ESTABL.  <--    <SEQ=101><ACK=640><CTL=ACK>   ...      (ACK something not yet       sent => send ACK) 
  185.  
  186.       8b. ESTABL.  -->    <SEQ=600><ACK101><CTL=ACK>       -->   ESTABL.                                                        (Below window =>                                                             send ACK) 
  187.  
  188.       9b. ESTABL.  <--    <SEQ=101><ACK=640><CTL=ACK>     <--    ESTABL. 
  189.  
  190.                                (etc.!) 
  191.  
  192.                      Figure 3: Infinite ACK loop 
  193.  
  194.     2.4  HAZARD H3:  Connection Failure 
  195.  
  196.       An old duplicate ACK segment may lead to an apparent refusal of       TCP A's next connection attempt, as illustrated in Figure 4.  Here       <W=...> indicates the TCP window field SEG.WIND.* 
  197.  
  198.         TCP A                                                     TCP B 
  199.  
  200.     1.  CLOSED                                                   LISTEN 
  201.  
  202.     2.  SYN-SENT    --> <SEQ=100><CTL=SYN>                 --> SYN-RCVD 
  203.  
  204.     3.         ... <SEQ=400><ACK=101><CTL=SYN,ACK><W=800>  <-- SYN-RCVD 
  205.  
  206.     4.  SYN-SENT    <-- <SEQ=300><ACK=123><CTL=ACK> ... (old duplicate) 
  207.  
  208.     5.  SYN-SENT    --> <SEQ=123><CTL=RST>                   --> LISTEN 
  209.  
  210.     6.  ESTABLISHED <-- <SEQ=400><ACK=101><CTL=SYN,ACK><W=900> ... 
  211.  
  212.     7.  ESTABLISHED --> <SEQ=101><ACK=401><CTL=ACK>          --> LISTEN 
  213.  
  214.     8.  CLOSED      <--  <SEQ=401><CTL=RST>                  <-- LISTEN 
  215.  
  216.             Figure 4: Connection Failure from Old Duplicate 
  217.  
  218.  
  219.  
  220.  Braden                                                          [Page 6] 
  221.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  222.  
  223.        The key to the failure in Figure 4 is that the RST segment 5 is       acceptable to TCP B in SYN-RECEIVED state, because the sequence       space of the earlier connection that produced this old duplicate       overlaps the new connection space.  Thus, <SEQ=123> in segment #5       falls within TCP B's receive window [101,900).  In experiments,       this failure mode was very easy to demonstrate.  (Kurt Matthys has       pointed out that this scenario is time-dependent:  if TCP A should       timeout and retransmit the initial SYN after segment 5 arrives and       before segment 6, then the open will complete successfully.) 
  224.  
  225. 3. Fixes for TWA Hazards 
  226.  
  227.    We discuss three possible fixes to TCP to avoid these hazards. 
  228.  
  229.    (F1) Ignore RST segments in TIME-WAIT state. 
  230.  
  231.         If the 2 minute MSL is enforced, this fix avoids all three         hazards. 
  232.  
  233.         This is the simplest fix.  One could also argue that it is         formally the correct thing to do; since allowing time for old         duplicate segments to die is one of TIME-WAIT state's functions,         the state should not be truncated by a RST segment. 
  234.  
  235.    (F2) Use PAWS to avoid the hazards. 
  236.  
  237.         Suppose that the TCP ignores RST segments in TIME-WAIT state,         but only long enough to guarantee that the timestamp clocks on         both ends have ticked.  Then the PAWS mechanism [RFC-1323] will         prevent old duplicate data segments from interfering with the         new incarnation, eliminating hazard H1.  For reasons explained         below, however, it may not eliminate all old duplicate ACK         segments, so hazards H2 and H3 will still exist. 
  238.  
  239.         In the language of the TCP Extensions RFC [RFC-1323]: 
  240.  
  241.            When processing a RST bit in TIME-WAIT state: 
  242.  
  243.                If (Snd.TS.OK is off) or (Time.in.TW.state() >= W)                    then enter the CLOSED state, delete the TCB,                    drop the RST segment, and return. 
  244.  
  245.                else simply drop the RST segment and return. 
  246.  
  247.         Here "Time.in.TW.state()" is a function returning the elapsed         time since TIME-WAIT state was entered, and W is a constant that         is at least twice the longest possible period for timestamp         clocks, i.e., W = 2 secs [RFC-1323]. 
  248.  
  249.  
  250.  
  251. Braden                                                          [Page 7] 
  252.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  253.  
  254.          This assumes that the timestamp clock at each end continues to         advance at a constant rate whether or not there are any open         connections.  We do not have to consider what happens across a         system crash (e.g., the timestamp clock may jump randomly),         because of the assumed Quiet Time at system startup. 
  255.  
  256.         Once this change is in place, the initial timestamps that occur         on the SYN and {SYN,ACK} segments reopening the connection will         be larger than any timestamp on a segment from earlier         incarnations.  As a result, the PAWS mechanism operating in the         new connection incarnation will avoid the H1 hazard, ie.         acceptance of old duplicate data. 
  257.  
  258.         The effectiveness of fix (F2) in preventing acceptance of old         duplicate data segments, i.e., hazard H1, has been demonstrated         in the Sun OS TCP mentioned earlier.  Unfortunately, these tests         revealed a somewhat surprising fact:  old duplicate ACKs from         the earlier incarnation can still slip past PAWS, so that (F2)         will not prevent failures H2 or H3.  What happens is that TIME-         WAIT state effectively regenerates the timestamp of an old         duplicate ACK.  That is, when an old duplicate arrives in TIME-         WAIT state, an extended TCP will send out its own ACK with a         timestamp option containing its CURRENT timestamp clock value.         If this happens immediately before the TWA mechanism kills         TIME-WAIT state, the result will be a "new old duplicate"         segment with a current timestamp that may pass the PAWS test on         the reopened connection. 
  259.  
  260.         Whether H2 and H3 are critical depends upon how often they         happen and what assumptions the applications make about TCP         semantics.  In the case of the H3 hazard, merely trying the open         again is likely to succeed.  Furthermore, many production TCPs         have (despite the advice of the researchers who developed TCP)         incorporated a "keep-alive" mechanism, which may kill         connections unnecessarily.  The frequency of occurrence of H2         and H3 may well be much lower than keep-alive failures or         transient internet routing failures. 
  261.  
  262.    (F3) Use 64-bit Sequence Numbers 
  263.  
  264.         O'Malley and Peterson [RFC-1264] have suggested expansion of the         TCP sequence space to 64 bits as an alternative to PAWS for         avoiding the hazard of wrapped sequence numbers within the same         incarnation.  It is worthwhile to inquire whether 64-bit         sequence numbers could be used to avoid the TWA hazards as well. 
  265.  
  266.         Using 64 bit sequence numbers would not prevent TWA - the early         termination of TIME-WAIT state.  However, it appears that a 
  267.  
  268.  
  269.  
  270. Braden                                                          [Page 8] 
  271.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  272.  
  273.          combination of 64-bit sequence numbers with an appropriate         modification of the TCP parameters could defeat all of the TWA         hazards H1, H2, and H3.  The basis for this is explained in an         appendix to this memo.  In summary, it could be arranged that         the same sequence space would be reused only after a very long         period of time, so every connection would be "slow" and "short". 
  274.  
  275. 4.  Conclusions 
  276.  
  277.    Of the three fixes described in the previous section, fix (F1),    ignoring RST segments in TIME-WAIT state, seems like the best short-    term solution.  It is certainly the simplest.  It would be very    desirable to do an extended test of this change in a production    environment, to ensure there is no unexpected bad effect of ignoring    RSTs in TIME-WAIT state. 
  278.  
  279.    Fix (F2) is more complex and is at best a partial fix.  (F3), using    64-bit sequence numbers, would be a significant change in the    protocol, and its implications need to be thoroughly understood.    (F3) may turn out to be a long-term fix for the hazards discussed in    this note. 
  280.  
  281. APPENDIX: Using 64-bit Sequence Numbers 
  282.  
  283.    This appendix provides a justification of our statement that 64-bit    sequence numbers could prevent the TWA hazards. 
  284.  
  285.    The theoretical ISN calculation used by TCP is: 
  286.  
  287.        ISN = (R*T) mod 2**n. 
  288.  
  289.    where T is the real time in seconds (from an arbitrary origin, fixed    when the system is started), R is a constant, currently 250 KBps, and    n = 32 is the size of the sequence number field. 
  290.  
  291.    The limitations of current TCP are established by n, R, and the    maximum segment lifetime MSL = 4 minutes.  The shortest time Twrap to    wrap the sequence space is: 
  292.  
  293.        Twrap = (2**n)/r 
  294.  
  295.    where r is the maximum transfer rate.  To avoid old duplicate    segments in the same connection, we require that Twrap > MSL (in    practice, we need Twrap >> MSL). 
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303. Braden                                                          [Page 9] 
  304.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  305.  
  306.     The clock-driven ISN numbers wrap in time TwrapISN: 
  307.  
  308.        TwrapISN = (2**n)/R 
  309.  
  310.    For current TCP, TwrapISN = 4.55 hours. 
  311.  
  312.    The cases for old duplicates from previous connections can be divided    into four regions along two dimensions: 
  313.  
  314.    *    Slow vs. fast connections, corresponding to r < R or r >= R. 
  315.  
  316.    *    Short vs. long connections, corresponding to duration E <         TwrapISN or E >= TwrapISN. 
  317.  
  318.    On short slow connections, the clock-driven ISN selection rejects old    duplicates.  For all other cases, the TIME-WAIT delay of 2*MSL is    required so old duplicates can expire before they infect a new    incarnation.  This is discussed in detail in the Appendix to [RFC-    1185]. 
  319.  
  320.    With this background, we can consider the effect of increasing n to    64.  We would like to increase both R and TwrapISN far enough that    all connections will be short and slow, i.e., so that the clock-    driven ISN selection will reject all old duplicates.  Put another    way, we want to every connection to have a unique chunk of the    seqence space.  For this purpose, we need R larger than the maximum    foreseeable rate r, and TwrapISN greater than the longest foreseeable    connection duration E. 
  321.  
  322.    In fact, this appears feasible with n = 64 bits.  Suppose that we use    R = 2**33 Bps; this is approximately 8 gigabytes per second, a    reasonable upper limit on throughput of a single TCP connection.    Then TwrapISN = 68 years, a reasonable upper limit on TCP connection    duration.  Note that this particular choice of R corresponds to    incrementing the ISN by 2**32 every 0.5 seconds, as would happen with    the Berkeley BSD implementation of TCP.  Then the low-order 32 bits    of a 64-bit ISN would always be exactly zero. 
  323.  
  324.    REFERENCES 
  325.  
  326.       [RFC-793]  Postel, J., "Transmission Control Protocol", RFC-793,       USC/Information Sciences Institute, September 1981. 
  327.  
  328.       [RFC-1185]  Jacobson, V., Braden, R., and Zhang, L., "TCP       Extension for High-Speed Paths", RFC-1185, Lawrence Berkeley Labs,       USC/Information Sciences Institute, and Xerox Palo Alto Research       Center, October 1990. 
  329.  
  330.  
  331.  
  332.  Braden                                                         [Page 10] 
  333.  RFC 1337                 TCP TIME-WAIT Hazards                  May 1992 
  334.  
  335.        [RFC-1263]  O'Malley, S. and L. Peterson, "TCP Extensions       Considered Harmful", RFC-1263, University of Arizona, October       1991. 
  336.  
  337.       [RFC-1323]  Jacobson, V., Braden, R. and D. Borman "TCP Extensions       for High Performance", RFC-1323, Lawrence Berkeley Labs,       USC/Information Sciences Institute, and Cray Research, May 1992. 
  338.  
  339. Security Considerations 
  340.  
  341.    Security issues are not discussed in this memo. 
  342.  
  343. Author's Address: 
  344.  
  345.    Bob Braden    University of Southern California    Information Sciences Institute    4676 Admiralty Way    Marina del Rey, CA 90292 
  346.  
  347.    Phone: (213) 822-1511    EMail: Braden@ISI.EDU 
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377. Braden                                                         [Page 11] 
  378.  
  379.