SYN cookies

SYN Cookies es una t茅cnica usada para defensa del ataque inundaci贸n SYN. Daniel J. Bernstein, inventor inicial de la t茅cnica,[1] define a SYN Cookies como "una particular selecci贸n de n煤meros de secuencia para servidores TCP ". En particular, el uso de SYN Cookies, permite al servidor, evitar el rechazo de nuevas conexiones cuando la cola SYN se llena. En su lugar, el servidor se comporta como si la cola SYN, hubiera sido extendida. El servidor responde el correspondiente paquete SYN+ACK al cliente, pero descartando la entrada SYN en su cola. El servidor entonces recibe el correspondiente ACK desde el cliente, estando en condiciones de reconstruir la entrada SYN en la cola, usando la informaci贸n codificada en el n煤mero de secuencia TCP elegido.

Implementaci贸n

Con el fin de iniciar una conexi贸n TCP, el cliente env铆a un paquete TCP SYN, al servidor. En respuesta, el servidor responde un paquete TCP SYN+ACK al cliente. Uno de los valores en este paquete, es el n煤mero de secuencia, el cual es usado por el protocolo TCP, para reensamblar el flujo de datos. De acuerdo a la especificaci贸n TCP, ese primer n煤mero de secuencia enviado, puede ser decidido por cada parte.

La t茅cnica SYN Cookie, elige un n煤mero de secuencia cuidadosamente construido, sobre la base de las siguientes reglas:

  • t = Un Timestamp con crecimiento retardado (t铆picamente time() desplazado a la derecha 6 posiciones, dando una resoluci贸n de 64 segundos)
  • m = El valor de tama帽o m谩ximo de segmento que el servidor podr铆a haber grabado en la entrada SYN de la cola
  • s = El resultado de una funci贸n secreta de cifrado, calculada sobre la base de direcci贸n IP del servidor, y su n煤mero de puerto, direcci贸n IP del cliente y su n煤mero de puerto, y el valor t. El valor retornado s, debe ser de 24 bits de longitud.

El n煤mero de secuencia TCP inicial en SYN Cookie, se calcula como sigue:

  • Primeros 5 bits: t M贸dulo 32
  • Pr贸ximos 3 bits: un valor codificado representando m
  • Finales 24 bits: s

(Nota: debido a que m debe ser codificado usando 3 bits, el servidor est谩 restringido a enviar hasta 8 posibles valores cuando SYN Cookies es usado.)

Cuando el cliente env铆a un paquete TCP ACK al servidor, en respuesta al paquete SYN+ACK, el cliente DEBE (acordando la especificaci贸n TCP), usar n+1 en el n煤mero de reconocimiento, donde n es el n煤mero de secuencia inicial enviado por el servidor. El servidor substrae 1 del n煤mero de reconocimiento para obtener el n煤mero enviado al cliente usando SYN Cookie.

El servidor entonces realiza las siguientes operaciones:

  • Chequea el valor t respecto del tiempo actual, para ver si la conexi贸n ha expirado.
  • Recalcula s para determinar si este es un SYN cookie v谩lido.
  • Decodifica el valor m de los 3 bits codificados en SYN Cookie, el cual puede usar para reconstruir la entrada en la cola SYN.

A partir de este punto en adelante, la conexi贸n contin煤a normalmente.

Desventajas

El uso de SYN Cookies, no est谩 en desacuerdo con la especificaci贸n de alg煤n protocolo, por lo tanto debe ser compatible con todas las implementaciones de TCP. Hay sin embargo, 3 advertencias que deben ser consideradas cuando se implementa SYN Cookies.

  • El servidor est谩 limitado a solo 8 煤nicos valores de MSS, limitado a la codificaci贸n de 3 bits.
  • El servidor debe rechazar todas las opciones de TCP (tales como tama帽o de ventanas), a causa de descartar la entrada en la cola SYN, donde esta informaci贸n podr铆a ser grabada.
  • Una conexi贸n puede estropearse cuando el ACK final de los tres pasos de establecimientos de conexi贸n de TCP, se pierde, y el cliente espera datos desde el servidor (Ej: el cliente ha completado los tres pasos de conexi贸n, el servidor no recibe el ACK del cliente, y no abre la conexi贸n).[2]

Mientras estas restricciones necesariamente llevar铆an a una pobre implementaci贸n, sus efectos son raramente notados por los clientes. Adem谩s, estas restricciones necesitan s贸lo aplicarse cuando el servidor est谩 bajo ataque, y la conexi贸n podr铆a de otro modo haber sido denegada. En tal situaci贸n la p茅rdida de algunas opciones con el fin de asegurar la conexi贸n, suelen ser un compromiso razonable. La versi贸n 2.6.26 del n煤cleo Linux, a帽ade un soporte limitado de opciones de TCP, codific谩ndolas en una estama de tiempo.[3]

El est谩ndar TCPCT, (tcp cookie transaction) est谩 dise帽ada para superar estas deficiencias de SYN cookies, y mejorarla en algunos otros aspectos. Diferente a SYN Cookies, TCPCT es una extensi贸n TCP, y requiere que ambas puntas que integran la conexi贸n, la soporten.[4]

Historia

La t茅cnica fue creada por Daniel J. Bernstein y Eric Schenk en septiembre de 1996. La primera implementaci贸n para SunOS fue liberada por Jeff Weisberg un mes despu茅s, y Eric Schenk liber贸 su implementaci贸n Linux en febrero de 1997 (la actual implementaci贸n usa net.ipv4.tcp_syncookies).

Referencias

  1. , D. J. Bernstein's own explanation of SYN Cookies
  2. , cr.yp.to September 1996
  3. Patrick McManus, Improving Syncookies, lwn.net April 2008
  4. Perry E. Metzger, William Allen Simpson, Paul Vixie (December 2009). Improving TCP Security With Robust Cookies.
Este art铆culo ha sido escrito por Wikipedia. El texto est谩 disponible bajo la licencia Creative Commons - Atribuci贸n - CompartirIgual. Pueden aplicarse cl谩usulas adicionales a los archivos multimedia.