Протокол TCP (Transmission Control Protocol) является одним из базовых протоколов транспортного уровня сети Internet. Он позволяет исправлять ошибки, которые могут возникнуть в процессе передачи пакетов, устанавливая логическое соединение - виртуальный канал. По этому каналу передаются и принимаются пакеты с регистрацией их последовательности, осуществляется управление информационным потоком, организовывается повторная передача искаженных пакетов, а в конце сеанса канал разрывается.
Для идентификации TCP-пакета в TCP-заголовке существуют два 32-разрядных идентификатора, которые также играют роль счетчика пакетов. Их названия - Sequence Number (номер последовательности) и Acknowledgment Number (номер подтверждения).
Для формирования ложного TCP-пакета атакующему необходимо знать текущие идентификаторы для данного соединения. Это значит, что ему достаточно, подобрав соответствующие текущие значения идентификаторов TCP-пакета для данного TCP-соединения послать пакет с любого хоста в Сети от имени одного из участников данного соединения, и данный пакет будет воспринят как верный.
При нахождении взломщика и объекта атаки в одном сегменте, задача получения значений идентификаторов решается анализом сетевого трафика. Если же они находятся в разных сегментах, приходится пользоваться математическим предсказанием начального значения идентификатора экстраполяцией его предыдущих значений.
Для защиты от таких атак необходимо использовать ОС, в которых начальное значение идентификатора генерируется действительно случайным образом. Также необходимо использовать защищённые протоколы типа SSL, S-HTTP, Kerberos и т.д.