Post128 nn

Manipulación de paquetes Tipo ACK GET con Scapy y Python


12063705 10207273024561428 59106377850244238 n
Felipe Barrios

Introducción


Este trabajo tiene por objetivo comprender el funcionamiento de la librería scapy escrita en python, se analizará un ejemplo del uso de scapy para la manipulación de paquetes, enviando una petición de tipo ACK GET a un servidor Web.


Objetivo


El objetivo de este trabajo es comprender cómo los atacantes pueden lograr la manipulación de protocolos a nivel de Capa 2 y Capa 3.


Desarrollo


¿Qué es Scapy?


Scapy es un manipulador de paquete interactivo realmente potente y flexible escrito en Python que permite esnifar, generar paquetes mangled, enviar paquetes de red, probar equipamiento, descubrir y escanear redes, y desarrollar nuevos protocolos de forma sencilla. Scapy puede ser ejecutado como librería en nuestros propios proyectos mediante la importación de esta. Scapy está disponible en Linux y otros sistemas POSIX como Mac OS X. También existe un ejecutable para Windows que puedes encontrar en secdev.


Para ejecutar Scapy necesitamos tener privilegios de súper usuario en el sistema ya que es necesario el control de las interfaces de red. Esta herramienta puede ser realmente útil para testear la seguridad de nuestras aplicaciones y de sus protocolos.


Normal TCP Handshake


Un apretón de manos TCP contiene tres paquetes, un paquete SYN que se envía desde el cliente al servidor, en el que el servidor responde con un paquete SYN, ACK, el cliente a su vez responde con un paquete ACK. Este apretón de manos se muestra en el cuadro esquemático a continuación. 


Información general del protocolo de enlace TCP normal:



TCP_handshake

Apretón de manos normal TCP en Wireshark


Wireshark_TCP_handshake


Podemos crear nuestro propio paquete para esta conexión TCP, para ello vamos a utilizar scapy. 


Un apretón de manos normal TCP en scapy:




Para que sea un poco más fácil de leer y alterar también podemos construir un script en Python que hace uso de scapy. 


Saludo TCP normal en una secuencia de comandos en Python haciendo uso de scapy:




La secuencia de comandos de Python anterior da el siguiente resultado:




Apretón de manos ACK-GET TCP


Normalmente, cuando realizamos una petición a un servidor Web, el cliente envía una petición GET después de que la conexión TCP  ha acabado, en el siguiente cuadro esquemático se muestra lo relatado anteriormente:


Protocolo de enlace TCP ACK-GET


Sin embargo, la solicitud GET en realidad se puede enviar junto con la solicitud de ACK, sin completar el apretón de manos. Lo que significa el tráfico de red se verá así:

Protocolo de enlace TCP ACK-GET 2



Desde la solicitud GET será enviado en el mismo paquete con la solicitud de ACK, vamos a llamar a este paquete de un paquete ACK-GET.


Después de enviar con éxito el paquete ACK-GET, el servidor responderá con los datos solicitados, como puede verse en el tráfico de red en Wireshark a continuación.


Wireshark ACK-GET



Y, por supuesto, una vez más, podemos utilizar scapy crear a nuestros propios paquetes para la solicitud GET-ACK. Esto es en realidad bastante simple con sólo colocar una petición GET después del paquete ACK normal.





Puesto que no se está completando el protocolo TCP, nuestro sistema operativo podría tratar de tomar el control y puede comenzar a enviar paquetes (Reset) RST, para evitar esto podemos utilizar iptables:





La mejor manera de ver lo que está sucediendo en el tráfico de red, es utilizar la herramienta Wireshark. Con un filtro apropiado para mostrar solamente los paquetes que participan en nuestra solicitud. 


Filtro:




Conclusión


Visto el ejemplo anterior de manipulación de paquetes, se puede comprender por que la herramienta Scapy es tan popular dentro del mundo de Hackers, es sencilla y fácil de utilizar, permite casi cualquier cosa dentro del tráfico de Red.


La manipulación de una solicitud HTTP y crear paquetes incompletos de forma intencional, podrían provocar que un servidor Web, pudiese ser objeto de una denegación de servicios, ya que este, intentara responder a las solicitudes TCP incompletas utilizando todos los recursos de el servidor. Un ejemplo de esto seria enviar a un servidor solamente solicitudes de tipo SYN, llevando al servidor a dejar tomadas todas las conexiones (hilos de ejecución), hasta confirmar las respuestas por parte del cliente.




Charly face
Eduardo Moncada
ha comentado hace 17 días

Si es posible, poner las imagenes como imagenes fijas y no desde Google Drawing, porque no me permite verlas y no se entiende mucho sin ellas. Gracias

Artículos que te pueden interesar