¿El intercambio de claves SSH es más seguro que la autenticación de contraseña?

9

Los usuarios remotos se conectan a varios servicios en nuestra oficina principal a través de Internet mediante SSH. La contraseña SSH se sincroniza con su cuenta LAN A / D.

¿Hacer que los usuarios traigan una copia de una clave SSH a casa usando algo como un CD o un trozo de papel sería más seguro que hacer que los usuarios escriban su contraseña? ¿O debería requerir ambos?

Mi pregunta probablemente podría reformularse de la siguiente manera: ¿hay alguna vulnerabilidad en el protocolo de autenticación de contraseña de SSH?

Es este mensaje el que me hace dudar:

The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:.
Are you sure you want to continue connecting (yes/no)?
srmark
fuente

Respuestas:

22

El mensaje que está viendo es un tema aparte. Le está pidiendo que confirme que el host al que se está conectando es realmente el que espera que sea. Desde el servidor, puede obtener la huella digital ejecutando ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub. Luego, cuando se conecta de forma remota por primera vez, puede asegurarse de que las huellas digitales coincidan.

Las claves de host, vistas en acción aquí, abordan el problema del hombre en los ataques intermedios : tal vez el DNS se ha subvertido y se está conectando a la máquina de un competidor en lugar de la suya. Esa máquina reúne sus credenciales y reenvía su conexión al servidor real de forma transparente, robando su información sin que usted lo sepa. Asegurarse de que la clave del host coincida evita que esto suceda a menos que el atacante haya robado la clave pública de su servidor.

Sin embargo, sigue habiendo un problema: ¿cómo saber qué clave es la correcta? Después de la primera conexión, la clave pública se almacena en su ~/.ssh/known_hostsarchivo, por lo que las conexiones posteriores están bien. Pero la primera vez, o necesita alguna forma fuera de banda para obtener la huella digital, o bien sigue el modelo "TOFU": confianza en el primer uso.

Pero nada de esto tiene nada que ver con las contraseñas frente a las claves, excepto que tanto las claves como las contraseñas podrían ser robadas a través de este ataque; en cierto sentido, es la vulnerabilidad que está solicitando.

Hay (al menos) tres razones por las que las contraseñas son peores que las claves:

  1. Pueden ser forzados por la fuerza bruta. Una contraseña típica de 8 caracteres seleccionada por el usuario tiene alrededor de 30 bits de adivinanza-entropía. Un par de claves pública / privada ssh es de 1024 bits o más. Es realmente imposible forzar con fuerza bruta una clave ssh, pero las suposiciones automáticas de contraseñas ocurren todo el tiempo.
  2. Pueden ser tontos. Los usuarios seleccionan rutinariamente contraseñas horribles, incluso con restricciones establecidas, y tienden a usar contraseñas más difíciles en varios lugares. Obviamente, esto hace que los ataques sean más fáciles.
  3. Las contraseñas se pueden robar de forma remota. Cuando usa SSH, la contraseña se cifra en el cable, pero es muy común que el servidor ssh sea reemplazado en sistemas comprometidos por uno que registre todas las contraseñas. Con las claves, la clave privada permanece en el sistema local y nunca se envía, por lo que no puede ser robada sin comprometer la máquina del cliente.

Además, las teclas ssh ofrecen conveniencia cuando se usan con algo como ssh-agent: obtienes la operación sin problemas de conectarte sin volver a autenticarse cada vez, manteniendo un grado razonable de seguridad.

No hay una ventaja significativa en pedir ambas, ya que alguien que tiene acceso suficiente para robar la clave privada también puede robar fácilmente la contraseña del usuario. Si necesita más seguridad que esto, considere buscar un sistema de autenticación de dos factores como RSA SecurID o WiKID .

mattdm
fuente
Gran respuesta. Exactamente lo que estaba buscando. ¡Gracias!
srmark
con respecto al número 3) Si está iniciando sesión en un servidor ya comprimido ... ¿por qué alguien querría su contraseña? La única razón por la que puedo pensar es si usas la misma contraseña en todas partes.
Sirex
Sirex - a la derecha; roban tu contraseña y la usan en otros sistemas. Tenga en cuenta en la pregunta que las contraseñas se utilizan como "LAN A / D". Por lo tanto, roban su contraseña del servidor de inicio de sesión ssh y luego también tienen acceso al servidor de Windows. Además, ahora, cada vez que el sistema se ve comprometido, debe realizar el simulacro de incendio "está bien, todos cambiarán su contraseña nuevamente".
mattdm
Además, como se señaló en el número 2, los usuarios están usando la misma contraseña en todas partes. Suspiro.
mattdm
¡abajo con los usuarios molestos! :(
Sirex
1

lo que realmente está preguntando es "es un factor mejor que otro", el tema es la autenticación multifactor y realmente se recomienda que lo examine.

Por lo general, un "factor" es algo que sabe (contraseña), algo que tiene (archivo ssh o tarjeta de deslizamiento de teclas) o algo que es (huella digital).

Uno no es mejor que otro per se, son de cortesía. Perder un CD con el archivo de claves es tan malo como divulgar su contraseña si eso es todo lo que necesita. Para entornos seguros, la autenticación de dos factores es común.

Sirex
fuente
Sí, entiendo lo que estás diciendo. En este caso, sin embargo, solo estoy tratando de averiguar si la autenticación de contraseña se puede piratear usando algo como man in the middle.
srmark
para ssh como un ejemplo específico, no, ya que la sección de contraseña también está encriptada y las claves cambian durante la sesión (30 segundos, creo). Sin embargo
acceso