El otro día en el trabajo, junto con mi compañero Borja González toco trastear para ver si era viable proponer un túnel SSH para realizar las pruebas, por ello he dedidio escribir esta entrada de blog, donde vamos a ver cómo crear un túnel en SSH, antes de entrar en detalle, se muestra una definición de la Wikipedia, en la que explica que es un túnel:
También desde la Wikipedia se puede obtener para que sirve un túnel SSH:
¿Por qué querríamos crear un túnel en SSH? Por diversos motivos, entre ellos:
Si definimos las máquinas:
En nuestro caso, el comando quedaría como sigue:
Ahora vamos a explicarlo:
De esta manera ya tenemos configurado el túnel. Es importante ver que la conexión entre nuestra máquina y el servicio SSH en 192.168.0.196 irá cifrada, pero que desde esta máquina al FTP no irá cifrada, por lo tanto, habría que usar FTPS o SFTP.
Para conseguir ver mejor el concepto, se deja una imagen con un pequeño esquema de como sería el escenario:
También desde la Wikipedia se puede obtener para que sirve un túnel SSH:
¿Por qué querríamos crear un túnel en SSH? Por diversos motivos, entre ellos:
- Evitar Firewalls.
- Mandar la información por un canal seguro.
- Evitar restricciones, como pueden ser las que ponen en una empresa para visitar X página, o en un determinado país a usar un servicio.
- Realizar Pivoting
- Conexión a una red no confiable (¿verdad que nadie se conecta a este tipo de redes?)
- Queremos establecer una conexión segura a un determinado FTP - [IP: 192.168.0.197].
- Contamos corriendo un servicio SSH en un servidor, o nuestro PC de casa (IP estática)
- [IP: 192.168.0.196]
ssh
<Usuario@HostConSSH> -L <PuertoLocal>:<HostConFTP>:<PuertoFTP>
Si definimos las máquinas:
- Máquina A → Nuestro PC, que se encuentra conectado a la red no confiable.
- Máquina B → Máquina corriendo SSH con IP: 192.168.0.196.
- Máquina C → Máquina corriendo FTP con IP: 192.168.0.197 (objetivo).
ssh josue@192.168.0.196
-L 9999:192.168.0.197:21
Ahora vamos a explicarlo:
- josue@192.168.0.196: Indicamos el usuario SSH y la dirección donde se encuentra corriendo el servicio (Máquina B).
- -L 9999:192.168.0.197:21: Aquí decimos que en nuestro PC, la Máquina A, se ponga a “escuchar” el puerto 9999, y que la conexión a 192.168.0.197 (Máquina C) al puerto 21, se realicé en la máquina que corre el SSH.
Para conseguir ver mejor el concepto, se deja una imagen con un pequeño esquema de como sería el escenario:
Todavía no se ha conectado al FTP, para ello
desde una terminal, ejecutaremos:
ftp localhost 9999
Como podemos ver la conexión se realiza al
túnel, que comienza en nuestro PC (Máquina A), por ello localhost,
en el puerto 9999.
Ya estaríamos conectados a través de una
máquina intermedia al servicio FTP que queríamos. Si capturamos el tráfico con
tcpdump o Wireshark, veremos las conexiones, a continuación, un ejemplo usando
tcpdump (sudo tcpdump -A dst 192.168.0.196):
Si se filtra con
destino 192.168.0.197 (Máquina C) no capturaremos ningún paquete.
Para seguir profundizando y aprendiendo sobre
este concepto y ver nuevas aplicaciones, como saltar entre máquinas, podéis
leer el siguiente artículo de Pablo Gónzalez (@pablogonzalezpe):
¡Salta conmigo! Metasploit, Meterpreter, SSH,
Port-Forwarding, Túneles & Exploits.
Hasta aquí llega
el post. Un saludo.
Autor: Josué
Encinar García (@JosueEncinar). Ingeniero de Software,
estudiante del Máster Universitario en Seguridad de Tecnologías de la
Información y de las Comunicaciones en la Universidad Europea de
Madrid. Analista de Seguridad en Accenture. Co-Fundador de Ciberbyte.