Sicurezza su Unix in rete

La presenza di piu' sistemi e la comunicazione di dati tra essi e' una esigenza sempre piu' diffusa ed importante. Per fornire tali funzionalita' sono state create opportune apparecchiature hardware e protocolli di comunicazione.

In questo documento sono riportate una serie di verifiche per controllare i livelli di sicurezza presenti sui Sistemi Unix con particolare riferimento ad un loro utilizzo in rete.

Su una macchina Unix sono presenti di default una serie di servizi in rete che forniscono una serie molto ampia di funzionalita’ e diverse modalita’ di comunicazione (eg. TCP-IP, UUCP).

Il livello di sicurezza di tali servizi non e’ in genere elevato. Non vengono infatti utilizzati meccanismi di encription dei dati e sono presenti diverse funzioni che forniscono informazioni sui sistemi presenti in rete.

Per fornire un adeguato livello di sicurezza debbono essere bilanciati la facilita’ di comunicazione con il controllo degli accessi. E’ infatti possibile ottenere un maggior livello di sicurezza disabilitando alcuni servizi, effettuando in maniera esplicita la crittografazione dei dati, ...

Nei paragrafi successivi vengono esaminati i principali strumenti presenti per l’utilizzo in reti interne su cui non siano presenti stringenti requistiti di sicurezza.

http

Il servizio HTTP o web e' il piu' noto servizio di Internet. Con tale servizio e' possibile pubblicare su Internet testi, immagini e programmi interattivi. Le attuali versioni dei web server hanno raggiunto un ottimo livello di affidabilita' e sono relativamente poco soggetti ad "attacchi" (eccezion fatta per il firing) se correttamente configurati. La parte piu' debole e' sempre quella del lancio di programmi (eg. attraverso richiami CGI) che, se non programmati correttamente, possono lasciare backdoor.

 

telnet

Il protocollo di telnet consente l'utilizzo di un sistema Unix con un emulazione di terminale con un collegamento TCP-IP.

Con una connessione telnet si entra in shell ed e' quindi possibile effettuare tutte le operazioni abilitate all'utente. Si tratta quindi di un servizio potenzialmente molto pericoloso.

Tutto il dialogo telnet avviene in chiaro sulla rete. In chiaro vengono anche trasmesse la login e la password.

E' opportuno disabilitare completamente il telnet in caso di utilizzo su reti non sicure. In tal caso e' eventualmente possibile utilizzare altri programmi che consentano l'emulazione di terminale ma che utilizzino tecniche di encryption (eg. deslogin)

In ogni caso qualsiasi protocollo venga utilizzato un'utenza Unix che ha accesso diretto al sistema e' in grado di estrarre un grande numero di informazioni (anche senza essere un'utenza privilegiata). Spesso si preferisce evitare di fornire un accesso diretto al sistema agli utenti.

 

ftp

E’ l’acronimo di File Transfer Protocol. Il protocollo ftp consente lo scambio di file tra macchine connesse in rete.

Per consentire l’uso del programma ftp e’ necessario collegarsi con una utenza valida Unix (conoscendone la relativa password).

Possono essere segnalate alcune note relative agli aspetti di sicurezza nell’utilizzo di ftp:

Sono disponibili come software di pubblico dominio versioni di ftpd che offrono maggiori controlli di sicurezza (eg. wu-ftp che si configura agendo su /etc/ftpaccess). Alcuni Unix commerciali offrono comunque ftpd con funzioni o possibilita' di configurazione superiori allo standard (eg. AIX).

Remote Shell

Su Unix e’ presente una serie di programmi (rlogin, rsh, rcp, ...), comunemente chiamati r-program, che consentono l’esecuzione remota di comandi. La validazione delle utenze/macchine abilitate a tali servizi si basa sugli IP Address. Con tale definizione gli utenti presenti sulle altre macchine non vengono ulteriormente validati sul sistema corrente "fidandosi" (trust) quindi del sistema di provenienza. Pertanto quando viene richiesto un servizio in remoto non e’ necessario indicare la password.

La configurazione delle abilitazioni avviene sui file /etc/hosts.equiv e sui file ~utente/.rhosts.

Tale meccanismo di validazione presenta pero’ un lato debole poiche’ l’identita’ di un host su rete TCP-IP e’ dichiarata, ma non validata. In sistemi che richiedano un certo livello di sicurezza e’ necessario limitare tale accessibilita’ ad utenti specifici o, meglio, non consentire l’utilizzo dell’equivalenza in rete.

I servizi r* sono suscettibili ad attacchi molto pericolosi ed efficaci quali lo spoofing (invio di messaggi con un IP Address mittente impostato da programma).

Per un buon livello di sicurezza si debbono escludere completamente i servizi r* (rlogin, rsh, rcp, ..) che utilizzano tale meccanismo per la validazione.

NFS

E’ l’acronimo di Network File System. Con tale protocollo, implementato sulla pila TCP-IP (per essere pignoli UDP-IP) si puo’ accedere in maniera trasparente a file system di sistemi remoti.

Poiche’ lo stesso file system e’ acceduto sia localmente che in remoto e’ necessario porre attenzione ai diritti di accesso ai file presenti.

Per quanto riguarda i dischi utilizzati da remoto e’ necessario impedire l’introduzione di programmi con il SUID attivo (eg. mount -F nfs -o nosuid, bg remotehost:/remotedir /localdir). E’ inoltre necessario evitare di porre dati/programmi con contenuti riservati su tale disco remoto.

Per quanto riguarda i dischi forniti alla rete e’ necessario limitare l’accessibilita’ ad hosts specifici e concedere il solo diritto di lettura. E’ inoltre opportuno evitare di condividere in rete dischi che contengano informazioni riservate.

Il livello di sicurezza ottenibile con NFS e' discreto, se utilizzato in sola lettura e non e' necessario differenziare gli accessi. In caso di esigenze di sicurezza ulteriori non e' consigliabile l'utilizzo di NFS.

Yellow Pages, NIS, NIS+

Si tratta di servizi che consentono la gestione cetralizzata di host/utenti/gruppi/...

E' opportuno utilizzare solo le ultime versioni di tali programmi. Nelle prime versioni erano stati segnalati diversi problemi di sicurezza.

In caso di stringenti requisiti di sicurezza e' opportuno non utilizzare affatto tali servizi.

sendmail

Il programma di sendmail si occupa dello smistamento della posta in arrivo e partenza. Si tratta in effetti del piu’ diffuso, completo e famigerato MTA per la gestione della posta. La sua complessita’ e’ elevata e sono note alcune anomalie del programma presenti nelle varie release.

Alcune indicazioni:

Se non necessario e' opportuno disabilitare il servizio di sendmail.

Vi sono alcune tipologie di attacco (eg. spamming: invio di posta da utenti che si fingono altri utenti) verso le quali il sendmail non offre protezioni. In questi casi una soluzione e' quella di individuare i siti responsabili e bloccarli con opportune regole su un firewall.

X-Windows

X-Windows e' un ambiente grafico che ha un'ampia diffusione in ambiente Unix. C-Windows utilizza una serie di algoritmi di sicurezza per impedire che sistemi/utenti non autorizzati non inviino videate o comunque interagiscano in modo non corretto con la stazione di lavoro.

Alcune di queste protezioni vengono spesso disabilitate per poter operare con maggior facilita' su un piu' sistemi in contemporanea (con il comando "xhost +"). E' importante abilitare solo gli host/utenti e il periodo di tempo necessari per effettuare le varie operazioni.

In ogni caso la protezione fornita da X-Windows non e' assoluta e non deve essere utilizzato su sistemi con elevati requisiti di sicurezza.

Servizi statistici e di amministrazione

Sono disponibili diversi servizi che forniscono utilita’ di amministrazione e statistiche.

Il servizio fingerd offre, via rete, un servizio che consente di saper quali sono le utenze attive, da quanto tempo non si collegano, ... Benche’ tale funzione sia comoda per un amministratore offre informazioni sulle utenze presenti sul sistema, sulle attivita’ svolte, .. tali informazioni possono essere sfruttate da utenti non autorizzati per cercare di "indovinare" nuove utenze e password per tentare accessi sul sistema.

Altri servizi vengono richiamati dal comando ruptime ed rwho che forniscono le informazioni tipiche dei comandi uptime ed who ma in ambiente di rete.

Catalogo dei sistemi in rete

Per verificare in modo veloce quali siano le connessioni di rete locale attive e’ opportuno compilare in maniera completa il file di /etc/hosts riportando gli IP Address di tutti gli host/PC che possono accedere al sistema.

Un alternativa (opportuna se il numero di sistemi in rete diventa elevato) e' l'utilizzo di un DNS su cui vengono mantenuti tutti gli indirizzi.

Accesso da modem

L’accesso delle utenze puo’ avvenire tramite terminali (o programmi di emulazione) connessi in maniera diretta (sulla console di sistema) o attraverso linea telefonica.

Le connessioni dirette avvengono su linea seriale su cui e’ attivo il programma getty.

Le connessioni su linea telefonica debbono essere trattate come poco sicure. In caso di necessita' possono essere utilizzati meccanismi di callback e di validazione (eg. PAP/CHAP su PPP).

UUCP

UUCP e’ l’acronimo di Unix to Unix CoPy. Con l’insieme di programmi forniti da tale protocollo possono essere effettuati scambi di dati, invio di mail, file transfer tra sistemi Unix connessi su linee seriali dedicate o switched (caso piu’ comune). Tale protocollo ha avuto una notevole diffusione prima della diffusione di tecnologie (Internet) che hanno consentito velocita’ di trasferimento superiore. UUCP e’ distribuito su praticamente tutti i sistemi Unix. Le principali versioni di software sono due. L’utilizzo di uucp e’ piuttosto limitato.

Il file /usr/lib/L.sys contiene nomi di host e password in chiaro.

Utilizzo su reti non sicure

I messaggi che attraversano una rete di comunicazione possono essere ascoltati. Per effettuare tali operazioni sono necessari strumenti hardware/software che tipicamente vengono utilizzate per effettuare la messa a punto o il debug di protocolli o sistemi di comunicazione. Per evitare tale problema e’ necessario provvedere alla sicurezza fisica della rete di comunicazione. Quando e’ possibile che un oggetto esterno si colleghi direttamente alla rete, la rete viene definita non sicura.

Alcuni protocolli inviano informazioni con messaggi non criptati e quindi di facile individuazione. Tra questi: telnet, ftp, rlogin, ... che oltre alle altre informazioni, trasmettono login e password in chiaro.

Tali protocolli non debbono essere utilizzati su un canale di comunicazione non sicuro. Nel caso in cui questo avvenga e’ necessario cambiare immediatamente le password e riverificare la sicurezza del sistema.

Nel caso sia necessario proteggere i dati che vengono trasmessi con tali protocolli e’ necessario provvedere alla crittografazione dei dati.

Wrapper

E' possibile installare un TCP Wrapper su alcuni servizi di rete. Il programma di wrapper effettua alcune validazioni (ovviamente configurabili), genera informazioni di logging e quindi richiama il servizio richiesto (eg. telnet, ftp, ...).

L'installazione di un TCP Wrapper e' generalmente effettuata configurando opportunamente il demone inetd.

Alcuni sistemi Unix offrono alcune funzioni tipiche di un wrapper direttamente nel processo di inetd (eg. HP-UX).

Firewall

Sono disponibili potenti strumenti software/hardware per il controllo dei pacchetti scambiati sulla rete tra le diverse macchine. Le tecniche utilizzate sono diverse. I firewall offrono il massimo dal punto di vista della sicurezza, delle prestazioni e del controllo se correttamente configurati.

Si tratta in genere di sistemi dedicati, che non rispondono a nessun servizio di rete (quindi "invisibili") con interfacce di rete poste sulle diverse reti che debbono controllare. Vengono programmati a regole con in principio di base che tutto quello che non e' esplicitamente permesso e' proibito!


Accesso ad Internet

Per accesso ad Internet si intende il collegamento fisico alla rete Internet (rete mondiale cui sono connessi milioni di calcolatori ed utenti).

L’accesso ad Internet pone particolari problemi di sicurezza poiche’ il numero di potenziali hacker e’ elevatissimo.

Nel caso di accesso ad Internet e’ necessario provvedere ad adeguati strumenti di sicurezza. E’ assolutamente necessario l’utilizzo di TCP-wrapper e di FireWall a protezione delle proprie reti rispetto alle reti esterne.

Crittografia a chiave pubblica

Trasmettendo i dati su reti non sicure e' opportuno provvedere alla loro crittografazione in modo da renderli inutilizzabili ad estranei.

I dati vengono alterati e sono leggibili solo utilizzando una speciale chiave (che e' naturalmente una stringa di caratteri).

Un metodo molto diffuso per la crittografazione e' quello a chiave pubblica. In realta' le chiavi sono due: una pubblica, nota a tutti, ed una privata, nota solo al proprietario. Per crittografare/decrittografare un messaggio e' necessario applicare entrambe le chiavi.

Per inviare un messaggio ad un utente in modo che nessun altro possa leggerlo e' sufficiente crittografarlo con la chiave pubblica di tale utente. Solo l'utente stesso, con la sua chiave privata potra' leggerlo.

Di converso un messaggio crittografato con la chiave privata di un utente sara' leggibile a tutti, utilizzando la chiave pubblica di tale utente, ma la sua provenienza ed integrita' e' certa: nessun altro utente avrebbe potuto generare o modificare tale messaggio.

Affinche' il meccanismo funzioni e' necessario assicurarsi che la chiave pubblica di un utente appartega veramente ad uno specifico utente e non ad un hacker che cerca di impersonare l'utente. Per accertarsi di tale corrispondenza vengono utilizzati i certificati. L'assegnazione dei certificati e' competenza dei Certificate Autority.

Una tipica configurazione di sistemi in rete

Facciamo l'ipotesi di una societa' che sia connessa su Internet e vediamone la tipica configurazione. Tale esempio puo' essere preso come punto di partenza per comprendere la configurazione di un ISP (Internet Service Provider) o per altre configurazioni piu' complesse possibili (eg. VPN (Virtual Private Network) tra sedi remote della stessa azienda).

La connessione ad Internet sara' fornita da un router del fornitore esterno (eg. telecom) che fornisce la connettivita' di base.
Direttamente connesso a questo vi sara' un sistema Unix che agisce da firewall e non ospita altri servizi. Su un'altra scheda di rete del firewall troviamo la DMZ (l'area demilitarizzata) che contiene i server dei servizi resi all'esterno: HTTP (il web), DNS, anonymous FTP, SMTP, il proxy (che in realta' e' un servizio dato solo all'interno ma che accede all'esterno). La terza scheda di rete del firewall viene connessa sulla LAN aziendale. Le regole del firewall prevedono che dall'esterno si possano unicamente utilizzare alcuni servizi presenti sulla DMZ (eg. la navigazione sul web). Nessuna regola consente un accesso diretto alla LAN. Dalla rete interna in genere non si accede all'esterno in modo diretto ma solo tramite i servizi di proxy ospitati sulla DMZ. Eventuali (e motivate) eccezioni utilizzano il NAT (Network Address Translation) per mascherare gli accessi.
I server della rete interna possono essere uno o piu'. In ogni caso sui sistemi della DMZ vengono attivati solo i servizi necessari (eg. il demone di sendmail e' attivato solo sull'SMTP server). Tutti i servizi "pericolosi" sono disattivati: NFS, rsh, ... I server/servizi presenti so

no:


I server della rete interna seguono le normali politiche di sicurezza aziendali. Un server nella rete interna gestisce le caselle di posta degli utenti (e quindi il servizio POP).

Testo: Sicurezza su Unix in rete
Data: 15 Settembre 1997
Versione: 1.1
Autore: mail@meo.bogliolo.name