formacion-ubrss-ubiquiti

¿Es posible comprometer una red por ICMP?

¿Es posible comprometer una red por ICMP?

El protocolo ICMP es un protocolo de red, comúnmente utilizado por los administradores para controlar el estado de un dispositivo conectado.

¿Pero sería posible comprometer una red solo con un ping? En esta entrada te contamos como sería posible burlar un firewall o antivirus solo por ICMP.

En informática, el Protocolo de mensajes de control de Internet (ICMP) es un conjunto de mensajes que utilizan los dispositivos de red para comunicar errores e información de estado. Debido a que los paquetes ICMP se pueden usar para inundar un objetivo con tráfico, se pueden usar en ataques de denegación de servicio (DoS). Pero no solo eso, hoy nos vamos a focalizar en un tipo de ataque que se conoce como ICMP Tunneling.

ICMP Tunneling es un tipo de ataque que utiliza el protocolo ICMP como base. Así que, el objetivo de este tipo de ataque es no solo burlar un firewall sino también un antivirus y así mismo se podría establecer un reverse Shell con la víctima y comprometer un sistema, sin que un administrador de red, vea nada anómalo.

¿Cómo funciona un ataque de ICMP Tunneling?

La tunelización en ICMP es una técnica en la que podríamos enviar paquetes maliciosos a través del protocolo. Como todo protocolo de transporte, que utiliza IP sobre su capa 3, incluye una sección de Header y Payload, esta última es la que se va a encargar de inyectar mensajes maliciosos con el objetivo de comprometer un sistema o encapsular otro tipo de tráfico en ICMP, logrando eludir a administradores y firewalls.

En estos mensajes es posible inyectar todo tipo de tráfico, como SSH, HTTPS, TCP, o FTP entre otros, dentro de la sección de payload o carga útil. A diferencia del protocolo TCP, ICMP no necesita establecer una conexión, y dentro del payload es posible inyectar cualquier tipo de mensajes, según la especificación RFC 792.

Una de las técnicas más utilizadas cuando se compromete un sistema es crear una shell reversa para su control, y esto se logra inyectando un payload malicioso para que se establezca una conexión victima-atacante, pero por el protocolo ICMP.

Podemos encontrar infinidad de herramientas como icmptunnel, por internet. Hoy vamos a realizar una prueba sobre 2 sistemas y ver como se comporta este tipo de ataque y de que forma lo podemos prevenir.

Análisis ICMP normal.

Es muy común contar con tráfico ICMP en una red, veremos como se compone este tipo de paquetes.

En la siguiente imagen contamos con un paquete ICMP en donde se incluyen sus cabeceras y Payload. Esta imagen está tomada de la herramienta más usada para el análisis de tráfico en una red, Wireshark.

Paquete ICMP

Veamos que más nos dice Wireshark en un tráfico ICMP normal en la siguiente imagen:

Basándonos en nuestra captura anterior, vemos direcciones de origen y destino y el largo del paquete, que en este caso es de 98 bytes, en donde se incluyen las cabeceras Ethernet, IP e ICMP, el total del payload es de 48 bytes, y como podemos observar el largo es el mismo en toda su secuencia y también podremos ver mensajes del tipo Request y Reply, que significa que se envía un mensaje y se responde al emisor, notificando que se encuentra en línea. Hasta el momento es todo normal.

Generando un ataque reverse Shell por ICMP con un firewall activo.

Para este escenario de prueba hemos utilizado Linux como sistema operativo, pero también lo podríamos realizar con Windows. Las distribuciones utilizadas son Kali Linux y Ubuntu como víctima.

Por internet encontraréis una gran variedad de aplicaciones para este uso, en nuestro caso hemos seleccionado un repositorio de Github para esto, con una aplicación llamada icmpdoor. Puedes leer su documentación de uso en el mismo repositorio.

Este repositorio utiliza Python para realizar el ataque y es realmente simple, solo necesitamos instalar un cliente y servidor entre máquina atacante y víctima, hay muchas formas de instalar el cliente, pero no nos centraremos en tipos de ataques, sino en demostrar como funciona este ataque para prevenirnos.

Descargamos el repositorio y ejecutamos el binario en ambos ordenadores.

Ejecutando el servidor

Ejecutado el cliente

Como podemos observar el servidor se encuentra en la IP 192.168.0.140 y la víctima en 192.168.0.122.

Obteniendo una Shell remota por ICMP

Aquí ya estaríamos en la máquina víctima, si ejecutamos comandos como whoami o ifconfig, lo podremos comprobar, siempre desde el lado del servidor.

Verificando Wireshark

Veamos nuevamente que nos muestra Wireshark.

Podemos observar un comportamiento ICMP un poco extraño, en principio tenemos un mensaje de request y varios mensajes reply, en segundo lugar lo más llamativo es el tamaño de los paquetes, si lo comparamos con la primera imagen, el tamaño es variable, con estos datos nos podremos dar cuenta que algo no es normal y poder tomar acciones.

¿Como proteger la red de este tipo de ataques?

Teniendo en cuenta las variables anteriores, si contamos con routers con IDS, como el caso de Unifi, podremos ver este tipo de ataques.

Si contamos con Mikrotik como router, podremos realizar reglas de filtrado especificas, como por ejemplo si un paquete ICMP excede determinado tamaño realizar un bloqueo o añadirlo a un Address-List para su posterior bloqueo. Como este tipo de ataques también excede la cantidad de paquetes ICMP normales, se podría aplicar otra regla que detecte una cantidad grande de paquetes ICMP por la red.

Como has podido ver, es posible comprometer sistemas utilizando ICMP, en donde inyectar en su payload, tráfico malicioso. En este escenario, hemos creado una reverse Shell, pero también podríamos enviar cualquier tipo de tráfico por medio de ICMP.

Esperamos con esta entrada hayas podido ver que a pesar de que ICMP es un protocolo de control, también puede ser utilizado para fines ilicitos.

¡Nos vemos la próxima!

Artículos relacionados