Creando un túnel IPv4 sobre ICMP para bypassear controles

La mayoría de administradores de sistemas tienen una regla de oro y esta es, si funciona... no lo toques, no es lo más recomendado, pero es bastante extendida y existen muchas razones para que sea tan popular, una de las más comunes es la rotación en el mundo de IT, donde hay poco personal bien formado y los buenos profesionales son arrebatados de una empresa a otra a punta de cartera, esto genera una especie de teléfono roto donde una persona recibe el trabajo de otra, la mayoría de las veces sin mayores indicaciones y con la premisa de que funcione.

Conozco pocos profesionales que se atrevan a bloquear en su red conexiones salientes a puertos como el 80 o el 443, protocolos como el DNS o el ICMP y por eso es común que nos encontremos con escenarios idóneos para probar técnicas de bypass como la que presentaremos el día de hoy (si les llama la atención este contenido, podríamos generar otros bypass camuflando tráfico por el protocolo DNS u otros), que puede ser usada para saltarnos controles como el de portales cautivos, filtros de navegación o incluso sistemas de monitoreo.

Para esto plantearemos el siguiente escenario:

Imagen 1: Topología de estudio.

Como se observa en la Imagen 1, la topología por utilizar consiste en:

  • KL Interno: Host virtualizado con Kali Linux (versión 2018.1)
  • KL Externo: Host virtualizado con Kali Linux (versión 2018.1)
  • RA: Router Cisco (IOS Versión 15.2)
  • RB: Router Cisco (IOS Versión 15.2)
  • SWA: Sin configuraciones.
  • SWB: Sin configuraciones.

En los hosts “KL Interno” y “KL Externo”, se descargó (imagen 2) e instaló “Hans - IP over ICMP”. A continuación, se puede observar el proceso realizado en el host “KL Interno”.

Imagen 2: Descarga de Hans desde sourceforge.

  • Descompresión de los archivos (imagen 3).

Imagen 3: Descompresión de archivos.

  • Compilación de archivos (imagen 4).

Imagen 4: Compilación de archivos.

  • Configuraciones Routers

Se realiza la configuración de RA e ISP (imagen 5).

Imagen 5: Configuración RA e ISP.

 

ICMP (Internet Control Message Protocol)

Es utilizado para realizar notificaciones y diagnostico entre otras funciones en redes IPv4, definido en la RFC 792. El formato de los mensajes ICMP se puede observar en la imagen 6:

Imagen 6: Formato mensaje ICMP.

 

Los valores asignados para los campos “Tipo” y “Código”, son responsabilidad de la IANA (https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml).

 

Ejemplo mensaje ICMP enviado desde KL Interno a RA:

En este ejemplo (imagen 7) se enviaron 5 mensajes de prueba (echo request) y se recibieron 5 respuestas (echo reply).

Imagen 7: Ping realizado desde “KL Interno”.

 

Se realizó la captura de estos mensajes en el segmento ubicado entre RA y KL Interno como se observa en la Imagen 8.

Imagen 8: Captura de mensajes ICMP

 

En la Imagen 9 se puede apreciar los 5 mensajes enviados, con sus correspondientes respuestas.

Imagen 9: Visualización de los mensajes ICMP con Wireshark

 

Al analizar el primer mensaje enviado, se puede observar que este corresponde a un mensaje del tipo 8 (Echo Request) – Código 0. Además, se puede observar que existe un campo de relleno donde se le agrega carga al mensaje ICMP:

Imagen 10: Mensaje ICMP Echo Request

 

Los demás bits que aparecen al comienzo corresponden a las cabeceras de Ethernet II y de IP versión 4, en la siguiente Imagen se observa el detalle de estas cabeceras.

Imagen 11: Cabeceras Ethernet, IP e ICMP.

 

Establecimiento del túnel ICMP

Primero se verifican las direcciones IP en cada uno de los hosts, luego se comprueba que existe conectividad desde el host interno con el externo a través de ICMP. Además, se verifica el correcto funcionamiento del NAT.

Imagen 12: Direcciones IP host Interno y externo

A continuación, se levantará el túnel ICMP, para esto es necesario iniciar HANS el host público como server y en privado como cliente. Es necesario indicar el segmento de red utilizado por el túnel, en este caso la red a utilizar corresponde a la 10.0.0.0

Imagen 13: Túnel ICMP

En la imagen 14 se puede observar la activación del túnel entre “KL Interno” y “LK Externo”, además se puede observar las direcciones IP asignadas en ambos extremos.

Imagen 14: Activación túnel ICMP

 

Captura y análisis de ICMP

Como se puede observar en la Imagen 15, una vez activo el túnel ICMP entre los dos hosts, se genera tráfico ICMP entre ambos; el cual corresponde a peticiones de echo y sus respuestas. Una vez que se genera tráfico a través del túnel, se puede observar que el campo de datos del mensaje ICMP incrementa (Imagen 15) cuando se envía tráfico a través del túnel.

Imagen 15: Trafico ICMP de HANS

En este caso se realiza un ping desde el host “KL Externo” con destino al host “KL Interno”, el cual se ha realizado a través del túnel.

Imagen 16: Ping realizado desde el host externo al interno.

Cuando se realiza tráfico a través del túnel, se utiliza el campo de datos de ICMP para enviar un mensaje IPv4, como se observa en la Imagen 17.

Imagen 17: Encapsulamiento de paquete IP en campo de datos de ICMP.

A continuación, en la Imagen 18 se puede observar el detalle del campo de datos de un mensaje ICMP, en el cual podemos apreciar el mensaje ICMP encapsulado en él.

Imagen 18: Análisis del campo de datos de ICMP

A continuación, se realizará una conexión vía SSH desde el host “KL Externo” a “KL Interno” (figura 19) y en la imagen 20 se puede observar parte de la sesión SSH que viaja en el campo de datos del mensaje ICMP.

Imagen 19: conexión SSH desde host externo a interno

Imagen 20: Captura de sesión SSH sobre ICMP

Espero que les gustara, déjame un comentario si te interesa realizar este proceso camuflando tráfico en http o dns, muchas gracias.

Artículo escrito por Daniel Pacheco Daniel Pacheco (Lesand.cl) para La Comunidad DragonJAR

Go up