Avanti Indietro Indice

6. Sicurezza delle Password e Crittografia

Uno dei mezzi di sicurezza più importanti usati oggi sono le password. È importante per voi e i vostri utenti avere password sicure e difficili da indovinare. Molte delle recenti distribuzioni Linux includono programmi passwd che non permettono di inserire password troppo facili. Assicuratevi che il vostro 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 crittata è poi conservata in /etc/passwd o (più raramente) /etc/shadow. Quando tentate di entrare la password che scrivete è crittata 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 (potete codificare e decodificare, un messaggio, con le giuste chiavi), 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" (vedi la Sezione crack ) possono spesso indovinare la password se la vostra non è abbastanza casuale. I moduli PAM (vedi sotto) vi permettono di usare una diversa routine crittografica per le vostre password (MD5 o simili). Potreste anche usare Crack a vostro vantaggio. Eseguite periodicamente Crack contro il vostro database di password, per trovare quelle insicure. Poi contattate l'utente in questione e fategli cambiare password.

Potete 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 crittare e una per decrittare. Al contrario, la crittografia tradizionale usa la stessa chiave per crittare e decrittare; 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 crittare, mentre ogni persona tiene la sua chiave privata per decrittare i messaggi crittati con la sua chiave pubblica.

Ci sono vantaggi per entrambi i metodi di crittografia, e potete leggere di queste differenze nella 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, date un'occhiata alla FAQ di PGP: http://www.pgp.com/service/export/faq/55faq.cgi

Siate sicuri di usare la versione per il vostro 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. Potreste 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. Visitate 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 troverete informazioni su termini come "Diffie-Hellman", "crittografia a chiave pubblica", "certificati digitali", ecc.

6.2 SSL, S-HTTP, HTTPS 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. Troverete 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 i rete detti x-kernel, e si trova presso http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Semplificando, l'x-kernel è un metodo di passare messaggi al livello del kernel, che rende più facile un'implementazione.

Un'altra implementazione libera di IPSEC è la 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 è crittata dalla macchina gateway IPSEC e decrittata 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 vi permettono di fare login a sistemi remoti su una connessione crittata.

openssh è una suite di programmi usata come sostituto sicuro di rlogin, rsh e rcp. Usa una crittografia a chiave pubblica per crittare 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. Eseguirà 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 del 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 visitate: http://www.net.lut.ac.uk/psst/

Potete 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. potete 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 visitate http://srp.stanford.edu/srp.

6.5 PAM - Pluggable Authentication Modules (Moduli Aggiuntivi di Autenticazione)

Le ultime versioni della distribuzione Red Hat Linux sono distribuiti 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 siate certi di dare un'occhiata al sito web dei PAM per altre informazioni. http://www.kernel.org/pub/linux/libs/pam/index.html.

Solo alcune delle cose che potete fare con PAM:

Nel giro di poche ore dall'installazione e configurazione del vostro sistema, potete prevenire molti attacchi. Per esempio, usando 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 crittati. Il motore crittografico è affiancato al driver che manda e riceve pacchetti.

In questo si differenzia da SSH, che critta i dati per connessione, a livello dei socket. Viene crittata una connessione logica fra programmi eseguiti su host differenti.

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 fra le due reti connesse con la VPN, senza cambiamento per il software applicativo.

Riassumendo la documentazione CIPE:

Gli standard IPSEC definiscono un set di protocolli che possono essere usati (oltre alle altre cose) per costruire VPN crittate. 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.

Troverete ulteriori informazioni su Kerberos leggendo le FAQ di Kerberos; inoltre troverete 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 vostro host. Porta a molte conseguenze e non è usato quanto, per esempio, SSH.

6.8 Shadow Password.

Le shadow password sono un mezzo di tenere segrete agli utenti normali le password crittate. Le ultime versioni di RedHat e Debian Linux usano di default le shadow password, ma in altri sistemi le password crittate 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 delle shadow password dovete assicurarvi che tutte le applicazioni che devono leggere le password siano ricompilate per supportarle. PAM (vedi sopra) invece permette di semplicemente installare un modulo shadow; non richiede la ricompilazione degli eseguibili. Potete fare riferimento allo Shadow-Password HOWTO per ulteriori informazioni se necessario. È http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html È abbastanza datato al momento, e non serve per le distribuzioni che supportino 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, crittandole tutte e comparandole alle vostre password crittate. 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.false.com/security/john/index.html). Usano moltissimo la cpu, ma, eseguendoli, capirete se possono trovare le vostre password e potrete quindi avvertire gli utenti con password deboli. Notate che un intrusore dovrebbero prima riuscire a trovare qualche altro buco per leggere il vostro /etc/passwd, ma questi buchi sono più comuni di quanto pensiate

Visto che la sicurezza è resistente quanto il più insicuro degli host, è bene ricordare che se avete macchine Windows sulla vostra 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 crittare interi alberi di directory e per 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://edu-gw.dia.unisa.it/tcfs/.

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

6.11 X11, SVGA e Sicurezza della GUI

X11

E' importante rendere sicuro la vostra interfaccia grafica per evitare che un intrusore ottengano la vostra password mentre la scrivete, leggano i documenti o le informazioni che avete sullo schermo o persino che usino 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 voi 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 vostra macchina, può aggiungere la sua macchinaal vostro xhost ed ottenere facile accesso. Inoltre, se dovete dare l'accesso ad una macchina inaffidabile, chiunque sia lì può compromettere la vostra GUI.

Quando usate xdm (X Display Manager) per entrare, avete un metodo di accesso molto migliore: MIT-MAGIC-COOKIE-1. Un "cookie" a 128 bit viene creato nel vostro file .Xauthority. Se dovete lasciare che una macchina remota acceda al vostro display, potete usare il comando xauth e le informazioni nel vostro file .Xauthority per dare accesso solo a quella connessione. Leggete il Remote-X-Apps mini-howto, disponibile presso http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.

Potete anche usare ssh (cfr. ssh , 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 crittato passa per la rete.

Controllate la man page 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.

SVGA

I programmi che usano SVGAlib sono in genere SUID-root allo scopo di accedere a tutto l'hardware della vostra macchina Linux. Questo li rende molto pericolosi. Se si bloccano, in genere avete bisogno di riavviare la macchina per riavere una console usabile. Assicuratevi che tutti i programmi SVGA che usate siano autentici e siano almeno abbastanza affidabili. Ancor meglio, non eseguitene affatto.

GGI (Generic Graphics Interface project) (Progetto di Interfaccia Grafica Generica)

Il progetto Linux GGI sta tentando di risolvere i diversi problemi delle interfacce grafiche di Linux. GGI sposterà una piccola parte del codice video nel kernel di Linux e quindi controllerà direttamente l'accesso al sistema video. Questo significa che GGI potrà ripristinare la vostra console in ogni momento. Inoltre permetteranno di usare una chiave sicura, per assicurarvi che non c'è alcun cavallo di Troia che manometta il login della vostra console. http://synergy.caltech.edu/~ggi/


Avanti Indietro Indice