Benvenuti nella pagina Wiki di Simone Giustetti.
Lingue: English - Italiano
Introduzione
In un precedente articolo è stata introdotta Cracklib una piccola libreria di funzioni che consente di verificare la robustezza di una password contro attacchi da dizionario. Nel corso dell'articolo è stato introdotto anche cracklib-check, il programma che esegue i controlli, e ne sono stati forniti alcuni esempi d'uso. L'utilità dello strumento è indubbia, ma penalizzata dall'essere pensato per l'uso da parte dei soli amministratori di sistema. Sia la libreria che il programma di controllo sono installati nelle cartelle dedicate all'amministrazione del sistema e gli utenti standard non possono accederli se non adottando appositi accorgimenti. Un altro fattore di rischio consiste nel fatto che il controllo debba essere eseguito esplicitamente. Nulla obbliga un utente a verificare la robustezza di un password con cracklib pertanto nulla vieta di configurare una password debole anche quando lo strumento sia installato e correttamente configurato.
Nel proseguo dell'articolo verrà illustrata la procedura per integrare cracklib con il sistema di autenticazione standard di Slackware Linux in modo da automatizzare i controlli delle password, obbligare gli utenti ad utilizzare lo strumento e migliorare la sicurezza intrinseca del sistema.
Integrare Cracklib con il Sistema di Autenticazione di Slackware Linux
Esistono sostanzialmente due modi per integrare cracklib con il sistema di autenticazione di una distribuzione Linux a seconda che la stessa usi PAM oppure no. Slackware Linux non include PAM tra i pacchetti distribuiti. Si tratta di una scelta ponderata del gruppo di sviluppatori della distribuzione che non reputano il livello di sicurezza garantito da PAM sufficientemente elevato e preferiscono pertanto rinunciare alla flessibilità che lo strumento garantisce in funzione di una maggiore semplicità del sistema.
Per integrare cracklib con il sistema di autenticazione shadow password è necessario ricompilare il pacchetto di autenticazione e reinstallare la nuova versione sostituendo quella distribuita ufficialmente. Nel caso di Slackware 14.2 il pacchetto in questione è: shadow-4.2.1. È possibile integrare cracklib eseguendo i seguenti passi:
- Compilare ed installare un pacchetto aggiornato di cracklib seguendo le istruzioni incluse in un articolo precedente.
- Procurarsi il codice sorgente di Shadow Password e copiarlo o scaricarlo in una cartella locale ad esempio /tmp oppure /usr/src/shadow-4.2.1. Il codice e gli script di compilazione per ogni pacchetto distribuito con Slackware Linux sono reperibili su di un DVD specifico, slackware-14.2-source-dvd.iso ad esempio, oppure nell'albero di installazione. Entrambi sono reperibili in rete seguendo i collegamenti contenuti nella seguente pagina. Supponendo di essere nella cartella principale del DVD o dell'albero di installazione on-line, il codice sarà reperibile nella sotto-cartella source/a/shadow/. È di seguito riportato il contenuto della cartella per Slackware 14.2:
[ ] adduser 13-Sep-2012 23:27 16K Details [ ] doinst.sh.gz 28-Jan-2010 01:29 290 Details [ ] login.defs.gz 13-Sep-2012 23:27 4.5K Details [DIR] patches/ 17-May-2013 02:19 - [ ] shadow-4.2.1.tar.xz 09-May-2014 21:05 1.5M Details [ ] shadow-4.2.1.tar.xz.sig 09-May-2014 21:05 828 Details [ ] shadow.CVE-2005-4890.relax.diff.gz 14-Dec-2013 21:05 734 Details [ ] shadow.SlackBuild 02-Jul-2014 00:21 5.1K Details [ ] shadow.url 02-Jul-2014 00:15 46 Details [ ] slack-desc 30-Apr-2002 23:51 1.0K Details [ ] useradd.gz
- Una volta che tutti i file siano stati scaricati e / o copiati nella cartella desiderata si proceda modificando lo script di compilazione shadow.SlackBuild rimuovendo la riga:
--without-libcrack \
per rimpiazzarla con:
--with-libcrack \
in modo da abilitare il supporto della libreria cracklib.
- Lanciare la compilazione del pacchetto mediante il comando
root@system # sh ./shadow.SlackBuild
ed attendere che lo stesso venga compilato ed infine salvato in /tmp.
- Aggiornare il pacchetto sovrascrivendo quello installato sul sistema:
root@system # upgradepkg --reinstall /tmp/shadow-4.2.1-i486-1.txz
L'opzione --reinstall in questo caso è obbligatoria altrimenti il pacchetto verrebbe ignorato essendo presente sul sistema:
root@system # upgradepkg shadow-4.2.1-i486-1.txz +============================================================================== | Skipping package shadow-4.2.1-i486-1 (already installed) +==============================================================================
- Una volta ultimata l'installazione è necessario creare i dizionari ed abilitare il loro uso sa parte del comando passwd. La creazione di dizionari personalizzati è stata oggetto di un articolo precedenrte. Per semplicità vengono riportate le istruzioni usate per sostituire il dizionario predefinito, che contiene qualche decina di migliaia di parole, con quello esteso, che ne contiene invece circa due milioni. Tutti i comandi devono essere eseguiti con privilegi di amministratore in quanto vanno a modificare file e cartelle di sistema.
root@system # create-cracklib-dict /usr/share/cracklib/* skipping line: 1 warning: input out of order: 'ghabcdefghabcdefghabcdefghabcd' should not follow 'habcdefghabcdefghabcdefghabcde' (line 55371) warning: input out of order: 'fghabcdefghabcdefghabcdefghabc' should not follow 'ghabcdefghabcdefghabcdefghabcd' (line 55372) warning: input out of order: 'efghabcdefghabcdefghabcdefghab' should not follow 'fghabcdefghabcdefghabcdefghabc' (line 55373) warning: input out of order: 'fghabcdefghabcdefghabcdefghabc' should not follow 'ghabcdefghabcdefghabcdefghabcd' (line 55375) warning: input out of order: 'abcdefghi' should not follow 'fghabcdefghabcdefghabcdefghabc' (line 55376) 1911522 1911521 root@system # ls -la /usr/share/cracklib/ total 28252 drwxr-xr-x 2 root root 4096 Dec 9 18:46 . drwxr-xr-x 214 root root 4096 Dec 9 20:02 .. -rw-r--r-- 1 root root 19163351 Dec 9 18:46 cracklib-large -rw-r--r-- 1 root root 492822 Dec 9 18:46 cracklib-small -rw-r--r-- 1 root root 360 Dec 9 18:46 cracklib.magic -rw-r--r-- 1 root root 1024 Dec 13 00:13 pw_dict.hwm -rw-r--r-- 1 root root 8771150 Dec 13 00:13 pw_dict.pwd -rw-r--r-- 1 root root 477896 Dec 13 00:13 pw_dict.pwi
Il dizionario è costituito dai 3 file aventi nome pw_dict mentre cracklib-large e cracklib-small sono invece i file letti per creare i dizionari esteso e standard rispettivamente.
- Infine per abilitare l'uso di cracklib da parte del comando passwd si aggiorni il file di configurazione /etc/login.defs aggiungendo una riga che punti al dizionario da utilizzare per effettuare i controlli:
CRACKLIB_DICTPATH /usr/share/cracklib/pw_dict
Dove /usr/share/cracklib è il percorso della cartella che contiene i dizionari mentre pw_dict è il nome comune dei 3 file che costituiscono il dizionario. Il file /etc/login.defs contiene una riga standard che deve essere commentata perchè punta ad un dizionario inesistente:
# If compiled with cracklib support, where are the dictionaries
#CRACKLIB_DICTPATH /var/cache/cracklib/cracklib_dict
Il controllo delle password è abilitato immediatamente dopo aver eseguito la configurazione:
jil-big@system:~$ passwd Changing password for jil-big Old password: Enter the new password (minimum of 5 characters) Please use a combination of upper and lower case letters and numbers. New password: Bad password: it is based on a dictionary word. Try again. New password: Bad password: too simple. Try again. New password: Bad password: it is too simplistic/systematic. Try again. New password: Bad password: it is based on a dictionary word. Try again. New password: Bad password: too simple. Try again. The password for jil-big is unchanged.
Il controllo viene eseguito durante l'aggiornamento di una password ha quindi effetto su tutte le password impostate dopo l'installazione e la configurazione di cracklib, ma non agisce automaticamente sulle password impostate in precedenza. Nel caso si volesse forzare il controllo per tutte le password di autenticazione delle utenze sarà necessario impostare una scadenza per le stesse in modo da obbligare gli utenti all'aggiornamento. Per esempio usando il comando:
passwd -e <utente>
Uno svantaggio dell'integrare cracklib nel comando passwd si presenta nell'eventualità di dover aggiornare il pacchetto shadow. Ovviamente i nuovi rilasci di Slackware non supporteranno la libreria e sarà compito dell'amministratore di sistema compilare i pacchetti di aggiornamento seguendo la procedura descritta più sopra. La compilazione deve essere eseguita ogni volta che si aggiorna il pacchetto. Si tratta comunque di un'occorrenza molto remota dato che i programmi inclusi in shadow password sono molto maturi e ampiamente testati e raramente vengono segnalate vulnerabilità che richiedano il loro aggiornamento.
Conclusioni
Cracklib è uno strumento semplice da usare e molto utile per migliorare il livello di sicurezza di un PC o un Server Linux / UNIX in quanto consente di verificare la robustezza delle password scartando quelle facili da indovinare. Nel corpo dell'articolo è stata illustrata la procedura per integrare cracklib con il sistema di autenticazione shadow: lo standard adottato da Slackware e molte altre distribuzioni Linux. L'integrazione dei due sistemi è vantaggiosa in quanto rende lo strumento disponibile a tutte le utenze, non solo quelle di amministrazione, obbligale ad eseguire un controllo contro un dizionario. Il controllo è eseguito automaticamente al momento di cambiare una password e pertanto non aggirabile. A conclusione dell'articolo è stato riportato un modo semplice per "invecchiare" la password di un'utenza obbligando l'aggiornamento della stessa e, di conseguenza, il controllo offerto da cracklib.
Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.
Link esterni
- Home page di Cracklib in GitHub (In inglese)
- Pagina di SlackBuilds.org dedicata a Cracklib
- La pagina di Wikipedia dedicata a PAM
- La pagina home del progetto OpenPAM (In inglese)
- Slackware home page
- Slackware Documentation Project (In inglese)
- Slackware mailing list inerente la sicurezza (In inglese)
Lingue: English - Italiano