TCP Ilegitimo

13
RESETEO “ILEGÍTIMO” DE CONEXIONES TCP Garcia Canet, Juan Raúl NIF !""!#$#%&' #( In)enieria en In*+r -tica ETSE & ./

description

TCP Ilegitimo

Transcript of TCP Ilegitimo

RESETEO ILEGTIMO DE CONEXIONES TCP

Garcia Canet, Juan RalNIF: 20024841-Y

4 Ingenieria en InformticaETSE - UV

Indice

1.- Resumen

2.- Introduccin

3.- Fundamentos de TCP

3.1.- El protocolo TCP

3.2.-Funciones de TCP

3.3.- Formato de los Segmentos TCP

3.4.- Funcionamiento de TCP

3.5.- La Ventana Deslizante

4.- Reseteo de Conexiones TCP

4.1.- Cierre de conexin cordial (FIN)

4.2.- Cierre de conexin abrupta o por condicin de error grosera

Ejemplo de un ataque

5.- Contramedidas

6.- Referencias

1.- Resumen

El presente trabajo muestra una introduccin a los problemas ocasionados por los ataques de reseteo de conexin TCP, y se describen una variedad de dichos ataques, que permiten a un atacante lograr que una conexin TCP sea abortada de forma ilegtima.

2.- Introduccin

TCP es sin duda el protocolo de transporte ms utilizado en la red Internet. De l dependen aplicaciones tales como el correo electrnico, la Web y hasta incluso diversas aplicaciones en tiempo real para su sealizacin).

Cada una de estas aplicaciones depende, en distinto grado, de la estabilidad de la conexin TCP correspondiente. Es decir, el error en la conexin TCP utilizada afectar a la aplicacin que la est usando en mayor o menor medida, dependiendo de las caractersticas de la aplicacin en particular.

Como ejemplo, en una conexin HTTP, utilizada por la web, si la conexin TCP fuese abortada, se producira una interrupcin en la transferencia de informaci (p. ej: descarga de ficheros o en la visualizacin de una pgina web). Sin embargo, este efecto no sera grave, ya que bastara con reiniciar la transferencia del fichero interrumpida o recargar la pgina para volver a establecer la conexin.

En otro caso, como en VoIP(Voz sobre IP), la interrupcin de la conexin TCP (utilizada para sealizacin) provocara la prdida de la comunicacin de voz, siendo este efecto ms grave que en el caso anterior.

No obstante, en el caso de los protocolos de ruteo, como BGP, que hacen uso de coenxiones TCP para la transferencia de informacin de las rutas de encaminamiento, el reseteo de la conexin TCP establecidad para dicho fin sera mucho ms grave que en los casos anteriores, ya que el efecto producido sera la eliminacin de todas aquellas entradas de la tabla de ruteo que haban sido adquiridas a travs de la conexin que ha sido abortada. sta situacin provocar, en la mayora de los casos, la prdidad de la conectividad con todos aquellos sistemas que dependan de las entradas de la tabla que han sido eliminadas.

Como se ha podido ver en esta pequea introduccin, el impacto de los ataques de resteo de conexioones TCP vara en funcin de la aplicacin que est haciendo uso de la conexin TCP atacada. Es pues, evidente, que en aquellos casos en que el correcto funcionamiento de la infraestructura de Internet depende, en gran medida, de una apliccin que est haciendo uso de los servicios TCP, la proteccin contra ataques de la ndole de los descritos, es de gran importancia.

En apartados posteriores veremos en que se basan estos ataques, algunos ejemplo de ataques y las soluciones que se han propuesto para solucionar este tipo de incidencias.

3.- Fundamentos de TCP

En el anterior apartado hemos descrito los inconvenientes del ataque de reseteo de conexiones TCP, pero no hemos descrito el motivo por el que se pueden producir dichos ataques. Es el presente apartado introduciremos los conceptos en los que se basa el protocolo TCP para establecer la comunicacin entre dos hosts y estableceremos los principios en los que se fundamentan este tipo de ataques descritos.

3.1.- El protocolo TCP

El Protocolo de Control de Transmisin (TCP en sus siglas en ingls, Transmission Control Protocol que fue creado entre los aos 1973 - 1974 por Vint Cerf y Robert Kahn) es uno de los protocolos fundamentales en Internet. Muchos programas dentro de una red de datos compuesta por ordenadores pueden usar TCP para crear conexiones entre ellos a travs de las cuales enviarse un flujo de datos. El protocolo garantiza que los datos sern entregados en su destino sin errores y en el mismo orden en que se transmitieron. Tambin proporciona un mecanismo para distinguir distintas aplicaciones dentro de una misma mquina, a travs del concepto de puerto. TCP da soporte a muchas de las aplicaciones ms populares de Internet, incluidas HTTP, SMTP y SSH. Se documenta a travs de IETF RFC 793.

3.2.-Funciones de TCP

En la pila de protocolos TCP/IP, TCP es la capa intermedia entre el protocolo de internet (IP) y la aplicacin. Habitualmente, las aplicaciones necesitan que la comunicacin sea fiable y, dado que la capa IP aporta un servicio de datagramas no fiable (sin confirmacin), TCP aade las funciones necesarias para prestar un servicio que permita que la comunicacin entre dos sistemas se efecte: libre de errores, sin perdidas y con seguridad.

3.3.- Formato de los Segmentos TCP

Explicaremos a continuacin, y para no extendernos demasiado, los campos de este segmento que nos van a interesear para este trabajo:

Puerto origen y Puerto destino identifican, junto a las direcciones origen y

destino del paquete IP, la conexin a la que pertenece el segmento.

Nmero de secuencia (Sequence number) indica el orden, dentro de la transmisin, del primer byte de datos contenido en el segmento. Junto al tamao total del paquete IP, que permite conocer cuntos bytes de datos se reciben, es posible determinar cul ser el nmero de secuencia del siguiente segmento.

Nmero acuse de recibo (Acknowledgement number) indica cul es el byte que el emisor del segmento espera recibir como nmero de secuencia. Esto implica que todos los bytes transmitidos en segmentos anteriores han llegado de forma satisfactoria. Slo es significativo cuando el bit ACK del

campo FLAGS est a 1

FLAGS: Consta de seis bits, teniendo cada uno de ellos un significado independiente del resto.

ACK El campo de acuse de recibo es vlido

RST Reiniciar la conexin

SYN Establecimiento de conexin

FIN El emisor lleg al final de su secuencia de datos

Ventana (Window) indica cul es el tamao de la ventana de recepcin del emisor del segmento, es decir, el espacio en memoria disponible en el receptor. Este campo limita la ventana de transmisin del receptor del segmento, limitando el nmero de bytes que puede transmitir sin recibir reconocimientos.

3.4.- Funcionamiento de TCP

Ahora que hemos visto la estructura de los segmentos TCP, veremos cmo se establece la comunicacin mediante el protocolo TCP.

Las conexiones TCP se componen de tres etapas: establecimiento de conexin, transferencia de datos y fin de la conexin.

Para establecer la conexin se usa el procedimiento llamado negociacin en tres pasos (3-way handshake).

Para la desconexin, en cambio, se usa una negociacin en cuatro pasos (4-way handshake) es usada para la desconexin.

De modo grfico la conexin y desconexin TCP se establece de la siguiente manera:

TCP usa el concepto de nmero de puerto para identificar a las aplicaciones emisoras y receptoras. Cada lado de la conexin TCP tiene asociado un nmero de puerto (de 16 bits sin signo, con lo que existen 65536 puertos posibles) asignado por la aplicacin emisora o receptora.

Los puertos son clasificados en tres categoras:

Bien conocidos: Son asignados por la Internet Assigned Numbers Authority (IANA), van del 0 al 1023 y son usados normalmente por el sistema o por procesos con privilegios. Las aplicaciones que usan este tipo de puertos son ejecutadas como servidores y se quedan a la escucha de conexiones. Algunos ejemplos son: FTP (21), SSH (22), Telnet (23), SMTP (25) y HTTP (80)

Registrados y dinmicos/privados. Son, normalmente, empleados por las aplicaciones de usuario de forma temporal cuando conectan con los servidores, pero tambin pueden representar servicios que hayan sido registrados por un tercero. Tambin pueden ser usados por las aplicaciones de usuario, pero este caso es menos comn. Adems, no tienen significado fuera de la conexin TCP en la que fueron usados.

Cmo se establece la conexin?

Habitualmente la conexin se estable entre dos hosts. Una de ellos abre un socket en un determinado puerto y queda la escucha de nuevas conexiones. A esta accin se le suele llamar apertura pasiva y determina el lado servidor de una conexin.

Por su parte el cliente, realiza una apertura activa de un puerto enviando un segmento SYN (1r paso) que inidica al servidor que un determinado cleinte desea establecer una conexin. El servidor reponder con una peticin SYN vlida con un paquete SYN/ACK (2 paso). En el tlimo paso (3r paso), el cliente deber responder al servidor con un segmento ACK, compleando as la negociacin y estableciendo la conexin. A partir de ese momento, cliente y servidor pueden empezar a intercambiar informacin.

Cabe destacar que, durante esta negociacin se ha establecido un nmero de secuencia, generado por ambas partes, que evitar que se puedan establecer conexiones falseadas.

Esto es cierto en parte, pues como veremos en el siguiente apartado, es posible suplantar esta comunicacin y enviar informacin falseada. Es en este punto en el que centraremos el contenido de este trabajo.

3.5.- La Ventana Deslizante

TCP utiliza un mecanismo bastante simple para el control de flujo de informacin. Simplemente, cada segmento TCP contiene un campo Ventana que indica cuantos bytes de informacin TCP est dispuesto a recibir.

Este mecanismo, impide que un hosts est contnuamente mandando segmentos al otro de manera que el primero no sea capaz de manejar toda la informacin producindose as una situacin de congestin que provocara la prdidad de segmentos e informacin.

La siguiente figura ilustra el funcionamiento de la ventana deslizante:

En este ejemplo el host B se comporta tal y como se espera, es decir, dejando de enviar cuando A ha anunciado una ventana de 0 bytes. Es decir, el host B slo ha enviado informacin cuando la ventana TCP lo permita. Sin embargo, si el Hosta B hubiera continuando enviando informacin, a pesar de recibir un win=0, el Host A slo hubiera aceptado aquellos bytes de informacin con nmeros de secuencia (SEQ) que estuvieran dentro de la ventan de recepcin TCP. Dicho de otro modo, TCP considera vaidos solamente aquellos segmentos-datos que se encuantran dentro de laventana de recepcin, el resto son descartados.

A raza de lo visto, podemos afirmar que la ventana TCP tiene un impacto directo sobre el rendimiento de la conexin ya que la tasa de transferencia de toda conexin queda limitada por la expresin:

Mx. Tasa Transf= Ventana / RTT

Dnde RTT corresponde a Round-Trip Time (Tiempo de ida y vuelta.

Con el fin de evitar que la ventana TCP imponga un lmte artificial en la tasa de

transferencia, a menudo, se suele utilizar un tamao de ventana superior al

necesario.

Es en este punto dnde encontramos el punto dbil del sistema, ya que cuanto

mayor es el tamao de la ventana ms probabilidades hay que un atacante pueda falsificar un segmento TCP con un nmero de secuencia tal que sea aceptado como vlido por el sistema atacado.

Como se puede adivinar, si un atacante logra adivinar un nmero de secuencia correcto, sera capaz de realizar cualquier tipo de operacin que puedan realizar los sistemas que han establecido la comunicacin legtimamamente (incluyendo el envi de segmentos RST que permitirn abortar la conexin TCP actual).

Como se puede ver, una caracterstica que, a priori, podra considerarse una gran ventaja, se convierte en un problema con graves implicaciones para laseguridad.

4.- Reseteo de Conexiones TCP

Ya hemos analizado a los participante en el caso que nos ocupa, que como recordamos, se trata del reseteo de conexiones TCP de manera ilegtima. Antes de entrar en detalla, veremos la diferencia entre el cierre de una conexin TCP de manera cordial (FIN) y el cierre de conexin TCP debido a una condicin de error grosera(RST)

4.1.- Cierre de conexin cordial (FIN)

En la cabecera TCP mostrada en la Ilustracin 1 podemos ver que existen una serie de flags que indican el tipo de segmento TCP que se est enviando.

Cuando uno de los hosts decide cerrar la conexin, genralmente el cliente cuando ha terminado de enviar los datos, enva un segmento con el bit FIN activo, situacin que indica el servidor que la conexin desea abortarse. En este momento se realiza la negociacin del cierre mediante 4 pasos (vase Ilustracin 3). Finalizada la negociacin, la conexin queda abortada de mtuo acuerdo.

4.2.- Cierre de conexin abrupta o por condicin de error grosera

A diferencia del cierre de conexin cordial, la conexin abrupta se produce cuando existe una condicinn de error en alguno de los hosts. Por ejemplo, si un host A desea establecer una conexin (enva segmento SYN) a un puerto determinado de otro sistema en el que no existe ningn proceso escuchando, el sistema destino (host B) enviar un segmento RST, puesto que se considera un error. De acuerdo con lo esablecido en el RFC 793, el segmento tendr en su campo ACK el valor correspondiente para el acuse de recibo del segmento SYN enviado por A (en caso que el segmento SYN no tuviera datos, dicho valor sera el nmero de secuencia del segmento SYN incrementado en una unidad).

Otro posible ejmeplo podra ser aqul en que el proceso que mantiene una conexin TCP termina de forma anormal y, como consecuencia, se abortan todas la conexiones que tena establecidas.

Una vez visto esto, podemos entrar de lleno en el tema que nos ocupa.

Segn la exposicin hecha anteriormente, resulta obvio concluir que, si un atacante es capaz de falsificar un segmento RST con los siguientes datos:

IP origen,

IP destino,

Puerto Origen,

Puerto destino,

Nmero de secuencia que se encuentre dentro de laventana de recepcin del sistema atacado.

El resultado sera: La conexin TCP en cuestin sera abortada de forma ilegtima.

Son muchos los datos que un atacante debera conecer para poder aprovecharse de esta vulnerabilidad. No obstante, no es tan difcil el conocimiento de estos datos.

Supongamos que el atancante conoce la identidad de los dos extremos en una conexin:

En ese caso las IP's de los sistemas sera conocida

En lo que respecta al puerto utilizado por el servidor, lo ms seguro es que coincida con uno de los well-know port(puerto bien conocido)correspondiente al servicio en cuestin (p.ej: HTTP=>80; SMPT=>25...)

As pues, lo nico realmente desconocido es el puerto del cliente, lo cua forzara al atacante a probar las 65536 combinaciones posibles para dicho puerto.

Sin embargo, hay dos consideraciones que deberemos tratar respecto a dicha afirmacin:

1.- La mayora de los sitemas operativos eligen los puertos efmeros (puertos TCP utilizados para conexiones salientes) de una porcion del rango total de puertos disponibles:

Sistema OperativoPuertos efmeros

Linux Kernel 2.6 y MS Windows1024 - 4999

Solaris y AIX32768 - 65535

FreeBSD y OpenBSD1024 - 49151

NetBSD49152 - 65535

2.- Muchas implementaciones eligen sus puesrtos de forma incremental. Es decir, si una conexin saliente usa el puerto 1025, la siguiente usar el 1025, etc.

De esta manera, es posible, en ciertas situaciones, que un atacante pueda saber el nmero de puerto TCP del cliente de la conexin atacada.

Si estas condiciones se cumplen, el atacante tendra, las IP's y los puesrtos. Ya slo le quedara por averigar o adivinar el nmero de secuencia vlido para lograr que el segmento RST falsificado sea aceptado y, como consecuencia, la conexin abortada.

Hay que decir que el tiempo que el ataque necesitar depender de dos parmetros:

Ancho de banda del atacante

El tamao de la venata TCP usada por el sistema atacado

Cmo se realizara el ataque?

Como ya hemos detallado, para la realizacin del ataque nos har falta un segmento TCP (con el bit RST activo) falsificado con los valores (IP origen, IP destino, Puerto origen, Puerto destino) correctos y con un nmero de secuencia que se encuentre dentro de la ventana de recepcin del sistema atacado.

Escenario 1: El sistema atacado no est recibiendo informacin y por tanto la ventana TCP est inmvil. El atacante deber escanear todo el espacio de nmeros de secuencia TCP, enviando segmentos TCP cuyos nmeros de secuencia estaran separados entre s por un valor aproximado al tamao de la ventana utilizada por el sistema en cuestin.

Escenario 2: El sistema objetivo est recibiendo informacin, y en este caso, la ventana est en movimiento con una velocidad promedio igual a la tasa de transferencia promedio de la conexin TCP. En esta situacin tendremos dos posibles formas de realizar el ataque.

1 Forma: Consiste, al igual que la descrita en el Escenario 1, en enviar sucesivos segmentos RST con distintos nmeros de secuencia, pero esta vez tendrn en cuenta tanto el tamao de la ventan TCP como la tasa de transferencia de datos de la conexin (en resumen, el movimiento de la ventana)

2 Forma: El atacante enva segmentos RST a intervalos regulares, pero todos ellos con el mismo nmero de secuencia. En este caso, en lugar de intentar acertar en laventana TCP, lo que estara haciendo es esperar a que la ventana se mueva sobre los segmentos RST que est enviando.

Ejemplo de ataque:

Escenario del ataque

Para ilustrar el ataque usaremos la herramienta tcp-reset disponible en http://www.gont.com.arAsumiremos que la conexin TCP a atacar no est transfiriendo datos (es decir, se encuentra incativa). Tambin consideraremos que el atacante conoce los cutro valores que definen una conexin TCP (IP origen, IP destino, Puesrto origen, Puerto destino), y el tamao de la ventana utilizada por el sistema objetivo del ataque.

tcp-reset -c 192.168.0.1:1024 -s 172.16.0.1:80 -t client -r 60 -W 400

-c: Permite especificar los datos correspondientes al cliente, que en este caso, suponemos que el cliente posee la direccin 192.168.0.1 y que usa el puesrto 1024 para la conexin TCP.

-s: Permite especificar la informacin del servidor, que en este caso posee la direccin 172.16.0.1 y el nmero de puerto 80.

-t (target): Permite indicar cul ser el destinatario de los segmentos RST.

-r: Permite especificar el kilobits por segundo, el ancho de banda que se desea utilizar para el ataque.

-W: Especifica el tamao de la ventana usada por el cliente.

De este modo la herramienta tcp-reset barrer todo el espacio de los nmeros de secuencia mediante saltos del tamao especificado por -W (400.

Una vez realizado el barrido, devolver el control al atacante.

5.- Contramedidas

Para evitar el atqeu de reseteo de conexiones TCP existen variedad de contramedidas.

La primera de ellas puede ser la eleccin aleatoria de los puertos TCP para conexiones salientes. de esta manera, si se eligen los puertos efmeros de forma aleatoria dentro del rango 1024-65536, sera virtualmente imposible para un atacante adivinar a ciegas, el puesrto usado por el cliente, y como consecuencia, tanto el tiempo como la cantidad de paquetes requeridos para realizar el ataque en cuestin seran notablemente ms elevados.

As mismo. la IETF ha propuesto una modificacin al procesamiento de los segmentos RST, para disminuir considerablemente las posibilidades de xito de un atacante frente a este ataque:

Punto 1: En caso de recibir un segmento RST con un nmero de secuencia fuera de la venta TCP, el mismo sera descartado. (RFC 793)

Punto 2: Si el segmento RST recibido contiene como nmero de secuencia TCP, el prximo nmero de secuencia que se espera recibir, se abortar la conexin tCp corespondiente.

Punto 3: Si el segmento RST recibido contiene un nmero de secuencia TCP que se encuentra dentro de la ventana TCP, pero no cumple con la condicin del punto 2, se responder a dicho segmnento con RST con un ACK.

Comentarios a estos puntos:

El punto 1 establece lo que ya est definido en el RFC 793 y no merece mayor comentario.

El punto 2, establece un requerimiento ms estricto que al actualmente establecido en el RFC 793, que simplemnete exige que el segmnento RST se encuentre dentro de la venta de recepcin, mientras que en la propuesta actual se exige, adems, que el nmero de secuencia sea el prximo nmero de secuencia esperado.

Finalmente, el punto 3, establece el concepto de challenge ACK ( desafo ACK), que permite mitigar los ataques de reseteo de conexin, y al mismo tiempo matener

la funcionalidad de reseteo de conexin para aquellos casos legtimos.

+

Ilustraremos el desfo ACK mediante le siguiente grfico:

6.- Referencias

Dafal, M. 2006. Improving TCP's Resitance to Blind In-window Attacks. IETF Internet-Draft

http://www.ietf.org/internet-drafts/draft-ietf-tcpm-tcpsecure-07.txtGont, F. 2007. ICMP attacks against TCP. IETF Internet Draft

http://www.ietf.org/internet-drafts/draft-ietf-tcpm-icmp-attacks-02.txtLarsen, M., Gont, F. 2007. Port Randomization. IETF Internet-Draft

http://www.ietf.org/internet-drafts/draft-larsen-tsvwg-port-randomization-01.txtBoletn de Seguridad UNAM-CERT 2004-006. Vulnerabilidades en TCP

http://www.lugro.org.ar/pipermail/lugro-mix/2004-April/000481.htmlGont's Website: http://www.gont.com.ar/drafts/icmp-attacks-against-tcp.htmlWikipedia: http://es.wikipedia.org/wiki/Transmission_Control_ProtocolMontaana, R. 2007.(Apuntes de Redes) Tema 5: El Nivel de Transporte en Internet

http://www.uv.es/montanan/redes/redes_05.pdfMontaana, R. 2007.(Material Auxiliar) Cap 3: La capa de enlace

http://www.uv.es/montanan/redes/cap_03.rtf

Ilustracin 2: Establecimiento de conexin TCP

HOST A

HOST B

ACK 1500, win= 2000

SEQ 1500 (1000)

SEQ 2500(1000)

ACK 3500, win= 0

ACK 3550, win= 1000

ACK 3500, win= 1000

A Procesa 1000 bytes

B Deja de enviar

B vuelve a enviar

1024

SEGMENTO RST

Dibujo SEQ "Dibujo" \*Arabic 1: "challenge ACKs frente a RST ilegtimo"

HOST B

Ilustracin SEQ "Ilustracin" \*Arabic 1: Cabecera TCP

Ilustracin 3: Fin Conexin TCP

0 15 16 31

Se envia un RST con el nmero de secuencia perteneciente a la ventana de recepcin del sistema atacado. Si embargo, segn el punto 3 de la nueva especificacin, se enviar un ACK ya que el nmero de secuencia del RST enviado no coincide con el siguiente nmero de secuencia esperado

20 bytes

En este punto s se cerraria la conexin de forma legtima

La condicin de Error Grosera o grave se estable ce mediante uun mensaje ICMP que indica el cdigo del error. (p.ej: el cdigo 3 => Port unreachable). Segn el RFC 1122 :TCP SHOULD abort the connection (TCP debera abortar la conexin)

Como se ha mencionado anteriormente, un segmento se considera vlido si su nmero de secuencia se encuentra dentro de la ventana TCP.

La condicin de Error Grosera o grave se estable ce mediante uun mensaje ICMP que indica el cdigo del error. (p.ej: el cdigo 3 => Port unreachable). Segn el RFC 1122 :TCP SHOULD abort the connection (TCP debera abortar la conexin)

En la cabecera TCP el nmero de puesrt (origen/destino) se indica con una cadena de 16 bits, lo cul nos lleva a un nmero de 216 =65536

Estando fuera del camino que siguen los paquetes correspondientes a la conexin a ser atacada.