stringtranslate.com

Cubierta segura

El protocolo Secure Shell ( SSH ) es un protocolo de red criptográfico para operar servicios de red de forma segura a través de una red no segura. [1] Sus aplicaciones más notables son el inicio de sesión remoto y la ejecución de línea de comandos .

SSH fue diseñado en sistemas operativos tipo Unix , como reemplazo de Telnet y de los protocolos de shell Unix remotos no seguros , como Berkeley Remote Shell (rsh) y los protocolos relacionados rlogin y rexec , que utilizan métodos de autenticación de texto plano inseguros. como contraseñas .

Dado que mecanismos como Telnet y Remote Shell están diseñados para acceder y operar computadoras remotas, enviar los tokens de autenticación (por ejemplo, nombre de usuario y contraseña ) para este acceso a estas computadoras a través de una red pública de manera no segura, plantea un gran riesgo de que terceros obtengan la información. contraseña y lograr el mismo nivel de acceso al sistema remoto que el usuario de telnet. Secure Shell mitiga este riesgo mediante el uso de mecanismos de cifrado destinados a ocultar el contenido de la transmisión a un observador, incluso si el observador tiene acceso a todo el flujo de datos. [2]

SSH fue diseñado por primera vez en 1995 por el informático finlandés Tatu Ylönen. El desarrollo posterior del conjunto de protocolos se llevó a cabo en varios grupos de desarrolladores, lo que produjo varias variantes de implementación. La especificación del protocolo distingue dos versiones principales, denominadas SSH-1 y SSH-2. La pila de software más comúnmente implementada es OpenSSH , lanzada en 1999 como software de código abierto por los desarrolladores de OpenBSD . Las implementaciones se distribuyen para todo tipo de sistemas operativos de uso común, incluidos los sistemas integrados.

Las aplicaciones SSH se basan en una arquitectura cliente-servidor , que conecta una instancia de cliente SSH con un servidor SSH . [3] SSH opera como un conjunto de protocolos en capas que comprende tres componentes jerárquicos principales: la capa de transporte proporciona autenticación, confidencialidad e integridad del servidor; el protocolo de autenticación de usuario valida al usuario ante el servidor; y el protocolo de conexión multiplexa el túnel cifrado en múltiples canales de comunicación lógicos. [1]

Definición

SSH utiliza criptografía de clave pública para autenticar la computadora remota y permitirle autenticar al usuario, si es necesario. [3]

SSH se puede utilizar en varias metodologías. De la manera más sencilla, ambos extremos de un canal de comunicación utilizan pares de claves pública-privada generadas automáticamente para cifrar una conexión de red y luego utilizan una contraseña para autenticar al usuario.

Cuando el usuario genera manualmente el par de claves pública-privada, la autenticación se realiza esencialmente cuando se crea el par de claves y luego se puede abrir una sesión automáticamente sin solicitar una contraseña. En este escenario, la clave pública se coloca en todas las computadoras que deben permitir el acceso al propietario de la clave privada correspondiente, que el propietario mantiene privada. Si bien la autenticación se basa en la clave privada, la clave nunca se transfiere a través de la red durante la autenticación. SSH solo verifica que la misma persona que ofrece la clave pública también posee la clave privada correspondiente.

En todas las versiones de SSH es importante verificar las claves públicas desconocidas , es decir, asociar las claves públicas con identidades , antes de aceptarlas como válidas. Aceptar la clave pública de un atacante sin validación autorizará a un atacante no autorizado como usuario válido.

Autenticación: gestión de claves OpenSSH

En sistemas tipo Unix , la lista de claves públicas autorizadas normalmente se almacena en el directorio de inicio del usuario al que se le permite iniciar sesión de forma remota, en el archivo ~/.ssh/authorized_keys. [4] Este archivo es respetado por SSH sólo si nadie más que el propietario y el root pueden escribir en él. Cuando la clave pública está presente en el extremo remoto y la clave privada coincidente está presente en el extremo local, ya no es necesario escribir la contraseña. Sin embargo, para mayor seguridad, la clave privada se puede bloquear con una frase de contraseña.

La clave privada también se puede buscar en lugares estándar y su ruta completa se puede especificar como una configuración de línea de comando (la opción -ipara ssh). La utilidad ssh-keygen produce las claves pública y privada, siempre en pares.

Usar

SSH se utiliza normalmente para iniciar sesión en el shell o la interfaz de línea de comandos (CLI) de una computadora remota y para ejecutar comandos en un servidor remoto. También admite mecanismos de tunelización , reenvío de puertos TCP y conexiones X11 y se puede utilizar para transferir archivos utilizando el protocolo de transferencia de archivos SSH (SFTP) o el protocolo de copia segura (SCP) asociado. [3]

SSH utiliza el modelo cliente-servidor . Un programa cliente SSH se utiliza normalmente para establecer conexiones a un demonio SSH , como sshd, que acepta conexiones remotas. Ambos suelen estar presentes en la mayoría de los sistemas operativos modernos , incluido macOS , la mayoría de las distribuciones de Linux , OpenBSD , FreeBSD , NetBSD , Solaris y OpenVMS . En particular, las versiones de Windows anteriores a Windows 10 versión 1709 no incluyen SSH de forma predeterminada, pero existían y existen versiones propietarias , gratuitas y de código abierto de varios niveles de complejidad e integridad (consulte Comparación_de_clientes_SSH ). En 2018 , Microsoft comenzó a migrar el código fuente de OpenSSH a Windows [5] y en Windows 10 versión 1709 , ahora está disponible una versión Win32 oficial de OpenSSH.

Los administradores de archivos para sistemas tipo UNIX (por ejemplo, Konqueror ) pueden usar el protocolo FISH para proporcionar una GUI de panel dividido con función de arrastrar y soltar. El programa de código abierto de Windows WinSCP [6] proporciona una capacidad similar de gestión de archivos (sincronización, copia, eliminación remota) utilizando PuTTY como back-end. Tanto WinSCP [7] como PuTTY [8] están disponibles empaquetados para ejecutarse directamente desde una unidad USB, sin necesidad de instalación en la máquina cliente. La extensión de shell seguro del navegador Chrome también permite conexiones SSH sin necesidad de instalación de software e incluso permite SSH desde una computadora Chromebook . La configuración de un servidor SSH en Windows normalmente implica habilitar una función en la aplicación Configuración.

SSH es importante en la computación en la nube para resolver problemas de conectividad, evitando los problemas de seguridad de exponer una máquina virtual basada en la nube directamente en Internet. Un túnel SSH puede proporcionar una ruta segura a través de Internet, a través de un firewall, hasta una máquina virtual. [9]

La IANA ha asignado el puerto TCP 22, el puerto UDP 22 y el puerto SCTP 22 para este protocolo. [10] La IANA había incluido el puerto TCP estándar 22 para servidores SSH como uno de los puertos más conocidos ya en 2001. [11] SSH también se puede ejecutar utilizando SCTP en lugar de TCP como protocolo de capa de transporte orientado a la conexión. [12]

Desarrollo historico

Versión 1

En 1995, Tatu Ylönen , un investigador de la Universidad Tecnológica de Helsinki en Finlandia, diseñó la primera versión del protocolo (ahora llamado SSH-1 ) impulsado por un ataque de rastreo de contraseñas en la red de su universidad . [13] El objetivo de SSH era reemplazar los protocolos anteriores rlogin , TELNET , FTP [14] y rsh , que no proporcionaban una autenticación sólida ni garantizaban la confidencialidad. Eligió el puerto número 22 porque está entre telnet(puerto 23) y ftp(puerto 21). [15]

Ylönen lanzó su implementación como software gratuito en julio de 1995 y la herramienta rápidamente ganó popularidad. Hacia finales de 1995, la base de usuarios de SSH había aumentado hasta alcanzar los 20.000 usuarios en cincuenta países. [ cita necesaria ]

En diciembre de 1995, Ylönen fundó SSH Communications Security para comercializar y desarrollar SSH. La versión original del software SSH utilizaba varias piezas de software libre , como GNU libgmp , pero las versiones posteriores lanzadas por SSH Communications Security evolucionaron hacia un software cada vez más propietario .

Se estima que en el año 2000 el número de usuarios había aumentado a 2 millones. [dieciséis]

Versión 2

"Secsh" era el nombre oficial del Grupo de Trabajo de Ingeniería de Internet (IETF) para el grupo de trabajo del IETF responsable de la versión 2 del protocolo SSH. [17] En 2006, se adoptó como estándar una versión revisada del protocolo, SSH-2 . Esta versión es incompatible con SSH-1. SSH-2 presenta mejoras de seguridad y funciones con respecto a SSH-1. Una mayor seguridad, por ejemplo, se obtiene mediante el intercambio de claves Diffie-Hellman y una sólida comprobación de la integridad mediante códigos de autenticación de mensajes . Las nuevas características de SSH-2 incluyen la capacidad de ejecutar cualquier número de sesiones de shell a través de una única conexión SSH. [18] Debido a la superioridad y popularidad de SSH-2 sobre SSH-1, algunas implementaciones como libssh (v0.8.0+), [19] Lsh [20] y Dropbear [21] solo admiten el protocolo SSH-2.

Versión 1.99

En enero de 2006, mucho después de que se estableciera la versión 2.1, RFC  4253 especificaba que un servidor SSH que admitiera 2.0 y versiones anteriores debería identificar su versión de protocolo como 1.99. [22] Este número de versión no refleja una revisión histórica del software, sino un método para identificar la compatibilidad con versiones anteriores .

OpenSSH y OSSH

En 1999, los desarrolladores, que deseaban disponer de una versión de software gratuita, reiniciaron el desarrollo de software a partir de la versión 1.2.12 del programa SSH original, que fue el último lanzado bajo una licencia de código abierto . [23] Esto sirvió como base de código para el software OSSH de Björn Grönvall. [24] Poco después, los desarrolladores de OpenBSD bifurcaron el código de Grönvall y crearon OpenSSH , que se envió con la versión 2.6 de OpenBSD. A partir de esta versión, se formó una rama de "portabilidad" para portar OpenSSH a otros sistemas operativos. [25]

En 2005 , OpenSSH era la implementación SSH más popular, siendo la versión predeterminada en una gran cantidad de distribuciones de sistemas operativos. Mientras tanto, OSSH se ha vuelto obsoleto. [26] OpenSSH continúa manteniéndose y admite el protocolo SSH-2, habiendo eliminado el soporte SSH-1 del código base en la versión OpenSSH 7.6.

Usos

Ejemplo de túnel de una aplicación X11 a través de SSH: el usuario 'josh' ha realizado un "SSHed" desde la máquina local 'foofighter' a la máquina remota 'tengwar' para ejecutar xeyes .
Iniciar sesión en OpenWrt a través de SSH usando PuTTY ejecutándose en Windows .

SSH es un protocolo que se puede utilizar para muchas aplicaciones en muchas plataformas, incluida la mayoría de las variantes de Unix ( Linux , BSD , incluidos macOS de Apple y Solaris ), así como Microsoft Windows . Algunas de las aplicaciones siguientes pueden requerir funciones que solo están disponibles o son compatibles con clientes o servidores SSH específicos. Por ejemplo, es posible utilizar el protocolo SSH para implementar una VPN , pero actualmente solo con la implementación del servidor y cliente OpenSSH .

Protocolos de transferencia de archivos

Los protocolos Secure Shell se utilizan en varios mecanismos de transferencia de archivos.

Arquitectura

Diagrama del paquete binario SSH-2.

El protocolo SSH tiene una arquitectura en capas con tres componentes separados:

Esta arquitectura abierta proporciona una flexibilidad considerable, permitiendo el uso de SSH para una variedad de propósitos más allá de un shell seguro. La funcionalidad de la capa de transporte por sí sola es comparable a la Seguridad de la capa de transporte (TLS); la capa de autenticación de usuarios es altamente extensible con métodos de autenticación personalizados; y la capa de conexión proporciona la capacidad de multiplexar muchas sesiones secundarias en una única conexión SSH, una característica comparable a BEEP y no disponible en TLS.

Algoritmos

Vulnerabilidades

SSH-1

En 1998, se describió una vulnerabilidad en SSH 1.5 que permitía la inserción no autorizada de contenido en un flujo SSH cifrado debido a una protección insuficiente de la integridad de los datos del CRC-32 utilizado en esta versión del protocolo. [33] [34] Se introdujo una solución conocida como Detector de ataques de compensación SSH [35] en la mayoría de las implementaciones. Muchas de estas implementaciones actualizadas contenían una nueva vulnerabilidad de desbordamiento de enteros [36] que permitía a los atacantes ejecutar código arbitrario con los privilegios del demonio SSH, normalmente root.

En enero de 2001 se descubrió una vulnerabilidad que permite a los atacantes modificar el último bloque de una sesión cifrada con IDEA . [37] El mismo mes, se descubrió otra vulnerabilidad que permitía a un servidor malicioso reenviar la autenticación de un cliente a otro servidor. [38]

Dado que SSH-1 tiene fallas de diseño inherentes que lo hacen vulnerable, ahora generalmente se considera obsoleto y debe evitarse deshabilitando explícitamente el respaldo a SSH-1. [38] La mayoría de los servidores y clientes modernos admiten SSH-2. [39]

recuperación de texto sin formato CBC

En noviembre de 2008, se descubrió una vulnerabilidad teórica para todas las versiones de SSH que permitía la recuperación de hasta 32 bits de texto sin formato a partir de un bloque de texto cifrado cifrado utilizando lo que entonces era el modo de cifrado predeterminado estándar, CBC . [40] La solución más sencilla es utilizar CTR , modo contador, en lugar del modo CBC, ya que esto hace que SSH sea resistente al ataque. [40]

Sospecha de descifrado por parte de la NSA

El 28 de diciembre de 2014, Der Spiegel publicó información clasificada [41] filtrada por el denunciante Edward Snowden que sugiere que la Agencia de Seguridad Nacional podría descifrar parte del tráfico SSH. Los detalles técnicos asociados con dicho proceso no fueron revelados. Un análisis de 2017 de las herramientas de piratería de la CIA BothanSpy y Gyrfalcon sugirió que el protocolo SSH no estaba comprometido. [42]

Ataque de tortuga marina

En 2023 se descubrió un nuevo ataque de intermediario contra la mayoría de las implementaciones ssh actuales. Sus descubridores lo denominaron ataque Terrapin . [43] [44] Sin embargo, el riesgo se mitiga por el requisito de interceptar una sesión ssh genuina y porque el alcance del ataque está restringido, lo que fortuitamente resulta principalmente en conexiones fallidas. [45] [46] Los desarrolladores de ssh han declarado que el mayor impacto del ataque es degradar las funciones de ofuscación del tiempo de pulsación de teclas de ssh. [46] La vulnerabilidad se solucionó en OpenSSH 9.6, pero requiere que tanto el cliente como el servidor se actualicen para que la solución sea completamente efectiva.

Documentación de estándares

Las siguientes publicaciones RFC del grupo de trabajo "secsh" del IETF documentan SSH-2 como un estándar de Internet propuesto .

Las especificaciones del protocolo fueron actualizadas posteriormente por las siguientes publicaciones:

Además, el proyecto OpenSSH incluye varias especificaciones/extensiones de protocolo de proveedores:

Ver también

Referencias

  1. ^ ab T. Ylonen; C. Lonvick (enero de 2006). La arquitectura del protocolo Secure Shell (SSH). Confianza del IETF. doi : 10.17487/RFC4251 . RFC 4251.
  2. ^ "Ciencia y tecnología de la Universidad de Missouri: Telnet seguro".
  3. ^ abc T. Ylonen; C. Lonvick (enero de 2006). El protocolo de autenticación Secure Shell (SSH). Confianza del IETF. doi : 10.17487/RFC4252 . RFC 4252.
  4. ^ "Cómo configurar claves autorizadas". Archivado desde el original el 10 de mayo de 2011.
  5. ^ Win-32 OpenSSH
  6. ^ "Página de inicio de WinSCP". Archivado desde el original el 17 de febrero de 2014.
  7. ^ "Página WinSCP para PortableApps.com". Archivado desde el original el 16 de febrero de 2014.
  8. ^ "Página PuTTY para PortableApps.com". Archivado desde el original el 16 de febrero de 2014.
  9. ^ Amies, A; Wu, CF; Wang, GC; Criveti, M (2012). "Redes en la nube". IBM DeveloperWorks . Archivado desde el original el 14 de junio de 2013.
  10. ^ "Registro de número de puerto de protocolo de transporte y nombre de servicio".
  11. ^ "Registro de número de puerto de protocolo de transporte y nombre de servicio". iana.org . Archivado desde el original el 4 de junio de 2001.
  12. ^ Seggelmann, R.; Tuxen, M.; Rathgeb, EP (18 a 20 de julio de 2012). SSH sobre SCTP: optimización de un protocolo multicanal adaptándolo a SCTP . VIII Simposio Internacional sobre Sistemas de Comunicación, Redes y Procesamiento de Señales Digitales (CSNDSP). págs. 1–6. doi :10.1109/CSNDSP.2012.6292659. ISBN 978-1-4577-1473-3. S2CID  8415240.
  13. ^ Tatu Ylönen. "La nueva llave maestra: cambiar las cerraduras en su entorno de red". Archivado desde el original el 20 de agosto de 2017.
  14. ^ Tatu Ylönen. "Puerto SSH". Archivado desde el original el 3 de agosto de 2017.
  15. ^ Ylönen, Tatu. "La historia del puerto SSH es 22". www.ssh.com . Consultado el 30 de noviembre de 2023 .
  16. ^ Nicolás Rosasco y David Larochelle. "Cómo y por qué tecnologías más seguras tienen éxito en los mercados heredados: lecciones del éxito de SSH" (PDF) . Citando a Barrett y Silverman, SSH, Secure Shell: The Definitive Guide, O'Reilly & Associates (2001) . Departamento de Ciencias de la Computación, Univ. de Virginia. Archivado (PDF) desde el original el 25 de junio de 2006 . Consultado el 19 de mayo de 2006 .
  17. ^ "Documentos del protocolo Secsh". VanDyke Software, Inc. Archivado desde el original el 13 de enero de 2010.
  18. ^ "Preguntas frecuentes sobre SSH". Archivado desde el original el 10 de octubre de 2004.
  19. ^ "libssh".
  20. ^ "Una implementación GNU de los protocolos Secure Shell". Archivado desde el original el 4 de febrero de 2012.
  21. ^ "Dropbear SSH". Archivado desde el original el 14 de octubre de 2011.
  22. ^ Ylonen, T.; Lonvick, C. "Cliente antiguo, servidor nuevo". El protocolo de capa de transporte Secure Shell (SSH). IETF. segundo. 5.1. doi : 10.17487/RFC4253 . RFC 4253.
  23. ^ ssh-1.2.13 ahora disponible: política de copia modificada (ahora se requiere permiso para vender ssh comercialmente, el uso aún está permitido para cualquier propósito)
  24. ^ Fuentes OSSH
  25. ^ "OpenSSH: historial y créditos del proyecto". openssh.com. 2004-12-22. Archivado desde el original el 24 de diciembre de 2013 . Consultado el 27 de abril de 2014 .
  26. ^ "Información OSSH para VU#419241". Centro de Coordinación CERT . 2006-02-15. Archivado desde el original el 27 de septiembre de 2007. De cualquier manera ossh es viejo y obsoleto y no recomiendo su uso.
  27. ^ Sobell, Mark (2012). Una guía práctica para los comandos, editores y programación de Shell de Linux (3ª ed.). Upper Saddle River, Nueva Jersey: Prentice Hall. págs. 702–704. ISBN 978-0133085044.
  28. ^ Harris, B.; Velvindron, L. (febrero de 2020). Algoritmos de clave pública Ed25519 y Ed448 para el protocolo Secure Shell (SSH). doi : 10.17487/RFC8709 . RFC 8709.
  29. ^ ab Stebila, D.; Verde, J. (diciembre de 2009). Integración del algoritmo de curva elíptica en la capa de transporte Secure Shell. doi : 10.17487/RFC5656 . RFC 5656 . Consultado el 12 de noviembre de 2012 .
  30. ^ Molinero, D.; Valchev, P. (3 de septiembre de 2007). El uso de UMAC en el protocolo de capa de transporte SSH. ID borrador-miller-secsh-umac-00.
  31. ^ Ylonen, T.; Lonvick, C. El protocolo de capa de transporte Secure Shell (SSH). IETF. doi : 10.17487/RFC4253 . RFC 4253.
  32. ^ Igoe, K.; Solinas, J. (agosto de 2009). Modo de contador AES Galois para el protocolo de capa de transporte Secure Shell. doi : 10.17487/RFC5647 . RFC 5647.
  33. ^ "Ataque de inserción SSH". Tecnologías de seguridad básicas . Archivado desde el original el 8 de julio de 2011.
  34. ^ "Nota de vulnerabilidad VU#13877: CRC débil permite la inyección de paquetes en sesiones SSH cifradas con cifrados en bloque". CERT DE EE. UU . Archivado desde el original el 10 de julio de 2010.
  35. ^ "Vulnerabilidad del detector de ataques de compensación SSH CRC-32". Enfoque de seguridad . Archivado desde el original el 25 de julio de 2008.
  36. ^ "Nota de vulnerabilidad VU#945216: el código de detección de ataque SSH CRC32 contiene un desbordamiento de enteros remoto". CERT DE EE. UU . Archivado desde el original el 13 de octubre de 2005.
  37. ^ "Nota de vulnerabilidad VU#315308: CRC débil permite cambiar el último bloque del paquete SSH cifrado con IDEA sin previo aviso". CERT DE EE. UU . Archivado desde el original el 11 de julio de 2010.
  38. ^ ab "Nota de vulnerabilidad VU # 684820: SSH-1 permite que un servidor malicioso reenvíe la autenticación del cliente a otro servidor". CERT DE EE. UU . Archivado desde el original el 1 de septiembre de 2009.
  39. ^ "Cómo utilizar claves SSH para la autenticación". Arriba Nube . 17 de septiembre de 2015 . Consultado el 29 de noviembre de 2019 .
  40. ^ ab "Nota de vulnerabilidad VU#958563: vulnerabilidad SSH CBC". CERT DE EE. UU . Archivado desde el original el 22 de junio de 2011.
  41. ^ "Ojos curiosos: dentro de la guerra de la NSA contra la seguridad en Internet". Spiegel en línea . 28 de diciembre de 2014. Archivado desde el original el 24 de enero de 2015.
  42. ^ Ylonen, Tatu (3 de agosto de 2017). "BothanSpy & Gyrfalcon: análisis de las herramientas de piratería de la CIA para SSH". ssh.com . Consultado el 15 de julio de 2018 .
  43. ^ "Ataque de tortuga marina". terrapin-attack.com . Consultado el 20 de diciembre de 2023 .
  44. ^ Jones, Connor. "SSH sacudido, no afectado por la vulnerabilidad de degradación de Terrapin". www.theregister.com . Consultado el 20 de diciembre de 2023 .
  45. ^ Jones, Connor. "SSH sacudido, no afectado por la vulnerabilidad de degradación de Terrapin". www.theregister.com . Consultado el 20 de diciembre de 2023 .
  46. ^ ab "Notas de la versión de OpenSSH 9.6". openssh.com . 2023-12-18.

Otras lecturas

enlaces externos