Benvenuti nella pagina Wiki di Simone Giustetti.
Lingue: English - Italiano
Introduzione
Ho precedentemente scritto un articolo introduttivo incentrato su Cracklib una piccola libreria di funzioni progettata per verificare la robustezza di password contro attacchi da dizionario. Nell'articolo era illustrato il funzionamento di cracklib-check, il programma che esegue controlli interattivi delle password. Concludevo l'articolo suggerendo di integrare i controlli con il sistema di autenticazione in modo da ovviare alle limitazioni intrinseche di un programma interattivo. In un successivo articolo spiegavo come configurare l'integrazione con shadow password, il sistema di autenticazione utilizzato da Slackware Linux. Slackware non è l'unica versione di Linux disponibile e neppure la più diffusa: titolo detenuto da altre distribuzioni. La quasi totalità delle distribuzioni Linux hanno radici comuni che possono essere raggruppate in 4 famiglie principali:
- Debian Gnu Linux
- Gentoo Linux
- Red Hat Linux
- Slackware Linux
Sia che siate un utente generico che un amministratore di sistema vale la pena conoscere la procedura per integrare cracklib con il maggior numero di distribuzioni Linux esistenti in modo da sfruttare ovunque i vantaggi offerti dalla libreria.
Nel proseguo dell'articolo verranno illustrate le procedure per integrare cracklib con i sistemi di autenticazione standard di Debian Gnu Linux e Red Hat Linux. Quasi il 90% delle distribuzioni derivano da una delle due appena elencate di conseguenza leggendo l'articolo sarete in grado di integrare i controlli delle password rendendo qualsiasi sistema intrinsecamente più sicuro.
Integrare Cracklib con il Sistema di Autenticazione di Debian Gnu Linux
Le distribuzioni basate su Debian o Red Hat usano PAM come sistema di autenticazione pertanto la libreria cracklib non viene integrata direttamente con i programmi che gestiscono le credenziali. L'integrazione con cracklib avviene tramite un modulo dedicato di PAM: pam_cracklib che deve essere installato e configurato secondo necessità.
Per installare il modulo eseguire il comando:
root@system # apt-get install libpam-cracklib
che scaricherà ed installerà il pacchetto e le sue eventuali dipendenze. Successivamente il modulo dovrà essere configurato ed integrato con il sistema di autenticazione. Il comportamento dei moduli di PAM può essere configurato modificando specifici file contenuti nella cartella /etc/pam.d. Per abilitare i controlli addizionali forniti dalla libreria cracklib è necessario aggiornare il file /etc/pam.d/common-password operazione che richiede privilegi di amministratore oppure l'uso del comando sudo trattandosi di un file di sistema.
root@system # vi /etc/pam.d/common-password
Una volta aperto il file con un elaboratore di testo, nel nostro caso vi, verificare che contenga una riga simile alla seguente:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
Nel caso la riga non fosse presente va aggiunta infatti configura il comportamento predefinito del sistema di autenticazione oltre ad abilitare l'uso di cracklib. La configurazione impone:
- Massimo 3 tentativi (retry).
- Lunghezza minima di 8 caratteri (minlen).
- 3 caratteri di differenza rispetto alla password precedente (difok).
La riga deve essere modificata ed integrata per imporre controlli più stretti sulle password; inserire ad esempio:
password requisite pam_cracklib.so retry=3 minlen=16 difok=3 ucredit=-1 lcredit=-2 dcredit=-2 ocredit=-2
Ossia:
- Massimo 3 tentativi (retry).
- Lunghezza minima di 16 caratteri (minlen).
- 3 caratteri di differenza rispetto alla password precedente (difok).
- La nuova password deve contenere almeno 1 carattere maiuscolo (ucredit).
- La nuova password deve contenere almeno 2 carattere minuscoli (lcredit).
- La nuova password deve contenere almeno 2 numeri (dcredit).
- La nuova password deve contenere almeno 2 simboli (ocredit).
La lunghezza minima potrebbe apparire esagerata, ma si rimanda alla lettura di un successivo paragrafo per spiegare il valore configurato.
In Debian Gnu Linux i dizionari predefiniti della libreria cracklib sono salvati nella cartella /var/cache/cracklib e sono rigenerati ogni notte automaticamente dallo script /usr/sbin/update-cracklib. Nel caso si volessero rendere immediatamente disponibili nuovi dizionari, lanciare lo script con privilegi di amministratore. Lo script accede alcune directory alla ricerca di file di input:
- /usr/local/dict.
- /usr/local/share/dict.
Per aggiungere parole all'elenco di quelle da controllare e scartare è sufficiente scriverle all'interno di uno dei file contenuti nelle cartelle sopra citate oppure aggiungerne uno nuovo personalizzato. Il formato dei file di input è stato descritto in un articolo precedente. È inoltre possibile configurare percorsi personalizzati ove ricercare i file aggiungendoli nel file di sistema /etc/cracklib/cracklib.conf.
Integrare Cracklib con il Sistema di Autenticazione di Red Hat Linux
Come anticipato in precedenza, la distribuzione Red Hat e le sue derivate come CentOS o Fedora usano PAM come sistema di autenticazione. Valgono pertanto le medesime considerazioni esposte per la distribuzione Debian e le sue derivate come Ubuntu. È nuovamente necessario installare e configurare il modulo pam_cracklib di PAM per eseguire automaticamente il controllo delle password digitate contro un dizionario di termini da filtrare ed escludere.
Il modulo così come la libreria libcrack.so.x da cui dipende dovrebbero essere inclusi nel sistema di base. Se per qualche motivo non fossero installati è possibile rimediare lanciando con privilegi di amministratore il comando:
root@system # yum install cracklib
che provederà a scaricare ed installare sia la libreria che le necessarie dipendenze. Ad installazione ultimata si proceda a configurare il modulo modificando secondo le proprie esigenze il file /etc/pam.d/system-auth. Trattandosi di un file di sistema sono richiesti privilegi di amministratore per leggerlo ed apportare modifiche. La configurazione standard consta delle due seguenti righe:
password required pam_cracklib.so retry=3 minlen=6 difok=3 password required pam_unix.so md5 use_authtok
La prima riga abilita alcuni vincoli standard:
- Massimo 3 tentativi (retry).
- Lunghezza minima di 6 caratteri (minlen).
- 3 caratteri di differenza rispetto alla password precedente (difok).
La seconda riga attiva il sistema di autenticazione standard in UNIX disabilitando i controlli interni (use_authtok) che sono un duplicato di quelli eseguiti dalla libreria cracklib. Le password verificate ed approvate da cracklib verranno di conseguenza impostate senza eseguire ulteriori controlli.
La prima riga deve essere modificata in modo da aggiungere ulteriori controlli per irrobustire le password delle utenze. Un parametro da incrementare è sicuramente minlen, che rappresenta la lunghezza minima di una password di sole lettere minuscole. Segue una configurazione speculare di quella adottata per sistemi della famiglia Debian Linux nel paragrafo precedente.
password required pam_cracklib.so retry=3 minlen=16 difok=3 ucredit=-1 lcredit=-2 dcredit=-2 ocredit=-2 password required pam_unix.so md5 use_authtok
con cui, oltre ad aumentare la lunghezza minima di una password valida, viene imposto l'uso di numeri e caratteri speciali ed una combinazione di lettere maiuscole e minuscole.
Il dizionario predefinito in Red Hat è situato nella directory /usr/lib oppure /usr/lib64 per architetture a 64 bit e battezzato cracklib_dict. Come nei casi di Debian e Slackware Linux anche per le distribuzioni Red Hat e derivate è possibile personalizzare i controlli aggiungendo parole al dizionario non sembra però esista uno script o altro modo per automatizzare l'operazione. Di seguito è descritta la procedura per aggiungere manualmente parole al dizionario:
- Spostarsi nella directory /usr/share/cracklib utilizzata per immagazzinare i file contenti gli elenchi di parole da convertire in dizionario.
cd /usr/share/cracklib
- Spacchettare il dizionario predefinito creando un nuovo file origine:
cracklib-unpacker /usr/lib/cracklib_dict > ./pw_dict
Il comando leggerà il dizionario attivo estraendo le parole contenute per salvarle poi in un file di testo modificabile tramite l'elaboratore preferito. Dopo aver apportato le aggiunte al file sarà necessario impacchettarlo nel formato binario usato da cracklib:
sort pw_dict | cracklib-packer /usr/lib/cracklib_dict
Calcolo della Lunghezza Minima di una Password in PAM
Avendo precedentemente citato i parametri di configurazione vale la pena spendere qualche parola per spiegare come venga calcolata la lunghezza minima delle password gestite da PAM. Il parametro minlen rappresenta la lunghezza minima di una password di sole lettere minuscole. Una password composta da sole lettere minuscole ` più facile da indovinare di una che includa caratteri di diversa tipologia. Usare combinazioni di lettere maiuscole, minuscole, numeri e caratteri speciali comporta dei crediti bonus nel calcolo della robustezza di una password perciò è possibile che il sistema accetti password di lunghezza inferiore al valore impostato per minlen, ad esempio password lunghe 8 caratteri con minlen impostato a 12. Per il gioco dei bonus la lunghezza minima accettata di una password è sempre minlen - 1. I crediti bonus ottenuti possono essere configurati tramite i parametri:
- dcredit: Crediti per caratteri numerici.
- lcredit: Crediti per lettere minuscole.
- ocredit: Crediti per simboli / caratteri speciali.
- ucredit: Crediti per lettere maiuscole.
ad esempio la stringa di parametri "lcredit=0 ucredit=1 dcredit=1 ocredit=2" assegnano 1 credito bonus quando l'utente usa almeno una lettera maiuscola, 1 bonus per una carattere numerico ed infine 1 bonus qualora siano impostati almeno 2 caratteri speciali. E' possibile impostare valori negativi per i quattro parametri. I valori negativi forzano le utenze ad usare un numero minimo di caratteri di una certa tipologia. La stringa "ocredit=-2" impone, ad esempio, ad ogni utente di impostare almeno due caratteri speciali nelle rispettive password.
Concludendo il parametro minlen deve essere impostato ad un valore maggiore della la lunghezza minima desiderata per le password. Maggiore la complessità della password, maggiore deve essere il valore impostato per il parametro onde ottenere la lunghezza minima desiderata.
Conclusioni
Cracklib è un utile strumento per migliorare il livello di sicurezza di un PC o un Server Linux / UNIX. Integrare i controlli eseguiti da cracklib con il sistema di autenticazione standard di una distribuzione Linux garantisce che tutti gli utenti ne usufruiscano automaticamente e senza sforzo. Nel corpo dell'articolo sono state illustrate le procedure per integrare cracklib con PAM, il sistema di autenticazione adottato da Debian Gnu Linux, Red Hat Linux e tutte el loro derivate come CentOS, Fedora, Ubuntu e centinaia di altre ancora. È stato affrontato l'argomento della personalizzazione dei dizionari: un fattore fondamentale per accertarsi che i controlli eseguiti siano significativi. In tal merito sono state fornite nozioni specifiche per le distribuzioni. Infine sono state fornite alcune nozioni per spiegare come venga calcolata la lunghezza minima ammessa di un password in PAM, computo ingannevolmente banale che può confondere il neofita ed indurlo ad impostare un valore troppo piccolo. Chi fosse interessato ad approfondire gli argomenti presentati è caldamente invitato a consultare la documentazione di cracklib, di PAM e della distribuzione preferita.
Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.
Link esterni
- Pagina web di Cracklib in GitHub (In inglese)
- La pagina di Wikipedia dedicata a PAM
- Pagina web del progetto OpenPAM (In inglese)
- Pagina web del progetto Debian
- Pagina web del progetto Fedora
- Pagina web di Rad Hat Linux
Lingue: English - Italiano