Para los que no lo sepan SSH (openSSH para ser mas específicos) es una utilidad que nos permite gestionar una maquina *nix de manera remota,
la gestión se realiza vía linea de comandos, pero como sabrán la
mayoría de los entendidos en este tema, con un acceso a consola es mas
que suficiente.
En ocasiones dependiendo de la
funcionalidad que deseemos implementar es necesario que tengamos abierto
puertos para algún servicio ya sea un servidor web, DNS, impresión
,etc. Pero en ocasiones esas posibilidades no se encuentran a nuestro
alcance ya que simplemente o nuestro ISP nos tiene dentro de un NAT
gigante (muchas cableras) o nuestros Modem/Router vienen capado de
fabrica para que los mismos no se puedan tocar a nuestro antojo, y por
ende poder abrir los puertos que requerimos.
SSH en un túnel Reverso
Como bien sabremos SSH tiene diversas
funcionalidades entre las cuales destacan :forwardeo de puertos,
ejecución de programas por medio del gestor X11, etc. Pero una de las
mas interesantes a mi parecer y que en un sinfín de ocasiones me ha
sacado de apuros es el túnel reverso. Esta funcionalidad nos da la posibilidad de redireccionar puertos hacia nosotros pudiendo así hacer bypass de cualquier firewall, haciendo una analogía es como hace muchos a~nos se realizaban infecciones con troyanos reversos.
A continuación ampliaremos mas el tema:
Regularmente una conexión SSH se realiza de la siguiente manera:
Cliente SSH ———> Servidor SSH
Como podremos observar en una conexión
SSH tradicional el cliente SSH es el que realiza la conexión hacia el
servidor y es así como se establece la conexión. Ahora bien, es
importante considerar que para que esta conexión exista es necesario que
en el servidor se tenga abierto el puerto de SSH.
En el esquema de conexión de túnel SSH
reverso la conexión es hacia nosotros, para ello se ejemplificara mejor
con la siguiente imagen:
Servidor A —–> Servidor C (pasarela) <——-> Servidor B
Donde imaginemos que A es el servidor
donde tenemos una aplicación corriendo (un servidor web por ejemplo), C
es un servidor que ocuparemos como pasarela y B sera el servidor donde
requerimos ver el servidor web del servidor A.
En un esquema de funcionamiento
tradicional tan solo bastaría con abrir el puerto web en el firewall del
Servidor A para que el servidor B pudiera acceder de forma ordinaria al
web server, pero imaginemos que por restricciones del Sysadmin,
simplemente esto no es posible. Aquí es donde entra el SSH reverso. El
servidor A se conectara por medio de un túnel reverso SSH al servidor C y
de ahí con un cliente SSH nos conectaremos del servidor B al servidor
C, para poder acceder al webserver de A.
A continuación algunos ejemplos didácticos para hacer mas comprensible esta metodología de funcionamiento.
Ver el WebService escuchando en el puerto 80 del Servidor A en el navegador del Servidor B
Servidor A < ————-> Servidor B
Sintaxis:
ssh usuario@servdorA -L 80:localhost:80
Esto lo que hará es redireccionar el puerto 80 del servidor A hacia el puerto 80 del servidor B
Túnel Reverso del servidor A al servidor C, para que el servidor B pueda acceder a la consola SSH del servidor A.
Sintaxis:
Consola servidor A:
ssh usuario@servidorC -N -R 2222:localhost:22
Donde:
-N Es una opción para que el servidor A NO PUEDA ejecutar comandos en la consola del servidor C
-R indica que es un túnel reverso.
22 Es el puerto donde esta escuchando el demonio SSH del servidor A
2222 Es el puerto donde se mandara el puerto SSH del servidor A en el servidor C
-N Es una opción para que el servidor A NO PUEDA ejecutar comandos en la consola del servidor C
-R indica que es un túnel reverso.
22 Es el puerto donde esta escuchando el demonio SSH del servidor A
2222 Es el puerto donde se mandara el puerto SSH del servidor A en el servidor C
Consola Servidor B:
ssh usuario@servidorC
Después de esto una vez dentro del servidor C, tan solo nos restara
hacer una conexión SSH a nuestro localhost en el puerto antes
forwardeadado:
Consola servidor B:
ssh usuario@localhost -p 2222
Donde:
-p indica el puerto al cual deseamos conectarnos
2222 Es el puerto donde se forwardeo el puerto del servidor A
-p indica el puerto al cual deseamos conectarnos
2222 Es el puerto donde se forwardeo el puerto del servidor A
Lo mas interesante de esto es que al ser el túnel SSH una conexión saliente la misma no es bloqueda por el firewall,
esto es algo que he probado en diversas instituciones tanto publicas
como privadas y en ninguna me han bloqueado la salida de mi tunel SSH.
Esto en teoría podría prevenirse con un IDS bien configurado, pero
siendo honestos, es algo que nadie se toma muy en cuenta.
NOTA: a día de hoy esta funcionalidad solo la he probado en puertos TCP
Fuente: http://dexter-one.net/in-seguridad/el-poder-de-ssh-como-bypassear-un-firewall-de-manera-facil/
No hay comentarios:
Publicar un comentario