Changes

21,157 bytes added ,  11:53, 20 December 2018
Aggiunto articolo relativo a Cracklib
{{header_it|title=Usare Cracklib per Incrementare la Robustezza delle Password| keyword={{Template:keyword_it_linux}}| description=Una breve guida che introduce l'uso di cracklib uno strumento per incrementare la sicurezza di Slaclware Linux | link_page=using_cracklib}}

== 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 [http://www.slackbuilds.org/ SlackBuilds.org] mette a disposizione gli script di compilazione, che sono reperibili al seguente [http://slackbuilds.org/result/?search=cracklib&sv= 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: <font color="red">it is WAY too short</font>
devil
devil: <font color="red">it is too short</font>
devil123
devil123: <font color="red">it is based on a dictionary word</font>

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&ograve; 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: <font color="red">it is based on a dictionary word</font>
user@system:~# '''echo''' 'password1' | '''/usr/sbin/cracklib-check'''
password1: <font color="red">it is based on a dictionary word</font>
user@system:~# '''echo''' 'pass' | '''/usr/sbin/cracklib-check'''
pass: <font color="red">it is too short</font>
user@system:~# '''echo''' 'password1!' | '''/usr/sbin/cracklib-check'''
password1!: <font color="red">it is based on a dictionary word</font>

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 &egrave; possibile fornire al programma di controllo il contenuto di un file ed esso provveder&agrave; a verificare la robustezza di ogni password:
root@system:~# '''cat''' pwd.txt | '''cracklib-check'''
asdrty: OK
avoneg: <font color="red">it is based on a dictionary word</font>
drowssap1: <font color="red">it is based on a (reversed) dictionary word</font>
drowssap1!: <font color="red">it is based on a (reversed) dictionary word</font>
drowssap12?: <font color="red">it is based on a (reversed) dictionary word</font>
genova: <font color="red">it is based on a dictionary word</font>
italia: <font color="red">it does not contain enough DIFFERENT characters</font>
italia123: OK
marco: <font color="red">it is too short</font>
password: <font color="red">it is based on a dictionary word</font>
password2?: <font color="red">it is based on a dictionary word</font>
pwd12345: <font color="red">it is too simplistic/systematic</font>
qazwsxedc: <font color="red">it is based on a dictionary word</font>
qweasd: <font color="red">it is based on a dictionary word</font>
qweasdzxc: <font color="red">it is based on a dictionary word</font>
qwerty: <font color="red">it is based on a dictionary word</font>
qwerty1: <font color="red">it is based on a dictionary word</font>
qwerty123: <font color="red">it is based on a dictionary word</font>
qwerty123!: <font color="red">it is based on a dictionary word</font>
root: <font color="red">it is too short</font>
simone: <font color="red">it is based on a dictionary word</font>

Nell'esempio si &egrave; usato il file '''pwd.txt''' che contiene una singola password per ogni riga. Il file &egrave; stato letto con il comando '''cat''' ed il contenuto passato a '''cracklib-check''' mediante "|" (Pipe). Ogni password &egrave; stata controllata ed il relativo responso &egrave; 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&ugrave; 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&agrave; dei controlli eseguiti dal programma '''cracklib-check''' dipende dalla qualit&agrave; 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. &Egrave; 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. &Egrave; 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&igrave; via. Gli utenti tenderanno ad utilizzare termini con cui abbiano familiarit&agrave; 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 &egrave; 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&agrave; pagine quali: http://www.cotse.com/tools/wordlists.htm. 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&agrave;. Alcuni di tali siti sono:
* [https://howsecureismypassword.net/ How Secure Is My Password].
* [https://www.avxperten.dk/password-checker/ Password Checker].
* [http://www.passwordmeter.com/ Password Meter].
* [https://password.kaspersky.com/it/ Kaspersky Secure Password check].
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&agrave; 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 ==

&Egrave; 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 &egrave; 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&agrave; 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

----

* [https://github.com/cracklib/cracklib Home page di Cracklib in GitHub (In inglese)]
* [http://slackbuilds.org/result/?search=cracklib&sv= Pagina di SlackBuilds.org dedicata a Cracklib]
* [http://www.slackware.com Slackware home page]
* [http://docs.slackware.com/slackware:beginners_guide Slackware Documentation Project (In inglese)]
* [http://www.slackware.com/security/ Slackware mailing list inerente la sicurezza (In inglese)]

----

{{footer_it | link_page=using_cracklib}}