Benvenuti nella pagina Wiki di Simone Giustetti.
Lingue: English - Italiano
Introduzione
Il sistema di autenticazione più diffuso in campo informatico consiste nell'uso di credenziali: la coppia formata da un nome per l'utenza (login) e da una password segreta. Esistono altre tecnologie per verificare l'identità ed i privilegi di una persona, ma la coppia login / password rappresenta tuttora la soluzione più semplice ed economica per eseguire tali controlli. In considerazione degli scarsi riscontri e conseguentemente della scarsa adozione delle alternative lo scenario non sembra destinato a mutare nel breve o medio periodo. Il tallone d'Achille dell'uso di credenziali consiste nelle password deboli, facili da indovinare e pertanto insicure. La libreria cracklib è uno strumento per verificare la robustezza di una password contro attacchi di tipo "da dizionario" e consente di incrementare il livello di sicurezza di un sistema Linux / UNIX.
Scegliere una buona password garantisce la sicurezza della propria macchina, della rete e degli altri apparati collegati. Idealmente una password deve essere nota solo all'utente che la usa, verificabile dal sistema cui si collega e infine impossibile da indovinare per tutti gli altri utenti. Nel mondo reale e' difficile ottenere le caratteristiche elencate. Dovendo gestire e ricordare molte password, gli utenti tendono a sceglierne di deboli semplificando enormemente il lavoro di malintenzionati che cerchino di accedere ad un sistema o una risorsa senza avere il titolo. Le password deboli rappresentano oggi il rischio maggiore per l'incolumità di computer, cellulari, reti, tablet ed altri apparati informatici.
Nel seguito dell'articolo verrà illustrato il funzionamento della libreria cracklib e degli strumenti che mette a disposizione degli amministratori di sistema per scartare a priori password troppo semplici e pericolose per utenze e servizi.
Attacchi da Dizionario
Le statistiche dimostrano che la maggior parte delle password è costituita da una radice, di solito una parola esistente presa da un dizionario, ed un'appendice: un prefisso o molto più spesso un suffisso. Dal punto di vista di un attaccante ciò rappresenta un notevole vantaggio perchè permette di cercare una password utilizzando parole prelevate da un dizionario. Un attacco che utilizza un dizionario come sorgente lavora in maniera efficiente perchè invece di provare tutte le potenziali combinazioni di caratteri, come nel caso di un attacco di forza bruta, la ricerca è limitata alle combinazioni pù probabili. Nel caso di password lunghe 8 caratteri, ad esempio, molte delle combinazioni esistenti tra "aaaaaaaa" e "zzzzzzzz" non hanno senso compiuto e sono pertanto poco probabili. Un attacco basato su un dizionario, ossia su parole comuni ed eventuali variazioni e combinazioni delle stesse con numeri e caratteri speciali, consente di scoprire una password con una frazione dei tentativi e del tempo necessari a provare tutte le stringhe teoricamente possibili.
Cracklib e la Verifica di Robustezza
Gli attacchi basati su dizionari presentano un grosso rischio per i sistemi di autenticazione adoperati su sistemi locali, remoti, apparati di rete o siti Internet. Controllare una password prima di impostarla è una buona pratica di sicurezza che non mette al riparo da possibili intrusioni, ma rappresenta uno strumento ulteriore da adoperare contro eventuali attaccanti. Un controllo contro un dizionario di password può essere eseguito velocemente sia adoperando strumenti locali che risorse disponibili in Internet e mette al riparo dall'uso di parole chiave banali.
Esistono molti strumenti per testare la robustezza di una password. Alcune di essi sono disponibili in rete mentre altri devono essere installati localmente per funzionare. Uno strumento sviluppato per verificare le password di un sistema locale Linux / UNIX e' cracklib: una piccola libreria di funzioni dotata di un proprio dizionario multilingue di parole e di un programma di controllo, che esegue velocemente verifiche di idoneità per le password e consente di scartare quelle troppo semplici e potenzialmente pericolose. Craclkib procede in 3 modi per testare una password:
- Prova a generare password contenti il nome dell'utenza ed i relativi dati anagrafici reperibili sul computer.
- Data una parola la confronta con il contenuto del dizionario.
- Data una parola prova semplici forme di sostituzione e trasformazione.
Al termine dell'analisi fornisce un responso positivo oppure una giustificazione per cui la password dovrebbe essere scartata.
Installazione di cracklib
Non esiste un pacchetto ufficiale di cracklib per Slackware Linux perciò la libreria deve essere compilata ed installata a partire dal codice sorgente. Il progetto SlackBuilds.org mette a disposizione gli script di compilazione, che sono reperibili al seguente URL. Segue l'elenco dei passi da seguire per installare cracklib a partire dal codice sorgente:
- Selezionare una versione della libreria compatibile con quella di Slackware Linux. Nella maggioranza dei casi si tratterà della versione più recente.
- Scaricare l'archivio cracklib.tar.gz in una directory locale come /tmp oppure /usr/src/cracklib.
- Decomprimere l'archivio mediante il comando tar e spostarsi nella directory creata:
user@system:/tmp# tar -zxf cracklib.tar.gz user@system:/tmp# cd cracklib user@system:/tmp/cracklib# ls -la total 24 drwxr-xr-x 2 1016 users 4096 Jan 9 2017 . drwxr-xr-x 3 root root 4096 Aug 1 15:00 .. -rw-r--r-- 1 1016 users 520 Nov 26 2013 README -rwxr-xr-x 1 1016 users 3576 Jan 9 2017 cracklib.SlackBuild -rw-r--r-- 1 1016 users 485 Jul 2 2016 cracklib.info -rw-r--r-- 1 1016 users 928 Nov 26 2013 slack-desc
- Scaricare l'archivio contenete il codice sorgente ed il secondo archivio contente il database delle password nella directory ove risiede il file cracklib.SlackBuild. Gli URL da cui scaricare gli archivi compressi sono reperibili nella pagina del sito www.slackbuilds.org dedicata a cracklib. Per Slackware 14.2 i comandi relativi sono:
user@system:/tmp/cracklib# wget https://github.com/cracklib/cracklib/releases/download/cracklib-2.9.6/cracklib-2.9.6.tar.gz --2018-08-01 15:04:37-- https://github.com/cracklib/cracklib/releases/download/cracklib-2.9.6/cracklib-2.9.6.tar.gz Resolving github.com... 192.30.253.112, 192.30.253.113 Connecting to github.com|192.30.253.112|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/40944821/f44b9bfc-45af- ... -stream [following] --2018-08-01 15:04:38-- https://github-production-release-asset-2e65be.s3.amazonaws.com/40944821/f44b9bfc-45af- ... octet-stream Resolving github-production-release-asset-2e65be.s3.amazonaws.com... 52.216.226.168 Connecting to github-production-release-asset-2e65be.s3.amazonaws.com|52.216.226.168|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 642402 (627K) [application/octet-stream] Saving to: 'cracklib-2.9.6.tar.gz' cracklib-2.9.6.tar.gz 100%[=======================================================>] 627.35K 550KB/s in 1.1s 2018-08-01 15:04:39 (550 KB/s) - 'cracklib-2.9.6.tar.gz' saved [642402/642402] user@system:/tmp/cracklib# wget https://github.com/cracklib/cracklib/releases/download/cracklib-2.9.6/cracklib-words-2.9.6.gz --2018-08-01 15:05:06-- https://github.com/cracklib/cracklib/releases/download/cracklib-2.9.6/cracklib-words-2.9.6.gz Resolving github.com... 192.30.253.113, 192.30.253.112 Connecting to github.com|192.30.253.113|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/40944821/281a79b8-45af- ... -stream [following] --2018-08-01 15:05:06-- https://github-production-release-asset-2e65be.s3.amazonaws.com/40944821/281a79b8-45af- ... octet-stream Resolving github-production-release-asset-2e65be.s3.amazonaws.com... 54.231.82.18 Connecting to github-production-release-asset-2e65be.s3.amazonaws.com|54.231.82.18|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 5536645 (5.3M) [application/octet-stream] Saving to: 'cracklib-words-2.9.6.gz' cracklib-words-2.9.6.gz 100%[=======================================================>] 5.28M 824KB/s in 6.9s 2018-08-01 15:05:14 (785 KB/s) - 'cracklib-words-2.9.6.gz' saved [5536645/5536645]
I numeri di versione degli archivi potrebbero cambiare per versioni diverse di Slackware Linux.
- Assumere l'identità di root mediante il comando su - e fornendo le credenziali di autenticazione.
- Lanciare lo script di compilazione:
root@system:~# cd /tmp/cracklib root@system:/tmp/cracklib# sh ./cracklib.SlackBuild ... Slackware package /tmp/cracklib-2.9.6-x86_64-2_SBo.tgz created.
- Terminata la compilazione del pacchetto procedere all'installazione mediante il comando installpkg. I pacchetti compilati vengono abitualmente salvati nella directory /tmp:
root@system:/tmp/cracklib# installpkg /tmp/cracklib-2.9.6-x86_64-2_SBo.tgz Verifying package cracklib-2.9.6-x86_64-2_SBo.tgz. Installing package cracklib-2.9.6-x86_64-2_SBo.tgz: PACKAGE DESCRIPTION: # cracklib (password crack library) # # CrackLib is a library containing a C function (well, lots of functions # really, but you only need to use one of them) which may be used in a # "passwd"-like program. # # The idea is simple: try to prevent users from choosing passwords that # could be guessed by "Crack" by filtering them out, at source. # Executing install script for cracklib-2.9.6-x86_64-2_SBo.tgz. Package cracklib-2.9.6-x86_64-2_SBo.tgz installed.
Il pacchetto è installato e sarà possibile verificare da subito la robustezza di qualsiasi password mediante il comando cracklib-check che, se lanciato senza opzioni, funziona in maniera interattiva:
root@system:/tmp/cracklib# cracklib-check ddd ddd: it is WAY too short devil devil: it is too short devil123 devil123: it is based on a dictionary word
Premere la combinazione di tasti CTRL + C per terminare la sessione.
Cracklib - Esempi d'Uso
Cracklib puo' funzionare sia in maniera interattiva, come nell'esempio del paragrafo precedente, che in maniera autonoma se combinato con altri comandi Linux / UNIX. In maniera non interattiva cracklib può eseguire controlli su molte password automaticamente. Segue un esempio di uso combinato con il comando echo:
user@system:~# echo 'password' | /usr/sbin/cracklib-check password: it is based on a dictionary word user@system:~# echo 'password1' | /usr/sbin/cracklib-check password1: it is based on a dictionary word user@system:~# echo 'pass' | /usr/sbin/cracklib-check pass: it is too short user@system:~# echo 'password1!' | /usr/sbin/cracklib-check password1!: it is based on a dictionary word
Le utenze standard devono usare il percorso completo del comando che risiede nella directory /usr/sbin essendo uno strumento di amministrazione pensato per l'utenza root.
Analogamente è possibile fornire al programma di controllo il contenuto di un file ed esso provvederà a verificare la robustezza di ogni password:
root@system:~# cat pwd.txt | cracklib-check asdrty: OK avoneg: it is based on a dictionary word drowssap1: it is based on a (reversed) dictionary word drowssap1!: it is based on a (reversed) dictionary word drowssap12?: it is based on a (reversed) dictionary word genova: it is based on a dictionary word italia: it does not contain enough DIFFERENT characters italia123: OK marco: it is too short password: it is based on a dictionary word password2?: it is based on a dictionary word pwd12345: it is too simplistic/systematic qazwsxedc: it is based on a dictionary word qweasd: it is based on a dictionary word qweasdzxc: it is based on a dictionary word qwerty: it is based on a dictionary word qwerty1: it is based on a dictionary word qwerty123: it is based on a dictionary word qwerty123!: it is based on a dictionary word root: it is too short simone: it is based on a dictionary word
Nell'esempio si è usato il file pwd.txt che contiene una singola password per ogni riga. Il file è stato letto con il comando cat ed il contenuto passato a cracklib-check mediante "|" (Pipe). Ogni password è stata controllata ed il relativo responso è stato stampato a video dopo la stessa.
Limiti della Libreria cracklib
L'ultimo esempio del paragrafo precedente consente di formulare alcune conclusioni circa l'operato di cracklib e del dizionario standard distribuito assieme alla libreria. Le password più corte di 8 caratteri, quelle presenti nel dizionario e semplici trasformazioni come l'inversione delle lettere e l'accodamento di numeri e caratteri speciali sono state correttamente segnalate come poco sicure. Le sequenze di tasti e loro combinazioni sono state correttamente individuate e segnalate. Le uniche righe "problematiche" sono "asdrty" e "italia123" che, nonostante siano ripsettivamente una sequenza di tasti molto corta e solo apparentemente casuale ed una parola del dizionario modificata banalmente, sono comunque giudicate "sicure" dallo strumento.
Possiamo concludere che il controllo eseguito da cracklib sia utile, ma tutt'altro che perfetto. L'efficacia dello strumento potrebbe essere migliorata configurando un dizionario diverso, ma resta il problema di dove reperirlo. In definitiva si consiglia di utilizzare lo strumento per eseguire controlli di robustezza, ma non considerarlo infallibile e di far sempre prevalere il buon senso.
Usare Dizionari Personalizzati con cracklib
L'affidabilità dei controlli eseguiti dal programma cracklib-check dipende dalla qualità del dizionario installato e dal numero di parole ivi contenute. Il dizionario standard distribuito con la libreria contiene circa 60.000 parole in lingua inglese. È un inizio, ma insufficiente per organizzazioni con una diversa lingua d'origine oppure per multinazionali. I programmatori di cracklib mettono a disposizione anche un dizionario esteso: il secondo archivio scaricato nella procedura di installazione. Il dizionario esteso contiene circa 2.000.000 di parole comuni tra cui termini presi da lingue diverse dall'inglese. È un miglioramento notevole e si consiglia di installare sempre il dizionario esteso. Un'ulteriore potenziale miglioria consiste nell'impiego di un dizionario personalizzato in cui includere termini specifici dell'ambito operativo dell'organizzazione. Nel caso di uno studio legale ad esempio ha molto senso includere parole e termini presi dalla letteratura giuridica ed assenti da un dizionario generico. Discorso analogo vale per uno spedizioniere, una fabbrica che produce apparati medicali, una finanziaria e così via. Gli utenti tenderanno ad utilizzare termini con cui abbiano familiarità per costruire le password.
Per creare dizionari personalizzati la libreria cracklib mette a disposizione il programma create-cracklib-dict. Il programma legge file contenti parole e produce un dizionario nel formato riconosciuto dalla libreria. Il nuovo dizionario viene salvato nella directory predefinita per i dizionari: /usr/share/cracklib/. I file letti da create-cracklib-dict devono contenere una singola parola per ogni riga. Per creare i file di parole è possibile copiare i dizionari esistenti integrandoli con i termini personalizzati. Altri elenchi di parole possono essere reperiti in Internet con una semplice ricerca che renderà pagine quali: https://en.oxforddictionaries.com/explore/word-lists. Una volta preparati i file contenti le parole conviene spostarli tutti nella medesima directory, abitualmente /usr/share/dict e lanciare il comando:
root@system # create-cracklib-dict /usr/share/dict/*
Sono necessari permessi di amministratore per eseguire il comando e scrivere nella directory di sistema. Il risultato saranno i file:
/usr/share/cracklib/pw_dict.hwm /usr/share/cracklib/pw_dict.pwd /usr/share/cracklib/pw_dict.pwi
Salvare i file in una directory diversa da quella predefinita richiederebbe l'uso esplicito dei comandi cracklib-format e cracklib-packer richiamati da create-cracklib-dict durante la sua esecuzione.
Per approfondire cracklib ed il suo utilizzo si rimanda alla documentazione della libreria e delle distribuzioni installate, che spesso forniscono strumenti di configurazione e script specifici.
Alternative a Cracklib Reperibili in Internet
Cracklib consente di eseguire verifiche di robustezza su di una macchina locale. Esistono siti in Internet le cui pagine contengono strumenti con analoghe finalità. Alcuni di tali siti sono:
Molti altri possono essere trovati attraverso un motore di ricerca. Tutte le pagine hanno una struttura comune: una casella di testo ove digitare la password, un'opzione per visualizzare o nascondere la password digitata, un metro che riporta il giudizio sulla stringa di caratteri inserita nella casella di testo ed un elenco di suggerimenti per aumentare la robustezza della password.
Come cracklib anche i siti elencati in precedenza hanno pregi e difetti e le loro valutazioni dipendono dai dizionari che usano. Alcuni rispondono bene all'uso di password presenti in un dizionario, altri premiano la lunghezza del testo inserito ed altri ancora la varianza di lettere maiuscole, minuscole simboli e numeri. Nessuno strumento fornirà mai la soluzione definitiva al problema delle password deboli, ma di sicuro il loro utilizzo, magari combinato, contribuisce a far scartare le password veramente banali e potenzialmente pericolose.
Conclusioni
È stata presentata la libreria cracklib utile per verificare la robustezza di una password e consentire di scartare password troppo deboli che potrebbero mettere in pericolo la sicurezza di un'utenza, un servizio o di un intero sistema. Nei paragrafi dell'articolo è stato illlustrato come installare la libreria e sono stati forniti alcuni esempi d'uso del programma cracklib-check per verificare le password. Per ultimo sono stati forniti i collegamenti a diversi siti che propongono funzionalità simili a quelle offerte da cracklib attraverso Internet invece che su di un sistema locale. Concludendo si raccomanda di installare ed usare abitualmente cracklib al fine di migliorare la sicurezza dei sistemi amministrati siano essi casalinghi o aziendali.
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
- Slackware home page
- Slackware Documentation Project (In inglese)
- Slackware mailing list inerente la sicurezza (In inglese)
Lingue: English - Italiano