Implementación y Seguridad del Acceso Remoto con Protocolo SSH

1. El Servicio de Acceso y Control Remoto

Los servicios de acceso remoto permiten, mediante la utilización de aplicaciones de software, establecer conexiones con equipos a distancia y administrarlos de manera centralizada sin necesidad de acceder físicamente a ellos. El acceso remoto puede tener consecuencias impredecibles si no se lleva a cabo con unas condiciones de seguridad bien definidas.

En los años 60 y 70, la administración remota se hacía con la orden telnet. Eran sistemas basados en un potente servidor y clientes ligeros sin capacidad de proceso. Telnet no se creó pensando en seguridad, sino en que fuera fácil de usar. En la actualidad, no se utiliza debido a los agujeros de seguridad que presenta.

Herramientas de Administración Remota

Las herramientas de administración remota más utilizadas hoy en día son:

  • En modo texto: telnet, rlogin y Secure Shell (SSH).
  • En modo gráfico: VNC en Linux, NX y los servicios de terminal server en Windows.

SSH es una herramienta que permite establecer conexiones seguras entre equipos conectados mediante una red insegura. Ha sido diseñado para establecer conexiones remotas y transmitir de manera segura cualquier tipo de datos, como archivos y contraseñas.

2. El Protocolo Secure Shell (SSH)

Esta herramienta permite establecer conexiones seguras entre máquinas remotas. Su funcionamiento se describe en el RFC 4251.

Características Principales de SSH

  • Utiliza el puerto 22, el protocolo SSH y sigue el modelo Cliente/Servidor (C/S).
  • Permite la autenticación de los usuarios mediante contraseñas o un sistema de claves.
  • Permite su integración con otros sistemas de autenticación.
  • Está implementado para la mayoría de sistemas operativos (SO) y plataformas.

Ventajas de utilizar SSH

Con la utilización de SSH se evitan problemas de seguridad comunes y se obtienen los siguientes beneficios:

  • Después de la primera conexión, el cliente puede saber que se conectará al mismo servidor en futuras sesiones.
  • El cliente transmite al servidor la información necesaria para su autenticación en forma de cifrado.
  • Todos los datos que se envían y se reciben durante la conexión se transfieren cifrados.
  • El cliente puede ejecutar aplicaciones desde el Shell de forma segura.

Con la utilización de SSH se evita lo siguiente:

  • La interceptación de la comunicación entre dos sistemas por parte de una máquina tercera que copia la información que circula entre ellas.
  • La suplantación de un host o enmascaramiento, es decir, que una máquina finja que es la máquina de destino de un mensaje.

Ambos problemas se evitan con el cifrado de paquetes mediante claves que solo son conocidas por el sistema local y el remoto.

Versiones de SSH

Existen dos versiones de SSH:

  • SSH1: Contiene algoritmos de encriptación patentados, algunos caducados y algún agujero de seguridad. Utiliza dos claves, una pública y otra generada de forma aleatoria al solicitar el inicio de sesión. Soporta el algoritmo RSA.
  • SSH2: Es una versión más segura. Usa dos claves que dependen del algoritmo de encriptación utilizado. De momento no tiene ningún inconveniente y los algoritmos de encriptación soportados son RSA y DSA.

3. Conceptos Básicos sobre Encriptación

La criptografía es una técnica utilizada para convertir un texto claro en otro, llamado criptograma. Para leer el contenido del criptograma, tenemos que estar autorizados. Los algoritmos de encriptado cada vez son más difíciles de descifrar. La seguridad de la clave se basa en la longitud de la clave.

Uso de Algoritmos de Encriptación en SSH

SSH utiliza varios algoritmos de encriptación para:

  • Establecer la conexión con la máquina remota: Se emplean algoritmos de encriptación asimétrica.
  • Realizar la transferencia de datos: Se utiliza encriptación simétrica, que es más rápida.

Problemas que Resuelve la Encriptación

La técnica de encriptación resuelve los siguientes problemas:

  • Privacidad o confidencialidad: Nadie que no sea el destinatario puede acceder a la información.
  • Integridad: La información no puede ser alterada en el tránsito del emisor al destinatario.
  • Autenticación: Tanto el emisor como el destinatario pueden confirmar la identidad del otro.
  • No rechazo: El creador de la información no puede negar que es el autor.

4. Funcionamiento de SSH

Las claves de una correcta conexión remota son las siguientes:

  • No transmitir las contraseñas en texto plano por la red.
  • Proceso de autenticación con garantías.
  • Ejecución segura de las órdenes remotas, como transferencias de archivos.
  • Sesiones gráficas X11 seguras (LINUX).

Proceso de Conexión del Servidor SSH

El servidor SSH funciona de la siguiente manera:

  1. La máquina cliente abre una conexión TCP sobre el puerto 22 del servidor.
  2. Cliente y Servidor (C/S) se ponen de acuerdo en la versión SSH que van a utilizar.
  3. El servidor tiene dos claves (pública y privada). El servidor envía su clave pública al cliente.
  4. El cliente recibe la clave pública y la compara con la que tiene almacenada para verificar si es auténtica.
  5. El cliente genera una clave de sesión aleatoria y crea un mensaje que contiene la clave aleatoria generada y el algoritmo seleccionado, todo ello encriptado haciendo uso de la clave pública del servidor.
  6. Para el resto de la sesión remota se utiliza el algoritmo de cifrado simétrico seleccionado y la clave de sesión aleatoria.
  7. Se autentica el usuario, y aquí pueden usarse varios mecanismos.
  8. Por último, se inicia la sesión de usuario.

5. Cliente SSH y Funcionalidades Avanzadas

5.1. ¿Qué es un Cliente SSH?

El cliente SSH es la herramienta de software que permite al usuario solicitar el establecimiento de una conexión segura con el servidor SSH. La conexión se puede llevar a cabo mediante herramientas gráficas o desde consola.

El proceso o demonio que se ejecuta en el cliente es SSH y se encuentra en el directorio /usr/bin. También pueden utilizarse otras herramientas gráficas como FreeNX o el cliente PuTTy.

Si el acceso al servidor se hace desde consola, la sintaxis sería: ssh [usuario@]host.

5.2. Túneles SSH (Reenvío de Puertos)

¿Qué es un Túnel SSH?

Es un mecanismo mediante el cual se habilita un puerto en el ordenador y una conexión encriptada a una segunda máquina. Todos los datos que vayan a ese puerto específico pasarán por la conexión segura al segundo ordenador, el cual a su vez puede reenviarlos a un tercer ordenador.

Propósitos del Reenvío de Puertos

El reenvío de puertos puede ser interesante para los siguientes propósitos:

  • Para acceder a servicios TCP internos de una LAN con direcciones privadas.
  • Para no enviar la clave en texto plano de FTP, Telnet, etc.
  • Para atravesar un cortafuegos donde solo está permitido SSH.
  • Para disponer de servicios X a través de una red insegura.

5.3. Transferencia Segura de Archivos en Linux

Existen dos órdenes principales para la transferencia segura de archivos:

La orden scp

Permite realizar transferencias simples desde la línea de comandos. Funciona como el comando cp que se utiliza para copiar en local, pero de forma remota y segura. Con esta orden pueden hacerse copias seguras de archivos entre distintas máquinas con conexión segura y encriptada. Sigue los mismos esquemas de comprobación que SSH; su funcionamiento dependerá de la manera en que cada usuario haya configurado el SSH.

La orden sftp

Intenta emular la forma de uso de un cliente FTP ordinario para abrir una sesión segura e interactiva de este tipo. Una vez establecida la conexión, puede utilizarse una serie de comandos específicos de FTP.

5.4. Reenvío X11

El protocolo SSH puede abrir sesiones X por un canal SSH. Cuando se ejecuta un programa X Window desde un shell seguro, el cliente y el servidor SSH crean un nuevo canal seguro dentro de la conexión SSH actual. Los datos del programa X Window se envían a la máquina cliente a través de este canal como si se realizase una conexión al servidor X a través de un terminal local.

Es preferible que se pueda utilizar el mismo canal seguro que se establece con SSH para los clientes X. El reenvío de X11 es un mecanismo que permite la utilización de este canal SSH.

5.5. Reenvío por TCP/IP (Mapeado de Puertos)

Este procedimiento se basa en la asignación de un puerto local del cliente a un puerto remoto del servidor. Cuando se utiliza esta técnica, el servidor SSH se convierte en un túnel encriptado para el cliente SSH. El usuario tan solo ha de tener una cuenta en el sistema remoto. Esta técnica también se llama mapeado de puertos.

El reenvío TCP/IP puede usarse para aquellos protocolos que no tienen soporte nativo para comunicaciones cifradas y autenticadas, como POP, IMAP o FTP. Los servicios basados en estos protocolos pueden hacerse más seguros mediante estos túneles SSH.

6. Servidor SSH y Configuración

6.1. ¿Qué es un Servidor SSH?

El servidor SSH facilita el establecimiento de conexiones remotas que permiten la transmisión segura de cualquier tipo de datos: archivos, contraseñas, sesiones de login, etc.

OpenSSH: La Aplicación Libre Más Utilizada

OpenSSH es la aplicación libre más utilizada del servicio SSH. Sus características son:

  • Es software de código abierto.
  • Tiene licencia libre que permite su utilización para cualquier propósito.
  • Es compatible con los protocolos SSH1 y SSH2.
  • Está disponible para plataformas Linux, Windows, Unix, Mac, etc.
  • Reenvío por puertos: Consiste en el envío de conexiones TCP/IP a una máquina remota por un canal cifrado mediante el mapeado de un puerto local en un puerto remoto del servidor.
  • Reenvío por agente: Consiste en que el agente del cliente puede contener claves de autenticación RSA o DSA.
  • Soporte para cliente y servidor de SFTP en los protocolos SSH1 y SSH2.
  • Compresión de datos: Comprime los datos antes del cifrado, lo cual mejora los resultados en los enlaces con redes lentas.

6.2. Archivos de Configuración del Servidor SSH

Los archivos de configuración se ubican en el directorio /etc/ssh/. Los más importantes son:

  • sshd_config: Describe la configuración del servidor SSH.
  • ssh_config: Describe la configuración del cliente SSH.
  • ssh_host_rsa_key: Clave RSA privada de la máquina.
  • ssh_host_rsa_key.pub: Clave RSA pública de la máquina.
  • known_hosts: Claves públicas de otras máquinas.
  • ssh_host_dsa_key: Clave DSA privada de las máquinas.
  • ssh_host_dsa_key.pub: Clave DSA pública de la máquina.

Directivas Clave en sshd_config

Algunas directivas incluidas en el archivo de configuración sshd_config son especialmente interesantes:

  • PermitRootLogin no: Indica que el usuario administrador root no puede conectarse a la máquina remota como tal.
  • RSAAuthentication yes: Indica que está permitida la autenticación por clave RSA.
  • PubkeyAuthentication yes: Informa de que está permitida la autenticación por clave pública.
  • RhostsAuthenticacion no: Indica que no se permite el método de autenticación por rhost.
  • HostbasedAuthentication no: Informa de que no se utiliza el método de autenticación por host, sino por usuario.
  • X11Forwarding yes: Avisa de que permite a los clientes que se conecten, ejecutar aplicaciones de X Window y transmitir la información gráfica sobre la conexión segura.
  • MaxAuthTries nn: Establece el número máximo de intentos de conexión.

6.3. El Agente de Autenticación ssh-agent

El agente de autenticación permite simplificar el proceso de conexión a una máquina remota en caso de que se utilice autenticación por clave pública. Actúa como almacén de las claves privadas y las suministra al cliente SSH cada vez que este las necesita. Para añadir nuestra clave privada RSA a este depósito se utiliza el comando ssh-add. El agente dispone en memoria de nuestra clave descifrada y ya no pide ni frase de paso ni contraseña.

Consideraciones de Seguridad sobre el Agente

Aunque el agente aumenta la facilidad de uso del servicio, disminuye la seguridad. Es crucial tener en cuenta lo siguiente:

  • Si dejamos el terminal desatendido, cualquiera que pase por delante puede conectarse a una máquina remota haciéndose pasar por nosotros.
  • El uso del agente solo es recomendable en casos concretos que justifiquen su utilización, o sea, cuando tengamos que abrir muchas sesiones al día.
  • Cuando se utilice el agente, hay que asegurarse de que el terminal queda bloqueado antes de abandonar el puesto de trabajo, aunque sea por poco tiempo.