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 lutilizzo 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 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.
Lattivita 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.
Il file system Unix e costituito da una gerarchia di directory che contengono lintero 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 lutente, 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 dallutente, leggibile/attraversabile per il gruppo ed tutti gli altri utenti.
-rw-r----- file leggibile/scrivibile allutente, leggibile al gruppo.
Ad ogni file sono associati lutente 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 lintera 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 dellutente.
La verifica e' molto semplice e consiste nel controllare i diritti di accesso dei file eseguibili.
Accessi in scrittura a directory
Laccesso 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 leventuale 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. Lesecuzione di tali file consente allutente un accesso privilegiato a determinate risorse presenti sul sistema. Infatti lutente che gli esegue diventa, dal punto di vista dei controlli di accesso al file system, lutente 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. Lesecuzione di tali file consente allutente un accesso privilegiato a determinate risorse presenti sul sistema. Infatti lutente 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:
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 dellutenza 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.
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.
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, linvio dei messaggi sul terminale con il comando mesg -n.
Utenze sistemistiche debbono avere il settaggio impostato con mesg -n.
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. Lutilizzo 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, ...
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 dallAmministratore. Ad ogni utente e associata una home-directory su cui ha i necessari diritti e su cui lutente viene posto al momento del collegamento (anche tale directory e configurabile da parte dellAmministratore).
Lutilizzo di parole chiavi o password per proteggere laccesso a risorse privilegiate del sistema e fondamentale.
Affinche lutilizzo 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 allimplementazione 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).
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 allutente root dal punto di vista del sistema. Una utenza con UID=0 permette un accesso indiscriminato a tutte le risorse del sistema.
Le utenze non utilizzate possono essere sfruttate per accessi non autorizzati. E opportuno il blocco di tali utenze. Il controllo sullutilizzo 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.
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.
Lappartenenza di un utente ad un gruppo di sistema consente abilitazioni particolari allutente.
Debbono essere controllate le appartenenze degli utenti ai vari gruppi.
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 leseguibile 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 lutente root.
Lutenza root e privilegiata poiche a tale utenza sono garantiti diritti di accesso in lettura e scrittura su ogni file. E possibile limitare laccesso 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 laccesso 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 allutente di superare i limiti inizialmente previsti.
Tra le varie possibilita presenti sui diversi sistemi Unix vi e labilitazione 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 allutente.
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.
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.
Su Unix e disponibile un servizio di accounting che consente la raccolta di dati sullutilizzo del sistema. Laccounting registra su log ogni comando Unix attivato, lutente 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.
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".
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 allinterno 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.
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.
Deve essere controllato lelenco 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 lutilizzo 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.
Il processo di cron si occupa dellattivazione 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.
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...
Per effettuare le necessarie verifiche possono essere utilizzati diversi strumenti. Tra questi i piu interessanti sono:
Aggiornamento!
Ulteriore
documentazione e' contenuta in: Sono di notevole interesse i contenuti
dei siti WEB riportati: Testo: Sicurezza su Unix
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, ...
Data: 9 Settembre 1997
Versione: 1.1.3
Autori: mail@meo.bogliolo.name, Remo Conterno