Cómo funciona SSH

Los programas de servicios de red tradicionales, como FTP, POP y Telnet, son intrínsecamente inseguros porque utilizan texto sin cifrar para transmitir datos, cuentas de usuario y contraseñas de usuario en la red, lo que los hace vulnerables a la entrada de personas. -ataques intermedios En este ataque, el atacante se hará pasar por un servidor real para recibir los datos enviados por el usuario al servidor y luego se hará pasar por el usuario para enviar los datos al servidor real.

Para satisfacer las necesidades de seguridad, el grupo de trabajo de redes del IETF desarrolló Secure Shell (abreviado como SSH), que es un protocolo de seguridad basado en la capa de aplicación y la capa de transporte que proporciona una transmisión y una transmisión seguras. entorno de uso.

SSH es actualmente el protocolo más confiable diseñado para brindar seguridad para sesiones de inicio de sesión remotas y otros servicios de red. El uso del protocolo SSH puede prevenir eficazmente la fuga de información durante la gestión remota. Todos los datos transmitidos se pueden cifrar a través de SSH y también pueden evitar la suplantación de DNS y la suplantación de IP.

Este artículo se centrará en los algoritmos de cifrado utilizados en SSH y el proceso de establecimiento de una conexión segura.

Para garantizar la seguridad de la transmisión de información, SSH utiliza cifrado simétrico, cifrado asimétrico y tecnologías hash.

El cifrado de clave simétrica, también conocido como cifrado simétrico, cifrado de clave privada y cifrado de clave compartida, es un tipo de algoritmo de cifrado en criptografía. Estos algoritmos utilizan la misma clave para el cifrado y el descifrado, o dos claves que pueden deducirse fácilmente entre sí.

SSH utiliza claves simétricas para cifrar la información transmitida a lo largo de la conexión. Vale la pena señalar que el par de claves pública/privada creado por el usuario solo se usa para verificación y no se usará para conexiones cifradas. El cifrado simétrico permite autenticar las contraseñas para evitar miradas indiscretas de terceros.

La clave compartida se genera mediante un algoritmo de intercambio de claves, que permite a ambas partes crear una clave a través de un canal inseguro sin ninguna información previa de la otra parte. Tanto el cliente como el servidor participan en este proceso, y los detalles del proceso se detallarán más adelante.

La clave generada se utilizará para cifrar los datos transmitidos entre el cliente y el servidor durante esta sesión. Este proceso se completa antes de verificar la identidad del cliente.

SSH admite una variedad de algoritmos de clave simétrica, incluidos AES, Blowfish, 3DES, CAST128 y Arcfour. Los clientes y servidores pueden configurar una lista de algoritmos para usar. Se utilizará el primer algoritmo de la lista de clientes que sea compatible con el servidor.

Por ejemplo, en Ubuntu 14.04, las configuraciones predeterminadas del cliente y del servidor son las siguientes: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-gcm@openssh.com, aes256-gcm @openssh.com, chacha20-poly1305@openssh.com, aes128-cbc, Blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour.

En otras palabras, si dos máquinas Ubuntu 14.04 adoptan la configuración predeterminada, siempre utilizarán el algoritmo aes128-ctr para cifrar la conexión.

En el método de cifrado asimétrico se requiere un par de claves, una es la clave privada y la otra es la clave pública. Las dos claves están matemáticamente relacionadas. La información cifrada con la clave pública sólo se puede descifrar con la clave privada. Si conoces uno de ellos, no podrás calcular el otro. Por lo tanto, si se revela una de las claves de un par, la naturaleza secreta de la otra clave no se ve comprometida.

SSH utiliza cifrado asimétrico en algunos lugares.

Durante el proceso de intercambio de claves se utiliza cifrado asimétrico. En esta etapa, el cliente y el servidor generan un par de claves temporales e intercambian claves públicas para generar una clave compartida.

El cifrado asimétrico también se utiliza durante el proceso de autenticación. El par de claves SSH se utiliza para autenticar al cliente en el servidor. El cliente crea un par de claves, luego carga la clave pública en el servidor remoto y la escribe en el archivo ~/.ssh/authorized_keys.

Después de crear la clave compartida, el cliente debe demostrar su identidad al servidor. El servidor utilizará la clave pública del archivo para cifrar una información y enviar la información cifrada al cliente. Si el cliente puede descifrar esta información, podrá demostrar que posee la clave privada correspondiente. Luego, el servidor configurará un entorno de shell para el cliente.

El hashing es un método de procesamiento de datos en informática que utiliza un algoritmo específico para asociar los elementos que se recuperarán con el índice entrante para generar una estructura de datos que sea fácil de buscar (tabla hash). También se utiliza comúnmente como método de seguridad de la información para identificar si los archivos y los datos han sido manipulados mediante el uso de una huella digital de datos calculada mediante un algoritmo hash en una cadena de datos.

SSH utiliza principalmente el código de autenticación de mensajes con clave hash (HMAC) para confirmar que el mensaje no ha sido manipulado.

Durante el proceso de negociación de cifrado simétrico mencionado anteriormente, se utilizará el algoritmo Código de autenticación de mensajes (MAC). Este algoritmo será seleccionado entre los algoritmos soportados por el cliente.

Una vez completada la negociación de claves, todos los mensajes deben llevar MAC, que es utilizada por ambas partes que se comunican para verificar la coherencia de los mensajes. El valor MAC se calcula a partir de la clave compartida, la secuencia de paquetes del mensaje y el contenido real del mensaje.

Fuera del área de cifrado simétrico, la propia MAC se envía como última parte del paquete. Los investigadores suelen recomendar secretar los datos primero y luego calcular la MAC.

El protocolo SSH utiliza un modelo cliente-servidor para autenticar a dos partes y cifrar los datos entre ellas.

El servidor escucha las solicitudes de conexión en el puerto especificado. Es responsable de negociar una conexión segura, autenticar a la parte que se conecta y generar el entorno de shell correcto para el cliente.

El cliente es responsable de negociar una conexión segura, verificar que la identidad del servidor coincida con la información registrada previamente y proporcionar credenciales para la autenticación.

Una sesión SSH se divide en dos fases. El primero es el consentimiento y el establecimiento de cifrado para proteger las comunicaciones futuras. La segunda fase es autenticar al usuario y descubrir si se debe otorgar acceso al servidor.

Cuando el cliente inicia una solicitud, el servidor devuelve la versión del protocolo admitido. Si el cliente puede coincidir con una de las versiones del protocolo, la conexión continúa. El servidor proporcionará su clave de host pública y el cliente puede usar esta clave para verificar si el servidor es legítimo.

En este momento, las partes comunicantes utilizan el algoritmo Diffie-Hellman para negociar la clave de sesión.

El proceso general del algoritmo es el siguiente:

El cifrado de clave compartida utilizado para las conexiones restantes se denomina protocolo de paquete binario. El proceso anterior permite que ambas partes participen por igual en la generación de una clave compartida.

La clave generada es una clave simétrica, lo que significa que la clave utilizada para cifrar el mensaje también se puede utilizar para descifrarlo. El objetivo es envolver las comunicaciones posteriores en un túnel cifrado que no pueda ser descifrado por personas ajenas.

Una vez generada la clave de sesión, comienza la autenticación del usuario.

Hay varios métodos diferentes disponibles para la autenticación, dependiendo de lo que acepte el servidor.

El método más simple es la autenticación de contraseña, en la que el servidor requiere que el cliente ingrese la contraseña de la cuenta que intenta iniciar sesión. La contraseña se envía mediante cifrado negociado.

Aunque la contraseña está cifrada, este método generalmente no se recomienda porque la complejidad de la contraseña es limitada. En comparación con otros métodos de autenticación, los scripts automatizados son relativamente fáciles de derrotar a las contraseñas de longitud normal.

La opción más recomendada es utilizar un par de claves SSH. Los pares de claves SSH son claves asimétricas.

La clave pública se utiliza para cifrar datos que sólo se pueden descifrar con la clave privada. La clave pública se puede compartir libremente porque no hay forma de derivar la clave privada de la clave pública.

El proceso de verificación es el siguiente:

Como puedes ver, la asimetría de la clave permite al servidor utilizar la clave pública para cifrar el mensaje al cliente. Luego, el cliente puede demostrar que posee la clave privada descifrando correctamente el mensaje.

El autor se especializó en seguridad de la información cuando era estudiante, pero no me involucré en la industria de la seguridad después de graduarme. Básicamente, olvidé la mayor parte del conocimiento que aprendí en el aula después de trabajar durante 4 años.

SSH es una de las cosas más utilizadas en el trabajo y su principio de funcionamiento implica mucha criptografía.

Al escribir esta publicación de blog, en primer lugar, espero que pueda ayudar a los lectores a comprender SSH y, en segundo lugar, espero poder adquirir algunos conocimientos profesionales. En las industrias relacionadas con Internet/software, ya sea que se dedique a trabajos de seguridad o no, es necesario comprender estas cosas.