Tener acceso a las máquinas en una organización es fundamental, pero en muchas ocasiones no siempre es tan sencillo como abrir una sesión de RDP o SSH y listo. Dependiendo de la arquitectura, filtrados, medidas de seguridad y demás puede que esto no sea tan sencillo. De hecho, los jumphosts, stepping stones o bastion hosts de salto están más extendidos de lo que pudiera parecer a primera vista.

En esta entrada veremos algunas de las opciones que nos ofrece SSH para realizar conexiones de este tipo, con redirecciones de puertos, túneles inversos, etc…

El reenvío de puertos (tunneling)

SSH es un protocolo de conexión y gestión remota con medidas criptográficas nativas y embebidas. Se ejectuta por defecto en el puerto 22/TCP y permite conexiónes de consola a máquinas remotas. Además el reenvío de puertos, tunneling o port-forwarding es una técnica que establece una conexión remota entre dos máquinas (mediante SSH) y que es capaz de presentar un puerto de red (socket) remoto en otra de forma transparente y segura. Por ejemplo para proteger tráfico que por defecto utiliza protocolos en texto plano o inseguros.

Existen varios tipos:

  • Reenvío local. Permite el acceso a un equipo remoto desde el equipo local.
  • Reenvío remoto. Permite el acceso de un equipo remoto a un equipo local.
  • Reenvío dinámico. Crea un proxy SOCKS de forma que los programas que se configuren para utiliarlo, iniciarán sus conexiones desde la máquina remota.

Reenvío local

ssh -L <puerto local>:host remoto:<puerto remoto> <host local>

En este caso por ejemplo podríamos conectarnos localmente a nuestro puerto 8080 con un navegador, y obtener acceso a este blog.

ssh -L 8080:blog.networkbits.es:80 localhost

Reenvío remoto

ssh -R <puerto remoto>:<host local>:<puerto local> <user>@<host remoto>

En este caso desde el equipo remoto se podría acceder al puerto 22 de nuestro equipo local si desde el equipo remoto se accede al puerto 22022.

ssh -R 22022:localhost:22 i686@remotehost

Reenvío dinámico

ssh -D <puerto local> <user>@<host remoto>

En este caso se inicia la escucha en el puerto 1080 que está dirigido de manera dinámica al equipo remoto.

ssh -D 1080 i686@remotehost

Si se configura por ejemplo un navegador para utilizar el proxy SOCKS en el equipo local por el puerto 1080, todas sus conexiones será como si se iniciasen desde el equipo remoto.

Conclusiones

Este tipo de técnicas presentan el inconventiente de que pueden dejar abiertas puertas traseras a actores maliciosos o a malware que camparía a sus anchas por todas ellas, aumentando de forma catastrófica la superficie de exposición e impacto. También pueden ser objeto de uso como canales encubiertos para la exfiltración de información.

Por otra parte se pueden (y de hecho se utilizan) para evadir sistemas de firewall y superación de obstáculos como NAT en redes que lo implementan, mediante la creación de shells inversas remotas.