Sicurezza su Unix

Nella societa’ della comunicazione il valore e la riservatezza delle informazioni riveste un ruolo sempre piu’ importante. Di conseguenza la sicurezza dei dati, in tutte le sue forme, e’ un aspetto fondamentale per la gestione e l’utilizzo di un sistema Informativo. In questo documento sono riportate una serie di verifiche per controllare i livelli di sicurezza presenti sui sistemi Unix. Il taglio del documento e' molto "pratico" e non teorico.

Complementare a questo documento e' Sicurezza di unix in rete che, trattando di un argomento interessante e di notevoli dimensioni e' stato raccolto in un altro documento.

Si e’ cercato di ordinare le verifiche da effettuare per tipologie omogenee, anche se le relazioni tra i vari argomenti non consentono una rigida separazione. Le tipologie di controlli sono le seguenti:

Sono infine riportati alcuni strumenti e tool di sicurezza ed i riferimenti ad altri documenti e siti di interesse.


Il sistema operativo Unix

Il sistema operativo Unix offre un ambiente che consente una elevata produttivita’ ed un facile scambio di informazioni e dati tra i diversi utenti del sistema.

Per motivi storici lo sviluppo del sistema Unix ha sempre favorito lo scambio delle informazioni e la comunicazione tra diversi sistemi piuttosto che gli aspetti di riservatezza e sicurezza dei dati. Questo non significa che il sistema operativo Unix non sia sicuro ma piuttosto che nelle configurazioni standard non sono attivi i principali controlli di sicurezza.

L’attivita’ di controllo ed innalzamento dei livello di sicurezza di un sistema Unix e’ pertanto necessaria per gli in produzione del sistema.

Possono essere controllati diversi elementi relativi al sistema operativo. I paragrafi che seguono riportano tutte le indicazioni necessarie per un effettivo ed esaustivo controllo.

Poiche’ vi sono differenti versioni del sistema operativo Unix si e’ cercato di riportare indicazioni di generale applicabilita’. In casi particolari, cui le indicazioni si applicano a sistemi specifici, sono riportati tipologie di sistemi e/o versioni.


Accesso al file system

Il file system Unix e’ costituito da una gerarchia di directory che contengono l’intero sistema operativo, i programmi ed dati residenti sul sistema.

Sul sistema Unix tutti gli accessi ai file vengono regolati da una serie di flag che indicano i permessi di lettura, scrittura ed esecuzione (attraversamento nel caso di directory) per l’utente, il suo gruppo ed il resto del mondo.

Per la rappresentazione delle protezioni dei file vengono utilizzate stringhe come le seguenti:

drwxr-xr-x directory leggibile/scrivibile/attraversabile dall’utente, leggibile/attraversabile per il gruppo ed tutti gli altri utenti.

-rw-r----- file leggibile/scrivibile all’utente, leggibile al gruppo.

Ad ogni file sono associati l’utente ed il gruppo proprietari.

Poiche’ il file system Unix copre non solo file di dati ed i programmi ma anche le periferiche collegate al sistema, la protezione dei file assume una fondamentale importanza per l’intera sicurezza del sistema.

Debbono pertanto essere controllati eventuali rilassamenti della sicurezza che consentano accessi a utenti non corretti.

Accessi in scrittura a programmi

Non e’ in genere opportuno che altri utenti modifichino i programmi di un utente. Il comportamento di tali programmi potrebbe essere modificato per introdurre cavalli di troia o renderli non funzionanti.

Tra i file eseguibili di maggior interesse vi sono i file .profile, .login e .cshrc poiche’ vengono eseguiti ad ogni collegamento dell’utente.

La verifica e' molto semplice e consiste nel controllare i diritti di accesso dei file eseguibili.

Accessi in scrittura a directory

L’accesso in scrittura su una directory consente la cancellazione e creazione di file in tale directory. Con tale diritto e’ possibile sostituire file di dati/programmi. Debbono quindi essere controllati con attenzione i diritti di accesso alle directory di sistema.

Anche in questo caso la verifica consiste nel controllare i diritti di accesso.

Accessi in scrittura a file di dati

Un accesso in scrittura a file di dati consente l’eventuale modifica di dati. E’ inoltre possibile che la modifica di un file di dati porti a comportamenti particolari i programmi che su tali dati agiscono con conseguenze di difficile previsione.

Anche in questo caso la verifica consiste nel controllare i diritti di accesso.

Accessi in scrittura a devices

I dischi, i nastri, ... in breve tutte le periferiche connesse al sistema vengono viste come file. Poiche’ tali file hanno un comportamento particolare (che dipende dalla tipologia di device: a caratteri/a blocchi) vengono generalmente definiti file speciali.

I controlli che e’ necessario effettuare sono:

File SUID presenti sul sistema

Debbono essere controllati i vari file SUID presenti sul sistema. L’esecuzione di tali file consente all’utente un accesso privilegiato a determinate risorse presenti sul sistema. Infatti l’utente che gli esegue diventa, dal punto di vista dei controlli di accesso al file system, l’utente proprietario del file eseguito.

Le verifiche da effettuare sono le seguenti:

File GUID presenti sul sistema

Debbono essere controllati i vari file GUID presenti sul sistema. L’esecuzione di tali file consente all’utente un accesso privilegiato a determinate risorse presenti sul sistema. Infatti l’utente che gli esegue diventa, dal punto di vista di controllo di accesso al file system, appartenente al gruppo del file eseguito.

Le verifiche da effettuare sono le seguenti:

Kernel Unix

Il sistema operativo Unix e’ un file a tutti gli effetti che viene caricato in memoria al momento del bootstrap. Il file puo’ essere modificato (mediante una opportuna ricompilazione) per aggiungere il supporto di nuove periferiche o per modificare alcuni parametri di sistema.

La modifica del sistema operativo puo’ anche essere effettuata per sproteggere il sistema (tale attivita’ e’ complessa e richiede privilegi dell’utenza root ma e’ tecnicamente possibile).

Il Kernel di Unix deve essere protetto da accessi non autorizzati.

Il Kernel di Unix non deve essere stato modificato rispetto alla distribuzione originale del software.

UMASK

Il comando umask consente di definire quali siano i diritti di accesso di default sui file quando vengono creati. In un ambiente molto aperto il valore di umask e’ tipicamente 000, generalmente il valore e’ 022 (accesso in scrittura al solo utente proprietario), per una massima sicurezza il valore assegnato e’ 077 (nessun diritto al gruppo ad altri utenti).

Deve essere verificato il valore di umask presente sull'utenza di root e sulle normali utenze.

Messaggi sul terminale

E’ possibile lo scambio di messaggi tra gli utenti Unix in maniera interattiva.

Poiche’ tale possibilita’ puo’ essere sfruttata per "ingannare" un utente sullo stato della sessione attiva e’ opportuno impedire, per default, l’invio dei messaggi sul terminale con il comando mesg -n.

Utenze sistemistiche debbono avere il settaggio impostato con mesg -n.

Semplicita’ e documentazione

Una eccessiva e non necessaria complessita’ di un sistema rende piu’ complesse le attivita’ di controllo e gestione.

Una complessita’ elevata non fornisce un livello di sicurezza superiore, piuttosto rende piu’ laboriosa la ricerca di eventuali anomalie di sicurezza. E’ pertanto opportuno definire strutture e limiti semplici e precisi.

E' opportuno mantenere una accurata e chiara documentazione del sistema.

Crittografia dati

Quando alcuni file contengono informazioni riservate e’ possibile utilizzare algoritmi di crittografazione che alterano il contenuto dei file in modo da renderli non comprensibili (se non e’ nota la chiave usata per la crittografazione).

In tal modo un eventuale accesso non autorizzato al sistema non consente comunque la lettura dei dati. L’utilizzo della crittografia dei dati e’ di particolare importanza per quei file che debbono essere trasferiti su canali di comunicazione non sicuri; se i dati sono crittografati, ad un utente che "ascolta" i messaggi in rete non sara’ possibile accedere ai dati.

Unix fornisce alcuni semplici comandi per effettuare la crittografazione: crypt e decrypt. Sono inoltre disponibili come software di pubblico dominio o forniti da terze parti una grande quantita' di utility per effettuare la crittografia di mail, file dati, trasferimenti, login remote, ...


Utenze Unix

Le utenze Unix corrispondono alle autorizzazioni presenti sul sistema. Ogni utente viene assegnato ad uno o piu’ gruppi, in tal modo e’ possibile la condivisione di dati altrimenti riservati, tra utenti dello stesso gruppo.

Generalmente la presenza di una utenza consente il collegamento al sistema mediante una shell (un interprete di comandi) che e’ configurabile dall’Amministratore. Ad ogni utente e’ associata una home-directory su cui ha i necessari diritti e su cui l’utente viene posto al momento del collegamento (anche tale directory e’ configurabile da parte dell’Amministratore).

 

Password

L’utilizzo di parole chiavi o password per proteggere l’accesso a risorse privilegiate del sistema e’ fondamentale.

Affinche’ l’utilizzo delle password non sia vanificato e’ necessario seguire alcune indicazioni:

Le indicazioni riportate sulle password hanno una validita’ generale e non specifica ad particolare sistema operativo o ambiente.

Sui Sistemi Unix System V rel. 4 (la versione piu’ diffusa sui sistemi commerciali) sono fornite una serie di funzioni specifiche relative alla gestione delle password.

I principali elementi relativi all’implementazione su tali tipologie di sistemi Unix sono:

Sui sistemi di origine BSD (tra cui Linux molto diffuso come freeware) possono essere notate le seguenti differenze rispetto a quanto riportato nel paragrafo precedente:

Vi sono utility che permettono di controllare l'utilizzo di password banali e facilmente individuabili (cfr. COPS).

Definizione utenze

La lista dei vari utenti e le relative autorizzazioni debbono essere controllate con attenzione.

Le utenze presenti sul sistema possono venire bloccate (ponendo una opportuna stringa di caratteri nel campo contenente la password criptata) o eliminate (semplicemente eliminandole dal file di password). Tali operazioni possono essere svolte agendo direttamente sui file o con strumenti di gestione appropriati (tale scelta non e’ libera e dipende dal sistema Unix installato).

Nei paragrafi successivi vengono esaminate in dettaglio alcune categorie di utenze di particolare rilevanza o aspetti particolari nelle abilitazioni.

Utenze con privilegi di amministrazione

Le utenze con UID=0 sono equivalenti all’utente root dal punto di vista del sistema. Una utenza con UID=0 permette un accesso indiscriminato a tutte le risorse del sistema.

Utenze non utilizzate

Le utenze non utilizzate possono essere sfruttate per accessi non autorizzati. E’ opportuno il blocco di tali utenze. Il controllo sull’utilizzo di una utenza viene generalmente svolto con comandi quali finger ed who.

Utenze senza shell

Sono presenti sui sistemi Unix utenze di sistema utilizzate per attivare particolari demoni di servizio e che non debbono essere utilizzabili come login al sistema. Tali utenze non consentono un accesso diretto ad una shell di sistema. Un elenco, non esaustivo, di tali utenze e’ il seguente: uucp, bin, audit, sys, ftp, nobody, daemon, news.

Per tali utenze il collegamento al sistema deve essere esplicitamente disabilitato.

Utenze senza password

Tutte le utenze presenti sul sistema debbono avere una password. Utenze senza password possono essere utilizzate in maniera indiscriminata e essere utilizzate per fornire quindi ulteriori notizie sul sistema ospite.

Gruppi di sistema

L’appartenenza di un utente ad un gruppo di sistema consente abilitazioni particolari all’utente.

Debbono essere controllate le appartenenze degli utenti ai vari gruppi.

Utenze e password in chiaro

Nomi di host, utenze e password non debbono essere riportati in chiaro su file presenti sul sistema o resi visibili sul sistema. Il file che li contengono deve essere leggibile al solo utente proprietario o, meglio, tale file non deve essere affatto presente.

Una feature del programma ftp che consente di accedere a sistemi remoti da programma senza richiedere username e password se queste sono indicate nel file ~utente/.netrc. Tale feature non deve essere utilizzata.

Il comando ps, con le opportune opzioni (eg. -efa SV, -agx BSD), riporta in chiaro i comandi ed i parametri che vengono utilizzati sul sistema. E’ evidente che non debbono essere utilizzati comandi o parametri che contengano informazioni riservate.

Percorsi di ricerca dei programmi

Quando viene lanciato un programma dalla shell l’eseguibile da utilizzare viene ricercato utilizzando il valore della variabile di ambiente PATH. Per evitare di attivare programmi differenti da quelli corretti e’ opportuno porre nel PATH solo directory di sistema non modificabili (eg. non porre mai la directory corrente "." nel PATH). Un livello inferiore di sicurezza e’ ottenuto ponendo la directory corrente come ultimo elemento del PATH.

Il controllo e’ particolarmente importante per l’utente root.

Root login su console

L’utenza root e’ privilegiata poiche’ a tale utenza sono garantiti diritti di accesso in lettura e scrittura su ogni file. E’ possibile limitare l’accesso come login a tale utenza al solo terminale di console.

Tale limitazione non impedisce le attivita’ amministrative poiche’ e’ sempre possibile utilizzabile il comando /bin/su per ottenerne i diritti. In tal modo tuttavia l’accesso a root viene registrato su piu’ file di log e segnalato su console. Sui sistemi SV la disabilitazione avviene ponendo CONSOLE=/dev/console nel file /etc/default/login. Sui sistemi BSD si agisce sul file /etc/ttytab rimuovendo la parola "secure" dai terminali che non si ritengono sicuri.

 

Limitazione dei diritti delle utenze

E’ opportuno che le utenze abbiano i soli diritti necessari al normale svolgimento delle attivita’ di competenza (principio del minimo privilegio).

Debbono essere quindi attivate tutte le necessarie protezioni e limitazioni che impediscono all’utente di superare i limiti inizialmente previsti.

Tra le varie possibilita’ presenti sui diversi sistemi Unix vi e’ l’abilitazione delle quote sul disco, della quantita’ di CPU utilizzata, ...

E’ inoltre possibile sostituire la shell di default con una applicazione apposita che non consenta altre operazioni all’utente.


Sistema operativo

Il sistema operativo Unix e tutti i "programmi di corredo" che lo accompagnano vengono continuamente aggiornati dai produttori. Gli aggiornamenti riguardano nuove funzionalita’, miglioramenti prestazionali, supporto di nuove periferiche hardware e correzioni di errori. Alcuni bachi presenti nel sistema possono avere un impatto sulla sicurezza.

Principali file di log

Sul sistema Unix vengono mantenuti diversi file di log. Tali file possono essere utilizzati per debugging, per accounting e per effettuare verifiche sulla sicurezza del sistema.

Accounting

Su Unix e’ disponibile un servizio di accounting che consente la raccolta di dati sull’utilizzo del sistema. L’accounting registra su log ogni comando Unix attivato, l’utente che lo ha attivato, la quantita’ di CPU e memoria utilizzati, ... e le loro aggregazioni per utente/periodo. Oltre che per ragioni di accounting tali log possono essere utilmente sfruttati per analizzare eventuali attivita’ anomale presenti sul sistema (ad esempio un numero elevato di processi login indica una serie di tentativi di accesso falliti).

La presenza di piu’ meccanismi di accounting/raccolta dati di sistema consente eventuali controlli incrociati utili per analizzare le situazione piu’ complesse.

Backup

Le attivita’ di backup del sistema, dei programmi e dei dati svolgono un ruolo fondamentale per la sicurezza del sistema.

Oltre a proteggere i dati/programmi da malfunzionamenti, consentono di ripristinare in modo "sicuro" un sistema dopo che e’ stato oggetto di un "attacco".

Cavalli di troia

Un cavallo di troia e' un programma che sembra comportarsi normalmente e svolgere un compito utile, mentre in realta' svolge anche altre operazioni. Tali programmi vengono involontariamente attivati da un utente che li trova sostituiti ai programmi corretti.

Deve essere effettuata una ricerca specifica di tali programmi. Il controllo consiste nella ricerca esaustiva all’interno del sistema alla ricerca dei programmi che piu’ frequentemente vengono sostituiti/replicati (crypt, su, login, passwd, makekey, du, ls, ifconfig, netstat, ps, ..).

Debbono essere inoltre controllate le directory di sistema poste nei PATH degli utenti e che contengono i programmi di utilita' Unix (eg.: /bin, /usr/bin, /etc, ..) qualunque variazione in tali directory deve essere attentamente controllata.

In alcuni casi "cavalli di troia" vengono inseriti dall'amministratore del sistema per controllare l'utilizzo di particolari programmi o modificare il comportamento di altri.


Controllo delle attivita’ di sistema

Un continuo controllo delle attivita’ del sistema e’ necessario per controllare il corretto funzionamento del sistema e per attivita’ di tuning. E’ inoltre molto utile per verificare se sul sistema si stanno svolgendo attivita’ anomale allo scopo di violare la sicurezza del sistema.

Tali controlli debbono essere effettuati periodicamente.

Processi presenti sul sistema

Deve essere controllato l’elenco dei processi attivi alla ricerca di attivita’ anomale o non autorizzate. Ad esempio connessioni telnet o ad un database ospitato in orari di non normale operativita' del sistema sono possibili indicazioni di un utilizzo non autorizzato.

Utilizzo di spazio sul file system

Deve essere controllato l’utilizzo dello spazio sui vari file system per determinare eventuali situazioni anomale.

L'utilizzo dei vari file system deve essere storicizzato in modo da consentire analisi sull'utilizzo nel medio/lungo termine.

Attivita’ di cron

Il processo di cron si occupa dell’attivazione a tempo di programmi. E’ opportuno controllare che non vengano attivati programmi che presentino aspetti di pericolo relativamente alla sicurezza.

Sui sistemi SV per avere il logging delle attivita’ di cron e’ necessario porre CRONLOG=YES in /etc/default/cron.


Altri aspetti

Vi sono diversi altri aspetti di notevole importanza per la sicurezza dei sistemi, anche se non strettamente legati ai sistemi Unix. Si e' ritenuto interessante citarne alcuni.

Organizzazione aziendale

Debbono essere chiaramente definiti i ruoli e compiti per la gestione e l'utilizzo del sistema. In particolare:

Coinvolgimento sulle problematiche di sicurezza

Gli utenti debbono essere coinvolti e responsabilizzati per tutti gli aspetti relativi alla sicurezza. Il lato piu' debole di un sistema informativo e' sempre quello umano.

La maggior parte delle verifiche di sicurezza sono noise e, in alcuni casi, lunghe. E' tuttavia importante dedicare a tali attivita' tutto il tempo necessario. Per ottenere questo e' importante il coinvolgimento degli amministratori e gestori della sicurezza

Sicurezza fisica

La sicurezza fisica dei sistemi e' fondamentale. Oltre ai banali problemi di furto di componenti, agendo direttamente sul sistema e' possibile effettuare operazioni di amministrazione e configurazione che possono compromettere completamente la sicurezza del sistema.

Programmi presenti

Tutti i programmi presenti su un sistema debbono essere censiti, documentati e controllato il loro rispetto delle regole fondamentali della sicurezza.

Programmi eseguiti in modalita' privilegiata

I controlli sulle applicazioni debbono essere ancora maggiori per tutti i programmi che vengono eseguiti in modalita' privilegiata. In particolare e' necessario documentarne l'installazione e la variazione in modo da evitare l'introduzione di cavalli di troia.

Ambienti Client

Anche gli ambienti client sono possibili sorgenti di problemi di sicurezza. Molti sono gli strumenti che, per rendere piu' semplici gli accessi, memorizzano unsername e password in modo spesso facilmente sfruttabile da terzi...


Strumenti e tool di sicurezza

Per effettuare le necessarie verifiche possono essere utilizzati diversi strumenti. Tra questi i piu’ interessanti sono:

Aggiornamento!
L'evoluzione di questi strumenti e' continua. Sono attualmente disponibili programmi che sono in grado di effettuare controlli ed attacchi assai sofisticati. Tra gli altri: Red Code, Nessus, Nimda, Slammer, ...

Riferimenti

Ulteriore documentazione e' contenuta in:

 

Sono di notevole interesse i contenuti dei siti WEB riportati:


Testo: Sicurezza su Unix
Data: 9 Settembre 1997
Versione: 1.1.3
Autori: mail@meo.bogliolo.name, Remo Conterno