Avanti Indietro Indice

2. Perché "oscurare" il vostro file passwd?

Come impostazione predefinita, la maggior parte delle attuali distribuzioni Linux non contengono la Shadow Suite installata. Questo riguarda la Slackware 2.3, Slackware 3.0 ed altre famose distribuzioni. Una delle ragioni di questo è che le informazioni sul copyright nella Shadow Suite originale non spiegavano chiaramente se si dovesse versare una somma per la ridistribuzione. Linux usa un Copyright GNU (a cui talvolta si fa riferimento come Copyleft) che permette alle persone di impacchettarlo in un supporto conveniente (come una distribuzione su CD-ROM) e di venderlo.

L'attuale manutentore della Shadow Suite, Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> ha ricevuto il codice sorgente dall'autore originale con un copyright tipo BSD che permette la ridistribuzione. Ora che i problemi di copyright sono risolti, ci si aspetta che le future distribuzioni conterranno le shadow password come opzione predefinita. Fino ad allora, dovrete installarvele voi.

Se avete installato la vostra distribuzione da un CD-ROM, potrebbe succedere che, anche se la distribuzione non aveva la Shadow Suite installata, alcuni dei file che vi occorrono per installare la Shadow Suite siano sul CD-ROM.

Comunque, le versioni 3.3.1, 3.3.1-2 della Shadow Suite e la shadow-mk potrebbero avere problemi di sicurezza con il loro programma di login e molti altri programmi SUID root che si trovano insieme ad esse, e non dovrebbero essere più usate.

Tutti i file necessari si possono ottenere via FTP anonimo o tramite il World Wide Web.

Su un sistema Linux senza la Shadow Suite installata, le informazioni sugli utenti, comprese la password, sono contenute nel file /etc/passwd. La password viene conservata in un formato criptato. Se chiedete ad un esperto crittografo, comunque, lui o lei vi diranno che la password è in realtà in un formato codificato piuttosto che criptato, perché quando viene usato crypt(3), viene preso un testo vuoto e la password è usata come chiave. Perciò, da qui in poi, in questo documento, userò il termine codificato.

Tecnicamente ci si riferisce all'algoritmo usato per codificare il campo password come ad una funzione hash monodirezionale. Questa è un algoritmo che è facile eseguire in una direzione, ma molto difficile eseguire nella direzione opposta. Altre informazioni sull'algoritmo usato si possono trovare nel paragrafo 2.4 o nella vostra pagina di manuale per crypt(3).

Quando un utente sceglie o gli viene assegnata una password, questa viene codificata con un valore generato casualmente detto seme ("salt"). Questo significa che una certa password può essere memorizzata in 4096 modi diversi. Il valore del seme viene memorizzato insieme alla password codificata.

Quando un utente si collega e fornisce una password, prima viene prelevato il seme dalla password codificata in memoria. Poi la password digitata viene codificata con tale valore del seme e quindi confrontata con la password codificata. Se c'è corrispondenza l'utente viene autenticato.

È computazionalmente difficile (ma non impossibile), ricostruire la password originale dalla password codificata casualmente. Comunque, su ogni sistema con più di qualche utente, almeno alcune delle password saranno parole comuni (o semplici variazioni di parole comuni).

Gli "scassinatori" di sistemi informatici sono a conoscenza di questo, e semplicemente critteranno un vocabolario di parole e password comuni usando tutti i 4096 possibili valori di seme. Quindi confronteranno le password codificate nel vostro file /etc/passwd con il loro database. Una volta trovata una corrispondenza, avranno la password per un altro account. Questo viene chiamato attacco a vocabolario ed è uno dei metodi più comuni per ottenere o diffondere accessi non autorizzati ad un sistema.

Se ci pensate, una password di 8 caratteri codifica fino a 4096*13 stringhe di caratteri. Perciò un vocabolario di, diciamo, 400.000 parole comuni, nomi, password e semplici variazioni starà facilmente su un disco fisso da 4GB. Lo scassinatore dovrà solo ordinarle e cercare le corrispondenze. Poiché un disco fisso da 4GB si può avere a meno di $1000.00, è ampiamente nelle possibilità di molti scassinatori di sistemi informatici.

Inoltre, se uno scassinatore ottiene prima il file /etc/passwd, avrà bisogno solo di codificare il vocabolario con i valori del seme effettivamente contenuti nel vostro file /etc/passwd. Questo metodo può essere usato dall'adolescente medio con un paio di Megabyte liberi e un computer 486.

Anche senza molto spazio su disco, utility come crack(1) possono di solito corrompere almeno un paio di password su un sistema con un discreto numero di utenti (assumendo che gli utenti del sistema possano scegliersi le loro password).

Il file /etc/passwd contiene anche informazioni tipo gli user ID e i group ID che sono usati da molti programmi di sistema. Perciò il file /etc/passwd deve rimanere accessibile a tutti. Se voi cambiaste il file /etc/passwd in modo che nessuno possa leggerlo, la prima cosa che notereste sarebbe che il comando ls -s ora mostrerebbe gli user ID invece dei nomi!

La Shadow Suite risolve il problema spostando le password in un altro file (di solito /etc/shadow). Il file /etc/shadow viene impostato in modo che quasi nessuno possa leggerlo. Solo root potrà leggere e scrivere il file /etc/shadow. Alcuni programmi (come xlock) non devono poter cambiare le password, occorre solo che le possano verificare. Questi programmi possono essere eseguiti SUID root oppure si può creare un gruppo shadow a cui è permesso l'accesso solo in lettura al file /etc/shadow. Quindi i programmi possono essere eseguiti SGID shadow.

Spostando le password nel file /etc/shadow, stiamo effettivamente impedendo allo scassinatore di avere accesso alle password codificate con cui eseguire l'attacco a vocabolario.

Inoltre, la Shadow Suite aggiunge molte altre caratteristiche interessanti:

Installare la Shadow Suite contribuisce alla sicurezza del sistema ma ci sono anche molte altre cose che si possono fare per migliorare la sicurezza di un sistema Linux, e ci saranno alcuni Linux Security HOWTO che discutono altre misure di sicurezza ed aspetti correlati.

Per informazioni aggiornate su altri aspetti della sicurezza in Linux, tra cui avvertimenti sulle debolezze note guardate la Linux Security home page.

2.1 Perchè potreste NON voler "oscurare" il vostro file passwd

Ci sono alcune circostanze e configurazioni in cui installare la Shadow Suite NON sarebbe una buona idea:

2.2 Formato del file /etc/passwd

Un file /etc/passwd non "oscurato" ha il seguente formato:

nomeutente:passwd:UID:GID:nome_completo:directory:shell
Dove:
nomeutente

Il nome (di login) dell'utente

passwd

La password codificata

UID

Identificativo numerico dell'utente

GID

Identificativo numerico predefinito del gruppo

nome_completo

Il nome completo dell'utente - in realtà questo campo viene chiamato campo GECOS (General Electric Comprehensive Operating System) e può contenere altre informazioni invece del solo nome completo. I comandi Shadow e le pagine di manuale si riferiscono a questo campo come al campo commento.

directory

Home directory dell'utente (percorso completo)

shell

Shell di login dell'utente (percorso completo)

Ad esempio:
nomeutente:Npge08pfz4wuk:503:100:Nome Completo:/home/nomeutente:/bin/sh
Dove Np è il seme e ge08pfz4wuk è la password codificata. La coppia seme/password codificata avrebbe anche potuto essere kbeMVnZM0oL7I e queste due sono esattamente la stessa password. Ci sono 4096 possibili codifiche per la stessa password (la password usata in questo esempio è 'password', una pessima password).

Una volta che la Shadow Suite è installata, il file /etc/passwd invece conterrà:

nomeutente:x:503:100:Nome Completo:/home/nomeutente:/bin/sh
La x nel secondo campo in questo caso è ora soltanto un segnaposto. Il formato del file /etc/passwd non è di fatto cambiato, solo che non contiene più le password codificate. Questo significa che qualunque programma che legge il file /etc/passwd, ma in realtà non ha bisogno di verificare le password, funzionerà ancora correttamente.

Le password sono ora situate nel file shadow (di solito il file /etc/shadow).

2.3 Formato del file shadow

Il file /etc/shadow contiene le seguenti informazioni:

nomeutente:passwd:ult:può:deve:avv:scad:disab:riservato
Dove:
nomeutente

Il nome dell'utente

passwd

La password codificata

ult

Giorni dal 1 Gennaio 1970 fino all'ultima modifica della password

può

Giorni prima che la password possa essere cambiata

deve

Giorni dopo i quali la password deve essere cambiata

avv

Giorni prima della scadenza della password in cui l'utente viene avvisato

scad

Giorni dopo la scadenza della password in cui l'account viene disabilitato

disab

Giorni a partire dal 1 Gennaio 1970 dopo cui l'account verrà disabilitato

riservato

Campo riservato

Il precedente esempio potrebbe allora essere:
nomeutente:Npge08pfz4wuk:9479:0:10000::::

2.4 Uno sguardo a crypt(3)

Dalla pagina di manuale di crypt(3):

"crypt è la funzione di crittaggio delle password. Si basa sull'algoritmo Data Encryption Standard con variazioni aventi lo scopo (tra le altre cose) di scoraggiare l'uso di implementazioni hardware per la ricerca della chiave.

[La] chiave è la password digitata dall'utente. [La stringa codificata è tutta vuota.]

[Il] seme è una stringa di due caratteri scelta nell'insieme [a-z A-Z 0-9./]. Questa stringa viene usata per perturbare l'algoritmo in uno tra 4096 modi diversi.

Prendendo i 7 bit meno significativi di ogni carattere della chiave, si ottiene una chiave di 56 bit. Questa chiave di 56 bit viene usata per crittare ripetutamente una stringa costante (di solito una stringa costituita di zeri). Il valore restituito punta alla password crittata, un insieme di 13 caratteri ASCII stampabili (i primi due caratteri sono il seme stesso). Il valore di ritorno punta a dati statici il cui contenuto viene sovrascritto da ogni chiamata.

Attenzione: lo spazio chiave consiste di 2**56 cioè 7.2e16 possibili valori. È possibile effettuare ricerche esaustive di questo spazio chiave usando computer massivamente paralleli. È disponibile del software, come crack(1), che cercherà la porzione di questo spazio chiave che viene generalmente usata dagli umani per le password. Perciò la scelta delle password dovrebbe, come minimo, evitare parole e nomi comuni. Si raccomanda l'uso di un programma passwd(1) che, durante il processo di selezione, controlla se le password sono vulnerabili a manomissioni.

Lo stesso algoritmo DES ha alcune arguzie che rendono l'uso dell'interfaccia crypt(3) una scelta inefficace per qualunque altra cosa che non sia l'autenticazione di password. Se state pensando di usare l'interfaccia crypt(3) per un progetto di crittografia non lo fate: prendete un buon libro sulla crittografia e una delle librerie DES ampiamente disponibili."

Molte Shadow Suite contengono codice per raddoppiare la lunghezza della password a 16 caratteri. Esperti in DES sconsigliano questo, dato che la codifica viene semplicemente applicata prima alla metà di sinistra e poi alla metà di destra della password allungata. A causa del modo in cui funziona crypt, la password codificata di lunghezza doppia potrebbe risultare addirittura meno sicura. Inoltre, è meno facile che un utente riesca a ricordare una password da 16 caratteri.

È in via di sviluppo un lavoro che permetterebbe all'algoritmo di autenticazione di essere sostituito con qualcosa di più sicuro, che supporti password più lunghe (in particolare l'algoritmo MD5) e mantenga compatibilità con il metodo crypt.

Se state cercando un buon libro sulla crittografia, vi consiglio:

        "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
        di Bruce Schneier <schneier@chinet.com>
        ISBN: 0-471-59756-2


Avanti Indietro Indice