Re: How TCP handle (RST,SYN) at initial connection establishment

From: Davide (tatonet_at_tiscali.it)
Date: 01/14/05

  • Next message: q q: "Re: System Hacked from MySQL Insecurities"
    To: security-basics@securityfocus.com
    Date: Fri, 14 Jan 2005 11:51:26 +0100
    
    

    On Thursday 13 January 2005 13:20, Lim Boon Ping wrote:
    > I need some clarification on how TCP reacts to
    > incoming (RST, SYN) during 3-way handshaking process.
    > In this case, assumptions are made such that
    >
    > (1) attacker manages to conquer 1 router in front
    > of victim server.
    >
    > (2) instead of consuming server / bandwidth
    > resources by flooding,the attacker would send (RST,
    > SYN) or (RST, ACK) or simply RST upon receiving of any
    > SYN request towards victim server.
    >
    > RFC 793, p36, states the following:
    >
    > "In all states except SYN-SENT, all reset (RST)
    > segments are validated by checking their SEQ-fields
    > [sequence numbers]. A reset is valid if its sequence
    > number is in the window. In the SYN-SENT state (a RST
    > received in response to an initial SYN), the RST is
    > acceptable if the ACK field acknowledges the SYN."
    >
    > My questions are:
    >
    > 1) According to RFC 793, an established TCP connection
    > can be reset by sending suitable TCP packets with the
    > (RST, SYN). During the connection establishment stage,
    > does the client suffer the same risk?

    I don't know if this answer your question... I think (RST, SYN) means no ACK.
    The "client", during the three-way handshacking, starts in CLOSED state,
    crosses the SYN-SENT state and then land in ESTABLISHED state (so I assume
    that you're interested only in SYN-SENT state... the client can reach the
    SYN-RCV state only for simultaneous open, but this is another story).
    In the SYN-SENT state:

    " If the state is SYN-SENT then
         first check the ACK bit
            [...]
         second check the RST bit
            If the RST bit is set

              If the ACK was acceptable then signal the user "error:
              connection reset", drop the segment, enter CLOSED state,
              delete TCB, and return. Otherwise (no ACK) drop the segment
              and return." (rfc793, pp.66-67)

    So if the client is in SYN-SENT state and receives a (RST, SYN) packet without
    an ACK it drops the packet and its state doesn't change.
    This beacause the SYN flag is analized only at step four:

    " fourth check the SYN bit
            This step should be reached _only_ if the ACK is ok, or there is
            no ACK, and it the segment _did not_ contain a RST." (rfc793, p. 67)

    > At SYN-SENT state, what happen if the client receives
    > (RST, SYN) spoofed by the attacker with Source
    > IP=victim server IP? Assume that in the (RST, SYN)
    > packet, the ACK sequence number correctly acknowledges
    > the client's SYN, but TCP ACK flag is not set (can it
    > be in this way?).

    If the ACK bit isn't set the ACK field value isn't checked. As stated before
    client state doesn't change.

    > 2) At TCP connection establishment, can (RST, ACK) or
    > simply RST flooding toward client side will avoid any
    > connection request to the victim server?

    You can intercept the client first SYN and send to it a spoofed segment with
    RST on, ACK on, sequence 0 and ack field equal to client seq.+1. The client
    will think that the remote tcp port is closed (no process bound it). This is
    what the REJECT target of iptables does if used with option "--reject-with
    tcp-reset".
    If you're using linux you can add an iptables rule like the following:

    iptables -I FORWARD -o <output i/f> -p tcp --destination-port <port# of \
         service you want to disallow access to> -j REJECT --reject-with tcp-reset

    >
    > =====
    > Best regards,
    > Boon Ping, Lim

    Hope this help, sorry for my bad English,
            Davide.


  • Next message: q q: "Re: System Hacked from MySQL Insecurities"

    Relevant Pages

    • Re: Socket weirdness
      ... |>>> with a packet with the RST flag set. ... Again the client application can be doing sends, ... you may not see that ACK until after 1 or 2 ... will get the ACK with the RST set and the next send/receive will fail. ...
      (microsoft.public.dotnet.framework)
    • Re: Problem with TCP connection not opening properly
      ... >>The real question is should the client send an ACK when the server ... >>it still accept a SYN packets? ... been received by the server) it IS receiving the SYN because of a resend ...
      (comp.os.linux.networking)
    • TCP Socket handshake, a beginer;s question
      ... i am totally new to socket programming and this will be a very basic ... My application sends a Syn to the client applicatoin ... Client application responds with a Syn Ack ...
      (microsoft.public.win32.programmer.networks)
    • Re: Improved TCP syncookie implementation
      ... The RFC1323 timestamp option is used to carry the full TCP SYN+SYN/ACK ... a client sent SYN, ... the client sent ACK, ... it sends SYN; ...
      (freebsd-net)
    • Re: Socket weirdness
      ... What's important is the RST (and ACK ... client would never see the RST - which now makes sense. ... Server closes Receive. ...
      (microsoft.public.dotnet.framework)

    Loading