¿Cómo autentica un cliente un servidor SFTP si no hay claves compartidas de antemano?

4

Para FTPS, confiamos en el DNS y la PKI pública para autenticar el servidor FTP cuando nos conectamos por primera vez. En la primera conexión, foo.example.com se resuelve en 1.2.3.4 y mi conexión se vuelve encriptada por una clave privada que puedo validar que realmente es propiedad de foo.example.com (más o menos, dados los problemas con PKI).

¿Pero cómo funciona esto con SFTP (sí, sé que es SSH pero no estoy muy familiarizado con eso)?

Sé que hay dos formas comunes en que las personas usan SFTP con respecto a esta pregunta:

  1. El cliente es consciente de la clave que se utilizará para la conexión por adelantado. Esto tiene sentido y es obvio para mi pregunta. No estoy preguntando por esto.
  2. El cliente desconoce de antemano la clave que se utilizará para la conexión. En su lugar tienen un nombre de usuario y una contraseña. Este es el escenario en el que estoy preguntando específicamente.

Para ese segundo escenario, cuando me conecto por primera vez al servidor SFTP, ¿cómo puedo estar seguro de que realmente es mi servidor deseado y no otro servidor que realiza un ataque MITM para luego obtener mi contraseña? robado) y / o datos?

Encontré esto pregunta pero no parece abordar el tema de la autenticación del servidor, solo la autenticación del cliente.

    
pregunta Jaxidian 10.11.2017 - 14:56
fuente

2 respuestas

4

SFTP es exactamente el mismo modelo de seguridad que SSH, ya que utiliza SSH como el transporte subyacente. Con SSH, la primera vez que se conecta a un servidor, el cliente debe presentarle la huella digital del servidor. Que se ve así:

The authenticity of host 'myserver.com (123.45.67.89)' can't be established. 
RSA key fingerprint is 12:34:56:78:9a:bc:de:f0:0f:ed:cb:a9:87:65:43:21. 
Are you sure you want to continue connecting (yes/no)? no

Para mayor seguridad, los usuarios deben comparar esta clave de host / huella digital con la huella digital del servidor real, que debe obtenerse a través de otro canal seguro, fuera de banda. A menudo, este es un sitio web donde el propietario del servidor publicó su huella dactilar o también puede ser a través de una reunión cara a cara o una llamada telefónica o por otro usuario de confianza que previamente había realizado la verificación. SSH no especifica cómo se debe realizar esta comunicación fuera de banda de la huella digital.

Sin embargo, a menudo, las personas simplemente confían en cualquier huella digital que se les presente. Cuando esto sucede, los clientes de SSH generalmente recuerdan la huella digital, por lo que la futura reconexión debe conectarse automáticamente sin pedirle al usuario que vuelva a revisar la huella digital, y el cliente generalmente mostrará un gran mensaje de advertencia si la huella digital del servidor ha cambiado. Cuando se usa con este modelo, el modelo de seguridad de SSH es esencialmente TOFU ( trust-on-first-use ).

Alternativamente, SSH también admite usando certificados SSH para autenticar servidores. La forma en que funcionan los certificados SSH es esencialmente igual que el certificado x509, pero utiliza un formato de certificado más simple e incompatible. Cuando utiliza un certificado SSH, asigna un usuario de confianza para que actúe como su autoridad de certificación, que puede firmar certificados para los servidores y / o usuarios. Con este método, los usuarios solo necesitan instalar el único certificado de CA en lugar de verificar cada una de las claves de host del servidor individualmente.

    
respondido por el Lie Ryan 10.11.2017 - 15:19
fuente
2

Además de la excelente respuesta de Lie Ryan, las claves de host ssh también pueden publicarse en DNS usando las entradas SSHFP. Si la zona está configurada correctamente con DNSSEC y la resolución es compatible con DNSSEC, incluso puede configurar la opción VerifyHostKeyDNS para yes en su archivo ssh_config para confiar automáticamente en él (como lo haría en la PKI pública).

    
respondido por el user2313067 10.11.2017 - 17:05
fuente

Lea otras preguntas en las etiquetas