-  Sequence Numbers are very important to provide reliable communication but they are also crucial to hijacking a session.
-  Sequence numbers are a 32-bit counter, which means the value can be any of over 4 billion possible combinations.
-  The sequence numbers are used to tell the receiving machine what order the packets should go in when they are received.
-  Therefore an attacker must successfully guess the sequence number to hijack a session.
TCP provides a full duplex reliable  stream connection  between two  end points. A connection is uniquely  defined by the IP  address of sender, TCP  port number of the sender, IP  address of the  receiver and TCP port number of the  receiver.
Every   byte that is sent by a host is marked with a sequence number  and is   acknowledged by the receiver using this sequence number. The sequence    number for the first byte sent is computed during the connection   opening. It  changes for any new connection based on rules designed to   avoid reuse of the  same sequence number for two different sessions of a   TCP connection.
We have sent the  increment of  sequence number in our discussion of  the three way  handshake. What  happens if the sequence number is predictable?  When  the TCP sequence is  predictable, an attacker can send packets that are   forged to appear to  come from a trusted computer.
The  next step taken  was to tighten the OS implementation of TCP  and  introduce randomness in  the ISN. This was done by the use of  pseudo-random  number generators  (PRNGs). PRNGs introduced some  randomness when producing ISNs  used in  TCP connections. However,  adding a series of numbers together provided   insufficient variance in  the range of likely ISN values; thereby  allowing an  attacker to  disrupt or hijack existing TCP connections or  spoof future  connections  against vulnerable TCP/IP stack  implementations.
This  implied that systems relying  on random increments to make ISN  numbers  harder to guess were still  vulnerable to statistical attack. In other   words, with the passage of  time, even computers choosing random  numbers will  repeat themselves,  because the randomness is based on an  internal algorithm that  is used  by a particular operating system. Once  a sequence number has been agreed   to, all following data will be the  ISN+1. This makes injecting data  into the  communication stream  possible.
| Threat | If  a sequence number within the receive window is  known, an  attacker can  inject data into the session stream or choose  to terminate the   connection. If the attacker knows the initial sequence  number, he can  send a  simple packet to inject data or kill the session  if he is aware  of the number of  bytes transmitted in the session this  far. | 
As  this is a  difficult proposition, the attacker can guess a  suitable  range of  sequence numbers and send out a number of packets into the   network with  different sequence numbers - but falling within the range.  Since  the  range is known, it is likely that at least one packet will  be accepted  by  the server. This way, the attacker need not send a  packet for every  sequence  number, but resort to sending an appropriate  number of packets  with sequence  numbers a window-size apart. But how  does he know how  many packets are to be  sent?
This  is obtained by  dividing the range of sequence numbers to be  covered  by the fraction of  the window size that is used as an increment. Why  was  this possible  despite the introduction of PRNGs? The problem lay  in the use of   increments themselves, random or otherwise, to advance  an ISN counter,  making  statistical guessing practical. The result of  this is that  remote attackers can  perform session hijacking or  disruption by  injecting a flood of packets with a  range of ISN values,  one of which  may match the expected ISN. The more random  the ISNs  are, the more  difficult it is to carry out these attacks.
 
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.