SSH, o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos a través de Internet. El servicio se creó como un reemplazo seguro para el Telnet no encriptado y utiliza técnicas criptográficas para garantizar que todas las comunicaciones hacia y desde el servidor remoto se realicen de manera cifrada. Proporciona un mecanismo para autenticar a un usuario remoto, transferir entradas del cliente al host y retransmitir la salida al cliente.
La siguiente figura muestra una ventana SSH típica. Cualquier usuario de Linux o macOS puede SSH en su servidor remoto directamente desde la ventana del terminal. Los usuarios de Windows pueden aprovechar los clientes SSH como Putty. Puede ejecutar comandos de shell de la misma manera que lo haría si estuviera operando físicamente la computadora remota.
Este tutorial de SSH cubrirá los conceptos básicos de cómo funciona SSH, junto con las tecnologías subyacentes utilizadas por el protocolo para ofrecer un método seguro de acceso remoto. Cubrirá las diferentes capas y tipos de cifrado utilizados, junto con el propósito de cada capa.
¿Cómo funciona el protocolo SSH?
Si estás usando Linux o Mac, entonces usar SSH es muy simple. Si usa Windows, necesitará utilizar un cliente SSH para abrir conexiones SSH.
Para usuarios de Mac y Linux, diríjase a su programa de terminal y luego siga el procedimiento a continuación:
El comando SSH consta de 3 partes distintas:
ssh {user}@{host}
El comando de teclado SSH le indica a su sistema que desea abrir una conexión de shell segura cifrada. {usuario} representa la cuenta a la que desea acceder. Por ejemplo, es posible que desee acceder al usuario root, que básicamente es un administrador del sistema con derechos completos para modificar cualquier cosa en el sistema. {host} se refiere a la computadora a la que desea acceder. Puede ser una dirección IP (por ejemplo, 244.235.23.19) o un nombre de dominio (por ejemplo, www.xyzdomain.com).
Cuando presione Entrar, se le solicitará que ingrese la contraseña de la cuenta solicitada. Cuando lo escriba, no aparecerá nada en la pantalla, pero su contraseña, de hecho, se está transmitiendo. Una vez que hayas terminado de escribir, pulsa enter una vez más. Si su contraseña es correcta, será recibido con una ventana de terminal remota.
Entendiendo las diferentes técnicas de encriptación
La importante ventaja ofrecida por SSH sobre sus predecesores es el uso del cifrado para garantizar la transferencia segura de información entre el host y el cliente. Host se refiere al servidor remoto al que intenta acceder, mientras que el cliente es la computadora que está utilizando para acceder al host. Hay tres tecnologías de cifrado diferentes utilizadas por SSH:
- Cifrado simétrico
- Encriptación asimétrica
- Hashing
Cifrado simétrico
El cifrado simétrico es una forma de cifrado en la que se utiliza una clave secreta tanto para el cifrado como para el descifrado de un mensaje por parte del cliente y del host. Efectivamente, cualquiera que posea la clave puede descifrar el mensaje que se está transfiriendo.
El cifrado simétrico a menudo se denomina clave compartida o cifrado secreto compartido. Por lo general, solo se utiliza una tecla o, a veces, un par de teclas donde una tecla puede calcularse fácilmente utilizando la otra tecla.
Las claves simétricas se utilizan para cifrar toda la comunicación durante una sesión SSH. Tanto el cliente como el servidor derivan la clave secreta utilizando un método acordado, y la clave resultante nunca se revela a terceros. El proceso de creación de una clave simétrica se lleva a cabo mediante un algoritmo de intercambio de claves. Lo que hace que este algoritmo sea particularmente seguro es el hecho de que la clave nunca se transmite entre el cliente y el host. En su lugar, las dos computadoras comparten datos públicos y luego los manipulan para calcular de forma independiente la clave secreta. Incluso si otra máquina captura los datos compartidos públicamente, no podrá calcular la clave porque no se conoce el algoritmo de intercambio de claves.
Sin embargo, se debe tener en cuenta que el token secreto es específico para cada sesión SSH y se genera antes de la autenticación del cliente. Una vez que se ha generado la clave, todos los paquetes que se mueven entre las dos máquinas deben estar cifrados por la clave privada. Esto incluye la contraseña escrita por el usuario en la consola, por lo que las credenciales siempre están protegidas contra los rastreadores de paquetes de red.
Existe una variedad de cifrados simétricos de cifrado, que incluyen, entre otros, AES (Advanced Encryption Standard), CAST128, Blowfish, etc. Antes de establecer una conexión segura, el cliente y el host deciden qué cifrado utilizar, mediante la publicación de una lista de cyphers apoyados en orden de preferencia. El cifrado preferido de los clientes admitidos a los cifrados que está presente en la lista del host se utiliza como el cifrado bidireccional.
Por ejemplo, si dos máquinas Ubuntu 14.04 LTS se comunican entre sí a través de SSH, usarán aes128-ctr como su cifrado predeterminado.
Cifrado asimétrico
A diferencia del cifrado simétrico, el cifrado asimétrico utiliza dos claves separadas para el cifrado y el descifrado. Estas dos claves se conocen como la clave pública y la clave privada. Juntas, ambas claves forman un par de claves público-privadas.
La clave pública, como sugiere su nombre, se distribuye abiertamente y se comparte con todas las partes. Si bien está estrechamente vinculado con la clave privada en términos de funcionalidad, la clave privada no se puede calcular matemáticamente a partir de la clave pública. La relación entre las dos claves es muy compleja: un mensaje que está cifrado por la clave pública de una máquina solo puede ser descifrado por la clave privada de la misma máquina. Esta relación unidireccional significa que la clave pública no puede descifrar sus propios mensajes, ni puede descifrar nada cifrado por la clave privada.
La clave privada debe permanecer privada, es decir, para que la conexión sea segura, ningún tercero debe conocerla. La fuerza de toda la conexión radica en el hecho de que la clave privada nunca se revela, ya que es el único componente capaz de descifrar los mensajes que se cifraron con su propia clave pública. Por lo tanto, cualquier parte que tenga la capacidad de descifrar mensajes firmados públicamente debe poseer la clave privada correspondiente.
A diferencia de la percepción general, el cifrado asimétrico no se utiliza para cifrar toda la sesión SSH. En su lugar, solo se utiliza durante el algoritmo de intercambio de claves del cifrado simétrico. Antes de iniciar una conexión segura, ambas partes generan pares temporales de claves público-privadas y comparten sus respectivas claves privadas para producir la clave secreta compartida.
Una vez que se ha establecido una comunicación simétrica segura, el servidor utiliza la clave pública del cliente para generarla, desafiarla y transmitirla al cliente para su autenticación. Si el cliente puede descifrar correctamente el mensaje, significa que contiene la clave privada requerida para la conexión. Entonces comienza la sesión de SSH.
Hash
El hashing unidireccional es otra forma de criptografía utilizada en Secure Shell Connections. Las funciones unidireccionales de hash se diferencian de las dos formas de cifrado anteriores en el sentido de que nunca deben descifrarse. Generan un valor único de una longitud fija para cada entrada que no muestra una tendencia clara que se pueda explotar. Esto los hace prácticamente imposibles de revertir.
Es fácil generar un hash criptográfico a partir de una entrada dada, pero es imposible generar la entrada del hash. Esto significa que, si un cliente tiene la entrada correcta, puede generar el hash criptográfico y comparar su valor para verificar si posee la entrada correcta.
SSH utiliza hashes para verificar la autenticidad de los mensajes. Esto se hace usando HMACs, o códigos de autenticación de mensajes basados en hash. Esto asegura que el comando recibido no se manipule de ninguna manera.
Mientras se selecciona el algoritmo de cifrado simétrico, también se selecciona un algoritmo de autenticación de mensajes adecuado. Esto funciona de manera similar a cómo se selecciona el cifrado, como se explica en la sección de cifrado simétrico.
Cada mensaje que se transmite debe contener un MAC, que se calcula utilizando la clave simétrica, el número de secuencia del paquete y el contenido del mensaje. Se envía fuera de los datos cifrados simétricamente como la sección final del paquete de comunicación.
¿Cómo funciona el protocolo SSHcon estas técnicas de cifrado?
La forma en que funciona SSH es mediante el uso de un modelo cliente-servidor para permitir la autenticación de dos sistemas remotos y el cifrado de los datos que pasan entre ellos.
SSH opera en el puerto TCP 22 de manera predeterminada (aunque esto puede cambiarse si es necesario). El host (servidor) escucha en el puerto 22 (o cualquier otro puerto asignado por SSH) para las conexiones entrantes. Organiza la conexión segura mediante la autenticación del cliente y la apertura del entorno de shell correcto si la verificación es exitosa.
El cliente debe comenzar la conexión SSH iniciando el protocolo de enlace TCP con el servidor, asegurando una conexión simétrica segura, verificando si la identidad mostrada por el servidor coincide con los registros anteriores (normalmente registrados en un archivo de almacén de claves RSA) y presentando las credenciales de usuario requeridas Para autenticar la conexión.
Hay dos etapas para establecer una conexión: primero, ambos sistemas deben acordar los estándares de cifrado para proteger las comunicaciones futuras, y segundo, el usuario debe autenticarse. Si las credenciales coinciden, entonces el usuario tiene acceso.