L'autenticazione basata su password Postgres è sicura?

18

Secondo la documentazione di Postgres , il metodo di autenticazione della password di Postgres utilizza l'hashing MD5 per proteggere il Password:

The password-based authentication methods are md5 and password. These methods operate similarly except for the way that the password is sent across the connection, namely MD5-hashed and clear-text respectively.

If you are at all concerned about password "sniffing" attacks then md5 is preferred. Plain password should always be avoided if possible. However, md5 cannot be used with the db_user_namespace feature. If the connection is protected by SSL encryption then password can be used safely (though SSL certificate authentication might be a better choice if one is depending on using SSL).

Ho sentito da numerose fonti che l'algoritmo di hash MD5 non è più considerato sicuro. Questo significa che dovrei evitare l'uso dell'autenticazione basata su password per Postgres? Se sì, quale metodo alternativo dovrei usare?

    
posta Ajedi32 22.08.2013 - 19:14
fonte

3 risposte

20

Se si utilizza SSL, cosa fa PostgreSQL va bene. Se non usa SSL, ma stai ancora facendo l'autenticazione attraverso la rete, allora cosa PostgreSQL puzza. I loro giochi con MD5 sono inutili, ma non perché usano MD5. MD5 ha i suoi problemi, ma li stanno semplicemente abusando male.

Con l'autenticazione "password non crittografata", il client mostra un nome utente e una password e il server li accetta se corrispondono a ciò che il server ha archiviato.

Con l'autenticazione "md5", il client mostra un valore (che è l'hash MD5 della concatenazione della password e del nome utente) e il server lo accetta se corrisponde a ciò che il server ha memorizzato.

Quindi lo vedi: in entrambi i casi , il client mostra un mucchio di byte al server, sempre la stessa sequenza. È sufficiente che un utente malintenzionato tocchi la rete per osservare questi byte, quindi connettersi al server e inviare gli stessi byte per ottenere la voce. Che i byte siano il risultato di un hash MD5 è completamente irrilevante qui. Si dice che questo hash MD5 sia equivalente alla password . Finché la connessione può essere intercettata a tutti (vale a dire senza SSL), quindi la sicurezza va in malora.

Vedi questa pagina per i dettagli del calcolo MD5. Lo chiamano "crittografia", che non è affatto (hashing non è crittografia).

Potremmo anche obiettare che l'uso di questa MD5 diminuisce sicurezza: quando si usa una password in chiaro, può essere inoltrata a un altro server di autenticazione (usando Kerberos, LDAP, ...) e quel server di autenticazione potrebbe quindi utilizzare tecniche di archiviazione avanzate (consultare hashing della password ). Con l'hash MD5 specifico per PostgreSQL, questo non può essere applicato. Quando viene utilizzato il metodo di autenticazione "md5", DEVE essere contro una tabella nel database che contiene tutti questi valori "md5" così come sono. Un utente malintenzionato che può mettere le mani su, ad esempio, un nastro di backup o un vecchio disco, otterrà immediatamente molti account gratuiti sul database.

E, insisto, nulla in tutto questo ha nulla a che fare con le debolezze crittografiche MD5. Tutto ciò si applicherebbe ancora se MD5 fosse stato sostituito con SHA-512.

    
risposta data 22.08.2013 - 19:54
fonte
8

Sì, l'uso di MD5 è sicuro. Quando un client vuole autenticare, il server invia un valore salt casuale. Il client usa quel valore, insieme alla password per generare un hash MD5. Poiché viene utilizzato un sale casuale, un utente malintenzionato non può utilizzare un attacco di dizionario. Inoltre, poiché il sale viene modificato ogni volta che un client si autentica, non è possibile riprodurre le vecchie richieste di autenticazione.

Dettagli qui nella sezione AuthenticationMD5Password.

    
risposta data 25.08.2015 - 09:50
fonte
3

TLDR. Può essere sicuro se lo si configura correttamente e si utilizzano buone password lunghe.

1. nei postgres md5 auth-method significa hashing lato client (discussioni: 1 , 2 ), che rende hash equivalente password . Un hash nel db viene confrontato con un hash ricevuto da un client. Un utente malintenzionato può utilizzare qualsiasi hash dalla tabella rubata pg_shadow direttamente, senza nemmeno perdere tempo a crackare l'md5.

È molto più sicuro presumere che gli hash verranno eventualmente rubati e per evitare l'hashing sul lato client.

In realtà puoi semplicemente dare un'occhiata al codice, è piuttosto semplice: link < - link diretto a questa riga:

 if (strcmp(crypt_client_pass, crypt_pwd) == 0)

Guarda cosa succede quando port->hba->auth_method == uaMD5 . Sì, non è possibile intercettare un hash clear-text, è di nuovo salato e hash. Ma quando rubato da qualsiasi altro attacco, può essere usato direttamente senza crack.

2. Non sorprendentemente, puoi utilizzare l'hashing md5 lato server con postgres utilizzando password auth-method e create user whatever with encrypted password .

These methods operate similarly except for the way that the password is sent across the connection, namely MD5-hashed and clear-text respectively.

Usa SSL per proteggere la password in chiaro. Probabilmente dovresti sapere come viene memorizzato il suo hash: il sale viene riutilizzato:

 /* Encrypt user-supplied password to match stored MD5 */
 if (!pg_md5_encrypt(client_pass,          // const char *passwd
                     port->user_name,      // const char *salt
                     strlen(port->user_name),
                     crypt_client_pass))   // char *buf

Si potrebbe persino creare nomi utente usa e getta generati casualmente per usarli come sale, ma non sono sicuro che sia una buona idea, questo è soggetto ad errori.

Mentre la raccomandazione generale è di migrare da md5, non è ancora rotta per l'hashing della password. Domanda pertinente: Perché le persone usano / raccomandano MD5 in caso di crack dal 1996?

Non usare password brevi. Le password casuali di alta qualità e lunghe sono ancora al sicuro.

Per una rapida stima, questi link (purtroppo molto vecchi) hanno alcuni numeri:
link < br> link

Aggiornamento : grazie a RhodiumToad dal canale #postgresql su irc.freenode.net per chiarire che md5 non è ancora rotto per l'hashing della password, buone password lunghe salveranno il giorno.

    
risposta data 02.11.2015 - 19:42
fonte

Leggi altre domande sui tag