Capas de seguridad SSH

El protocolo SSH permite que cualquier programa de cliente y servidor construido según los planes detallados del protocolo comuniquen con seguridad y se usen de manera intercambiable.

Actualmente existen dos variedades diferentes de SSH. La versión 1 de SSH contiene varios algoritmos de encriptación patentados (sin embargo varios de estas patentes han caducado) y un agujero de seguridad que potencialmente permitiría que datos se inserten en el flujo de datos. Se recomienda el uso de servidores y clientes compatibles con la versión 2 de SSH, si es posible.

OpenSSH incluye el soporte para la versión 2 (y claves de encriptación DSA a disposición gratis). Combinado con las bibliotecas de encriptación OpenSSL, OpenSSH proporciona una gama completa de servicios de seguridad.

Ambas versiones del protocolo SSH (1 y 2) usan capas de seguridad parecidas para reforzar la integridad de la comunicación desde varios puntos de vista. Cada capa proporciona su propio tipo de protección que cuando se usa en conjunto con las otras refuerza la seguridad total de la comunicación y la hace más fácil de usar.

Capa de transporte

El papel principal de la capa de transporte es el de facilitar una comunicación segura entre dos hosts a la hora de y después de la autentificación. Normalmente ejecutado a través de TCP/IP, la capa de transporte logra hacer esto ocupándose de la encriptación y descifrado de datos, verificando que el servidor sea la máquina correcta para la autentificación, y proporcionando protección a la integridad de los paquetes de datos al momento de ser enviados y recibidos. Además, la capa de transporte también puede proveer la compresión de los datos, acelerando así la transmisión de la información.

Al contactar un cliente a un servidor por medio del protocolo SSH, se negocian varios puntos importantes para que ambos sistemas puedan construir la capa de transporte correctamente:

El servidor se identifica ante el cliente con una clave de host durante el intercambio de claves. Obviamente si este cliente nunca había comunicado antes con este determinado servidor, la clave del servidor le resultará desconocida al cliente. OpenSSH evita este problema permitiendo que el cliente acepte la clave de host del servidor la primera vez que se lleva a cabo una conexión SSH. Luego la clave de host del servidor se puede verificar con la versión guardada en el cliente en las siguientes conexiones, proporcionando la confianza que el cliente está realmente comunicando con el servidor deseado.

AtenciónAdvertencia
 

El método de verificación de la clave de host utilizado por OpenSSH no es perfecto. Un agresor podría fingir ser el servidor durante el contacto inicial, porque el sistema local no necesariamente reconocería la diferencia entre el servidor deseado y el agresor a ese punto. Pero hasta que no se encuentre a disposición un método mejor de distribución de claves de host, este método inicialmente inseguro es mejor que nada.

SSH fue ideado para funcionar con casi cualquier tipo de algoritmo de clave pública o formato de codificación. Después de que el intercambio de claves inicial crea dos valores (un valor de hash usado para intercambios y un valor de secreto compartido), los dos sistemas empiezan inmediatamente a calcular claves y algoritmos nuevos para proteger la autentificación y los datos que se enviarán a través de la conexión en el futuro.

Autentificación

Cuando la capa de transporte haya construido un túnel seguro para transmitir información entre los dos sistemas, el servidor le dirá al cliente de los diferentes métodos de autentificación soportados, como el uso de firmas privadas codificadas con claves o la inserción de una contraseña. El cliente entonces intentará autentificarse ante el servidor mediante el uso de cualquiera de los métodos soportados.

Ya que los servidores se pueden configurar para que concedan varios tipos de autentificación, este método proporciona a cada parte un control óptimo. Luego el servidor podrá decidir qué métodos de encriptación soportará basado en su pauta de seguridad, y el cliente puede elegir el orden en que intentará utilizar los métodos de autentificación entre las opciones a disposición. Gracias a la naturaleza segura de la capa de transporte de SSH, hasta métodos de autentificación que parecen inseguros, como la autentificación basada en el host, son en realidad seguros.

La mayoría de los usuarios que requieren de una shell segura se autentificarán por medio de una contraseña. En contraste con otros esquemas de seguridad por medio de autentificación, la contraseña se transmite al servidor en texto sin cifrar. Sin embargo, ya que la contraseña entera va cifrada al pasar por la capa de transporte, puede ser enviada a través de cualquier red sin problemas de seguridad.

Conexión

Después de una autentificación exitosa sobre una capa de transporte SSH, se abren canales múltiples por medio de la multiplexión[1] la conexión individual entre dos sistemas. Cada canal se ocupa de la comunicación para sesiones entre terminales diferentes, el reenvío de información por X11 o cualquier servicio aparte que intente usar la conexión SSH.

Ya sea los clientes como los servidores pueden crear un canal nuevo, con cada canal asignado un número diferente en cada orilla. Cuando una parte intenta abrir un canal nuevo, el número para el canal de esa parte se envía junto con la petición. Esta información se almacena por la otra parte y se usa para dirigir un determinado tipo de comunicación de servicio a ese canal. Esto se lleva a cabo para que diferentes tipos de sesiones no se afecten los unos por los otros y que los canales puedan cerrarse sin interrumpir la conexión SSH principal entre los dos sistemas.

Los canales también soportan el control de flujo, el cual les permite enviar y recibir datos ordenadamente. De esta manera, los datos no se envían a través del canal sino hasta que el host haya recibido un mensaje avisando que el canal puede recibirlos.

Los canales son especialmente útiles con el reenvío por X11 y el reenvío por puerto TCP/IP con SSH. Se pueden configurar canales aparte en modo diferente, tal vez para usar un tamaño de paquete máximo diferente o para transferir un determinado tipo de datos. Esto permite que SSH sea flexible en su modo de encargarse de los diferentes tipos de conexiones remotas, como el acceso telefónico en redes públicas o enlaces LAN de alta velocidad, sin tener que cambiar la infraestructura básica del protocolo. El cliente y el servidor se ponen de acuerdo automáticamente sobre la configuración de cada canal dentro de la conexión SSH para el usuario.

Notas

[1]

Una conexión multiplexada consiste en varias señales enviadas simultáneamente por un medio compartido. Con SSH, se envían varios canales en una conexión en común segura.