La seguridad desempeña siempre un papel central en Internet. De ahí que el pro­ce­di­mie­n­to de seguridad SSH está fi­r­me­me­n­te anclado en la pila de pro­to­co­los TCP/IP. Im­ple­me­n­ta­do en 1995 y revisado varias veces desde entonces, el protocolo SSH permite a los usuarios es­ta­ble­cer una conexión segura entre dos or­de­na­do­res. A co­n­ti­nua­ción nos ade­n­tra­re­mos en los detalles del protocolo SSH y mo­s­tra­re­mos cómo realiza el cifrado.

¿Para qué sirve SSH?

El protocolo SSH permite que dos co­mpu­tado­ras es­ta­ble­z­can una conexión segura y directa dentro de una red po­te­n­cia­l­me­n­te insegura como Internet. Este protocolo es necesario para que no puedan acceder terceros al flujo de datos que se tra­n­s­fie­re a través de la conexión y la in­fo­r­ma­ción sensible no caiga en manos equi­vo­ca­das. Antes de que apa­re­cie­ra Secure Shell, también era posible es­ta­ble­cer co­ne­xio­nes directas entre dos or­de­na­do­res, pero las apli­ca­cio­nes que se uti­li­za­ban, Telnet, Remote Shell o rlogin, eran inseguras. SSH encripta la conexión entre dos co­mpu­tado­ras y permite operar una de ellas desde la otra.

SSH no solo garantiza una conexión cifrada, sino también que solo se es­ta­ble­z­can co­ne­xio­nes entre los or­de­na­do­res de­s­ti­na­dos a este fin (es decir, que no sea posible ningún ataque del tipo man-in the-middle) y que los datos no puedan ma­ni­pu­lar­se en su camino hacia el de­s­ti­na­ta­rio. Ori­gi­na­ria­me­n­te, el acceso al ordenador remoto se realizaba siempre a través de la línea de comandos, con la que se enviaban comandos al equipo remoto. En­tre­ta­n­to, ya es posible también reflejar una interfaz gráfica de usuario (que no siempre está di­s­po­ni­ble en los se­r­vi­do­res) en tu propio ordenador con la ayuda de Virtual Network Computing (VNC) y así controlar el otro ordenador.

SSH tiene muchas apli­ca­cio­nes di­fe­re­n­tes:

  • Gestión de se­r­vi­do­res a los que no se puede acceder lo­ca­l­me­n­te
  • Tra­n­s­fe­re­n­cia segura de archivos
  • Creación de copias de seguridad
  • Conexión entre dos or­de­na­do­res con en­cri­p­ta­ción de extremo a extremo
  • Ma­n­te­ni­mie­n­to remoto desde otros or­de­na­do­res

El de­sa­rro­llo de SSH también ha influido en otros pro­to­co­los. Por ejemplo, el inseguro protocolo FTP, con el que es posible cargar archivos en un servidor y de­s­ca­r­gar­los desde allí, se ha de­sa­rro­lla­do aún más hasta tra­n­s­fo­r­mar­lo en el Protocolo de Tra­n­s­fe­re­n­cia de Archivos SSH (SFTP).

Una ventaja de SSH es que el protocolo se ejecuta en todos los sistemas ope­ra­ti­vos comunes. Dado que en sus orígenes era una apli­ca­ción Unix, también se im­ple­me­n­ta por defecto en todas las di­s­tri­bu­cio­nes de Linux y en macOS. Sin embargo, SSH también se puede usar en Windows si instalas el programa apropiado.

SSH vs. OpenSSH

Secure Shell fue creado en 1995 como un proyecto de código abierto. Ese mismo año, el de­sa­rro­lla­dor Tatu Ylönen fundó una empresa para seguir de­sa­rro­lla­n­do el protocolo. Así, el proyecto ini­cia­l­me­n­te abierto se fue co­n­vi­r­tie­n­do cada vez más en software pro­pie­ta­rio. Sin embargo, la comunidad de la red no se limitó a aceptar su co­me­r­cia­li­za­ción y de­sa­rro­lló una bi­fu­r­ca­ción abierta basada en el protocolo SSH-1: OpenSSH. Sin embargo, dado que la empresa SSH Co­m­mu­ni­ca­tion Security sigue tra­ba­ja­n­do en Secure Shell, ahora existen dos pro­to­co­los que son co­m­pe­te­n­cia. Uno de ellos es el protocolo pro­pie­ta­rio SSH-2 (un de­sa­rro­llo posterior desde que se co­no­cie­ron las vu­l­ne­ra­bi­li­da­des de seguridad en SSH-1) y el otro es OpenSSH.

OpenSSH y el SSH comercial son equi­va­le­n­tes tanto en fu­n­cio­na­li­dad como en alcance. La di­fe­re­n­cia radica sobre todo en el coste, pero también en el servicio de soporte. Si eliges el producto de SSH Co­m­mu­ni­ca­tion Security, también recibirás asi­s­te­n­cia las 24 horas del día, los 7 días de la semana, lo que puede ser pa­r­ti­cu­la­r­me­n­te útil para empresas grandes con gerentes de TI que cambian a menudo. OpenSSH, por otro lado, ofrece la ventaja de que cuenta con una gran comunidad que participa en el constante de­sa­rro­llo del proyecto.

¿Cómo funciona SSH? Una breve ex­pli­ca­ción

Secure Shell utiliza varias técnicas de cifrado y au­te­n­ti­ca­ción. Por un lado, esto garantiza que los flujos de datos no puedan leerse ni ma­ni­pu­lar­se. Por otra parte, solo los pa­r­ti­ci­pa­n­tes au­to­ri­za­dos pueden ponerse en contacto entre sí.

Au­te­n­ti­fi­ca­ción

En un primer paso, el servidor SSH y el cliente se au­te­n­ti­can mu­tua­me­n­te. El servidor envía un ce­r­ti­fi­ca­do al cliente para verificar que realmente es el servidor correcto. Solo en el primer contacto existe el peligro de que un tercero logre co­ne­c­tar­se entre los dos pa­r­ti­ci­pa­n­tes e in­te­r­ce­p­te la conexión. Dado que el propio ce­r­ti­fi­ca­do también está en­cri­p­ta­do, no puede ser imitado. Una vez que el cliente sabe cuál es el ce­r­ti­fi­ca­do correcto, nadie más puede hacer contacto a través del servidor co­rre­s­po­n­die­n­te.

Después de la au­te­n­ti­ca­ción del servidor, el cliente también debe demostrar ante el servidor que está au­to­ri­za­do para acceder a él. Esta in­fo­r­ma­ción se almacena en el servidor. Como resultado, los usuarios deben in­tro­du­cir la co­n­tra­se­ña cada vez que se conectan a otro servidor durante la misma sesión. Debido a esto, existe la po­si­bi­li­dad al­te­r­na­ti­va de au­te­n­ti­ca­ción del lado del cliente uti­li­za­n­do el conjunto de claves formado por la clave pública y la privada.

La clave privada se crea in­di­vi­dua­l­me­n­te para tu propio ordenador con una co­n­tra­se­ña que debe ser más larga que una al uso. La clave privada se almacena ex­clu­si­va­me­n­te en tu ordenador y siempre permanece secreta. Si deseas es­ta­ble­cer una conexión SSH, introduce primero la co­n­tra­se­ña que abre el acceso a la clave privada.

En el servidor (así como en el propio cliente) también hay claves públicas. El servidor crea un problema cri­p­to­grá­fi­co con su clave pública y lo envía al cliente. Este, a su vez, descifra el problema con su propia clave privada, devuelve la solución e informa al servidor de que está permitido es­ta­ble­cer una conexión segura.

Durante una sesión, solo necesitas in­tro­du­cir la co­n­tra­se­ña una vez para co­ne­c­tar­te a cualquier número de se­r­vi­do­res. Al final de la conexión, los usuarios cierran la sesión en sus equipos locales para ase­gu­rar­se de que ningún tercero que tenga acceso físico al equipo local pueda co­ne­c­tar­se al servidor.

Co­di­fi­ca­ción

Después de la au­te­n­ti­ca­ción mutua, los dos pa­r­ti­ci­pa­n­tes de la co­mu­ni­ca­ción es­ta­ble­cen una conexión cifrada. Para ello, se genera una clave de sesión que expira una vez fi­na­li­za­da la conexión –no debe co­n­fu­n­di­r­se con los pares de claves públicas/privadas, que solo se utilizan para el in­te­r­ca­m­bio de claves. La clave que se utiliza para el cifrado simétrico solo es válida para esta sesión. Tanto el cliente como el servidor tienen la misma clave, por lo que cualquier mensaje que se in­te­r­ca­m­bie puede ser cifrado y de­s­ci­fra­do. El cliente y el servidor crean la clave si­mu­l­tá­nea­me­n­te, pero de forma in­de­pe­n­die­n­te el uno del otro. En el llamado algoritmo de in­te­r­ca­m­bio de claves, ambas partes utilizan cierta in­fo­r­ma­ción pública y secreta para crear la co­n­tra­se­ña.

Otra forma de en­cri­p­ta­ción se produce gracias al SSH por hashing. Un hash es una especie de firma que se genera para los datos tra­n­s­mi­ti­dos. El proceso es el siguiente: se utiliza un algoritmo para generar un hash único a partir de los datos. Si se manipulan los datos, el valor del hash también cambia au­to­má­ti­ca­me­n­te, lo que permite al de­s­ti­na­ta­rio reconocer si los datos han sido mo­di­fi­ca­dos por terceros. Los valores del hash están diseñados de tal manera que no pueden ser si­m­ple­me­n­te simulados. Idea­l­me­n­te, nunca es posible generar dos tra­n­s­mi­sio­nes di­fe­re­n­tes con el mismo hash: a esto se le llama seguridad de colisión.

Puertos SSH

Los puertos TCP son puntos finales abiertos por los se­r­vi­do­res y los clientes para permitir la co­mu­ni­ca­ción. Como en un puerto marítimo, los pa­r­ti­ci­pa­n­tes en la co­mu­ni­ca­ción reciben y envían aquí los paquetes de datos. TCP tiene un espacio de di­re­c­cio­nes de 16 bits y por lo tanto tiene di­s­po­ni­bles 65535 puertos. Sin embargo, la entidad Internet Assigned Numbers Authority (IANA) ha asignado algunos puertos (exac­ta­me­n­te 1024) para ciertas apli­ca­cio­nes, in­clu­ye­n­do el puerto SSH. Por defecto, todas las co­ne­xio­nes SSH se ejecutan en el puerto 22.

Nota

Debido a que el puerto a través del cual pasan las co­ne­xio­nes SSH es muy conocido y se sabe que se utiliza para tra­n­s­mi­tir datos sensibles, suele ser uno de los destinos favoritos de los ci­be­r­de­li­n­cue­n­tes. Por lo tanto, algunos usuarios piensan que tiene sentido reubicar el puerto SSH para evitar ataques, aunque esta solución solo ofrece pro­te­c­ción a corto plazo. Con un escáner de puertos es posible encontrar cualquier puerto utilizado por un ordenador.

Con SSH, el reenvío de puertos también es posible: el puerto SSH de un cliente o un servidor es utilizado por otro pa­r­ti­ci­pa­n­te dentro de una red local para crear una conexión segura a través de Internet. Para ello, los pa­r­ti­ci­pa­n­tes crean un túnel: los datos se reciben a través del puerto 22 y se envían al cliente a través de la red local.

Clientes SSH

El cliente SSH suele ser tu propio ordenador o el que utilices para es­ta­ble­cer una conexión con el servidor. Para lograr esto, puedes o debes (de­pe­n­die­n­do del sistema operativo) instalar un software separado que es­ta­ble­z­ca una conexión SSH. Estos programas también suelen llamarse clientes SSH. De mano de la misma SSH Co­m­mu­ni­ca­tion Security podemos encontrar el cliente de pago Tectia SSH, que además pro­po­r­cio­na un software de servidor. Además, hay muchas al­te­r­na­ti­vas libres, como el software de código abierto PuTTy para Windows y Linux o lsh, que funciona en todos los sistemas ope­ra­ti­vos basados en Unix.

Consejo

Algunos programas pro­po­r­cio­nan a los usuarios una interfaz gráfica que si­m­pli­fi­ca la co­n­fi­gu­ra­ción y la im­ple­me­n­ta­ción de SSH. En principio, Secure Shell también puede eje­cu­tar­se desde la línea de comandos, incluso sin necesidad de in­s­ta­la­ción adicional, en macOS y otros sistemas ope­ra­ti­vos similares a Unix.

Servidor SSH

El servidor SSH es la parte opuesta al cliente. El término también se utiliza en este contexto para el software en sí. Gran parte del software cliente también funciona en se­r­vi­do­res. Además, hay programas diseñados ex­clu­si­va­me­n­te para se­r­vi­do­res SSH y es común iniciar SSH en se­r­vi­do­res en el momento del arranque, lo que garantiza que puedes acceder al servidor desde fuera en cualquier momento a través de SSH.

Por otra parte, no es necesario que el servidor SSH sea en realidad un servidor en sentido estricto, es decir, que se encuentre en un centro de datos remoto. Los usuarios también pueden instalar un servidor SSH en su propio PC en casa para be­ne­fi­ciar­se de las ventajas del reenvío de puertos, por ejemplo.

Ir al menú principal