Кратко

  • RFC 793 принимала RST в синхронизированных состояниях, если его номер попадал в окно приёма; RFC 5961 оставила немедленный сброс только для точного совпадения с RCV.NXT.
  • На RST внутри окна, но без точного совпадения, получатель отвечает challenge ACK и отбрасывает сегмент. Настоящий узел может подтвердить состояние, а слепой отправитель обычно не видит вопроса.

Уязвимость возникла потому, что один тест решал две разные задачи. Окно приёма должно показывать, могут ли байты относиться к потоку. Но по исходному правилу RFC 793 та же правдоподобность при установленном флаге RST разрешала удалить всё состояние соединения. Атакующему вне маршрута не требовалось видеть трафик: он мог перебирать номера, пока один не оказывался внутри окна.

RFC 5961, опубликованная в 2010 году, не добавила в TCP криптографию. Она ввела промежуточное решение. RST вне окна по-прежнему молча отбрасывается. RST с номером, точно равным следующему ожидаемому байту RCV.NXT, сбрасывает соединение. Если номер находится внутри окна, но не совпадает, получатель отправляет ACK с SEQ=SND.NXT и ACK=RCV.NXT, отбрасывает подозрительный сегмент и продолжает обработку последующего трафика.

Ответ называется challenge ACK, потому что превращает утверждение в вопрос о состоянии. Если удалённый узел действительно закрылся или перезапустился и больше не хранит прежний блок управления, полученный ACK может вызвать новый RST с номером, выведенным из подтверждения. Этот второй RST способен точно совпасть с ожиданием выжившей стороны. Слепой инъектор не наблюдает вызов и обычно не может превратить приблизительное попадание в точный ответ.

Историческая перемена заключается в разделении допустимости и полномочия. Номер внутри окна достаточно правдоподобен, чтобы получить ответ, но недостаточно доказателен для необратимого перехода. Между «игнорировать» и «уничтожить» появилось третье действие: проверить, временно сохранив состояние.

Тот же принцип RFC 5961 применяет к неожиданному SYN в синхронизированном состоянии. Получатель отправляет challenge ACK независимо от номера SYN и прекращает обработку сегмента. Поддельный SYN обычно вызывает лишь дополнительный ACK, который установленный узел воспринимает как дубликат. Действительно перезапущенный узел уже не имеет старого состояния и может ответить так, чтобы подтвердить завершение прежнего соединения.

У защиты есть чёткие границы. Она не подтверждает личность криптографически и не останавливает атакующего на маршруте, который видит текущие номера. RFC 5961 описывает и редкий угловой случай перезапуска с повторным использованием адреса, порта и случайным выбором особого начального номера. Механизм усложняет слепую атаку, но не превращает TCP в протокол аутентификации.

Нормативная сила мер различается. Защита RST и SYN рекомендована, а более узкая проверка ACK против внедрения данных остаётся необязательной. RFC 9293 — современная базовая спецификация TCP — сохраняет общий порядок обработки сброса и ссылается на RFC 5961 как на усиление надёжности. Исправление остаётся видимым слоем истории, а не стирает прежний контракт.

Первичные источники