MongoDB non sta effettivamente memorizzando le password in chiaro?

5

Secondo la documentazione di link :

The driver then runs the authenticate command for the database on which to authenticate. The authenticate command has the following syntax:

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

<username> is a username in the database’s system.users collection.

<nonce> is the nonce returned from a previous getnonce step.

<digest> is the hex encoding of an MD5 message digest.

The MD5 message digest is the MD5 hash of the concatenation of <nonce>, <username>, <password_digest>.

The <password_digest> is the value in the pwd field associated with the <username> in the database's system.users collection. The pwd is the hex encoding of MD5( <username> + ":mongo:" + <password_text> ).

Ciò significa che l'hashing è effettivamente eseguito lato client, poiché il driver fa parte del client per la connessione al database. Per autenticare, il client non ha bisogno di dimostrare la conoscenza della password ma dell'hash memorizzato. Quindi, la vera password è l'hash memorizzato, che semplicemente è stato generato attraverso l'hashing di qualcosa. Quella password reale è memorizzata in testo normale nel campo pwd di system.users .

Sto leggendo quello sbagliato? C'è un modo per proteggere questa autenticazione?

    
posta Svante 14.07.2013 - 17:21
fonte

2 risposte

4

In un certo senso, può essere considerato corretto.

Da quanto ho capito dalla documentazione di MongoDB, il db.addUser() si aspetta che passi una password già con hash. Ciò è chiaramente visibile dalla documentazione della funzione, dove il tipo di dati previsti della% il campopwd è hash .

Ho letto questo mentre MongoDB si aspettava che il sistema eseguisse l'hashing prima della registrazione o dell'autenticazione degli utenti nel database. Questo ha senso quando si considera che l'utente MongoDB molto probabilmente non scriverà manualmente l'hash della password. Il caso d'uso per questi account utente è come credenziali di autenticazione per le applicazioni, quindi le password verranno sicuramente memorizzate in un file di configurazione da qualche parte.

La versione enterprise di MongoDB supporta l'uso di Kerberos per l'autenticazione. I passaggi per l'installazione di Kerberos sono disponibili nella documentazione anche. Se sei veramente preoccupato di questo come un fattore di sicurezza, dovresti esaminare la configurazione di Kerberos.

    
risposta data 14.07.2013 - 17:44
fonte
1

MongoDB non memorizza le password in testo semplice. A partire da MongoDB 3.0, SCRDM (Salted Challenge Response Mechanism Mechanism) è il meccanismo di autenticazione predefinito per MongoDB. Scram supporta i meccanismi di hashing SCRAM-SHA-1 e SCRAM-SHA-256.

Detto questo, quando si interfaccia con un database tramite driver, questi accettano spesso una password con hash in modo che non venga trasmessa da e verso il database in formato testo. Ciò impone una responsabilità aggiuntiva allo sviluppatore perché deve eseguire l'hashing alla fine utilizzando lo stesso algoritmo utilizzato nel server DB. Fortunatamente, questi sono prontamente disponibili per quasi tutti i linguaggi di programmazione.

Interrogando la collezione system.users verrà restituito un documento simile a questo:

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

Puoi approfondire gli utenti e altre raccolte con un buon strumento di amministrazione di DB come Navicat for MongoDB . Ti consente di visualizzare i documenti in tre formati: Tree, JSON e grid:

Spero che risponda alla tua domanda.

rob

    
risposta data 13.10.2018 - 17:52
fonte

Leggi altre domande sui tag