6. Sicurezza delle password e crittografia

Uno dei mezzi di sicurezza più importanti usati oggi sono le password. È importante per se e per i propri utenti avere password sicure e difficili da indovinare. Molte delle recenti distribuzioni Linux includono programmi passwd che non permettono di inserire password troppo facili. Ci si assicuri che il proprio passwd sia aggiornato e abbia questa caratteristica.

Un'approfondita discussione sulla crittografia trascende gli scopi di questo documento, ma è necessaria almeno un'introduzione. La crittografia è utilissima, forse persino necessaria, in questi giorni. Ci sono metodi crittografici di ogni genere, ognuno con la propria gamma di caratteristiche.

La maggior parte degli Unix (e Linux non fa eccezione) usa un algoritmo di crittografia a senso unico, chiamato DES (Standard di Crittografia di Dati), per crittografare le password. Questa password crittografata è poi conservata in /etc/passwd o (più raramente) /etc/shadow. Quando si tenta di entrare la password che viene scritta è crittografata ancora e confrontata con quella nel file che conserva le password. Se coincidono, potete entrare. Anche se il DES è un algoritmo di compressione a due vie (si può codificare e decodificare un messaggio, con le chiavi giuste), la variante che Unix usa è a senso unico. Questo significa che non dovrebbe essere possibile invertire la crittografia per ottenere la password dal contenuto di /etc/passwd (o /etc/shadow).

Attacchi di forza bruta, come "Crack" o "John the Ripper" (si veda la Sezione 6.9) possono spesso indovinare la password se non è abbastanza casuale. I moduli PAM (vedi sotto) permettono di usare una diversa routine crittografica per le proprie password (MD5 o simili). Si potrebbe anche usare Crack a proprio vantaggio. Si esegua periodicamente Crack sul database delle password, per trovare quelle insicure. Poi si contatti l'utente in questione e gli si faccia cambiare password.

Si può visitare http://consult.cern.ch/writeup/security/security_3.html per avere informazioni su come scegliere una buona password.

6.1. PGP e crittografia a chiave pubblica

La crittografia a chiave pubblica, come quella usata per PGP, usa una chiave per crittografare e una per decrittografare. Al contrario, la crittografia tradizionale usa la stessa chiave per crittografare e decrittografare; questa chiave deve essere conosciuta da entrambe le parti, e quindi trasferita in qualche modo da una all'altra.

Per evitare la necessità di trasmettere in modo sicuro la chiave, la crittografia a chiave pubblica usa due chiavi separate: una pubblica e una privata. La chiave pubblica di ognuno è disponibile a tutti per crittografare, mentre ogni persona tiene la sua chiave privata per decrittografare i messaggi codificati con la sua chiave pubblica.

Ci sono vantaggi in entrambi i metodi di crittografia, e si possono scoprire queste differenze nelle FAQ della RSA sulla crittografia, citata alla fine di questa sezione.

PGP (Pretty Good Privacy) è ben supportata da Linux. Le versioni 2.6.2 e 5.0 funzionano bene. Per una buona introduzione a PGP e a come usarlo, si dia un'occhiata alla FAQ di PGP: http://www.pgp.com/service/export/faq/55faq.cgi

Ci si assicuri di usare la versione valida per il proprio stato. A causa dei limiti di esportazione del governo USA, è proibito portare fuori dagli USA ogni forma di crittografia elettronica.

I controlli sull'esportazione dagli USA sono ora gestiti dall'EAR (Regole di Amministrazione dell'Esportazione). Non sono più gestite dall'ITAR.

C'è anche una guida passo-passo per configurare PGP su Linux presso http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html. È scritta per la versione internazionale di PGP, ma è facilmente adattabile alla versione USA. Si potrebbe aver bisogno di una patch anche per alcune recenti versioni di Linux; la patch è disponibile presso ftp://metalab.unc.edu/pub/Linux/apps/crypto.

C'è un progetto che lavora ad una versione libera e open source di PGP. GnuPG è un sostituto completo e libero per PGP. Visto che non usa IDEA o RSA può essere usato senza restrizioni. GnuPG aderisce a OpenPGP. Si veda il sito di GNU Privacy Guard per avere più informazioni: http://www.gnupg.org/.

Ulteriori informazioni sulla crittografia si trovano nella FAQ della RSA sulla crittografia, disponibile presso http://www.rsa.com/rsalabs/newfaq/. Qui si troveranno informazioni su termini come "Diffie-Hellman", "crittografia a chiave pubblica", "certificati digitali", ecc.

6.2. SSL, S-HTTP e S/MIME

Spesso gli utenti chiedono informazioni sulle differenze fra i vari protocolli di sicurezza e crittografia, e su come usarli. Anche se questo non è un documento sulla crittografia, è una buona idea spiegare brevemente cosa sono i protocolli e dove trovare altre informazioni.

6.3. Implementazioni IPSEC per Linux

Oltre a CIPE, e altre forme di crittografia, ci sono anche molte altre implementazioni di IPSEC per Linux. IPSEC è un tentativo della IETF di creare comunicazioni crittograficamente sicure al livello della rete IP e di fornire autenticazione, integrità, controllo di accesso e privacy. Informazioni su IPSEC si trovano presso http://www.ietf.org/html.charters/ipsec-charter.html. Si troveranno anche link ad altri protocolli, una mailing list di IPSEC e degli archivi.

L'implementazione Linux di x-kernel, che viene sviluppata all'Università dell'Arizona, usa una struttura basata su oggetti per implementare protocolli di rete detti x-kernel, e si trova presso http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Più semplicente, l'x-kernel è un metodo per passare messaggi al livello del kernel, il che rende l'implementazione più facile.

Un'altra implementazione liberamente disponibile di IPSEC è FreeS/WAN. Sul loro sito si legge: "Questi servizi vi permettono di creare tunnel sicuri attraverso reti inaffidabili. Ogni cosa che passa per la rete inaffidabile è crittografata dalla macchina gateway IPSEC e decrittografata dal gateway all'altro capo. Il risultato è una Virtual Private Network (Rete Privata Virtuale) o VPN. È una rete che rimane privata nonostante includa macchine connesse attraverso l'insicura Internet."

È scaricabile presso http://www.xs4all.nl/~freeswan/, ed ha appena raggiunto la versione 1.0 al momento della scrittura.

Come per altre forme di crittografia, non è distribuita col kernel di default a causa di restrizioni di esportazione.

6.4. ssh (Shell Sicura) e stelnet

ssh e stelnet sono suite di programmi che permettono di fare login a sistemi remoti su di una connessione crittografata.

openssh è una suite di programmi usata come sostituto sicuro di rlogin, rsh e rcp. Usa una crittografia a chiave pubblica per crittografare le comunicazioni fra due host, oltre che per autenticare gli utenti. Può essere usata per fare login in sicurezza su host remoti o copiare dati fra host, evitando intercettazioni (dirottamenti della sessione) e il DNS spoofing. Può effettuare la compressione dei dati sulle connessioni, e comunicazioni X11 sicure fra host.

Ci sono diverse implementazioni ssh al momento. Quella commerciale originale di Data Fellows si trova nella homepage di ssh presso http://www.datafellows.com.

L'eccellente implementazione Openssh è basata su una delle prime versioni ssh di Data Fellows ed è stata completamente ricostruita per non includere alcuna parte proprietaria o brevettata. È libera e sotto licenza BSD. Si trova presso: http://www.openssh.com.

Esiste anche un progetto open source per reimplementare ssh da zero chiamato "psst...". Per ulteriori informazioni si veda: http://www.net.lut.ac.uk/psst/

Si può anche usare ssh dalla vostra workstation Windows verso un server ssh Linux. Ci sono diversi client liberi per Windows, incluso quello presso http://guardian.htu.tuwien.ac.at/therapy/ssh/ oltre ad una versione commerciale di DataFellows, presso http://www.datafellows.com.

SSLeay è una versione libera del protocollo di Netscape Secure Sockets Layer, sviluppato da Eric Young. Include diverse applicazioni, come Secure telnet, un modulo per Apache, diversi database, oltre a molti algoritmi inclusi DES, IDEA e Blowfish.

Usando questa libreria è stato creato un sostituto sicuro per telnet che usa la crittografia per la connessione. A differenza di SSH, stelnet usa SSL, il protocollo di Netscape. Si può trovare Secure telnet e Secure FTP iniziando con la FAQ di SSLeay, disponibile presso http://www.psy.uq.oz.au/~ftp/Crypto/.

SRP è un'altra implementazione sicura di telnet/ftp. Dalla loro pagina web:

"Il progetto SRP sta sviluppando software sicuro per Internet per l'uso libero in tutto il mondo. Iniziando con una distribuzione del tutto sicura di telnet e FTP, speriamo di soppiantare i deboli sistemi di autenticazione con forti sostituti che non sacrifichino la facilità d'uso per la sicurezza. La sicurezza dovrebbe essere lo standard, non un'opzione!"

Per ulteriori informazioni si visiti http://www-cs-students.stanford.edu/~tjw/srp/

6.5. PAM - Pluggable Authentication Modules (moduli aggiuntivi di autenticazione)

Le ultime versioni delle distribuzioni Red Hat Linux e Debian Linux sono distribuite con uno schema di autenticazione unificato detto "PAM". PAM permette di cambiare i vostri metodi e requisiti di autenticazione al volo, e di aggiornare di conseguenza tutti i metodi di autenticazione senza ricompilare alcun binario. La configurazione di PAM trascende gli scopi di questo documento, ma ci si assicuri di dare un'occhiata al sito web di PAM per altre informazioni. http://www.kernel.org/pub/linux/libs/pam/index.html.

Solo alcune delle cose che si possono fare con PAM:

Nel giro di poche ore dall'installazione e configurazione del vostro sistema, si possono prevenire molti attacchi. Per esempio, si può usare PAM per impedire l'uso nel sistema di file .rhosts nella home directory degli utenti aggiungendo queste linee a /etc/pam.d/rlogin:

		#
		# disabilita rsh/rlogin/rexec per gli utenti
		#
		login auth required pam_rhosts_auth.so no_rhosts

6.6. Incapsulamento crittografico IP (CIPE)

Lo scopo primario di questo software è di fornire un mezzo per avere interconnessione sicura (contro l'eavesdropping, inclusi l'analisi del traffico e l'inserimento di falsi messaggi) fra le sottoreti attraverso una rete a pacchetti inaffidabile come Internet.

CIPE critta i dati al livello di rete. I pacchetti che viaggiano fra gli host di rete sono crittografati. Il motore crittografico è affiancato al driver che manda e riceve pacchetti.

Il comportamento è diverso in SSH, il quale esegue la crittografia dei dati per connessione, a livello socket. Viene crittografata una connessione logica tra programmi che girano su host diversi.

CIPE può essere usato per il tunnelling, al fine di creare una Virtual Private Network. La crittografia a basso livello ha il vantaggio di poter essere usata in maniera trasparente fra le due reti connesse con la VPN, senza modifiche al software applicativo.

Riassumendo la documentazione CIPE:

"Gli standard IPSEC definiscono un set di protocolli che possono essere usati (tra le altre cose) per costruire VPN crittografate. Comunque, IPSEC è un protocollo piuttosto pesante e complicato da impostare con molte opzioni, le implementazioni del protocollo completo sono tuttora usate raramente e alcune caratteristiche (come la gestione delle chiavi) non sono ancora del tutto risolte. CIPE ha un approccio più semplice in cui molte cose che possono essere parametrizzate (come la scelta del algoritmo crittografico effettivamente usato) sono una scelta da fare all'installazione. Questo limita la flessibilità, ma permette una implementazione più semplice e quindi efficiente e semplice in quanto a debug."

Ulteriori informazioni possono essere trovate presso http://www.inka.de/~bigred/devel/cipe.html

Come per altre forme di crittografia, non è distribuita di default con il kernel a causa di restrizioni di esportazione.

6.7. Kerberos

Kerberos è un sistema di autenticazione sviluppato dal progetto Athena al MIT. Quando un utente fa un login, Kerberos lo autentica (usando una password), e dà all'utente un modo per provare la sua identità ad altri server ed host sparsi per la rete.

Questa autenticazione è poi usata da programmi come rlogin per lasciar entrare l'utente in altri host senza una password (al posto del file .rhosts). Questo metodo di autenticazione può anche essere usato dal sistema di posta per garantire che la posta sia consegnata alla persona giusta, oltre che per garantire che il mittente sia chi dice di essere.

Kerberos e i programmi con esso distribuiti evitano che gli utenti possano ingannare il sistema facendogli credere di essere qualcun altro. Purtroppo installare Kerberos è molto intrusivo, visto che richiede la modifica o la sostituzione di molti programmi standard.

Si possono trovare ulteriori informazioni su Kerberos leggendo le FAQ di Kerberos, inoltre si può reperire il codice presso http://nii.isi.edu/info/kerberos/.

[Da: Stein, Jennifer G., Clifford Neuman, e Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]

Kerberos non dovrebbe essere il primo passo nel miglioramento della sicurezza del proprio host. Porta a molte conseguenze e non è usato quanto, per esempio, SSH.

6.8. Shadow Password.

Le shadow password sono un mezzo per tenere segrete agli utenti normali le password crittografate. Le ultime versioni di RedHat e Debian Linux usano di default le shadow password, ma in altri sistemi le password crittografate sono tenute in /etc/passwd dove tutti possono leggerle. Quindi chiunque potrebbe eseguire su di loro programmi che tentino di indovinare quali sono. Al contrario, le shadow password sono salvate in /etc/shadow, che solo gli utenti privilegiati possono leggere. Per usare le shadow password ci si deve assicurare che tutte le applicazioni che devono leggere le password siano ricompilate per supportarle. PAM (vedi sopra) invece permette di installare semplicemente un modulo shadow; non richiede la ricompilazione degli eseguibili. Si può fare riferimento allo Shadow-Password HOWTO per ulteriori informazioni se necessario. È disponibile presso http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html È abbastanza datato al momento, e non è necessario per le distribuzioni che supportano PAM.

6.9. "Crack" e "John the Ripper"

Se per qualche ragione il vostro programma passwd non forza l'uso di password difficili da indovinare potreste volere eseguire un programma per crackare le password per essere sicuri che le password dei vostri utenti siano sicure.

I programmi per crackare le password funzionano su un semplice principio: provano ogni parola nel dizionario, e quindi variazioni di quelle parole, crittografandole tutte e comparandole con le password crittografate. Se trovano una corrispondenza sanno di aver trovato quella giusta.

Esistono moltissimi programmi di questo tipo... i due più degni di nota sono "Crack" e "John the Ripper" (http://www.openwall.com/john/). Usano moltissimo la cpu, ma, eseguendoli, si può capire se possono trovare le password e si potranno quindi avvertire gli utenti con password deboli. Si noti che un intruso dovrebbe prima riuscire a trovare qualche altro buco per leggere il vostro /etc/passwd ma questi buchi sono più comuni di quanto pensiate.

Poichè la sicurezza è forte soltanto quanto il più insicuro degli host, è bene ricordare che se si hanno macchine Windows sulla rete dovreste controllare L0phtCrack, una versione Windows di Crack. È disponibile presso http://www.l0pht.com

6.10. CFS - File System Crittografico e TCFS - File System Crittografico Trasparente

CFS è un modo per crittografare interi alberi di directory e dare modo agli utenti di salvare al loro interno file crittografati. Usa un server NFS eseguito sulla macchina locale. Gli RPM sono disponibili presso http://www.zedz.net/redhat/, e troverete altre informazioni su come funziona presso ftp://ftp.research.att.com/dist/mab/.

TCFS migliora CFS aggiungendo più integrazione con il file system. Ulteriori informazioni sono presso: http://www.tcfs.it/.

Inoltre non serve che sia usato su interi file system. Funziona anche su alberi di directory.

6.11. X11, SVGA e sicurezza della GUI

6.11.1. X11

È importante rendere sicura l'interfaccia grafica per evitare che un intruso ottenga la password mentre la si scrive, legga i documenti o le informazioni che si hanno sullo schermo o persino che usi un buco per avere l'accesso di root. Anche eseguire applicazioni X remote su una rete deve essere considerato come un pericolo, perché permette a chi intercetta i pacchetti di vedere tutte le interazioni fra se e il sistema remoto.

X ha una serie di meccanismi di controllo degli accessi. Il più semplice di questi è basato sugli host: usate xhost per specificare gli host a cui è permesso l'accesso al vostro display. Questo metodo non è affatto sicuro, perché se qualcuno ha accesso alla macchina, può aggiungere la sua macchina all'xhost ed ottenere facile accesso. Inoltre, se si deve dare l'accesso ad una macchina inaffidabile, chiunque sia lì può compromettere la GUI.

Quando si usa xdm per entrare, si ha un metodo di accesso molto migliore: MIT-MAGIC-COOKIE-1. Un "cookie" a 128 bit viene creato nel file .Xauthority. Se si deve permettere che una macchina remota acceda al display, si può usare il comando xauth e le informazioni nel file .Xauthority per dare accesso solo a quella connessione. Si legga il Remote-X-Apps mini-howto, disponibile presso http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.

Si può anche usare ssh (si veda la Sezione 6.4, sopra) per permettere connessioni a X sicure. Ciò ha il vantaggio anche di essere trasparente per l'utente finale, e comporta che nessun dato non crittografato passi per la rete.

Si possono anche impedire connessioni remote al server X usando l'opzione '-nolisten tcp' del server X. Questo previene connessioni di rete al server tramite socket tcp.

Si dia uno sguardo alla pagina man di Xsecurity per avere più informazioni sulla sicurezza di X. La via sicura è usare xdm per entrare nella console e quindi usare ssh per eseguire programmi X su macchine remote.