All’installazione di WordPress, viene creato l’utente amministratore del sistema, le cui credenziali vengono salvate nella tabella wp-users del database di WordPress.
Aprendo la tabella wp-users, tramite riga di comando mysql oppure tramite phpmyadmin, potrete vedere che la password inserita per l’utente amministratore è stata sostituita da una sequenza di numeri e lettere totalmente diversa dalla password inserita.
Salvataggio della password utente nel database
Al momento della registrazione, la password scelta dall’utente viene abbinata ad una sequenza casuale di 64 caratteri chiamata “sale” (salt in inglese, concetto che spiegherò in un prossimo articolo) per poi essere elaborata da una procedura crittografica di hashing ed essere finalmente salvata nella tabella wp-users insieme al nome utente e altri dati aggiuntivi.Verifica della password al login
Durante la procedura di login, la password digitata dall’utente viene abbinata al sale memorizzato nel database, poi elaborata da un’ulteriore procedura di hashing e il risultato viene confrontato con l’hash memorizzato nel database. Se le sequenze corrispondono perfettamente viene dato accesso al sistema, altrimenti viene negato.Tipologia di hashing
La funzione di hash è una funzione crittografica in grado di mappare una stringa (sequenza di caratteri) arbitraria, in una nuova stringa di lunghezza predefinita. Una delle peculiarità più importanti di questa funzione, è l’irreversibilità, cioè l’impossibilità di risalire alla stringa inziale partendo dalla stringa finale, a differenza della crittografia che permette di risalire al testo iniziale grazie all’utilizzo di chiavi crittografiche (pubbliche e private). Per produrre le stringhe hash, è necessario utilizzare degli algoritmi crittografici. Nel caso di WordPress, fin dalle prime versioni, è stato utilizzato l’algoritmo MD5 (Message Digest 5) inventato dal Prof. Ronald Rivest del MIT nel lontano 1991. Tuttavia, ora l’algoritmo MD5 non viene più considerato sicuro, visto che nel 2004 dei ricercatori cinesi sono riusciti ad ottenere una “collisione” (quando stringhe diverse producono un identico hash) rendendo l’algoritmo non più totalmente sicuro. Per rafforzare le vulnerabilità dell’algoritmo MD5, dalla versione 2.5 di WordPress (Marzo 2008) in poi, è stato incorporato un framework per la gestione delle password chiamato Portable PHP Password Hashing Framework (sviluppato dalla Openwall) che utilizza sempre l’algoritmo MD5, ma ci aggiunge anche una lunga stringa casuale (sale o salt) di 64 caratteri e un numero maggiore d’iterazioni o rounds (8).Analisi struttura hash
Come esempio prendiamo l’hash seguente: $P$BXox1.zpleKOuW4jFS6/Fmg4iaiK.B/ I primi 2 caratteri $P rappresentano il tipo di algoritmo di hashing utilizzato (nel caso di WordPress è MD5) Il 3° e il 4° carattere $B rappresentano il numero d’iterazioni eseguite (nel caso di WordPress sono 8.192) Poi c’è una sequenza di 30 caratteri, di cui i primi 8 (BXox1.zp) rappresentano un sale casuale e infine gli ultimi 22 caratteri rappresentano l’hash (leKOuW4jFS6/Fmg4iaiK.B/).Come migliorare la sicurezza delle password del proprio sito
Oggi, tra gli algoritmi considerati più sicuri, ci sono l’algoritmo bcrypt (derivato da Blowfish, usato di default nei sistemi Unix-like BSD), e Argon2 più recente e ritenuto più sicuro di bcrypt. Sul repository di WordPress, sono disponibili alcuni plugin che permettono di implementare degli algoritmi più sicuri quale bcrypt (Plugin tag: bcrypt) Un plugin molto valido è Password Evolved (dello sviluppatore Carl Alexander). Un altro progetto che sembra molto interessante è PHP Native password hash (dello sviluppatore Ayesh Karunaratne)Ulteriori approfondimenti
1) Articolo sul mio blog “Guida per creare e gestire password a prova di hacker“.
2) “Evaluation of password hashing schemes in open source web platforms“
Dipartmento Sistemi Digitali, Università del Pireo, Grecia
23 Luglio 2018