Torna alla pagina di Sistemi Operativi
:: Appunti 2.0 ::
Protezione
Obiettivi della protezione
Per protezione si intende la messa in sicurezza delle risorse (dette anche oggetti) da parte di accessi non autorizzati di utenti, programmi o processi. Stabilito quest'obiettivo, bisogna distinguere le regole (che tracciano le linee politiche della strategia di protezione ) dai meccanismi (gli strumenti che le applicano) per garantire maggior flessibilità.
Domini di protezione
Un sistema è normalmente composto sia da risorse fisiche (l'hardware) che informative (i file, le strutture di comunicazione, i programmi), ognuna delle quali è caratterizzata da un nome univoco e da un insieme di operazioni consentite.
I processi dovrebbero poter accedere solo a quelle risorse per cui hanno l'autorizzazione, che andrebbe distribuita secondo il principio di minima conoscenza: un processo deve poter accedere solo alle risorse strettamente necessarie per la propria computazione. In questo modo si riesce a limitare la quantità di danni potenziali dovuti ad un processo malfunzionante.
Struttura del dominio di protezione
Per meglio applicare il principio di minima conoscenza ogni processo viene fatto operare in un dominio di protezione, che definisce l'insieme di risorse cui può accedere ed il tipo di operazioni lecite che è autorizzato a compiere. Per ognuno di essi vengono perciò definiti una serie di diritti di accesso, composti da una coppia <nome oggetto, insieme-diritti>
. Notare che i domini non devono essere necessariamente disgiunti, ma possono condividere alcuni dei loro diritti.
L'associazione tra diritto e dominio può essere statica o dinamica. Nel primo caso il set di risorse disponibili per il processo è fissato all'inizio per tutta la durata dell'esecuzione; è semplice da implementare ma spesso assegna più diritti di quanto effettivamente il processo abbia bisogno in un dato momento. Con l'associazione dinamica invece vengono forniti meccanismi per cambiare dominio di protezione, il che meglio applica il principio di minima conoscenza a fronte però di una maggiore complessità.
Un dominio può coincidere con:
- un utente, quindi il cambio di dominio avviene quando un altro utente effettua l'accesso al sistema
- un processo, quindi si ha un cambio di dominio in concomitanza di un cambio di contesto
- una procedura, in cui si ha un cambio di dominio ad ogni nuova invocazione di procedura
Va però ricordato che nei cambi di dominio (switch) la loro struttura rimane inalterata, comprese le operazioni abilitate sulle risorse. Per poter modificare diritti e struttura bisogna averne l'autorità.
Matrice d'accesso
Il modello di protezione può essere rappresentato in modo astratto con la matrice di accesso, in cui le righe indicano i domini di protezione e le colonne gli oggetti. In ogni cella vengono invece definiti i diritti d'accesso, ridotti a una lista di operazioni consentite. La decisione del tipo di dominio in cui deve essere incluso un processo spetta generalmente al sistema operativo, mentre è l'utente che decide il contenuto degli elementi nella matrice aggiungendo colonne (quindi creando nuovi oggetti) e impostando alcuni diritti. Notare che la stessa matrice d'accesso può essere considerata come risorsa, dunque si possono impostare diritti d'accesso anche su di essa.
La modifica controllata del contenuto degli elementi della matrice d'accesso è resa possibile da tre operazioni:
- copia di un diritto d'accesso da un dominio all'altro, ma solo all'interno della stessa colonna. Si attua col comando
copy
e si rappresenta in matrice con un asterisco in coda al diritto d'accesso. Una variante è il trasferimento del diritto (che non è altro che una copia seguita da una cancellazione) e un'altra è la copia con limitazioni alla diffusione (il diritto copiato non può ulteriormente propagarsi)
- proprietà, che consente a un processo autorizzato di aggiungere o rimuovere diritti
- controllo, che può essere applicata solo agli oggetti del dominio e che consente di cambiare gli elementi di una riga della matrice d'accesso
I diritti di copia e proprietà permettono di evitare il propagarsi dei diritti d'accesso, ma non garantiscono il contenimento delle informazioni, che è considerato un problema irrisolvibile.
Implementazione della matrice d'accesso
Tabella globale
La tabella globale è la soluzione più semplice e prevede di rappresentare la matrice come una tabella i cui elementi sono terne ordinate <dominio, oggetto, diritti>
.
Un primo limite di tale soluzione è che la tabella risulterebbe molto grande (spesso con dimensioni maggiori della memoria centrale) e per giunta la maggior parte delle celle sono vuote dato che non sono definiti diritti per ogni coppia dominio-oggetto. Altro limite è che non sono possibili raggruppamenti di oggetti o domini, cosa che consentirebbe una più facile gestione degli stessi.
Liste di controllo degli accessi
Le liste di controllo degli accessi sono una memorizzazione per colonne della matrice degli accessi: per ogni oggetto si crea una lista composta da coppie ordinate <dominio, diritti>
. Si può definire anche un insieme di diritti d'accesso predefinito, da controllare prima della lista di controllo degli accessi.
Liste di capacità dei domini
Le liste di capacità dei domini sono una memorizzazione per righe della matrice degli accessi, e consistono in una lista per ogni dominio formata da coppie <oggetto, diritti>
. Gli oggetti sono rappresentati dal loro nome fisico o dal loro indirizzo, e vengono chiamati capacità: il semplice possesso delle capacità autorizza l'accesso.
La lista delle capacità non è direttamente accessibile ma è essa stessa un oggetto protetto. E' gestita dal sistema operativo che concede accessi indiretti ai suoi elementi.
Il meccanismo lock-key
Il meccanismo lock-key (serratura-chiave) è un compromesso tra le due liste viste finora: ogni oggetto ha una lista unica di bit detta lock, mentre ogni dominio ne ha un'altra detta key. Un processo in esecuzione in un dominio può accedere a un oggetto solo se la sua key è in grado di aprire il lock interessato.
Tutto questo meccanismo viene gestito dal sistema operativo.
Confronto
Le liste di controllo degli accessi possono essere specificate dagli utenti e contengono informazioni globali, ma sono inefficienti su grandi sistemi.
Le liste della capacità dei domini sono invece relative agli oggetti dunque hanno informazioni localizzate e sistemi di revoca poco efficienti.
Revoca dei diritti d'accesso
In un sistema di protezione dinamica può essere necessario revocare i diritti di accesso su oggetti condivisi da più utenti. Tali revoche possono essere:
- immediate o ritardate
- selettive (che si riflettono su un numero limitato di utenti) o generali (su tutti)
- parziali (riguardano un numero limitato di diritti) o totali (tutti)
- temporanee o permanenti
Con lo schema basato sulla lista degli accessi la revoca è un'operazione semplice e immediata: basta cercare il diritto d'interesse e rimuoverlo. Per la lista delle capacità il meccanismo è invece più complesso poiché le informazioni si trovano distribuite su tutto il sistema e bisogna prima recuperarle. Esistono diverse tecniche che si prepongono questo fine:
- riacquisizione: le capacità sono periodicamente cancellate. Se un processo tenta di adoperarle e sono state cancellate, tenterà di riacquistarle; se l'accesso è stato revocato non potrà più riuscirci
- puntatori alle capacità: si mantiene per ogni oggetto una lista dei puntatori a tutte le capacità ad esso associate; per revocarne una basterà eliminare il puntatore corrispondente. E' una soluzione comune ma piuttosto costosa
- indirezione: le capacità puntano indirettamente agli oggetti, o meglio puntano a un unico valore in una tabella globale che a sua volta referenzia l'oggetto. L'operazione di revoca ricerca il valore desiderato in questa tabella e lo cancella. Questo sistema non consente la revoca selettiva
- chiavi: le chiavi sono un gruppo di bit associati ad una capacità. Ogni oggetto ha una chiave principale in base alla quale la capacità viene ricercata e verificata. La revoca setta la chiave con un nuovo valore, invalidando quelli precedenti
Sistemi basati sulla capacità
I sistemi basati sulle capacità mettono a disposizione un approccio nativo all'uso di risorse basato sulle capacità, offrendo agli utenti meccanismi per definirle e controllarle più efficacemente.
Protezione basata sul linguaggio
La protezione basata sul linguaggio evita di scaricare tutte le responsabilità di garantire la sicurezza sul sistema operativo prendendosene parte del carico al momento della compilazione del programma applicativo, incorporandola nel linguaggio di programmazione. Permette di conseguenza un controllo più granulare, guadagnando efficienza e flessibilità rispetto alla protezione basata sul kernel (che rimane comunque la più sicura).
Torna alla pagina di Sistemi Operativi