– Urgent Pointer Field Significant (Значение поля безотлагательного указателя), ACK – Acknowledgment Field significant (Значение поля подтверждения), PSH – Push Function, RST – Reset the Connection (Восстановить соединение), SYN – Synchronize Sequence Numbers (Синхронизировать числа последовательности), FIN – No More Data from Sender (Конец передачи данных от отправителя).
Рассмотрим схему создания TCP-соединения (рис. 4.13).
Рис. 4.13. Схема создания TCP-соединения
Предположим, что хосту А необходимо создать TCP-соединение с хостом В. Тогда А посылает на В следующее сообщение: SYN, ISSa.
Это означает, что в передаваемом A сообщении установлен бит SYN (Synchronize Sequence Number), а в поле Sequence Number установлено начальное 32-битное значение ISSa (Initial Sequence Number).
Хост В отвечает: SYN, ACK, ISSb, ACK(ISSa+1).
В ответ на полученный от А запрос В посылает сообщение, в котором установлены бит SYN и бит ACK; в поле Sequence Number хостом В задается свое начальное значение счетчика – ISSb; поле Acknowledgment Number содержит значение ISSa, полученное в первом пакете от хоста А и увеличенное на единицу.
Хост А, завершая рукопожатие (handshake), посылает: ACK, ISSa+1, ACK(ISSb+1).
В этом пакете установлен бит ACK; поле Sequence Number содержит значение ISSa+1; поле Acknowledgment Number содержит значение ISSb+1. Посылкой этого пакета на хост В заканчивается трехступенчатый handshake, и TCP-соединение между хостами А и В считается установленным.
Теперь хост А может посылать пакеты с данными на хост В по только что созданному виртуальному TCP-каналу; передается следующая информация: ACK, ISSa+1, ACK(ISSb+1); DATA.
Из рассмотренной схемы создания TCP-соединения видно, что единственными идентификаторами, помимо IP-адреса инициатора соединения, TCP-абонентов и TCP-соединения, являются два 32-битных параметра Sequence Number и Acknowledgment Number. Следовательно, для формирования ложного TCP-пакета атакующему необходимо знать текущие идентификаторы для данного соединения – ISSa и ISSb. Это означает, что кракеру достаточно, подобрав соответствующие текущие значения идентификаторов TCP-пакета для данного TCP-соединения (например, данное соединение может представлять собой FTP– или TELNET-подключение), послать пакет с любого хоста в сети Internet от имени одного из участников данного соединения (например, от имени клиента), указывая в заголовке IP-пакета его IP-адрес, и данный пакет будет воспринят как верный.
Итак, для осуществления описанной выше атаки необходимым и достаточным условием является знание двух текущих 32-битных параметров ISSa и ISSb, идентифицирующих TCP-соединение. Рассмотрим возможные способы их получения.