¿Qué es SSH (Secure Shell)?
La seguridad desempeña siempre un papel central en Internet. De ahí que el procedimiento de seguridad SSH está firmemente anclado en la pila de protocolos TCP/IP. Implementado en 1995 y revisado varias veces desde entonces, el protocolo SSH permite a los usuarios establecer una conexión segura entre dos ordenadores. A continuación nos adentraremos en los detalles del protocolo SSH y mostraremos cómo realiza el cifrado.
¿Para qué sirve SSH?
El protocolo SSH permite que dos computadoras establezcan una conexión segura y directa dentro de una red potencialmente insegura como Internet. Este protocolo es necesario para que no puedan acceder terceros al flujo de datos que se transfiere a través de la conexión y la información sensible no caiga en manos equivocadas. Antes de que apareciera Secure Shell, también era posible establecer conexiones directas entre dos ordenadores, pero las aplicaciones que se utilizaban, Telnet, Remote Shell o rlogin, eran inseguras. SSH encripta la conexión entre dos computadoras y permite operar una de ellas desde la otra.
SSH no solo garantiza una conexión cifrada, sino también que solo se establezcan conexiones entre los ordenadores destinados a este fin (es decir, que no sea posible ningún ataque del tipo man-in the-middle) y que los datos no puedan manipularse en su camino hacia el destinatario. Originariamente, 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. Entretanto, ya es posible también reflejar una interfaz gráfica de usuario (que no siempre está disponible en los servidores) en tu propio ordenador con la ayuda de Virtual Network Computing (VNC) y así controlar el otro ordenador.
SSH tiene muchas aplicaciones diferentes:
- Gestión de servidores a los que no se puede acceder localmente
- Transferencia segura de archivos
- Creación de copias de seguridad
- Conexión entre dos ordenadores con encriptación de extremo a extremo
- Mantenimiento remoto desde otros ordenadores
El desarrollo de SSH también ha influido en otros protocolos. Por ejemplo, el inseguro protocolo FTP, con el que es posible cargar archivos en un servidor y descargarlos desde allí, se ha desarrollado aún más hasta transformarlo en el Protocolo de Transferencia de Archivos SSH (SFTP).
Una ventaja de SSH es que el protocolo se ejecuta en todos los sistemas operativos comunes. Dado que en sus orígenes era una aplicación Unix, también se implementa por defecto en todas las distribuciones 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 desarrollador Tatu Ylönen fundó una empresa para seguir desarrollando el protocolo. Así, el proyecto inicialmente abierto se fue convirtiendo cada vez más en software propietario. Sin embargo, la comunidad de la red no se limitó a aceptar su comercialización y desarrolló una bifurcación abierta basada en el protocolo SSH-1: OpenSSH. Sin embargo, dado que la empresa SSH Communication Security sigue trabajando en Secure Shell, ahora existen dos protocolos que son competencia. Uno de ellos es el protocolo propietario SSH-2 (un desarrollo posterior desde que se conocieron las vulnerabilidades de seguridad en SSH-1) y el otro es OpenSSH.
OpenSSH y el SSH comercial son equivalentes tanto en funcionalidad como en alcance. La diferencia radica sobre todo en el coste, pero también en el servicio de soporte. Si eliges el producto de SSH Communication Security, también recibirás asistencia las 24 horas del día, los 7 días de la semana, lo que puede ser particularmente ú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 desarrollo del proyecto.
¿Cómo funciona SSH? Una breve explicación
Secure Shell utiliza varias técnicas de cifrado y autenticación. Por un lado, esto garantiza que los flujos de datos no puedan leerse ni manipularse. Por otra parte, solo los participantes autorizados pueden ponerse en contacto entre sí.
Autentificación
En un primer paso, el servidor SSH y el cliente se autentican mutuamente. El servidor envía un certificado al cliente para verificar que realmente es el servidor correcto. Solo en el primer contacto existe el peligro de que un tercero logre conectarse entre los dos participantes e intercepte la conexión. Dado que el propio certificado también está encriptado, no puede ser imitado. Una vez que el cliente sabe cuál es el certificado correcto, nadie más puede hacer contacto a través del servidor correspondiente.
Después de la autenticación del servidor, el cliente también debe demostrar ante el servidor que está autorizado para acceder a él. Esta información se almacena en el servidor. Como resultado, los usuarios deben introducir la contraseña cada vez que se conectan a otro servidor durante la misma sesión. Debido a esto, existe la posibilidad alternativa de autenticación del lado del cliente utilizando el conjunto de claves formado por la clave pública y la privada.
La clave privada se crea individualmente para tu propio ordenador con una contraseña que debe ser más larga que una al uso. La clave privada se almacena exclusivamente en tu ordenador y siempre permanece secreta. Si deseas establecer una conexión SSH, introduce primero la contraseñ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 criptográfico 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 establecer una conexión segura.
Durante una sesión, solo necesitas introducir la contraseña una vez para conectarte a cualquier número de servidores. Al final de la conexión, los usuarios cierran la sesión en sus equipos locales para asegurarse de que ningún tercero que tenga acceso físico al equipo local pueda conectarse al servidor.
Codificación
Después de la autenticación mutua, los dos participantes de la comunicación establecen una conexión cifrada. Para ello, se genera una clave de sesión que expira una vez finalizada la conexión –no debe confundirse con los pares de claves públicas/privadas, que solo se utilizan para el intercambio 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 intercambie puede ser cifrado y descifrado. El cliente y el servidor crean la clave simultáneamente, pero de forma independiente el uno del otro. En el llamado algoritmo de intercambio de claves, ambas partes utilizan cierta información pública y secreta para crear la contraseña.
Otra forma de encriptación se produce gracias al SSH por hashing. Un hash es una especie de firma que se genera para los datos transmitidos. 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 automáticamente, lo que permite al destinatario reconocer si los datos han sido modificados por terceros. Los valores del hash están diseñados de tal manera que no pueden ser simplemente simulados. Idealmente, nunca es posible generar dos transmisiones diferentes con el mismo hash: a esto se le llama seguridad de colisión.
Puertos SSH
Los puertos TCP son puntos finales abiertos por los servidores y los clientes para permitir la comunicación. Como en un puerto marítimo, los participantes en la comunicación reciben y envían aquí los paquetes de datos. TCP tiene un espacio de direcciones de 16 bits y por lo tanto tiene disponibles 65535 puertos. Sin embargo, la entidad Internet Assigned Numbers Authority (IANA) ha asignado algunos puertos (exactamente 1024) para ciertas aplicaciones, incluyendo el puerto SSH. Por defecto, todas las conexiones SSH se ejecutan en el puerto 22.
Debido a que el puerto a través del cual pasan las conexiones SSH es muy conocido y se sabe que se utiliza para transmitir datos sensibles, suele ser uno de los destinos favoritos de los ciberdelincuentes. Por lo tanto, algunos usuarios piensan que tiene sentido reubicar el puerto SSH para evitar ataques, aunque esta solución solo ofrece protecció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 participante dentro de una red local para crear una conexión segura a través de Internet. Para ello, los participantes 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 establecer una conexión con el servidor. Para lograr esto, puedes o debes (dependiendo del sistema operativo) instalar un software separado que establezca una conexión SSH. Estos programas también suelen llamarse clientes SSH. De mano de la misma SSH Communication Security podemos encontrar el cliente de pago Tectia SSH, que además proporciona un software de servidor. Además, hay muchas alternativas libres, como el software de código abierto PuTTy para Windows y Linux o lsh, que funciona en todos los sistemas operativos basados en Unix.
Algunos programas proporcionan a los usuarios una interfaz gráfica que simplifica la configuración y la implementación de SSH. En principio, Secure Shell también puede ejecutarse desde la línea de comandos, incluso sin necesidad de instalación adicional, en macOS y otros sistemas operativos 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 servidores. Además, hay programas diseñados exclusivamente para servidores SSH y es común iniciar SSH en servidores 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 beneficiarse de las ventajas del reenvío de puertos, por ejemplo.