Torna alla pagina di Sistemi operativi sicuri
Questa pagina è stata aggiornata GRAZIE agli appunti che AVETE INVIATO nel periodo di chiusura della sezione UniCrema!! È SERVITA A QUALCOSA, NO?! ;)
:: Sistemi operativi sicuri - Domande e risposte ::
I sistemi operativi windows e unix-like sono notevolmente differenti. Il primo è closed source, l’altro invece è open source. Ma questa non è solo l’unica differenza presente, anzi tra di loro si differenziano in molte cose e una di queste è la crittografia del file system. La crittografia del file system permette di avere un ulteriore grado di sicurezza, riuscendo ad effettuare una protezione ulteriore dei dati come ad esempio tenerli fuori dalla portata di occhi indiscreti. Nei sistemi windows vi possono essere vari metodi di crittografia del file system uno di questi può essere IFS (Installable File System). IFS è stata la prima risposta di Windows al sistema Unix sulla crittografia, l’IFS offre un livello di isolamento molto alto ma è anche molto complesso da utilizzare. Ultimamente però sopra IFS è possibile disporre di un’interfaccia assolutamente identica al metodo sviluppato da UNIX il che rende semplice anche il “porting” di altri file system su Windows.
Nei sistemi Unix invece esiste, come metodo di crittazione il VFS (Virtual File System). Il VFS è un layer di dal mondo UNIX e ultimamente disponibile anche in Windows. Come
abbiamo visto sopra il sistema Windows ovvero l IFS, dispone della stesa interfaccia di VFS. Lo scopo di quest’ultimo è quello di rendere uniforme l’interfaccia esterna (verso il S.O.) di ogni file system confinando le differenze logiche e funzionali all’interno del file system driver.
Esistono anche degli applicativi che permettono la crittografia dei file system. Ad esempio c’è Loop-AES Questo metodo si basa su un’ applicazione che legge da stdin e scrive su stdout chiamata aespipe. Questa applicazione è dunque perfetta per essere usata in “pipe” per la cifratura/decifratura in tempo reale di file “comuni” e anche di intere partizioni e file system.
Le tematiche che il buon sistemista deve rispettare sono:
a) GARANTIRE LA POSSIBILITA’ DI RECUPERARE DATI PERSI;
b) EVITARE DI PERDERE I DATI;
c) EVITARE CHE I DATI POSSANO ESSERE LETTI DA PERSONE NON AUTORIZZATE.
Pianificando una strategia di backup sarà essenziale scegliere in modo appropriato dove la replica dei dati verrà effettuata. Vi sono moltissime possibilità, consideriamo solo le più note ed utilizzate:
L’acronimo RAID (Redundant Array of Inexpensive Disks) sta ad indicare proprio un insieme di piccoli dischi poco costosi che insieme vanno a formare un unità di memorizzazione di maggiori dimensioni. L’introduzione di RAID è dovuta all’aumentare dei prezzi di supporti di memorizzazione che,essendo stati sviluppati e migliorati notevolmente, portavano ad una spesa esorbitante; questo può essere considerato un motivo secondario poiché il motivo principale è cercare di salvaguardare i dati da possibili guasti o malfunzionamento dei supporti fisici in modo da prevenire la perdita dei dati piuttosto che concentrarsi solo sullo sviluppo dei supporti di backup. La funzionalità principale di RAID è quella di conservare più copie di uno stesso dato in modo che la perdita di uno dei dischi non provochi la totale perdita dei dati in esso contenuti visto che questi sono replicati in altri dischi. Esistono sono due concetti fondamentali nell’ambito dei RAID: Mirroring e Striping; il Mirroring è la capacità di un RAID di replicare dei dati scrivendoli contemporaneamente su più dischi dell’array; in questo caso alla rottura di un dischi basterà semplicemente sostituirlo e ricostruire i suoi dati presenti su altri dischi. Lo Striping è invece una tecnologia che permette di aumentare notevolmente le prestazioni del RAID perché prevede la scrittura dei dati distribuita su più dischi contemporaneamente aumentando così la velocità di scrittura del dato. I tipi di RAID più importanti sono il tipo 0, il tipo 1 e il tipo 5; il RAID 0 non offre praticamente alcuna protezione del dato in quanto implementa solo lo striping e quindi aumenta solamente le performance; ha perciò il grande difetto di una perdita dei dati nel caso della rottura di un disco. Il RAID 1 implementa solamente il mirroring e garantisce la migliore protezione possibile dei dati ed ha anche performance elevate (non come il RAID 0 però), ma il difetto maggiore è la maggiore disponibilità di spazio poiché salvare N byte necessita 2N byte di spazio. Il RAID 5 implementa lo striping a livello di blocchi con controlli di parità, suddividendo cioè il dato in blocchi e distribuendolo tra i vari dischi. Esso offre il miglior rapporto qualità/prezzo e garantisce anche un’elevata protezione dei dati. Per contro esso richiede la presenza di almeno 3 dischi per implementarlo ed il salvataggio di N byte necessita di NK (con K<2) byte di spazio. Infine è stato creato anche il RAID 0+1 che, come si nota dal nome, unisce le caratteristiche del tipo 0 e 1 arrivando a fornire prestazioni elevatissime (grazie allo striping) e ottima protezione dei dati (dovuta al mirroring). I contro di questo tipo RAID sono l’uso dello spazio doppio rispetto ai dati salvati come nel RAID 1 e l’utilizzo di 4 dischi come minimo per supportare RAID 0+1.
Il DLGS 196/2003, ovvero la famosa legge sulla privacy in vigore in Italia, impone notevoli sforzi sai logici che pratici, al sistemista informatico soprattutto se specializzato in sicurezza. In breve la legge indica che è considerato reato, qualsiasi informazione acquisita abusivamente, con o senza tecniche informatiche, come l’analisi dei log dei router aziendali o l’analisi dei messaggi di posta elettronica, che possa fornire informazioni sensibili sulla persona o meglio sul dipendente di una ditta, come ad esempio l’orientamento religioso o sessuale oppure le visite di siti web non attinenti allo specifico lavoro del dipendente, o comunque che non portino un interesse per l’azienda. Il sistemista pertanto con la legge 196/2003 si ritrova in notevole difficoltà, infatti ha l’obbligo, essendo stato assunto dall’azienda, di assicurare la protezione e la sicurezza della rete aziendale dall’ primo all’ultimo nodo e potrebbe incappare in problemi che la stessa azienda gli presenta del tipo “ Tizio frutta poco ma esce tardi dall’ufficio, e richiede sempre gli straordinari come mai?” Dopo una breve analisi il sistemista si potrebbe accorgere, ad esempio che il dipendente negligente, in realtà utilizza lo straordinario per visitare siti internet e/o spedire email (qui non è importante tanto il contenuto ma proprio a chi viene spedita) che non hanno assolutamente attinenza al mondo del lavoro. Purtroppo già quest’ operazione ha fatto si che il sistemista violasse il DLGS 196/2003, visto che ha effettuato operazioni di auditing e log analisys scoprendo, anche se involontariamente, cosa e quando ha svolto quelle operazioni, pertanto le prove portate eventualmente in tribunale risulterebbero nulle , visto che la legge non considera prove che sono state prese abusivamente, anzi a sua volta il sistemista potrebbe essere denunciato.
In fine l’unica soluzione per il sistemista sono delle precauzioni che gli permettano di evitare il più possibile di cozzare con la legge in questione. La prima cosa che un sistemista dovrebbe fare, prima ancora di mettersi a lavoro, sarebbe quello di pensare, facendosi uno schema mentale su cosa il DLGS 196/03 gli permette di fare e cosa invece gli è vietato. In questo modo il sistemista si mette già al riparo da possibili denunce sulla violazione della privacy. Inoltre nel caso fosse necessario proprio violare la privacy, il gestore della rete potrebbe porsi la domanda: “Ma è proprio necessario farlo? Il dipendente ha commesso un reato così grave?”. Se la risposta è affermativa potrebbe autodenunciarsi alle forze dell’ordine, dichiarando di aver violato la privacy ma si pone nello stesso momento di poter validare le prve recuperate sul dipendente indisciplinato, altrimenti se la risposta è negativa potrebbe attuare delle serie di precauzioni affichè non avvengano più alcun tipo di violazione . Innanzitutto un ottimo sistemista potrebbe far firmare a ogni dipendente una liberatoria sulla privacy, che informa ai dipendenti della compagnia che in quell’ azienda sono presenti tecniche di controllo avanzato per garantire la sicurezza informatica e non, dell’azienda. Successivamente potrebbe ridurre i possibili accessi a siti web inserendo nel proprio proxy o firewall, nell’apposita white list, gli unici siti web autorizzati dalla stessa compagnia ad essere consultati essendo stati ritenuti validi e di interesse per l’azienda. Facendo ciò il sistemista di una rete aziendale ha rispettato la legge 196/03.
I virus informatici, hanno come principale scopo, proprio come i virus che colpiscono gli essere umani, quello di infettare e recare il maggior danno possibile al computer vittima, che a sua volta infetterà un altro pc. Esistono ormai un infinità di virus e ogni giorno ne vengono creati un infinità, ed è per questo motivo che una rete o un singolo desktop, non può mai considerasi sicuro. I virus, come abbiamo detto sono tantissimi ma possono essere catalogati in opportune categorie in base alla loro tipologia di infezione.
Esistono:
In passato i virus più diffusi erano proprio i virus camuffati. Inoltre, visto anche la “semplicità” dei virus stessi. in passato gli antivirus controllavano solo le "signature" dei virus, che identifica univocamente ogni virus. Questo però generava dei “falsi positivi” ossia ogni tanto quelle sequenze di byte venivano trovate all’interno di programmi non infetti. In quei casi venivano ignorate. Ecco perché i virus tentavano di cammuffarsi. Non, in realtà, per non essere identificati, ma per essere scambiati per un “falso positivo” e quindi ignorati. Ma come infettano i virus di oggi? Negli ultimi tempi la robustezza e la sempre crescente qualità dei sistemi antivirus abbia reso terribilmente difficile ingannare questi strumenti di difesa. Le moderne tecniche antivirus non si limitano ormai solo a controllare le signature ma effettuano check molto più sofisticati rendendo praticamente impossibile il diffondersi di virus camuffati in questo modo.
Perciò negli ultimi anni si è affermato un nuovo concetto, quello di social engineering applicato alla diffusione dei virus. Il social engineering, ovvero l’ “arte dell’inganno” è oggi la tecnica più usata per violare la sicurezza di un oggetto/soggetto. Infatti ormai la sicurezza in un sistema informatico, anche domestico, è molto alta grazie alla presenza di Firewall, antivirus, uniti anche a software anti malfare spyware ecc.. Pertanto ormai l’unico modo di creare danno è quello di ingannare l’essere umano e non più il PC, ad esempio ultimamente vi è una forte diffusione di e-mail dove il loro scopo non è altro che quello di fingersi qualcun altro.
L’approccio minimalista che usa il sistemista è dovuto alla “regola d’oro” la quale specifica che “tutto ciò che non c’è non si può rompere” e questo è proprio il punto fondamentale di questo approccio. Il sistemista durante il processo di progettazione deve appunto cercare di eliminare ogni componente superflua del sistema in modo che questa non possa essere la base per una mancanza di sicurezza del sistema stesso. La realizzazione della sicurezza di un sistema operativo si differenzia a partire dal tipo di sistema sotto esame: in sistemi Open Source è possibile procedere con l’approccio minimalista modificando direttamente il kernel (con maggiore spazio di manovra ma maggiori possibilita di sbagliare), cioè eliminando ogni modulo che viene ritenuto in eccesso e ricompilando poi il kernel modificato; in sistemi operativi dove non è possibile modificare il kernel bisogna procedere con la disattivazione dei moduli non strettamente necessari anche se questi non verranno eliminati definitivamente come nel caso di kernel modificabili; questa operazione è detta Hardening di un sistema operativo cioè il lavoro svolto per aumentare la sua sicurezza. Oltre ai moduli base bisogna ovviamente assicurare anche i moduli che ci permettono di svolgere le operazioni per cui il sistema è stato creato. Un problema che può sorgere da questo approccio è quello delle dipendenze: il sistemista deve infatti conoscere le dipendenze (esplicite o implicite) tra i vari servizi, cioè la possibilità che un determinato servizio necessiti dell’attivazione automatica di un altro servizio per poter essere attivato. Questa operazione di studio delle dipendenze deve essere una parte fondamentale della progettazione in modo da evitare la mancanza di servizi che impedirebbero così alla macchina di continuare nel suo funzionamento. Tutte queste considerazioni fanno capire che l’ operazione necessaria e primaria nel rendere un sistema sicuro sia quella di conoscere nei dettagli il sistema e le sue componenti in modo da evitare progettazioni dove mancano dei moduli di fondamentale importanza.
La complessità di un sistema, e in particolar modo di un sistema informatico è una delle
principali cause di errori e di problemi che possono sfociare in bug riguardanti la sicurezza. Come è ben noto infatti, quanto più aumenta il grado di complessità di un sistema qualsiasi, più alta è la probabilità di compiere errori. Tali errori tuttavia non provengono da parte della “macchina”, che programmata correttamente non sbaglierà mai pur essendo il problema molto complesso, ma dal lato “Umano”, che come è risaputo e scientificamente comprovato all’aumentare della complessità di un problema tende ad aumentare il numero di errori commessi. Questo aspetto è da non sottovalutare nell’ambito della sicurezza, e più in generale nell’informatica, in quanto tutte le macchine programmate sono programmate appunto dall’uomo che in quanto tale commette sistematicamente errori. Si calcola che, per esempio, per quanto possano essere bravi dei programmatori , è presente 1 bug ogni 500 righe di codice. Se si pensa che un sistema operativo è composto da milioni di righe di codice, risulta subito evidente come programmi complessi come un sistema operativo possano essere fatti facilmente vittime di attacchi o di errori dovuti alla natura stessa del programma. Quindi la diminuzione del livello di sicurezza in un sistema è derivante dal fattore umano, fattore tuttavia ineliminabile. Gli errori più comuni dei programmatori sono di solito da ricercare “nei soliti”: Division by zero (La maggior parte dei processori generano una eccezione quando viene tentata la divisione intera per zero. Il risultato è tipicamente la terminazione del programma anche se in alcuni casi (specialmente quelli che impiegano l'aritmetica a virgola fissa nel caso in cui non sia disponibile hardware dedicato per la virgola mobile) viene impiegato un comportamento simile allo standard IEEE, utilizzando grandi numeri positivi e negativi per approssimare gli infiniti.), buffer overflow (consiste nel fatto che tale programma non controlla in anticipo la lunghezza dei dati in arrivo, ma si limita a scrivere il loro valore in un buffer di lunghezza prestabilita, confidando che l'utente (o il mittente) non immetta più dati di quanti esso ne possa contenere: questo può accadere se il programma è stato scritto usando funzioni di libreria di input/output che non fanno controlli sulle dimensioni dei dati trasferiti.). Ecco perché è necessario che i software siano testati e sottoposti a verifiche formali, a controllo della qualità etc. in quanto maggiori sono le garanzie derivanti da queste verifiche maggiore è la stabilità del sistema, maggiore sarà la sicurezza.
Ex: Si supponga di avere un server Web che contenga questo codice:
void func(char *str) { char buf[256]; strcpy(buf,str); }
Se la stringa inserita è maggiore di 256 caratteri, la funzione strcpy copierà la parte in eccesso nel buffer, provocando un buffer overflow.
Spesso i concetti di autenticazione autorizzazione vengono confusi o non sono chiaramente definiti. Innanzitutto va detto che i due concetti sono sequenziali: ovvero l’autenticazione precede l’autorizzazione. Quindi senza autenticazione non si può essere autorizzati a fare qualcosa. Si può dunque affermare che l’autenticazione è la procedura tramite la quale si procede all’ identificazione di un soggetto (teoricamente “unico”) a una macchina o a un software. Tuttavia l’autenticazione verifica l’esattezza delle informazioni che si inseriscono (ad esempio password) ma non garantisce l’identità “reale” di chi inserisce la password. Successivamente all’essersi autenticati vi è la fase di autorizzazione, che è il processo di garantire o negare l’accesso alle risorse di un sistema in cui ci si è autenticati. Di solito le specifiche dell’autorizzazione, ovvero chi può usufruire delle risorse del sistema, sono a discrezione dell’amministratore di sistema che ha appunto il compito di assegnare o revocare le autorizzazioni. Per “risorsa del sistema” ovviamente si intende qualunque risorsa, dalla concessione o negazione di un determinato privilegio di accesso ad un file (lettura/scrittura/modifica/cancellazione) alla concessione o negazione dell’accesso ad una specifica risorsa di rete (un disco condiviso, un sito web, ...). Nel caso del SSO, basta una sola autenticazione per aver accesso ai vari servizi di cui si vuole disporre, ciò evita il problema di doversi autenticarsi ogni volta che si richiede un nuovo servizio a un nuovo server. Lo stato dell’autenticazione (non i dati) viene trasmesso attraverso un token agli altri server. Tuttavia se un attacker riuscisse a rubare i
dati per l’autenticazione sso di un utente avrebbe accesso a tutti i servizi di cui l’utente poteva regolarmente usufruire.
La metodologia classica e la più usata (ma al contempo più debole) di autenticazione è senza dubbio la coppia username/password. Tramite una stringa alfanumerica conosciuta unicamente dall’utente, è possibile farsi riconoscere dal sistema che così applicherà le autorizzazioni pre-impostate dall’amministratore di sistema. Tuttavia questo metodo ha molti punti deboli: innanzitutto le password possono essere rubate, e quindi l’eventuale ladro potrebbe impersonare il legittimo utente, creando notevoli problemi di sicurezza. Inoltre password brevi sono facilmente scopribili tramite attacchi di tipo “brute force” e inoltre una buona amministrazione richiederebbe il cambio abbastanza frequente delle password. Tuttavia rimane il mezzo di autenticazione più utilizzato in quanto è quello che garantisce costi bassissimi e prestazioni tutto sommato abbastanza buone.
Al contrario la biometria, scienza che ha come oggetto di studio la misurazione delle variabili fisiologiche o comportamentali tipiche degli organismi, attraverso metodologie matematiche e statistiche, ha costi molto alti ma in compenso è ugualmente alta anche la sicurezza dell’autenticazione. Metodi di autenticazione biometrica possono considerarsi le impronte digitali, la lettura dell’iride o della retina, la struttura venosa della mano, la geometria del volto o della mano, il timbro della voce. La più economica tra queste è la lettura delle impronte digitali, che con costi bassi assicura un certo grado di sicurezza nell’autenticazione, anche grazie a ultime tecnologie che oltre alle impronte controllano anche la temperatura e la pulsazione. Anche la scansione della struttura venosa è un ottimo metodo di autenticazione biometrica, sicuramente più costoso di quello delle impronte digitali, ma molto più robusto in quanto la sicurezza del sistema è data dall’estrema difficoltà di riproduzione del modello dei percorsi che rende dunque praticamente impossibile la clonazione. La scansione del volto e delle mani invece non risulta essere un buon metodo, in quanto le componenti fisiologiche in questione sono soggette a cambiamenti con l’avanzare dell’età e non solo. Forse il sistema più sicuro dal punto di vista della sicurezza dell’autenticazione è la scansione dell’iride, che risulta essere estremamente complesso e ricco di informazioni come modello fisiologico, con oltre 200 punti unici: basti pensare che le iridi dei due occhi di un medesimo individuo sono differenti. Il grosso problema di questo metodo sono i costi esorbitanti che richiedono le apparecchiature atte alla scansione. Infine la scansione del timbro di voce, che forse risulta essere il metodo meno preciso in quanto le prestazioni del riconoscimento della voce possono variare sia in funzione della qualità del segnale così come a causa del cambio di fonte utilizzata per l’enrollment e per la verifica; oltre che a disturbi esterni nella cattura della voce, a malattie (tosse, vento), o addirittura nel caso di ragazzi e adolescenti, il cambio del timbro di voce dovuto alla naturale crescita.
Nel campo della sicurezza informatica si definisce autenticazione il processo tramite il quale un computer,un software o un utente, verifica la corretta identità, tramite opportuni controlli, di un altro computer,software o utente che vuole comunicare attraverso una generica “connessione”. Se l’autenticazione andrà a buon fine,il sistema rilascerà all’utente determinate autorizzazioni, cioè una “lista” di azioni che solo quell’utente autenticato precedentemente potrà o non potrà compiere sulla parte di sistema interessata; l’autorizzazione dipende strettamente dall’autenticazione. L’autorizzazione viene praticata solo dopo che l’utente è stato opportunamente autenticato, in un momento che è sia logicamente che fisicamente distinto da quello
dell’autenticazione.
I controlli opportuni che il processo di autenticazione esegue vengono raggruppati nel
campo del CONTROLLO DEGLI ACCESSI.
Il controllo degli accessi è un campo vastissimo che prende in considerazione tutti i casi nei quali è necessario fornire un accesso selettivo a informazioni o a locazioni specifiche. Indipendentemente dal metodo utilizzato e dall’oggetto (o dato) sul quale vogliamo imporre un accesso controllato, lo scopo del controllo degli accesso è sempre lo stesso: fare in modo che solo chi è autorizzato possa accedere.
L’autorizzazione riguarda qualunque risorsa, dalla concessione o negazione di un determinato privilegio di accesso ad un file (lettura/scrittura/modifica/cancellazione) alla concessione o negazione dell’accesso ad una specifica risorsa di rete (un disco condiviso, un sito web, ...).
Garantisce che le regole imposte dall’amministratore di sistema sugli oggetti appartenenti al sistema stesso vengano rispettate.
Un primo esempio di controllo degli accessi è davanti ai nostri occhi ogni giorno quando
accendiamo il PC. Per poter utilizzare il nostro sistema operativo ci viene chiesto di verificare la nostra identità inserendo username e password. In base allo username e alla password il sistema operativo è in grado di associare a noi il nostro profilo utente e di consentirci l’accesso a tutte quelle risorse e quei dati cui abbiamo diritto. Questo metodo fu uno dei primi “rimedi” per aumentare la sicurezza nei sistemi, tuttora è il più diffuso ma al tempo stesso il più insicuro, possibili attacchi di sniffing, snooping, guessing ecc... E’ quindi evidente che l’obbligo di inserire username e password può non essere sufficiente a garantire un corretto e sicuro controllo degli accessi ai sistemi operativi. Per ovviare a questo problema sono stati predisposti metodi alternativi, alcuni anche molto complessi:
Recentemente si sta sviluppando sempre più un tipo di autenticazione basata su caratteristiche fisiche di una persona, intrinsecamente affidabili perché uniche di quell’individuo. Queste caratteristiche vengono trattate dalla BIOMETRIA,che fornisce alcuni metodi di autenticazione: