Con este post haré entrega de los conceptos básicos para entender a partir de ahora los conceptos usados para la práctica de un asalto a una sesión TCP.
Sesión TCP
El objetivo de una sesión TCP es coordinar múltiples conexiones TCP concurrentes entre un par de host. Una aplicación típica de una sesión TCP es la coordinación entre conexiones TCP concurrentes y un servidor web o de aplicaciones y un cliente, en donde las conexiones corresponden a componentes del sito web.
Una sesión TCP se identifica por una tupla con los datos del cliente y el servidor>
tupla: {ip-cliente, ip-servidor, puerto-cliente, puerto-servidor}
Paquete. Es en sí la información que viaja entre dos host. Los paquetes son de capa de transporte según el modelo de referencia OSI. Los paquetes de bits que constituyen las unidades de datos de protocolo TCP se llaman “segmentos“.
Hablando de paquetes, un 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, dicho número va de 0 a 232-1. Cuando se establece una sesión entre dos host, estos intercambian números de secuencia, para efectos de un session attack explicaré la impostancia de estos números y la selección del número inicial.
TCP Header Format
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sobre los demás campos del paquete cabe resaltar que las banderas que son 6 bits de control se utilizan de izquierda a derecha para indicar: URG (paquete urgente), ACK (confirmación de recibido el anterior paquete), PSH (el paquete contiene datos), RST (resetea la conexión), SYN (sincroniza el número secuencia) y FIN (no vienen más dato del emisor)
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 hace para que los dos hosts, entre los cuales se va hacer la conexión, sepan la especificación de la otra y su configuración para manejar las sesiones. Veámos un pequeño ejemplo>
Host A
Host B
1. A->B SYN (Mi número de secuencia es X)
2. A<-B ACK (Su número de secuncia es X)
3. A<-B SYN (Mi número de secuencia es Y)
4. A->B ACK (Sú número de secuencia es Y)
Capa de Transporte (Modelo OSI)
Para conectar dos dispositivos remotos es necesarios establecer una conexión. La capa de trasnporte establece las reglas de conexión. Permite que los host ensamblen y reensamblen múltiples segmentos del mismo flujo de datos. Estos se pueden hacer a través de identificadores conocidos en TCP/IP como números de puerto. Soporta que las aplicaciones establezcan conexiones seguras. Aegura que los segmentos distribuidos serán confirmados por el remitente, reenvia el segmento que no haya sido confirmado, coloca los segmenos en el orden correcto en el host receptor.
Creo que en el siguiente post comentaré acerca de las 7 capas del modelo OSI.
Por ahora doy como entendido que he explicado los conceptos básicos que utilizaremos, muy probablemente vayan saliendo más, por tanto podría haber futuras versiones o extensiones de este post.
Referencia>
http://freesoft.org/CIE/Course/Section4/8.htm
http://es.wikipedia.org/wiki/Transmission_Control_Protocol
“Computación Forense, Descubrimiento de rastros infromáticos”, Jeimy J. Cano, Alfaomega
TCP Header Format
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+