HACKING SESION TCP- DOCUMENTO I PRÁCTICA O INTRODUCCION

BUENAS CHAVALES

OS DEJO UNA PEQUEÑA INTRODUCCIÓN A LAS SESIONES HIJACKING ESTABLECIENDO CONEXIONES TCP.COMENZAMOS CON UN POQUITO DE INTRODUCCIÓN COMO ES LÓGICO.ESTE DOCUMENTO ES AVANZADO, ES DECIR, NO ES PARA NOVATOS.CADA UNO TENDREÍS VUESTRAS COSAS, PERO COMO ES MÁS LABORIOSO DE HACER LAS COSAS PARA NOVATOS, DE MOMENTO LANZO COSAS PARA "CURIOSOS", AUQNUE PERFECTAMENTE OS PODEIS IR LEYENDO TODOS ESTO, PORQUE APRENDEREIS QUE ES Y EN QUE CONSISTE ESTA TÉCNICA DE HACKING INDISPENSABLE HOY EN DÍA PARA PODER REALIZAR UN BUEN ATAKE Y TOCAR BIEN LOS WEBS..ES UNA INTRODUCCIÓN, POQUITO A POQUITO, LA SEGUNDA ENTREGA MAÑANA...

Resumen—En este documento se explica la estructura de un asalto a una sesión TCP, se presenta un ejemplo práctico utilizando la herramienta Hunt y se evidencian los rastros que se dejan tras el ataque.

Índice de Términos—Sesión TCP, Cliente, Servidor, Paquete IP, Telnet, Hunt, IP Spoofing, ARP poisoning,

E
INTRODUCCIÓN
n este documento se presenta un caso práctico de asalto a una sesión tcp.
Para entender la estructura de un asalto a una sesión TCP se deben tener presentes algunos conceptos básicos que se explican en la sección II. Luego se encuentra la descripción del ataque paso a paso para dar introducción a la práctica realizada con la herramienta Hunt. Más adelante, en la sección VIII, se muestran los rastros que deja el ataque ya que es importante en la investigación forense reconocer las huellas que dejan los atacantes tras cada intrusión. Para finalizar se explica una manera de corregir el ataque y se presentan las conclusiones de la práctica realizada.

conceptos básicos
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. Paquete TCP

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

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.

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.

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.

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.

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).

Estructura de un asalto a una sesión tcp
El asalto de una sesión TCP es tomar control de una sesión existente y enviar los paquetes propios en una trama de tal forma que los comandos y órdenes transmitidos sean procesados como si se fuera el auténtico usuario de la sesión.
Como cualquier ataque realizado por un hacker, el asalto a una sesión TCP inicia por la búsqueda de una víctima. Independientemente de la motivación, al elegir la víctima se averigua su IP y en el caso del asalto a una sesión también se conocen la IP del servidor y el puerto por el que se establece la conexión con este. Conociendo tres de los cuatro datos que identifican una sesión la tupla {IP-cliente, IP-servidor, Puerto-cliente, Puerto-Servidor} mencionada con anterioridad se procede a averiguar el puerto del cliente.
De la misma forma que se mencionaba en la sección II, la sesión TCP entre dos hosts consta de la tupla que la identifica y de los números de secuencia que certifican la identidad de cada una de las máquinas. Posterior al establecimiento de la conexión no se comprueba la identidad de un host, por lo cual se puede llevar a cabo el ataque. Para esta clase de ataques hay dos tipos de mecanismos. El primero, si el atacante no se encuentra en el mismo segmento de red del cliente, debe hacer un escaneo de puertos y de esa forma averiguar el puerto abierto por el que recibe los paquetes del servidor.
Luego es necesario investigar el número de secuencia del servidor. Para esto se puede enviar un paquete SYN al servidor y anotar el número de secuencia que se recibe en el paquete de respuesta al establecimiento de la conexión (SYN, ACK). Al hacer lo anterior varias veces se puede analizar el número de secuencia que sigue. Cabe aclarar que es necesario hacerlo por medio de software porque debe ser un proceso rápido ya que el servidor puede recibir otros paquetes SYN. Para evitar un SYN flood es necesario finalizar la conexión enviando un paquete RST al servidor luego de tener el número de secuencia.
En el momento de realizar el asalto a la sesión se debe asegurar que el cliente y el servidor no estén comunicados. Para esto se pueden enviar varios paquetes SYN al cliente ocasionando un SYN flood y dejándolo temporalmente fuera de servicio. Con esta técnica se procede a enviar un paquete de sincronización (SYN) modificado con IP spoofing con la dirección IP del cliente como la dirección origen. Si el atacante se encuentra fuera del segmento de red del cliente no podrá ver el paquete de respuesta SYN/ACK pero ya se aseguró de que el cliente no va a responder, y además ya sabe el número de secuencia con el que debe responder el último ACK y con eso ya se ha suplantado al cliente [1][8]. En el segundo la utilización de un sniffer en caso en que el atacante se encuentre en el mismo segmento de red que las máquinas a las que se planea hacer el asalto de sesión.
Para lograr asaltar una sesión TCP se deben conocer:
IP del cliente
IP del servidor
Puerto del cliente
Puerto del servidor
Números de secuencia del cliente y del servidor
Una vez se tiene toda la información anterior, el atacante se prepara para ejecutar el asalto de sesión de la siguiente manera:
Primero se espera hasta que se establezca una conexión TCP, para nuestro caso de estudio se utilizará una sesión Telnet, luego el atacante cambia su dirección IP realizando un IP spoofing con la dirección IP de la víctima (máquina que será suplantada), una vez se tiene el cambio, comienza a enviar paquetes ARP al servidor con el fin de forzarlo a actualizar su tabla ARP y por ende el reenvío de paquetes a la máquina del atacante. Cuando se logra la conexión con el servidor solo resta realizar las acciones que el atacante se proponía en un principio (ejecutar código, obtener archivos, etc) y finalmente intentar volver a reestablecer la conexión entre la víctima y el servidor. Esta última parte no es trivial dado, pero engañando a la víctima se puede restaurar la conexión. En la sección VI sobre Hunt se explicara la manera como esa herramienta recupera el control.



Herramientas para asaltar una sesión tcp
Existen un amplio número de herramientas que permiten la realización de un asalto de sesión TCP, la mayoría son gratuitas y pueden conseguirse en Internet, como dato curioso la gran mayoría solo funciona en sistemas operativos UNIX.
Juggernaut
Al igual que la gran mayoría de herramientas juggernaut esta basada en Linux y fue desarrollada por un hacker conocido como “route”, apareció por primera vez publicada en la revista Phrack Magazine y aunque fue creada hace bastante tiempo aun sigue siendo una de las más predilectas debido a algunas de sus características únicas. Uno de sus principales atributos es la capacidad de rastrear sesiones TCP usando un criterio de búsqueda (ejemplo la palabra PASSWORD), al actuar como sniffer, juggernaut permite ver todo el tráfico de red y le da la oportunidad al atacante de escoger cualquiera de las sesiones activas. Otra característica que hace de juggernaut una herramienta muy apetecida, es la posibilidad de ensamblar paquetes desde cero, esto incluye activar las banderas del encabezado como se desee para pasar desapercibido ante algunos IDS. Sin embargo una de las desventajas de juggernaut es que no permite el envío de contraseñas desde el servidor (host) atacado a la máquina del atacante, para realizar esto es necesario el uso de otras herramientas. Esta herramienta se encuentra disponible en [1] http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=juggernaut&type=archives

B. TTY-Watcher
TTY-Watcher es una herramienta que a diferencia de juggernaut, Hunt y otras aplicaciones para el asalto de sesiones, solo puede ser usada en un tipo de sistema, las máquinas Solaris de SUN. Cuando un usuario está conectado a un sistema Solaris, todos los datos tecleados en la Terminal, son automáticamente enviados a la Terminal TTY del atacante, permitiéndole ver todos los comandos ejecutados por la víctima. TTY – Watcher también permite al atacante enviar mensajes a su víctima, los cuales serán mostrados en la Terminal de este último, esta función puede utilizarse para robar todo tipo de contraseñas o para obligar a la víctima a escalar carpetas [1]. Esta herramienta no es gratuita y está disponible en http://www.engarde.com/software/.

C. DsSniff
Es un conjunto de herramientas para la auditoría de redes y pruebas de penetración, las principales características de este paquete son: monitoreo pasivo de redes, intercepción de paquetes normalmente no disponibles para computadoras sin sniffers y permite implementar ataques de man-in-the-middle contra sesiones SSH y HTTPS. Aunque no es una herramienta tan conocida ni de fácil manejo (necesita la instalación previa de otras aplicaciones) se consigue en Internet y es para la plataforma Unix. El set de herramientas se encuentra en http://www.monkey.org/~dugsong/dsniff/

D. T-Sight
Es una herramienta comercial producida por Engarde y es usada solo en plataformas Windows. Aunque en sus inicios T-Sight fue diseñada como una herramienta de monitoreo para detectar tráfico sospechoso, actualmente se utiliza para captar todas las comunicaciones de un segmento de red en tiempo real y para realizar asaltos de sesión, es por esto que la empresa fabricadora Engarde solo permite la utilización de la herramienta con algunas direcciones IP. T-Sight es una herramienta de uso mucho más forense que intrusito, además cuenta con ciertas características como detección de intrusiones, conjunto de reportes y gráficas para el análisis post-mortem [http://www.runsecure.com/ids/id4of5.html].
herramienta hunt
Para la ejecución del asalto de sesión TCP, objeto de estudio de este paper, se escogió Hunt, que es una herramienta creada por Pavel Krauz y la cual posee muchas similitudes con Juggernaut, también sirve en los sistemas operativos Unix, permite observar todo el tráfico TCP y brinda la opción de hacer un asalto de sesión simple (inserción de una sola línea de comando durante una sesión Telnet). Una de las principales ventajas de Hunt es su capacidad de restablecer conexiones una vez se ha alcanzado el propósito del ataque. El control de una sesión puede ser devuelto al cliente original y, si se hace de una manera lo suficientemente rápida, aún así pasar desapercibido tanto para el servidor como para el cliente. Juggernaut al contrario, requiere hacer un ataque de denegación de servicio, este tipo de asalto no solo cierra la conexión con el cliente, sino que también imposibilita la comunicación de esa máquina con otro computador en esa subred levantando sospechas y activando alarmas de un posible ataque. Hunt evita este problema haciendo parecer la pérdida temporal de conexión un pequeño error de transmisión en red o un error del lado del servidor. Hunt no solo permite el ataque en una misma subred, esta herramienta también provee formas de realizar el asalto a una sesión TCP en un ambiente switchado o incluso por Internet. Hunt se encuentra disponible en la siguiente dirección http://packetstorm.linuxsecurity.com/sniffers/hunt/.

práctica del asalto de una sesión tcp
El caso de estudio de este paper fue realizado con la herramienta Hunt (sección V) a continuación se explicará paso a paso las acciones realizadas durante el asalto de sesión TCP.

Se utilizaron cuatro computadores conectados a un hub para la práctica del asalto, en uno se tenía un servidor ftp/telnet con ambos servicios arriba la IP de esta máquina era la 192.168.1.1 y el sistema operativo era Windows, el cliente (víctima en este caso) poseía una cuenta en el servidor mencionado anteriormente y estaba comenzando una sesión Telnet. Su dirección IP era la 192.168.1.2 y su sistema operativo también era Windows, el tercer computador que era la máquina del atacante corría la herramienta Hunt y el sistema operativo era Unix, edición Ubuntu, por último el cuarto computador solamente estaba corriendo ethereal y su propósito era capturar el tráfico durante el establecimiento y posteriormente el asalto de la sesión.
El computador cliente accede normalmente al servicio telnet desde su consola, para lograr la conexión remota con el servidor.

La consola de telnet aparece en la pantalla del cliente y la sesión es establecida

Al mismo tiempo el atacante que ha ejecutado la herramienta Hunt, comienza a hacer un escaneo en el segmento de red al que pertenecen los 4 equipos involucrados, para buscar sesiones telnet activas.
Una vez la sesión aparece en la consola del atacante, se realiza el ataque con una inundación de paquetes ARP hacia el cliente, para que este último actualice su tabla ARP y piense que el servidor se encuentra en una MAC diferente.

Durante el envío de ARP Hunt cambia la dirección MAC real del atacante por la del servidor que ofrece Telnet, de esta forma el cliente no se da cuenta de la modificación y sigue la sesión normalmente.
Una vez la “falsificación” se ha logrado del lado del cliente, es hora de engañar al servidor, esto se logra cambiando la cabecera de los paquetes enviados por el atacante usando los datos reales de la víctima

Es así como se consuma el asalto de sesión, es en este momento en que el atacante puede utilizar los permisos de la víctima para escalar privilegios, crear nuevos usuario o incluso dejar backdoors o puertas traseras para futuras penetraciones. Aunque el cambio de paquetes que hace Hunt evita la detección del asalto, en algunas ocasiones se presenta un fenómeno que es la inundación de ACK o ACK Storm.
Cuando la víctima intenta seguir utilizando su sesión y envía los paquetes al verdadero servidor, su número de secuencia para la sincronización ya no funciona.

Es entonces cuando se presenta un ACK Storm, como puede verse en la imagen, el cliente envía paquetes ACK con un número de secuencia no válido para esa sesión y por su lado el servidor intenta sincronizarlo nuevamente enviándole el nuevo número de secuencia, este proceso puede ocurrir muchas veces (pues es un ciclo), haciendo que Hunt cancele el asalto de la sesión, y es una de las formas más comunes de detectar un asalto de sesión.
Una característica única de Hunt es la posibilidad de restablecer la sesión TCP asaltada, para lograrlo, se envía un mensaje al cliente el cual indica que el servidor se ha caído y por lo tanto es necesaria una re sincronización.

De esta forma, los números de secuencia son nuevamente sincronizados y la sesión puede seguir siendo utilizada.
Finalmente es importante anotar que el asalto de una sesión TCP debe hacerse de la forma más rápida posible, evitando así levantar alarmas (de IDS’s por ejemplo) y dejar la menor cantidad de rastros posible.
rastros del asalto a la sesión tcp
Aunque el asalto a una sesión TCP es en la mayoría de los casos difícil de detectar (solo si hay grandes daños causados al sistema o el ataque fue realizado de manera descuidada), se puede detectar una sobrecarga en la red debido al envenenamiento de ARP. Sin embargo, hay ciertos indicios que pueden aparecen durante la ejecución del ataque. Algunos de estos síntomas de que algo no anda bien en la sesión TCP son:
La aplicación del cliente (por ejemplo Telnet) comienza a responder de forma lenta o incluso trabada (frozen screen)
Alta actividad en la red por un corto periodo de tiempo, haciendo más lento el computador
Tiempos de respuesta lentos por parte del servidor (esto ocurre debido a que se está “compitiendo” con el atacante para los servicios que brinda el servidor)
Cuando se utiliza un sniffer de paquetes es necesario enfocarse en 3 factores para intentar detectar el asalto de una sesión TCP: Actualización repetida de la tabla ARP.


Paquetes enviados entre un Cliente y un Servidor con diferentes direcciones MAC y finalmente tormentas de paquetes ACK repentinas

SALUDOS NEWBIES ! ! ! DUK3
Juan Carlos García

Entradas populares de este blog

SHELLCODES por un tubo ....

Proteger ASP.NET de inyecciones SQL How T0? BEST PRACTICES

CERTIFICACIONES DE SEGURIDAD