Conceptos Básicos
A. Sesión TCP
El objetivo de una sesión TCP es coordinar múltiples conexiones TCP concurrentes entre un par de hosts. Una aplicación típica de una sesión TCP es la coordinación entre conexiones TCP concurrentes entre un servidor Web y un cliente en donde las conexiones corresponden a componentes de una página Web. [9]
Una sesión TCP se identifica por una tupla con los datos importantes del cliente y del servidor [8][2]:
Tupla: {Ip-Cliente, Ip-Servidor, Puerto-Cliente, Puerto-Servidor}
La finalidad de este documento es mostrar un ataque a una sesión como la previamente descrita.
Es necesario primero analizar el paquete TCP que se puede ver en la Figura 1.
Figura 1:

El paquete contiene el puerto origen y el puerto destino. También contiene un número de secuencia de 32 bits que identifica el flujo de cada octeto de datos. Este número va de 0 a 232 – 1. Cuando se establece una sesión entre dos hosts, estos intercambian números de secuencia. Para efectos del asalto de una sesión TCP se explicará la importancia de estos números de secuencia y la selección del número de secuencia inicial.
Sobre los demás campos del paquete cabe resaltar las banderas que son 6 bits de control que se utilizan de izquierda a derecha para indicar: URG (el paquete es urgente), ACK (confirmación de recibido el anterior paquete), PSH (el paquete contiene datos), RST (para resetear una la conexión), SYN (para sincronizar números de secuencia) y FIN (no vienen más datos del emisor) [3].
Una sesión TCP empieza por una sincronización entre el cliente y el servidor. Esta sincronización se conoce como el three way handshake que se hace para que las dos máquinas entre las que se va a hacer la conexión, sepan la especificación de la otra y su configuración para manejar sesiones TCP. Suponiendo que se estable una conexión TCP entre la máquina A y la máquina B, la sincronización se muestra a continuación [3]:
1) A -> B SYN mi número de secuencia es X
2) A <- B ACK su número de secuencia es X
A <- B SYN mi número de secuencia es Y
3) A -> B ACK su número de secuencia es Y
B. IP Spoofing
El IP Spoofing consiste en suplantar la dirección IP o identidad de una máquina, esto con el fin de beneficiarse de la “confianza” que un host le tenga a otro. Para llevar a cabo este ataque es suficiente con modificar en el paquete TCP, el campo con la dirección IP origen de la máquina suplantada. Existen dos modalidades de spoofing. La primera se conoce como Non-Blind Spoofing en la cual el atacante se encuentra en la misma subred de la víctima por lo que puede tener visibilidad del tráfico de la misma. La segunda modalidad se conoce como Blind Spoofing, la cual ocurre desde afuera de la subred en donde los números de secuencia y de confirmación están fuera del alcance del atacante [6][2].
Con la utilización de esta técnica se puede asegurar que los paquetes enviados por el atacante no serán rechazados por la máquina destino.
C. SYN Flood
Como se explicó en el numeral A de esta sección, el protocolo TCP se inicia con una conexión en tres tiempos, si el paso final no se completa, la sesión iniciada queda en un estado incompleto y puede llevar a una denegación de servicio llamada SYN flood. Un cliente que no conteste al segundo ACK del three way handshake, logra mantener al servidor (otro lado de la comunicación) en estado de escucha por un tiempo determinado, por esta razón si se hace una inundación de estas conexiones a “medio terminar” es posible lograr la interrupción del servicio brindado por el servidor o al menos volverlo más lento para responder a otras peticiones [11]. Este ataque, el SYN flood, es utilizado para suspender un servicio en una máquina, para consumir los recursos de un servidor o para abrir paso a un nuevo ataque, usualmente el bombardeo de SYN se hace conjunto con el IP spoofing de la máquina atacante para evitar rastreos posteriores.
D. Escaneo de Puertos
El escaneo de puertos es una de las técnicas de reconocimiento más populares usadas para encontrar servicios activados que pueden traducirse como huecos de vulnerabilidad existentes [10]. Básicamente un escaneo de puertos consiste en el envío de una trama o de un mensaje a la vez, a cada uno de los puertos de una máquina, es el tipo de respuesta a cada uno de estos mensajes lo que da una idea al atacante del estado del puerto, por ejemplo si una máquina a la que se le ha hecho un escaneo de puertos devuelve un SYN/ACK significa que tanto la máquina como el puerto del servicio están arriba, si devuelve un RST/ACK la máquina está arriba pero el servicio se encuentra o no disponible o inexistente, si el retorno es un mensaje ICMP de Host unreachable significa que la máquina está abajo y si este mismo mensaje va acompañado de un admin. Prohibited filter, significa que la máquina está detrás de un firewall con lista de accesos.
E. Envenenamiento de ARP
El protocolo ARP (Address Resolution Protocol) se encarga de asociar las direcciones IP de las máquinas con sus respectivas direcciones físicas (MAC) en una tabla dinámica. El proceso de asociación se realiza de la siguiente manera: cuando un paquete es enviado a alguna máquina, el módulo ARP busca en su tabla dinámica si la dirección IP de la máquina destino existe. Si la encuentra registrada ubica la correspondiente MAC y sigue el proceso de envío del paquete. Si no la encuentra en su tabla ARP envía un paquete ARP REQUEST que es un paquete broadcast preguntando quien tiene la MAC de la dirección IP que esta buscando. Luego se recibe un paquete “ARP REPLY”, el cual es unicast, confirmando la MAC de la dirección IP solicitada. Una vez recibido el mensaje de respuesta, se almacena en la tabla ARP la nueva información.
El ataque de envenenamiento de ARP se basa en la debilidad de algunos sistemas operativos como Linux y Windows que no manejan estados en el protocolo ARP por lo cual aceptan mensajes “ARP REPLY” sin importar si han enviado antes un mensaje “ARP REQUEST”. Un atacante aprovecha esta debilidad para modificar a su gusto la tabla ARP de su víctima.
F. Sniffer
Un sniffer es un programa que es utilizado para monitorear y analizar el tráfico en una red, dando la posibilidad de observar los paquetes que fluyen de un lado a otro. En un segmento de red sin un switch o enrutador de paquetes, todo el tráfico destinado a una máquina es enviado a todos los integrantes del segmento, pero puesto que las direcciones IP no coinciden con las del paquete transmitido, estas simplemente los rechazan.
El sniffer coloca la tarjeta de red del computador en modo promiscuo, esto es aceptando absolutamente todos los paquetes que transitan por el segmento de red para poder observarlos (e incluso seguir toda una trama) [ethereal] y utilizar la información en ellos. Un atacante usa esta herramienta para observar el tráfico en la red que desea atacar, recopilando la información necesaria para cumplir sus objetivos como dirección de la IP de la víctima, números de secuencia de los paquetes y protocolos utilizados (Telnet, Ftp, entre otros).