El qué, el por qué y el cómo del protocolo SSH

El entorno empresarial se está transformando. Las empresas se han embarcado en un viaje de transformación digital adoptando tecnologías emergentes que les permiten moverse rápidamente y cambiar la forma en que colaboran, reduciendo costes y aumentando la productividad. Sin embargo, estas tecnologías han desvanecido el perímetro tradicional y la identidad se ha convertido en la nueva línea de defensa.

Los desafíos modernos requieren enfoques de seguridad modernos. El uso de contraseñas para autenticar el acceso privilegiado a activos de misión crítica ya no es aceptable. Las contraseñas son famosas por ser inseguras, crear fatiga y una falsa sensación de seguridad. Las empresas deben adoptar soluciones sin contraseña; aquí es donde la autenticación basada en claves SSH resulta útil.

Dedicamos esta publicación a analizar el protocolo SSH, qué es, cómo funciona, casos de uso y riesgos.

¿Qué es el Protocolo SSH?

Creado en 1995 por Tatu Ylönen, el protocolo SSH, también conocido como Secure Shell o Secure Socket Shell, es un protocolo de red que brinda a los administradores de sistemas una forma segura de acceder a activos remotos a través de una red insegura.

SSH proporciona autenticación basada en contraseña o clave pública y cifra las conexiones entre dos puntos finales de la red. Es una alternativa segura a los protocolos de inicio de sesión heredados (como telnet, rlogin) y los métodos de transferencia de archivos inseguros (como FTP).

Además de proporcionar un cifrado sólido, los administradores de red utilizan ampliamente SSH para administrar sistemas y aplicaciones de forma remota, entregar parches de software o ejecutar comandos y mover archivos.

El servicio se creó como un reemplazo seguro para Telnet sin cifrar 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 transmitir la salida al cliente.

¿Cómo funciona?

Si estás usando Linux o Mac, entonces usar SSH es muy simple. Si usas Windows, deberás utilizar un cliente SSH para abrir conexiones SSH. El cliente SSH más popular es PuTTY.

Para usuarios de Mac y Linux, dirígete a su programa de terminal y luego sigue el procedimiento.

Autenticación del servidor (host)

El protocolo SSH está integrado en los servidores Unix y Linux para permitir conexiones seguras entre sistemas. La conexión la establece un cliente SSH que intenta conectarse a un servidor SSH.

El cliente SSH inicia el proceso de configuración de la conexión y utiliza criptografía de clave pública para verificar la identidad del servidor SSH. Después de la fase de configuración, el protocolo SSH utiliza un cifrado simétrico fuerte y algoritmos hash para garantizar la privacidad e integridad de los datos que se intercambian entre el cliente y el servidor.

El flujo simplificado de una conexión SSH es:

  • El cliente inicia la conexión al servidor SSH.
  • El servidor envía su clave pública al cliente.
  • La clave pública del servidor se guarda en el archivo de hosts conocidos del cliente.
  • El cliente y el servidor negocian los parámetros de conexión y establecen la conexión.

Cifrado e integridad

Durante la configuración de la conexión, el cliente y el servidor negocian y acuerdan el algoritmo de cifrado simétrico que se utilizará para su comunicación y generan la clave de cifrado que se utilizará.

El protocolo SSH utiliza algoritmos de cifrado fuertes estándar de la industria, como AES, para asegurar la comunicación entre las partes involucradas. Además, el protocolo utiliza algoritmos hash, como SHA-2, para garantizar la integridad de los datos transmitidos.

Autenticación de cliente (usuario)

El protocolo SSH permite la autenticación de clientes mediante contraseñas tradicionales o autenticación de clave pública. Sin embargo, dados los riesgos e ineficiencias del uso de contraseñas, la autenticación de clave pública se usa más ampliamente. Las claves SSH no solo son mucho más seguras que las contraseñas, sino que también permiten a los administradores del sistema evitar la necesidad de un inicio de sesión manual basado en contraseñas.

¿Cómo se autentica un usuario con claves SSH? Generan un par de claves pública-privada con un cliente SSH utilizando el comando ssh-keygen. Una vez creada, el usuario coloca su clave autorizada (clave pública) en el archivo Authorized_keys en el servidor al que necesita conectarse.

Cuando el usuario inicia sesión de forma remota mediante la autenticación basada en claves, el servidor OpenSSH busca claves autorizadas y el usuario se autentica en el servidor con su clave privada correspondiente.

Dado que no requiere autenticación manual, la autenticación basada en claves se usa a menudo para proteger los casos de uso de automatización de procesos de TI, como transferencias de archivos automatizadas seguras, procesos de copia de seguridad y copia, o herramientas de administración de configuración (es decir, Ansible, Terraform, Chef o Puppet).

Comprensión de diferentes técnicas de cifrado

Para mantener SSH seguro, utiliza tres tipos diferentes de técnicas de manipulación de datos en varios puntos durante una transmisión.

Las tres técnicas utilizadas en SSH son:

  • Cifrado simétrico
  • Cifrado asimétrico
  • Hashing

Cifrado simétrico

El cifrado simétrico es el tipo de cifrado en el que se puede utilizar una clave para cifrar los mensajes enviados al destino y también descifrar los mensajes recibidos en el destino. Este esquema de cifrado también se conoce como cifrado secreto compartido o cifrado de clave compartida.

Ambos dispositivos utilizan la misma clave para cifrar los datos que envían y descifrar los datos que reciben. Una clave secreta es específica para cada sesión SSH. Este es el tipo de cifrado que se utiliza para cifrar toda la conexión SSH para evitar que los ataques man-in-the-middle puedan leer los datos porque no tienen esta clave secreta.

Un problema que surge es el intercambio de claves inicial. Si un tercero está escuchando durante el intercambio de claves, ahora conocerán la clave y podrán descifrar todos nuestros mensajes. Una forma de evitar esto es mediante el uso de un algoritmo de intercambio de claves.

Un algoritmo de intercambio de claves es una forma segura de intercambiar claves secretas sin interceptación. Esto se hace mediante dos computadoras que intercambian datos públicos y luego manipulan esos datos de forma independiente para obtener la clave secreta. Para implementar un algoritmo de intercambio de claves, necesitamos cifrado asimétrico.

Cifrado asimétrico

El cifrado asimétrico es el cifrado mediante el uso de dos claves separadas para el cifrado y el descifrado, una clave pública y una clave privada. La clave pública se puede compartir con cualquier persona, pero la clave privada nunca se comparte.

Un mensaje cifrado con la clave pública de una máquina solo puede descifrarse mediante su clave privada. La clave pública se almacena en el servidor SSH y la clave privada se almacena localmente en el cliente SSH.

Si te doy mi clave pública, puedes enviarme un mensaje cifrándolo con mi clave pública. Entonces podré leerlo descifrándolo con mi clave privada.

Incluso si un tercero logra obtener una clave pública, no podrá descifrar ningún mensaje porque no tiene la clave privada. Siempre que la clave privada nunca se envíe y esté segura en tu dispositivo, tus mensajes no se pueden descifrar.

SSH utiliza cifrado asimétrico en algunos lugares, como el algoritmo de intercambio de claves utilizado para configurar el cifrado simétrico. El cifrado asimétrico también se usa como la clave que se puede usar para SSH en un servidor sin el uso de una contraseña.

Ambos dispositivos generan claves públicas y privadas temporales y comparten sus respectivas claves públicas. Luego, generan de forma independiente una nueva clave simétrica que ambos dispositivos utilizarán para cifrar y descifrar mensajes. Esta generación se realiza mediante el intercambio de claves Diffie Hellman.

Al comienzo de un intercambio de claves Diffie Hellman, los dos dispositivos deben acordar algunos parámetros que utilizarán para el intercambio de claves:

  • Generador g
  • Número primo n

Cada dispositivo utilizará g junto con sus claves privadas para generar una clave pública.

Una vez que se ha establecido una comunicación simétrica segura, el servidor utiliza la clave pública del cliente para generar un desafío. y lo transmite al cliente para su autenticación. Si el cliente puede descifrar correctamente el desafío, lo que significa que tiene la clave privada requerida para una conexión, comienza la sesión SSH.

Hashing

El hash es otra forma de criptografía que se utiliza para proteger las conexiones de shell. El hash te permite crear una firma o un resumen de un conjunto de información. Es un proceso unidireccional y los datos hash nunca deben ser descifrados. Pero, ¿de qué sirve esto?

Si un tercero logra engañar al cliente y al anfitrión, pueden manipular los mensajes. SSH utiliza HMAC ( códigos de autenticación de mensajes basados ​​en hash ). Los HMAC garantizan que los mensajes enviados se reciban de forma completa y sin modificaciones.

Usando una función hash, cada mensaje que se transmite debe contener algo llamado MAC. Este MAC es un hash generado a partir de la clave simétrica, el número de secuencia del paquete y el contenido del mensaje que se envió. El uso de estos tres elementos combinados como entradas en una función hash y esta función hash generará un fragmento de cadena que no tiene significado. Esta cadena, o firma, se envía al anfitrión.

Ahora, ¿cómo verifica el anfitrión si el mensaje ha sido manipulado?

Debido a que el host tiene la misma información (la clave simétrica, el número de secuencia del paquete y el contenido del mensaje), también pueden usar la misma función hash para generar un hash. Si el hash generado coincide con el recibido, se verifica la firma del cliente.

Esto funciona porque si los datos se cambian de alguna manera, incluso algo tan pequeño como poner una letra en mayúscula, el hash será completamente diferente.

Casos de uso común para el protocolo SSH

Las conexiones SSH se han utilizado principalmente para asegurar diferentes tipos de comunicaciones entre una máquina local y un host remoto, que incluyen:

  • Acceso remoto seguro a los recursos
  • Ejecución remota de comandos
  • Entrega de parches y actualizaciones de software
  • Transferencias de archivos interactivas y automatizadas

Además de crear un canal seguro entre las computadoras locales y remotas, el protocolo SSH se utiliza para administrar la infraestructura corporativa crítica, como enrutadores, hardware de servidor, plataformas de virtualización y sistemas operativos.

Las claves SSH se utilizan para automatizar el acceso a los servidores y, a menudo, se utilizan en scripts, sistemas de copia de seguridad y herramientas de gestión de la configuración. Debido a su diseño que permite la conectividad a través de los límites de la organización, las claves SSH brindan capacidades de inicio de sesión único (SSO) que permiten a los usuarios moverse entre sus cuentas sin ingresar una contraseña cada vez.

SSH en un entorno sin perímetro

Los avances en tecnología y situaciones de emergencia, como la crisis de salud pública COVID-19, han renovado el interés y la adopción de SSH.

Las empresas no solo se están trasladando a la nube, sino que también utilizan una gran cantidad de plataformas PaaS, IaaS y SaaS basadas en la nube. Al mismo tiempo, todavía tienen muchas aplicaciones heredadas orientadas a los negocios alojadas en sus instalaciones. En este entorno híbrido de múltiples nubes, el mayor desafío es cómo mantener un sistema de administración de identidades y accesos (IAM) sólido y eficaz.

Los mecanismos de autenticación tradicionales basados ​​en contraseñas ya no funcionan y, dondequiera que estén presentes, son fuentes de confusión y fricción, lo que genera numerosas violaciones de datos o incidentes debido al abuso de credenciales.

Por otro lado, DevOps aprovecha las herramientas y los procesos nativos y conocidos de forma ágil e iterativa en equipos que son autosuficientes y capaces de realizar lanzamientos de código rápidos y frecuentes, incluso diarios.

A pesar de las ventajas obvias de un ciclo de lanzamiento de alta frecuencia y altamente automatizado, existen desafíos que enfrentar, especialmente con la protección del software que se está lanzando. Las empresas deben garantizar la entrega de aplicaciones y actualizaciones que no hayan sido manipuladas o alteradas por actores malintencionados para que sirvan como caballos de Troya cuando se instalen en los dispositivos del usuario final.

Finalmente, la crisis de COVID-19 ha obligado a millones de empleados a trabajar desde sus hogares, utilizando sus propios dispositivos y accediendo a los activos corporativos a través de sus Wi-Fi domésticos. Los equipos de seguridad de TI se enfrentan a numerosos desafíos nuevos: ¿cómo se aplica un esquema de autenticación sólido para garantizar que solo las personas y los dispositivos autorizados accedan a los activos sensibles a la misión?

Para todos los desafíos modernos anteriores, el protocolo SSH sirve como la solución moderna.

En DevOps, SSH es el bloque de construcción seguro fundamental que permite el proceso de creación y lanzamiento rápido, frecuente y altamente automatizado favorecido por DevOps.

En entornos de trabajo remoto y de múltiples nubes, el protocolo SSH ofrece la solución para una gestión de acceso sin contraseña, capaz de una experiencia de inicio de sesión único (SSO) sin fricciones. SSH también se puede utilizar para emitir certificados efímeros justo a tiempo, que caducan cuando finaliza la autorización.

Al usar SSH junto con las plataformas de automatización de IAM, las organizaciones pueden fortalecer sus esquemas de autenticación no solo para los usuarios privilegiados (PAM), sino para cada empleado y / o dispositivo que solicite acceso a los activos corporativos.

Riesgos del abuso de claves SSH

Los casos de uso anteriores destacan la importancia de las claves SSH y su gestión segura y eficaz. El problema es que la mayoría de las organizaciones no son conscientes de la gran cantidad de claves SSH que poseen y, por lo tanto, estas claves no se controlan ni administran.

Las claves no administradas exponen a las organizaciones a riesgos importantes que, en el peor de los casos, podrían hacer caer los sistemas de información críticos durante meses.

Las claves SSH brindan el mismo acceso que los nombres de usuario y las contraseñas. Además, a menudo otorgan acceso de root a cuentas privilegiadas en el nivel del sistema operativo, dando una línea de comando. También otorgan acceso a recursos: servidores de producción, bases de datos, enrutadores, firewalls, sistemas de recuperación de desastres, datos financieros, sistemas de pago, propiedad intelectual e información del paciente.

Un atacante que obtiene acceso de root significa que puede hacer cualquier cosa en el servidor, incluido inyectar datos fraudulentos, subvertir el software de cifrado, instalar malware persistente o destruir el sistema por completo.

La confidencialidad, la integridad y la continuidad de las operaciones se ven comprometidas. Incluso si la clave proporciona acceso no root, las vulnerabilidades de escalada de privilegios locales a menudo pueden hacer que el atacante obtenga acceso root.

A continuación, se muestran algunos ejemplos:

  • TrickBot , que originalmente era un troyano bancario que apareció por primera vez en 2016, se ha convertido en una solución de software criminal universal que ahora se dirige principalmente a entornos empresariales. En 2019, TrickBot agregó capacidades de captura de claves SSH para PuTTY (cliente SSH para Microsoft) y OpenSSH.
  • La campaña de cripto minería CryptoSink dirigida a los sistemas Elasticsearch, hace puertas traseras a los servidores de destino agregando las claves SSH del atacante.
  • El malware Kaji se dirige a los dispositivos de IoT que han dejado su puerto SSH expuesto en Internet. Según los investigadores que descubrieron este malware, una vez que obtenga acceso a la cuenta raíz de un dispositivo, Kaiji utilizará el dispositivo de tres formas. Primero, para los ataques DDoS. En segundo lugar, realizar más ataques de fuerza bruta SSH contra otros dispositivos. En tercer lugar, para robar cualquier clave SSH local y propagarse a otros dispositivos que la cuenta de root haya administrado en el pasado.
  • En 2016, el grupo de ciberdelincuentes BlackEnergy que tenía como objetivo las empresas de servicios eléctricos y los medios de comunicación ucranianos, utilizó un servidor SSH con puerta trasera llamado Dropbear.
  • Según los investigadores de ESET, los atacantes implementaron una variante de este software en máquinas comprometidas que habían sido preconfiguradas para aceptar una contraseña y una clave codificadas para la autenticación SSH. Al ejecutar SSH en el servidor en una red comprometida, los atacantes pueden volver a la red cuando lo deseen.

Conclusión

Para aprovechar los beneficios del protocolo SSH y defenderse del abuso de claves SSH, debe garantizar una visibilidad e inteligencia completas sobre todas las claves SSH autorizadas que utiliza la empresa en las instalaciones y en la nube.

Sin embargo, dado que los atacantes también pueden insertar sus propias claves SSH en entornos de destino, es importante centrarse no solo en las claves conocidas, sino también en descubrir y analizar todas las claves que se utilizan en toda tu organización.