SICUREZZA NELLE APPLICAZIONI

annuncio pubblicitario
SICUREZZA NELLE APPLICAZIONI
I primi lavori sulla sicurezza informatica erano basati sul paradigma “riempi e rattoppa”, in cui gli
analisti cercavano e riparavano i difetti. Spesso veniva assegnato ad un team di esperti di prima
qualità il compito di provare la sicurezza di un sistema cercando di provocarne il
malfunzionamento. Il test era considerato una prova della sicurezza: se il sistema resisteva agli
attacchi era considerato sicuro. La scoperta dei problemi, a sua volta, portava ad una rapida
attività di patching (“rattoppo”) del sistema per riparare o ripristinare la sicurezza. Tuttavia, gli
sforzi per produrre una patch erano largamente inutili, e rendevano il sistema meno sicuro anziché
più sicuro, perché spesso introducevano nuovi difetti. Un modo per affrontare i potenziali
problemi è cercare di anticiparli.
ERRORI DI PROGRAMMI NON MALEVOLI
I programmatori e altri sviluppatori commettono molti errori, la maggior parte dei quali non è
intenzionale né malevole. Vi sono 3 tipi di errori classici:
1. Buffer overflow:
Un buffer overflow è l’equivalente informatico di versare 2 litri d’acqua in una brocca dalla
capacità di un litro. Un buffer è uno spazio di memoria in cui possono essere conservati i
dati. Poiché la memoria è finita, anche la capacità del buffer è finita. Sarebbe utile se,
durante l’esecuzione, il sistema producesse un messaggio d’errore per avvisare del
superamento dei limiti da parte dell’indice. Sfortunatamente, in alcuni linguaggi le
dimensioni del buffer non devono essere predefinite, pertanto non vi è modo di rilevare un
errore di superamento dei limiti. I casi più interessanti avvengono quando il sistema
possiede lo spazio immediatamente successivo all’array in overflow. Il riversamento
nell’area di codice o dei dati di sistema produce risultati simili a quelli per lo spazio utente.
Supponiamo che una persona ostile comprende il danno che può essere arrecato da un
buffer overflow. In primo luogo, l’aggressore può sostituire il codice nello spazio del
sistema. Se l’aggressore riesce ad ottenere il controllo mascherandosi come sistema
operativo, può eseguire molti comandi da una posizione di privilegio. Pertanto, sostituendo
alcune istruzioni subito dopo il ritorno dalla sua procedura, l’aggressore può ottenere di
nuovo il controllo del sistema operativo. Se il buffer overflow avviene nello spazio del
codice di sistema, l’aggressore inserisce semplicemente i dati di overflow che
corrispondono al codice macchina per le istruzioni.
2. Mediazione incompleta:
La mediazione incompleta è un altro problema di sicurezza che ci affligge da decenni.
Accade quando l’interazione fra 2 componenti del software è parziale: è stata trasferita
una parte delle informazioni senza però essere gestita completamente. Sostanzialmente
vengono accettati dei dati senza essere certi di averne verificata la sostanza, senza aver
completato le diverse fasi che prevedono il passaggio dei dati.
3. Errori dovuti allo scarto fra tempo di controllo e tempo di utilizzo:
Il terzo difetto di programmazione analizzato riguarda la sincronizzazione. Per migliorare
l’efficienza, i processori e i sistemi operativi moderni solitamente cambiano l’ordine in cui
sono eseguite le istruzioni. La falla “tempo di controllo/tempo di utilizzo” riguarda la
mediazione eseguita con un attacco. È nota anche come falla di sincronizzazione o di
serializzazione. Si supponga che una richiesta di accedere ad un file venga presentata come
una struttura dati, contenente il nome del file e la modalità di accesso. Una volta data
l’autorizzazione, il lavoro viene posto in una coda di operazioni da svolgere. Normalmente,
il mediatore per il controllo degli accessi riceve la struttura dati, determina se l’accesso
dovrebbe essere consentito, quindi rifiuta l’accesso e si ferma, oppure consente l’accesso e
inoltra la struttura dati al gestore. Per eseguire questa sequenza di autorizzazioni, il
mediatore del controllo degli accessi dovrebbe osservare il nome del file, e potrebbe
confrontare i nomi nella tabella o copiare il nome del file nella sua area di memorizzazione.
Il confronto della copia lascia la struttura dati nell’area dell’utente, sotto il suo controllo. A
questo punto la falla di mediazione incompleta può essere sfruttata. Mentre il mediatore
controlla i diritti d’accesso per il file, l’utente potrebbe cambiare il descrittore del nome.
ANALISI DEL RISCHIO
L’analisi del rischio è un insieme di tecniche sistematiche atte a evidenziare potenziali stati
rischiosi del sistema. Può aiutare a mettere in luce i problemi della sicurezza e ad identificare
quindi le strategie di prevenzione o attenuazione per affrontarli. Le fonti dei problemi possono
essere nascoste in qualsiasi prodotto del processo di sviluppo o manutenzione, non solo nel
codice. Per questo l’analisi del rischio riguarda l’intero sistema, e non solamente il codice. L’analisi
dovrebbe iniziare quando lo sviluppatore comincia a pensare alla costruzione di un nuovo sistema,
e dovrebbe proseguire nell’intero ciclo di vita del sistema. Numerose tecniche supportano
l’identificazione e la gestione di rischi potenziali. Tra le più efficaci vi sono:



HAZOP (studi del rischio e dell’operatività): Una tecnica di analisi strutturale che individua i
punti di rischio dell’applicazione in base alle esperienze passate, e li classifica per poter
preparare il test opportuno.
FMEA (analisi degli effetti e delle modalità di malfunzionamento): Una tecnica bottom-up
applicata a livello delle componenti del sistema. È un’analisi fatta in funzione dell’effetto
che può avere un possibile malfunzionamento in una certa parte del programma. Vengono
prese le singole funzioni e si esamina cosa implica l’eventuale fallimento nelle funzioni di
livello superiore.
FTA (analisi della struttura degli errori): Una tecnica top-down che parte dall’analisi di un
ipotetico malfunzionamento rischioso del sistema, e poi si procede dall’alto verso il basso
per cercare di capire quali sono le parti coinvolte nel fault. È esattamente il contrario
dell’analisi FMEA.
Si decide la tecnica più appropriata in base alla comprensione delle cause e degli effetti.
TEST
Il test è un processo che trova posto nel settore della qualità del prodotto: il suo scopo è rendere il
prodotto privo di malfunzionamenti o tolleranze agli errori. Mira più ad un analisi funzionale che
ad un analisi di sicurezza. Il malfunzionamento di un solo controllo espone una vulnerabilità che
non viene migliorata da nessuna aggiunta di controlli funzionanti. La complicazione principale
quando si effettua un test è però che non si può osservare solo l’unico comportamento che porta
il programma a funzionare correttamente: si deve tenere conto anche delle centinaia di modalità
in cui il programma potrebbe non funzionare. L’insieme delle tecniche appropriate per il test di un
dato sistema dipende dalla dimensione del sistema, dal dominio dell’applicazione, dalla quantità
del rischio e da molti altri fattori.
BUONA PROGETTAZIONE
Per la progettazione di software sicuro:




Utilizzo di fault-tolerance
Disponibilità di una politica coerente per la gestione dei malfunzionamenti
Acquisizione della logica di progettazione e della cronologia
Utilizzo di schemi di progettazione
I progettisti dovrebbero cercare di anticipare gli errori e gestirli in modo da ridurre al minimo e
massimizzare la sicurezza e la protezione. Un rilevamento attivo degli errori potrebbe essere
messo in pratica adottando una filosofia di reciproco sospetto. Possiamo anche utilizzare la
ridondanza, confrontando i risultati di 2 o più processi per vedere se sono in accordo prima di
usarne il risultato in un’attività. Se la correzione di un errore è troppo rischiosa, sconveniente o
costosa, è possibile ricorrere alla fault-tolerance, isolando il dominio provocato dall’errore e
riducendo al minimo le interruzioni per gli utenti.
SISTEMI OPERATIVI
Un sistema operativo deve principalmente controllare l’accesso condiviso e implementare
un’interfaccia che permetta gli accessi stessi. Oltre a queste 2 funzioni svolge attività di supporto,
incluse l’identificazione, l’autenticazione, la denominazione, la schedulazione dei processi,
l’archiviazione dei files, il recupero e il riutilizzo di oggetti, e la comunicazione tra processi. Le
funzioni principali di un sistema operativo possono essere distinte in:




Controllo dell’accesso
Gestione dell’identità e delle credenziali
Flusso di informazioni
Analisi e protezione dell’integrità
L’obiettivo di un sistema operativo è quello d frapporsi tra l’utente e l’hardware su più livelli. Di
fatto assume implicitamente una forma di protezione, poiché offrendo dei servizi di livello più alto
possono avvenire accessi indesiderati o non protetti alla memoria, a tutti quegli elementi che
hanno a che vedere con l’hardware correlato alla gestione della memoria. Oggi troviamo sistemi
operativi semplici (single task) e complessi (multi-task). Un sistema operativo supporta la
multiprogrammazione, pertanto i sistemi hanno sviluppato alcuni modi per proteggere il lavoro di
un utente dall’interferenza maliziosa o involontaria di un altro utente.
OGGETTI PROTETTI
La nascita della multiprogrammazione ha sottolineato l’esigenza di proteggere la configurazione di
un sistema informatico.






Memoria
Periferiche di I/O condivisibili, come i dischi
Periferiche di I/O seriali
Sottoprocedure e programmi condivisibili
Reti
Dati condivisibili
METODI DI PROTEZIONE DEI SISTEMI OPERATIVI
La base della protezione è la separazione, cioè la capacità di mantenere gli oggetti di un utente
separati da quelli di altri utenti. Bisogna poter separare tra di loro gli elementi dell’informazione
che si deve proteggere. In un sistema operativo la separazione avviene in 4 modi canonici, che
possono essere applicati ed incrociati in funzione delle caratteristiche del sistema, per creare una
divisione dei contenuti:
1. Separazione fisica: Diversi processi impiegano diversi oggetti fisici (unità, dischi, blocchi,
periferiche I/O, ecc.).
2. Separazione temporale: I processi con diversi requisiti di protezione vengono eseguiti in
tempi diversi.
3. Separazione logica: Le risorse, che sono sullo stesso supporto fisico, possono venire
rappresentate logicamente divise. Gli utenti operano nell’illusione che non esistano altri
processi.
4. Separazione crittografica: I processi nascondono dati e calcoli in modo che siano
incomprensibili ai processi esterni. Gli oggetti sono nelle stesse partizioni fisiche, accessibili
contemporaneamente, ma hanno differenti chiavi d’accesso.
In ogni caso la separazione è solo una parte della risposta. Vogliamo separare gli utenti e i loro
oggetti, ma occorre anche essere in grado di fornire la condivisione per alcuni degli oggetti. Un
valido sistema operativo deve garantire la protezione su ognuno dei diversi livelli.






Non proteggere (problemi di costi)
Isolare l’informazione
Condividere tutto o niente
Condividere tramite limitazione dell’accesso
Condividere per competenza
Limitare l’uso di un oggetto
Un dato sistema operativo è in grado di fornire diversi livelli di protezione per oggetti, utenti o
situazioni differenti.
PROTEZIONE DELLA MEMORIA E DELL’INDIRIZZAMENTO
Il problema più ovvio della multiprogrammazione consiste nell’evitare che un programma influisca
su dati e programmi presenti nello spazio di memoria di altri utenti.
SEGMENTAZIONE
La segmentazione richiede la semplice divisione di un programma in parti separate: ogni parte
possiede un’unità logica in relazione al suo intero codice o ai suoi dati. Ogni segmento ha un nome
unico. È possibile fare riferimento ad un elemento di codice o dati all’interno di un segmento. Dal
punto di vista logico, un programmatore crea un programma come un lungo insieme di segmenti:
questi segmenti possono essere riposizionati in modo separato, così che ognuno possa essere
collocato dove la memoria è libera.
PAGINAZIONE
Un’alternativa alla segmentazione è la paginazione. Il programma viene diviso in parti di uguali
dimensioni chiamate pagine, mentre la memoria è divisa in unità di uguali dimensioni chiamate
page frame. Come per la segmentazione, ciascun indirizzo in uno schema di paginazione è un
oggetto formato da 2 parti. A differenza della segmentazione, tutte le pagine nel sistema di
paginazione hanno la stessa dimensione fissa.
CONTROLLO DEGLI ACCESSI AGLI OGGETTI GENERAL PURPOSE
La protezione della memoria è un caso specifico del problema più generale della protezione degli
oggetti. Abbiamo individuato diversi obiettivi complementari nella protezione degli oggetti:



Controllare ogni accesso
Aumentare il privilegio minimo
Assicurare un utilizzo accettabile
DIRECTORY
Un modo semplice ed efficiente per proteggere un oggetto consiste nell’impiegare un meccanismo
che funziona come una directory di files. Questo approccio è facile da implementare perché si ha
un elenco per ogni utente, e un nome per tutti gli oggetti a cui l’utente può accedere. In ogni
elenco della directory si stabilisce il tipo di protezione (rwx) per ogni singolo livello. Tuttavia,
possono sorgere diverse difficoltà. Una difficoltà riguarda la revoca dell’accesso: se il proprietario
A ha passato all’utente B il diritto di leggere il file F, viene creata una voce per F nella directory per
B. Questa garanzia di accesso implica un livello di fiducia tra A e B. Se in seguito A mette in dubbio
quella fiducia, potrebbe voler revocare i diritti di accesso di B.
LISTA DI CONTROLLO DEGLI ACCESSI (ACL)
Una rappresentazione alternativa più puntuale ma meno efficiente è la lista di controllo degli
accessi. Esiste una lista di questo tipo associata ad ogni oggetto sensibile, e vi sono contenuti gli
utenti o i processi abilitati a fare un certo tipo di operazioni. Questo approccio differisce
dall’elenco della directory perché esiste un elenco di controllo degli accessi per oggetto; la
directory viene invece creata per soggetto.
MATRICE DI CONTROLLO DEGLI ACCESSI
Come alternativa possiamo utilizzare una matrice di controllo degli accessi, una tabella
bidimensionale in cui ciascuna riga rappresenta un soggetto, ciascuna colonna rappresenta un
oggetto e ciascuna voce indica l’insieme di diritti di accesso del soggetto all’oggetto. Vi sono tante
matrici quante sono le operazioni possibili, e per ognuna di queste operazioni si specifica se vi
sono permessi o divieti all’utilizzo. In un certo senso è l’insieme dei 2 approcci precedenti.
CAPABILITY
Una capability è un token (gettone) che conferisce al soggetto possessore diritti e autorizzazioni
per disporre di un particolare tipo di accesso ad un oggetto. Viene associato all’utente che ha certi
privilegi. Affinché la capability offra una protezione valida, il token non deve essere falsificabile.
ROLE-BASED
Il controllo di accesso “role-based” è l’estensione del concetto di capability, che permette di
associare privilegi a dei gruppi, definendo un insieme di ruoli.
AUTENTICAZIONE UTENTE
Un sistema operativo basa buona parte della sua protezione sulla conoscenza degli utenti del
sistema. Solitamente, per confermare l’identità di un utente i meccanismi di autenticazione
adottano uno di questi 3 requisiti:
1. Qualcosa che l’utente conosce
2. Qualcosa che l’utente possiede
3. Qualcosa che l’utente è
PASSWORD COME AUTENTICATORI
Il meccanismo di autenticazione più diffuso per gli utenti di un sistema operativo è la password. Le
password sono parole in codice che dovrebbero essere note solo all’utente e al sistema.
Presentano qualche imperfezione durante l’uso:




Perdite
Utilizzo
Divulgazione
Revoca
Oltre al nome e alla password, possiamo ricorrere ad altre informazioni aggiuntive disponibili per
l’autenticazione degli utenti. Vengono utilizzate per rafforzare l’autentificazione specificando
quando, dove, con chi, a chi, ecc. Fare uso di ulteriori informazioni per l’autenticazione si definisce
“autenticazione multifactor”. Due forme di autenticazione, sottintendendo che siano valide, sono
meglio di una sola; al crescere del loro numero, però, cresce il numero degli inconvenienti.
TIPICHE DEBOLEZZE
Le password sono soggette agli attacchi a vocabolario. Sono attacchi esaustivi basati su un
vocabolario di password e sulle loro modalità di costruzione note, legate soprattutto alla lingua
che si utilizza ma che in termini semantici sono basate sullo stesso tipo di criterio. Le password
possono essere sia prevedibili che probabili: lo studio delle password ha portato alla conclusione
che ci siano password più probabili delle altre, e quindi facilmente prevedibili tramite lo studio
della persona. Un altro parametro che incide sulla sicurezza della password è la frequenza con cui
un eventuale attaccante può provare, in relazione al numero di tentativi possibili del sistema.
MEMORIZZAZIONE DELLA PASSWORD
La memorizzazione della password può avvenire in chiaro o tramite creazioni di combinazioni di
informazioni che ne rendano difficile l’utilizzo all’eventuale attaccante. In alternativa, vengono
previsti meccanismi di crittazione della password o è possibile passarla dall’hash per renderla poco
comprensibile. Ma non basta conservare la password crittata, bisogna garantire che sia sicuro
tutto il flusso che va dall’acquisizione della password fino alla memorizzazione o alla verifica della
stessa. La soluzione è l’inserimento di salt. Si aggiunge un’informazione che è a conoscenza sia del
sistema che acquisisce la password, che del sistema che la deve verificare, che però è legata in
qualche maniera ad elementi che permettono di renderla univoca. Salt è un modo per rendere
meno evidente qual è la parte di codice della password. Serve ad aumentare la robustezza della
memorizzazione della password, e quindi ad evitare che un estraneo che possa leggere il
contenuto della password, seppure crittata, ne possa fare un uso diretto. L’obiettivo del salt è che
la stessa password abbia codifiche differenti. Garantisce che se la stessa password viene
memorizzata in 2 sessioni o 2 sistemi differenti, ciò che viene caricato nel file non è mai lo stesso.
INVECCHIAMENTO DELLA PASSWORD
Bisogna definire delle strategie per garantire che la password non sia usa usata troppe volte. Il
tempo di vita della password è strettamente correlato al numero di volte che questa viene
utilizzata.
ONE TIME PASSWORD (OTP)
In termini di sicurezza sono strumenti comparabili alla firma digitale, e ne costituiscono
un’alternativa valida. È un metodo molto semplice ed economico, e non ha bisogno di ulteriori
dispositivi hardware integrati (smart card, ecc.). Sono password monouso che vengono utilizzate
solo una volta, basate su algoritmi che permettono di ricostruire ogni volta quale sarà la password
successiva, attraverso un generatore di numeri casuali. Il sistema autenticatore rispetto a colui che
si autentica condivide il seme che viene fissato per produrre la sequenza di password successive.
Bisogna prevedere un foglio di carta da condividere tra il server ed utente, ed aggiornare di volta
in volta. Questo tipo di meccanismo necessita dell’equivalente della Certificate Revocation List.
SISTEMI OPERATIVI TRUSTED
Un sistema operativo si dice “trusted” se fornisce in un modo coerente ed efficace i seguenti
servizi:




Protezione della memoria
Protezione dei files
Controllo degli accessi agli oggetti generici
Autenticazione dell’utente
Per poter ottenere la certificazione, fin dalla fase di progettazione, bisogna seguire dei modelli ben
precisi che impongono l’organizzazione, ma soprattutto il flusso delle informazioni. Per questo i
sistemi operativi tradizionali (Windows, Unix, Mac) non hanno il bollino “trusted”, ma preferiscono
adoperare criteri di usabilità. Esistono però delle versioni trusted di questi operativi che sono state
riprogettate e ridefinite. I 4 principali sostegni di un sistema trusted sono:
1. Policy: Ogni sistema può essere descritto dai suoi requisiti.
2. Modello: Per creare un sistema operativo trusted i progettisti devono ritenere che il
sistema proposto soddisferà i requisiti, proteggendo al contempo le relazioni e gli oggetti
appropriati.
3. Progetto: Dopo avere scelto un modello di sicurezza, i progettisti scelgono un mezzo per
implementarlo.
4. Fiducia: È radicata in 2 aspetti, funzionalità e garanzie.
Un software si dice trusted se il codice è stato rigorosamente sviluppato e analizzato, dando
motivo di credere che faccia soltanto ciò per cui è stato realizzato e nulla di più. Per poter riporre
fiducia in un programma occorrono analisi e test rigorosi per verificare alcune caratteristiche
chiave:




Correttezza funzionale: Il programma esegue ciò per cui è stato realizzato.
Preservamento dell’integrità: Il programma preserva la correttezza dei dati che elabora.
Privilegi limitati: Il programma può accedere a dati riservati.
Livello di fiducia appropriato.
Il software trusted viene spesso utilizzato come un mezzo sicuro per consentire ad utenti generici
di accedere a dati critici.
MODELLI DI SICUREZZA
I modelli vengono spesso utilizzati per descrivere, studiare o analizzare una particolare situazione
o relazione. Sono strumenti formali utilizzati per:




Verificare la completezza e la coerenza di una particolare politica.
Documentare una politica.
Aiutare a concettualizzare e progettare un’implementazione.
Controllare se un’implementazione soddisfa i requisiti.
BELL-LA PADULA
Il modello Bell-La Padula è uno dei primi modelli realizzati, molto nitido e abbastanza facile da
tracciare, utilizzabile quando è importante mantenere la segretezza. Rappresenta una descrizione
formale dei percorsi consentiti per il flusso delle informazioni in un sistema sicuro. L’obiettivo del
modello è identificare le vie di comunicazione attraverso cui passano le informazioni, in maniera
tale da garantire che queste informazioni mantengano il grado di riservatezza previsto. Bell e La
Padula si sono ispirati in maniera diretta al meccanismo di trasmissione delle informazioni
all’interno dei sistemi di sicurezza di agenzie spionistiche all’interno di strutture militari. È un
sistema che ha una logica di base di tipo gerarchico. I criteri generali su quello che può essere fatto
sull’informazione vengono definiti da 2 proprietà, che caratterizzano il flusso sicuro delle
informazioni:
1. Proprietà della sicurezza semplice: Un soggetto s può avere l’accesso in lettura ad un
oggetto o soltanto se la confidenzialità di o è minore della confidenzialità di s.
2. Star property: Un soggetto s che ha accesso in lettura ad un oggetto o può avere accesso in
scrittura ad un ulteriore oggetto p solo se la confidenzialità di o è minore di quella di p. Tale
proprietà viene utilizzata per impedire la scrittura su un livello inferiore.
BIBA
Il modello Biba rappresenta la controparte del modello precedente, per la protezione dell’integrità
dei dati. Mentre il modello Bell-La Padula si concentra sull’individuazione dei canali di
comunicazione e quindi il semplice accesso all’informazione, questo si concentra sul
mantenimento dell’integrità dell’informazione affinché non venga danneggiata. I 2 modelli
possono essere contemporaneamente presenti, dato che uno ha come obiettivo la confidenzialità,
mentre l’altro ha la garanzia dell’integrità.
GRAHAM-DENNING
Graham e Denning hanno introdotto il concetto di sistema formale di regole di protezione. Hanno
costruito un modello con proprietà di protezione generiche, che formerà le basi per 2 modelli
successivi di sistemi di sicurezza. Il modello Graham-Denning opera su un insieme di soggetti S, un
insieme di oggetti O, un insieme di diritti R e una matrice di controllo degli accessi A. La matrice
contiene una riga per ogni soggetto e una colonna per ogni soggetto e ogni oggetto. I diritti di un
soggetto su un altro soggetto o su un oggetto sono mostrati dal contenuto di un elemento della
matrice. Per ogni oggetto, un soggetto stabilisce che il proprietario ha diritti speciali; per ogni
soggetto, un altro soggetto stabilisce che il controller ha diritti speciali.
TAKE-GRANT
Un modello finale di sistema di protezione è il sistema Take-Grant. Questo modello presenta solo
4 operazioni primitive generiche: crea, revoca, prendi e garantisci. Crea e revoca sono simili alle
operazioni del modello Graham-Denning, prendi e garantisci sono 2 tipi di operazioni nuove, che
presuppongono la sussistenza di specifici diritti:




Crea: Il soggetto s crea l’oggetto o, con i diritti di accesso r su o.
Revoca: Il soggetto s revoca i propri diritti di accesso r su o.
Garantisci: Il soggetto s garantisce ad o i diritti di accesso r su p.
Prendi: Il soggetto s prende da o i diritti di accesso r su p.
SSH: È un protocollo di rete che prevede il trasferimento dei dati e funzionalità di manipolazione.
Solitamente si usa la porta 22. Non prevede né autenticazione né sistemi di sicurezza.
PHISHING: Un utente ingenuo può trovarsi a inserire dati personali in un sistema malevolo che ne
impersona uno degno di fiducia.
SNIFFING: Intercettazione ostile delle comunicazioni.
SPOOFING: È una situazione in cui una persona o un programma si mascherano da un altro tramite
dati falsificati e accedono a privilegi illegittimi.
DATABASE
Sui database le problematiche più grosse sono legate al fatto che possono essere ottenute
informazioni in maniera indiretta. Non solo si devono evitare i classici problemi dovuti ad accessi
indesiderati e all’autenticazione, ma si deve anche garantire che nell’utilizzo del database non sia
possibile accedere all’informazione. Possono essere ottenute informazioni anche senza fare una
richiesta specifica. Pur non facendo un’interrogazione diretta sul database, proprio per la loro
struttura estremamente interrogabile, si può cercare di ottenere informazioni estraendole da
alcuni tipi di query soprattutto di tipo cumulativo (anche mediante intersezioni). I requisiti basilari
per la protezione dei sistemi di database non sono diversi da quelli degli altri sistemi informatici. I
problemi principali sono:







Integrità fisica del database: I dati del database devono essere immuni da problemi fisici.
Integrità logica del database: La struttura logica del database deve essere protetta.
Integrità dell’elemento: I dati contenuti in ogni elemento devono essere precisi.
Verificabilità: È possibile rintracciare chi o cosa ha eseguito l’accesso (storia dei dati).
Controllo degli accessi: Un utente deve avere accesso solo ai dati autorizzati.
Autenticazione utente: Ogni utente viene positivamente identificato.
Disponibilità: Gli utenti sono abilitati ad accedere al database in generale.
AFFIDABILITA’ E INTEGRITA’
In generale, nell’ambito dell’affidabilità, esistono tutta una serie di problematiche legate alle
funzioni del sistema operativo che ospita il database. Quando gli ingegneri del software affermano
che il software garantisce affidabilità, intendono dire che può lavorare per lunghi periodi di tempo
senza problemi. Gli utenti si aspettano ovviamente che un database sia affidabile, perché
solitamente i dati sono importanti per esigenze di business ed organizzative. Un database
protegge da eventuali perdite e danni ai dati in modi diversi. Le questioni relative all’affidabilità e
all’integrità dei database sono su 3 livelli:
1. Ridondanza:
Molti database mantengono informazioni aggiuntive per rilevare le incongruenze interne
nei dati. Una forma di ridondanza è costituita dai codici di correzione e rilevamento degli
errori, come i bit di parità. Questi codici possono essere applicati a singoli campi, a record o
all’intero database. Maggiore è il numero di informazioni fornite, maggiore è lo spazio
richiesto per memorizzare i codici. In teoria non ci dovrebbe essere ridondanza, ma in
pratica è spesso frequente per motivi di efficienza, o di normalità di gestione delle
operazioni. Ovviamente deve anche essere gestita la coerenza. Abbiamo 2 livelli possibili:
uno è quello in cui deleghiamo all’applicazione e l’altro, quando queste funzioni sono
presenti all’interno del Database Engine, è quello di utilizzare i vincoli certi che permettono
di garantire che queste operazioni vengono effettuate.
2. Monitor:
In un database, il monitor è l’unità responsabile dell’integrità strutturale del database
stesso. Un monitor può verificare i valori inseriti per assicurarne la coerenza con il resto del
database o con le caratteristiche di un particolare campo.
3. Confronto di intervallo:
Un monitor di confronto di intervallo verifica ogni nuovo valore per assicurarsi che si trovi
all’interno di un intervallo accettabile. Se il valore dei dati è al di fuori dell’intervallo, viene
rifiutato e non viene inserito nel database. I confronti di intervallo possono essere
impiegati per assicurare la coerenza interna di un database. I filtri sono un’alternativa più
generica per controllare la forma dei dati. I controlli di questo tipo sono utili per testare i
dati inseriti col database.
DATI SENSIBILI
I dati sensibili sono quei dati che contengono delle informazioni che non dovrebbero essere rese
pubbliche, ma che devono essere accessibili solo alle persone autorizzate. Determinare quali dati e
campi siano sensibili dipende dal singolo database e dal contenuto dei dati. Il problema più
difficile, ma anche più interessante, è il caso in cui alcuni ma non tutti gli elementi del database
sono sensibili. Possono inoltre esistere vari gradi di sensibilità. I fattori che possono rendere
sensibili i dati sono diversi:





Sensibili per contenuto (valore)
Provenienti da una fonte sensibile
Dichiarati sensibili
Parti sensibili: attributo o record
Sensibili in relazione ad informazioni divulgate in precedenza
I dati possono essere sensibili, ma possono esserlo anche le loro caratteristiche. Per determinare
la sensibilità dei dati è necessario considerare tutti questi tipi di divulgazione:





Dati esatti: La divulgazione più grave è quella del valore esatto di un elemento che contiene
dati sensibili. Un cattivo programma di gestione del database può inoltre consegnare i dati
sensibili per errore.
Limiti: Un’altra esposizione è la divulgazione dei limiti di un valore sensibile, cioè
l’indicazione che un valore sensibile g è compreso tra 2 valori L e H.
Risultato negativo: A volte è possibile scrivere una query per determinare un risultato
negativo. In pratica, si può sapere che z non è il valore di g.
Esistenza: L’esistenza stessa dei dati è un dato sensibile, indipendentemente dal loro
effettivo valore.
Valore probabile: In base a certe osservazioni ottenute tramite query, si può non ottenere
il valore esatto di un certo elemento, ma una buona probabilità che quel particolare dato
sensibile abbia un certo valore.
INFERENZA
L’inferenza è un metodo per dedurre o derivare dati sensibili da dati non sensibili (pubblicamente
accessibili), e può essere considerata una vulnerabilità sottile nella protezione dei database.
1. Attacco diretto: In un attacco diretto, un utente cerca di determinare i valori dei campi
sensibili eseguendo le ricerche con query dirette a pochi record. La tecnica di maggior
successo consiste nel produrre una query così specifica da corrispondere ad un unico
elemento di dati.
2. Attacco indiretto: Un’altra procedura usata dalle organizzazioni che raggruppano dati
sensibili prevede la pubblicazione delle sole caratteristiche statistiche. Le organizzazioni
eliminano i singoli nomi, indirizzi o elementi che permettono il riconoscimento di un
singolo individuo. Vengono quindi pubblicate solo statistiche neutrali come una somma, un
conteggio o una media. L’attacco indiretto cerca di dedurre un risultato individuale basato
su uno o più calcoli statistici effettuati al di fuori del database.
 Somma: Un attacco mediante una somma cerca di dedurre un valore da una
somma riportata.
 Conteggio: Il conteggio può essere combinato alla somma per produrre risultati
ancora più rivelatori.
 Media: La media aritmetica permette una divulgazione esatta, se chi ne fa uso è
capace di manipolare il dato della popolazione.
 Mediana: Con un processo leggermente più complicato è possibile determinare il
valore individuale della mediana.
3. Attacchi di tracker: L’attacco di tracker può influenzare il gestore del database durante
l’individuazione dei dati desiderati, utilizzando query aggiuntive che producono piccoli
risultati. Il tracker aggiunge altri record da recuperare per 2 query diverse; i 2 insiemi di
record si annullano l’un l’altro, lasciando solo i dati o le statistiche desiderati.
VULNERABILITA’ DEL SISTEMA LINEARE
Un tracker è un caso specifico di una vulnerabilità più generica. È possibile determinare una serie
di query che restituiscono i risultati relativi ad insiemi diversi. Un’altra possibilità è il fatto di
riuscire a tracciare la storia di quello che avviene, cioè avere in qualche maniera l’informazione
delle query che sono avvenute. Tracciando le operazioni, in base alle modifiche che hanno certi
record, o quali record sono coinvolti in determinate query, si punta all’informazione indiretta. Per
poter fare questo tipo di attacco, bisogna avere una certa comprensione dello schema che sta
dietro. I controlli che possono essere fatti contro l’inferenza sono:

Controllo della query: Una forma di protezione complessa impiega un’analisi sintattica e
semantica della query, che non sia delegata solo al database, difficile da applicare ed
efficace solo contro gli attacchi diretti. Una query e le sue implicazioni vengono analizzate
per distinguere se fornire o no un risultato. Tale approccio implica la manutenzione di una
cronologia delle query per ogni utente e la valutazione di una query nel contrasto delle
inferenze possibili.

Controllo degli elementi: Possono essere implementati diversi approcci:
1. Non vengono date risposte, se il numero di elementi coinvolti in una risposta aggregata
non è superiore ad una certa soglia.
2. I risultati possono essere forniti solo in maniera combinata (per intervallo, per
elementi, per arrotondamenti, ecc.).
Queste 2 soluzioni vengono spesso combinate, ma sostanzialmente evitano che si possa
avere aggregati singoli, ma vengono forniti in formato grafico o tabellare. Per cui non si
ottiene il dato diretto, ma solo informazioni generali.
3. Campionamento casuale: Invece di utilizzare tutti i record coinvolti se ne utilizza solo
una certa parte ritenuta sufficiente per dare l’informazione aggregata. Il risultato non
sarà sempre lo stesso e, se il campionamento viene applicato in maniera corretta (e su
dati corretti), sarà significativo poiché l’errore sarà solo sulla parte meno importante
del dato. Questo non permette all’attaccante di sfruttare queste informazioni.
4. Perturbazione casuale dei dati: Prima di esporre il dato viene cambiato.
AGGREGAZIONE
L’aggregazione, collegata al problema dell’inferenza, mira alla creazione di risultati sensibili
partendo da input meno sensibili. È possibile fare operazioni di tipo aggregato sul sistema. Avendo
tutte le informazioni (media, conteggio, somma) si può cercare di ricostruire i dati sorgenti, solo
quando il numero di record coinvolti sono pochi. Tipicamente l’inferenza risulta essere molto
efficace quando ci sono gruppi dei sottoinsiemi dell’aggregazione dei dati, relativi ad un numero
limitato di elementi, righe o record. Poiché in questo caso, fin quando i record risultano essere
limitati, l’informazione aggregata coincide quasi completamente con l’informazione puntuale.
DATABASE MULTILIVELLO
Il database multilivello è un qualsiasi sistema in cui la sensibilità dell’informazione non è una
proprietà dell’attributo, ma dipende da altri elementi che fanno da contorno all’attributo stesso. Si
ha una sorta di gerarchia in cui il dato sensibile è legato solo al contesto considerato dell’attributo.




Partizionamento: Il controllo più ovvio per i database multilivello è il partizionamento, che
ne aumenta l’efficienza. Il database viene diviso in database separati, ciascuno con un
diverso livello di sensibilità. Si stabiliscono delle regole delle regole di accesso differenti,
che permettono di controllare e limitare il tipo di accesso record per record.
Crittazione: Se i dati sensibili sono crittati, un utente che li riceve accidentalmente non è in
grado di interpretarli. Quindi, ogni livello di dati sensibili può essere memorizzato in una
tabella crittata a chiave unica per il livello di sensibilità.
Blocco dell’integrità: Il blocco dell’integrità è un modo per fornire integrità e accesso
limitato ad un database.
Blocco della sensibilità: Il blocco della sensibilità è una combinazione di un identificatore
univoco e del livello di sensibilità.
PROCESSO “TRUSTED FRONT-END”
Un “trusted front-end” opera in modo simile al monitor di riferimento. Questo approccio riconosce
che molti database sono stati costruiti e distribuiti senza considerare la sicurezza multilivello. Il
concetto di front-end sfrutta l’esperienza e gli strumenti esistenti, migliorandone la sicurezza con
minime modifiche al sistema. L’approccio per ottenere le informazioni è mediato dal front-end. I
passi tipici di questo schema sono:







L’utente si identifica, si autentica e fornisce le proprie informazioni di riferimento.
Ciò significa che l’utente invia una query al front-end.
Il front-end fa la verifica delle credenziali ed invia le query al database non fidato.
Il database accede ai dati interagendo solo con il controllore fidato, il front-end che
garantisce l’isolamento.
Il database restituisce i dati al front-end.
Il front-end analizza i dati.
Il front-end non fidato si occupa della formattazione e del dialogo con l’utente.
Il problema è che si hanno delle informazioni contenute in un database che non è possibile
considerare fidato. La soluzione è creare un “cuscinetto” fra l’utente, o l’informazione che viene
esposta, e il database, che contiene effettivamente le informazioni. Il front-end quindi si occupa
essenzialmente di 2 cose:
1. Gestire l’utente, ammesso che questo non sia gestito da un database privato.
2. Fare in maniera che le query che vengono inviate al database non fidato, che non rispetta i
requisiti visti in precedenza, siano opportunamente controllate ed eventualmente filtrate
nella risposta, affinché non possano esporre dei dati che non devono essere esposti. In un
certo senso si comporta con la stessa logica di un proxy, solo che viene fatto a livello delle
query.
Filtri commutativi: Un filtro commutativo è un processo che forma un interfaccia tra l’utenza e il
database. Il filtro cerca di trarre vantaggio dall’efficienza della maggior parte dei database.
DATA MINING
Le applicazioni di “data mining” sono applicazioni che fanno ricerche tra i dati. Il data mining
impiega statistiche, apprendimento delle macchine, modelli matematici, ricerche di pattern e altre
tecniche ancora per estrapolare modelli e relazioni da grandi database. Gli strumenti del data
mining comprendono l’associazione, le sequenze, la classificazione, il raggruppamento e la
previsione. In genere le query del database sono manuali, invece il data mining è più automatico.
Il data mining presenta relazioni probabili, non necessariamente causa-effetto. Il data mining
migliora la sicurezza del computer, ed è molto diffuso per analizzare sistemi di dati.
Scarica