¿MongoDB no almacena realmente contraseñas de texto sin formato?

5

Según la documentación en enlace :

  

El controlador ejecuta el comando de autenticación para la base de datos en la que se va a autenticar.   El comando de autenticación tiene la siguiente sintaxis:

db.runCommand( { authenticate : 1, user : <username>, nonce : <nonce>, key : <digest> }
     

<username> es un nombre de usuario en la colección system.users de la base de datos.

     

<nonce> es el nonce devuelto desde un paso de getnonce anterior.

     

<digest> es la codificación hexadecimal de un resumen de mensaje MD5 .

     

El MD5 message digest es el hash MD5 de la concatenación de <nonce> , <username> , <password_digest> .

     

El <password_digest> es el valor en el campo pwd asociado con el <username> en la colección system.users de la base de datos. El pwd es la codificación hexadecimal de MD5( <username> + ":mongo:" + <password_text> ) .

Esto significa que el hashing se realiza en el lado del cliente, ya que el controlador forma parte del cliente para la conexión de la base de datos. Para autenticarse, el cliente no necesita demostrar el conocimiento de la contraseña sino del hash almacenado. Por lo tanto, la contraseña real es el hash almacenado, que simplemente se generó a través del hashing de algo. Esa contraseña real se almacena en texto sin formato en el campo pwd de system.users .

¿Estoy leyendo eso mal? ¿Hay alguna manera de asegurar esta autenticación?

    
pregunta Svante 14.07.2013 - 17:21
fuente

2 respuestas

4

En cierto sentido, eso puede considerarse correcto.

Por lo que entendí de la documentación de MongoDB, el db.addUser() espera que uno pase una contraseña ya cifrada. Esto se ve claramente en la documentación de la función, donde el tipo de datos esperado del% El campo pwd es hash .

Leí esto como MongoDB esperando que el sistema realice el hashing antes del registro o autenticación de los usuarios en la base de datos. Esto tiene sentido cuando considera que el usuario de MongoDB probablemente no va a escribir el hash de la contraseña a mano. El caso de uso de estas cuentas de usuario es como credenciales de autenticación para las aplicaciones, por lo que las contraseñas seguramente se almacenarán en un archivo de configuración en alguna parte.

La versión empresarial de MongoDB admite el uso de Kerberos para la autenticación. Los pasos para configurar Kerberos se pueden encontrar en documentations también. Si está realmente preocupado por esto como un factor de seguridad, debería considerar la configuración de Kerberos.

    
respondido por el Ayrx 14.07.2013 - 17:44
fuente
1

MongoDB no almacena contraseñas en texto plano. A partir de MongoDB 3.0, el Mecanismo de Autenticación de Respuesta Desafío Salado (SCRAM, por sus siglas en inglés) es el mecanismo de autenticación predeterminado para MongoDB. Scram es compatible con los mecanismos de hashing SCRAM-SHA-1 y SCRAM-SHA-256.

Habiendo dicho eso, al interactuar con una base de datos a través de un controlador, a menudo aceptan una contraseña con hash para que no se transmita hacia y desde la base de datos en forma de texto simple. Esto impone una responsabilidad adicional en el desarrollador porque él / ella tiene que realizar el hash en su extremo utilizando el mismo algoritmo que se emplea en el servidor DB. Afortunadamente, estos están disponibles para casi cualquier lenguaje de programación.

Al consultar la colección system.users, se devolverá un documento similar a este:

{
  "_id": "admin.123",
  "user": "123",
  "db": "admin",
  "credentials": {
    "SCRAM-SHA-1": {
      "iterationCount": 10000,
      "salt": "f9SdPCCcBOwk71/xDkj6Sw==",
      "storedKey": "83mNhTYctOdlYsL1sbnfpiA0uxw=",
      "serverKey": "09H9aEKKufaoCDxqUkHntx6EqrE="
    }
  },
  "roles": []
}

Puede profundizar en los usuarios y otras colecciones con una buena herramienta de administración de base de datos como Navicat for MongoDB . Le permite ver documentos en tres formatos: Árbol, JSON y cuadrícula:

Espero que responda a tu pregunta.

robar

    
respondido por el Rob Gravelle 13.10.2018 - 17:52
fuente

Lea otras preguntas en las etiquetas