|
Appunti informatica |
|
Visite: 715 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Report sullo stato attuale dei processi di manutenzione e sull' impiego dei CMMSReport sullo stato attuale dei processi di manutenzione e sull' impiego dei CMMS Introduzione. La La velocità: una misura difficileLa velocità: una misura difficile Cosa vuoi dire che un processare è migliore Calcolo di MinrCalcolo di Minr Scopo Calcolo del minimo numero reale rappresentabile |
Protezione e Sicurezza
Si parla di protezione in presenza di meccanismi, messi a disposizione dal SO, per controllare l'accesso dei processi alle risorse di un sistema, allo scopo di garantire che ogni singolo processo usi le risorse solo in modi consistenti con le politiche d'uso stabilite per ciascuna di esse. Si noti che meccanismi e politiche sono concettualmente distinti: una politica di protezione descrive cosa (e in che senso) deve essere protetto, un meccanismo di protezione descrive invece come deve essere implementata la protezione e in generale deve essere capace di realizzare una varietà di politiche.
In un sistema è possibile distinguere processi (soggetti) e risorse (oggetti): ogni oggetto ha un nome (identificativo) univoco ed un insieme di operazioni con le quali può essere manipolato; ogni soggetto può accedere solo alle risorse per le quali è autorizzato e più in generale vale il principio del need to know, secondo il quale un processo deve poter accedere solo alle risorse necessarie per compiere la sua funzione (per esempio, un processo P chiama una routine A, ma A deve poter accedere solo ai parametri passati da P e non a tutte le variabili di processo di P), il che limita automaticamente i danni che un processo con errori può creare nel sistema.
Si definisce dominio di protezione un insieme di coppie <oggetto, diritti> (cioè un insieme di oggetti e le operazioni che è possibile eseguire su di essi) e se un processo opera su un dominio di protezione significa che quest'ultimo specifica per il processo le risorse che può usare e il modo in cui le può usare. Un'associazione statica tra un processo ed un dominio determina che per tutta la sua esecuzione esso operi sempre su quello stesso dominio (le risorse ad esso disponibili non cambiano mai); tuttavia un processo si trova tipicamente ad operare su risorse differenti in fasi differenti della sua esecuzione e, poichè non è auspicabile inserire risorse che userà in momenti distinti tutte insieme nello stesso dominio (coerentemente col need to know), risulta preferibile che esso possa commutare dinamicamente tra i domini: si parla in tal caso di associazione dinamica. In generale è possibile definire un dominio per il singolo utente (al cambio di utente si cambia dominio), per il singolo processo (alla commutazione di processo si cambia dominio) o anche per il singolo modulo di programma (nel passaggio da un modulo all'altro si cambia dominio
Un tipico meccanismo per realizzare una varietà di politiche di protezione è dato dalla matrice degli accessi: se un processo P opera sul dominio Di e tenta di eseguire l'operazione M sull'oggetto Oj, il meccanismo controlla che M sia contenuto nella casella Access(i,j) e in caso affermativo l'operazione viene eseguita, altrimenti viene generato un errore. Quali diritti di accesso inserire nella matrice e quale dominio associare a ciascun processo sono decisioni che attengono alla particolare politica di protezione definita dai progettisti o scelta dagli utenti.
Matrice degli accessi (associazione statica)
DominioOggetto F1 F2 F3 Printer
D1 Read Read
D2 Print
D3 Read Execute
D4 Read/Write Read/Write
In una matrice degli accessi modificata, l'operazione di commutazione da un dominio Da ad un dominio Db può essa prevista inserendo in Access(a,b) il diritto switch (o enter)
Matrice degli accessi (associazione dinamica)
DominioOggetto F1 F2 F3 Printer D1 D2 D3 D4
D1 Read Read - SWITCH
D2 Print - SWITCH
D3 Read Execute -
D4 Read/Write Read/Write SWITCH SWITCH -
Particolari diritti di accesso che consentono di modificare ulteriormente la matrice degli accessi sono il diritto di copia, il diritto di proprietario e il diritto di controllo. Il diritto di copia consente di copiare il diritto d'accesso cui è associato ovunque all'interno della colonna
Matrice degli accessi con diritti di copia
DominioOggetto F1 F2 F3 Printer * Copia
D1 Read Read Print* in grassetto i diritti
D2 Print* creati grazie alla copia
D3 Read* Execute
D4 Read/Write Read* Read/Write
Una variante del diritto di copia è il diritto di trasferimento: il diritto copiato da (i,j) a (k,j) viene eliminato da (i,j)
DominioOggetto F1 F2 F3 Printer * Trasferimento
D1 Read Read Print* in grassetto i diritti
D2 [Print*] trasferiti (in parentesi
D3 [Read*] Execute quadre quelli eliminati)
D4 Read/Write Read* Read/Write
Altra variante del diritto di copia è la propagazione limitata: il diritto copiato da (i,j) a (k,j) perde in (i,j) il diritto di copia
DominioOggetto F1 F2 F3 Printer * Propagazione Limitata
D1 Read Read Print* in grassetto i diritti
D2 Print creati hanno avocato a sè
D3 Read Execute il diritto di copia
D4 R/W Read* Read/Write
Il diritto proprietario consente di aggiungere/rimuovere ogni diritto all'interno della colonna
Matrice degli accessi con diritti di proprietario
DominioOggetto F1 F2 F3 Printer
D1 OWNER/R R Pr in grassetto i diritti
D2 Ex R* [Pr*] creati, in parentesi quadre
D3 OWNER/R* Ex quelli rimossi
D4 [R/W] R/W* R/W OWNER
Il diritto controllo consente di rimuovere ogni diritto all'interno di una riga: se (i,j) contiene "control" allora un processo attivo in Di può rimuovere (sotto, in parentesi quadre) diritti da ogni colonna della riga relativa a Dj
Matrice degli accessi modificata con diritti di controllo
DominioOggetto F1 F2 F3 Printer D1 D2 D3 D4
D1 Read [Read] - Switch
D2 Print CONTROL - Switch
D3 Read Execute -
D4 Read/Write Read/Write Switch Switch -
In generale una matrice degli accessi si presenta come una matrice sparsa e ammette due alternative rappresentazioni in forma compatta, la lista degli accessi (ACL) e la capability list (CL). La ACL è una rappresentazione per colonne, ovvero per ogni oggetto la lista contiene le coppie ordinate <dominio, diritti> (limitatamente ai domini con insieme di diritti non vuoto): quando da Di viene richiesta un'operazione M su Oj, si controlla in <Di, R> che M appartenga a R, in alternativa si controlla in una lista di default, altrimenti se entrambi i controlli falliscono viene generato un errore. La CL è una rappresentazione per righe, ovvero per ogni dominio la lista contiene le coppie ordinate <oggetto, diritti> (capability), dove l'oggetto è rappresentato dal suo indirizzo fisico. Nei SO che definiscono il concetto di gruppo di utenti, in luogo dei domini si avranno degli UID (user identifier) e dei GID (group identifier). Si osservi inoltre che un sistema di protezione realizzato esclusivamente con ACL o CL può presentare alcuni problemi di efficienza: con ACL l'insieme delle informazioni relative ai diritti d'accesso possedute da un singolo dominio è sparso nelle varie liste, per cui ogni accesso da parte di quel dominio ad un oggetto qualunque implica una ricerca completa in una delle lista; con CL la rimozione di un oggetto con diritti d'accesso (revoca dei diritti d'accesso) per ogni dominio comporta la ricerca in tutte le liste; la soluzione adottata comunemente consiste nell'usare una combinazione dei due metodi.
UNIX mette a disposizione un meccanismo per la creazione di un dominio di protezione, consentendo all'utente (o l'amministratore) di definire per ciascun file 3 bit di read, write e execute, settati diversamente a seconda che il soggetto operante sia il proprietario del file, il gruppo o tutti gli altri. Si noti che ogni dominio è associato ad un utente e il cambio di dominio corrisponde al temporaneo scambio di identità tra utenti: ad ogni file sono associati l'identificazione del proprietario (user-id) ed un bit di dominio (set-uid); quando un utente A (user-id=A) inizia l'esecuzione di un file di cui è proprietario B (user-id=B), allora - solo se il file ha set-uid=1 - l'user-id di A è posto temporaneamente uguale a B (simulando in tal modo lo switch). Se un processo tenta di eseguire un accesso del tipo fd=open(<nome file>, <diritti d'accesso>) si cerca nell'ACL corrispondente e si verifica che l'accesso sia consentito, in caso affermativo nella tabella dei file aperti viene creata una nuova entry, identificata da fd, alla quale vengono associati tutti i diritti d'accesso contenuti nella corrispondente capability list (ogni successiva operazione viene eseguita previa verifica che il diritto d'accesso sia tra quelli consentiti
Si parla di sicurezza in presenza di meccanismi che consentano la limitazione dell'accesso alle risorse di un sistema da parte di utenti non espressamente autorizzati (in tal caso non è in discussione la semplice correttezza del tipo di accesso, bensì la sua liceità stabilita d'autorità per motivi di sicurezza). La maggior parte dei SO permette a singoli utenti di determinare chi possa leggere/scrivere i propri file/oggetti (controllo discrezionale degli accessi), tuttavia in alcuni ambienti (militare, ospedaliero, aziendale, ) vengono stabilite precise regole su chi può leggere/scrivere cosa e non possono essere modificate senza che dall'alto (un amministratore, per esempio) venga rilasciato un permesso speciale (controllo degli accessi obbligatorio).
Il modo più semplice di garantire la sicurezza nell'accesso ai dati è quello di vincolarlo alla verifica di un valore f(X) prodotto da una funzione X f(X) non invertibile: in alternativa si può usare una password, un oggetto fisico dell'utente (chiave o scheda) o la verifica di suoi specifici attributi (firma, impronte digitali, scansione della retina
Una protezione superiore si ottiene usano la firma elettronica, basata sulla cosiddetta crittografia asimmetrica. Mentre nella c.simmetrica la stessa chiave consente di crittare/decrittare un messaggio di cui si desidera la segretezza, nella c.asimmetrica è necessario creare una coppia di chiavi, una chiave pubblica (da diffondere) ed una chiave privata (da tenere segreta): la proprietà fondamentale di questa coppia di chiavi è che un messaggio cifrato usando una delle due può essere decrittato soltanto usando l'altra chiave. La coppia di chiavi viene generata (chiavi a 1024 o più bit sono considerate molto sicure) usando algoritmi basati su funzioni unidirezionali in modo tale che la conoscenza della chiave pubblica e dell'algoritmo stesso non siano sufficienti per risalire alla chiave privata (per esempio è sufficiente un piccolo computer e qualche millesimo di secondo per moltiplicare due numeri primi da 150 cifre, ma occorre il lavoro di decine di migliaia di computer per un anno per trovare i fattori primi di quel numero). Ogni utilizzatore si crea la propria coppia di chiavi, la chiave privata viene tenuta segreta e mai rivelata a nessuno, viceversa la chiave pubblica viene diffusa in vari modi: può essere aggiunta automaticamente in coda a ciascun proprio messaggio nelle varie conferenze elettroniche cui si partecipa, o può essere depositata in archivi pubblici (keyserver) a disposizione di chi la desideri, l'importante è che sia liberamente accessibile. Tipicamente il messaggio cifrato viene codificato con la chiave pubblica dal mittente e decrittato con quella privata dal destinatario: è come se il messaggio fosse una cassaforte con due chiavi distinte, una usata per aprirla (destinatario del messaggio) e una per chiuderla (mittente del messaggio
Un altro possibile utilizzo dell'algoritmo di crittografia asimmetrica consente (come detto all'inizio) la creazione di una firma digitale, a fini di autenticazione: in soldoni un messaggio viene crittato con la chiave privata e i destinatari possono decrittarlo usando la chiave pubblica, dacché possono risalire con certezza alla sua identità. Un utente che vuole creare una firma per un documento, ricorre quindi ad una funzione hash e ricava l'impronta digitale del documento (message digest), un file di dimensioni relativamente piccole che contiene una sorta di codice di controllo relativo al documento stesso (la funzione hash è fatta in modo da rendere minima la probabilità che da testi diversi si possa ottenere il medesimo valore dell'impronta, inoltre è one-way, a senso unico, cioè dall'impronta è impossibile ottenere nuovamente il testo originario), dopodiché utilizza la propria chiave privata per codificare l'impronta digitale ottenendo la firma (che dipende dall'impronta digitale del documento e quindi dal documento stesso, oltre che dalla chiave privata dell'utente), che viene infine allegata al documento: qualunque destinatario del documento in chiaro può verificarne l'autenticità decodificando la firma con la chiave pubblica del mittente, ottenendo l'impronta digitale del documento, e confrontando quest'ultima con quella che si ottiene applicando la funzione hash (pubblica) al documento ricevuto (se le due impronte sono uguali, l'autenticità del documento è garantita
Ricapitolando, se A vuole inviare un documento a B garantendo la segretezza, l'integrità e la propria identità (cioè l'identità del mittente) procede in questo modo: codifica il documento con la sua chiave privata (identità e integrità) e poi con la chiave pubblica di B (segretezza); chiaramente quando B riceve il messaggio lo decodifica con la sua chiave privata (segretezza) e poi con la chiave pubblica di A (identità e integrità
Un certificato digitale è un documento elettronico che attesta, con una firma digitale, l'associazione tra una chiave pubblica e l'identità di un soggetto (persona, società, computer, ) e tipicamente include una chiave pubblica, i dati identificativi del soggetto, un periodo di validità e un URL alla lista dei certificati revocati (CRL), il tutto firmato da una terza parte fidata: un certificato ha solitamente un intervallo temporale di validità al di fuori del quale deve essere considerato non valido; un certificato può essere revocato se si scopre che la relativa chiave privata è stata compromessa, oppure se la relazione tra soggetto e chiave pubblica specificata nello stesso è incorretta o cambiata (un utente oltre a controllare che il certificato sia fidato e non sia scaduto dovrebbe controllare anche che non sia stato revocato, consultando il CRL). L'uso più comune dei certificati digitali è per l'accesso ai siti web via HTTPS, ovvero HTTP su protocollo sicuro SSL (attraverso un certificato ci si può accertare che il server cui ci si è connessi è autentico, ovvero è effettivamente quello che dichiara di essere): il protocollo SSL prevede che, alla connessione, il server fornisca il proprio certificato digitale e se questo è firmato da un'autorità di certificazione riconosciuta allora possiamo utilizzare la chiave pubblica presente nello stesso per avviare una comunicazione sicura. Si tenga presente infine che esiste una intera gerarchia di enti (CA, autorità di certificazione) che emettono certificati e la legge prevede che il certificato base da adottare sia quello fornito dal Ministero.
Appunti su: |
|