Полуоткрытое TCP/IP-соединение
Полуоткрытое TCP/IP соединение (англ. half-open connection) — TCP соединение, в котором состояния двух его участников становятся несинхронизированными вследствие сбоёв или преднамеренных действий одного из участников.
Первоначально термин относился к нарушению синхронизации уже установленного соединения (см. состояния сеанса TCP). Но затем более распространённым стало применение термина полуоткрытое TCP/IP соединение к случаю нарушения нормальной последовательности установления соединения. Это произошло после описания CERT Coordination Center[1] уязвимости реализации протокола, которую можно использовать для проведения атаки типа SYN-флуд (англ. SYN-flood).
Технические подробности
Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).
- Клиент (сторона — инициатор соединения) посылает пакет с установленным флагом SYN (synchronize).
- В ответ на него сервер должен ответить комбинацией флагов SYN+ACK (acknowledges).
- После этого клиент должен ответить пакетом с флагом ACK, после чего соединение считается установленным.
После установки соединения обе стороны переходят в состояние ESTABLISHED. После завершения обмена и при необходимости разорвать соединение, происходит такой же многоступенчатый процесс завершения соединения.
Нарушение синхронизации может произойти на любом из описанных шагов.
Три значения термина
Полуоткрытое соединение, описанное в стандарте TCP[2], возникает в результате ошибки одного из участников соединения или внезапного прекращения его (участника) работы без уведомления второй стороны. Если обе стороны находились в состоянии установленного соединения, то, после аварийного завершения соединения с одной стороны, вторая сторона может находиться в состоянии полуоткрытого соединения неопределённо долгое время.
Второе значение термина, связанное с уязвимостью SYN-флуд, относится к полуоткрытому соединению на стороне сервера после второго этапа «трёхкратного рукопожатия». В этом случае сервер, в ожидании ответа от клиента, не освобождает выделенные ресурсы, что может привести к их исчерпанию.
Третье значение термина относится к клиенту, выполнившему первый этап «трёхкратного рукопожатия» и ожидающего ответа сервера. В нормальных условиях это не приводит ни к каким отрицательным последствиям, так как, не получив ответа за определённое время, клиент закрывает соединение и освобождает ресурсы.
MS Windows и клиенты пиринговых сетей
Проблемы, связанные с полуоткрытыми соединениями второго типа (на стороне сервера), имеют примерно одинаковые методы решения на Unix-подобных и Windows платформах[3].
Однако Microsoft ввела ограничение и на полуоткрытые соединения третьего типа (на клиенте). Это было сделано для минимизации возможности проведения атак на другие компьютеры с заражённой вредоносным программным обеспечением системы. В результате такого ограничения появились проблемы в работе программного обеспечения, интенсивно работающего с Интернетом, в частности, клиентов пиринговых сетей. Увеличить предел полуоткрытых соединений можно, отредактировав системный файл tcpip.sys при помощи специальной утилиты, что запрещено лицензионным соглашением. Начиная с Windows Server 2008 SP2 и Windows Vista SP2 это ограничение было снято, однако может быть включено путём внесения специальной записи в реестр[4].