La cookie SYN es una técnica para contrarrestar el ataque de inundación SYN . El inventor de la técnica, Daniel Bernstein definió una cookie SYN como "una elección especial de secuencia TCP inicial en el lado del servidor" El uso de la cookie SYN permite que el servidor evite la caída de nuevas conexiones cuando la cola de conexiones TCP está llena. El servidor devuelve la secuencia SYN+ACK correcta al cliente , pero no almacena la nueva conexión en la cola. Si el servidor recibe una respuesta ACK del cliente, entonces puede recuperar su valor de secuencia SYN del valor recibido del cliente.
Para crear una conexión TCP, el cliente envía un paquete TCP con el indicador SYN y su número de secuencia al servidor. En respuesta, el servidor envía un paquete con banderas SYN+ACK. número de secuencia del cliente y su propio número de secuencia. Estos números recopilan todo el flujo de TCP. La especificación TCP especifica que el valor inicial de estos números de secuencia está determinado por el cliente y el servidor. Las cookies SYN son solo un número de secuencia de este tipo, que el servidor recopila cuidadosamente de acuerdo con las siguientes reglas:
Entonces la cookie SYN se calcula como:
Cuando un cliente envía un paquete de finalización de protocolo de enlace con un indicador ACK al servidor, envía el número de secuencia original del servidor incrementado en uno. Para comprobar si una cookie SYN es correcta, el servidor le resta una y realiza las siguientes comprobaciones:
A partir de ahora, la conexión funciona como de costumbre.
El uso de una cookie SYN no rompe TCP y otros protocolos. Sin embargo, esta técnica tiene dos limitaciones [1] :
Si bien estas restricciones conducen a un uso subóptimo del protocolo TCP, los efectos negativos rara vez afectan a los clientes, ya que las cookies SYN solo deben usarse en ataques contra el servidor. Ignorar algunas características del protocolo TCP a favor de la disponibilidad del servidor es un compromiso razonable.
Sin embargo, el problema aumenta cuando se pierde el paquete ACK final del cliente y el protocolo de la capa de aplicación requiere que el servidor sea el iniciador de la comunicación posterior (por ejemplo, los protocolos SMTP y SSH). En este caso, el cliente asume que la conexión se estableció correctamente y espera un banner de invitación del servidor o una retransmisión del paquete SYN+ACK. Sin embargo, el servidor no enviará dicho paquete, ya que rechazará la sesión. Finalmente, el cliente también restablecerá la sesión, pero esto puede llevar mucho tiempo.
El kernel de Linux 2.6.26 agregó soporte limitado para algunas opciones de TCP que están codificadas en una marca de tiempo.
El nuevo estándar TCP Cookie Transactions (TCPCT) está diseñado para evitar estos problemas y mejora algunos otros aspectos. Pero es un complemento de TCP y, por lo tanto, debe ser compatible con ambas partes.
Los cortafuegos simples que permiten todo el tráfico saliente y solo permiten el tráfico entrante a ciertos puertos solo bloquearán las solicitudes SYN a puertos cerrados. Si las cookies SYN están habilitadas, debe prestar atención a que un atacante no pueda eludir dichos firewalls enviando paquetes ACK con un número de secuencia arbitrario hasta que elija el correcto. Las cookies SYN solo deben habilitarse para puertos de acceso público.