Introduzione
IV
da un punto di vista operativo, che da un punto di vista
normativo e legale.
Definiti gli aspetti fondamentali del problema si cercherà di
realizzare una soluzione informatica che possa essere utilizzata
da amministratori, impiegati amministrativi, contabili,
commercialisti per memorizzare i dati di società, liberi
professionisti e persone fisiche e giuridiche in genere.
Peculiarità del prodotto sarà il fatto che dovrà salvare i dati in
forma assolutamente cifrata esclusivamente su un dispositivo
portatile e riservato (un pen-disk) e non dovrà lasciare alcuna
“traccia” (ad es. file temporanei) sulla macchina su cui è
installato. In pratica, sebbene è prevista la possibilità di una
copia di sicurezza dei dati (sempre crittografata) da allocare
altrove, con la distruzione del dispositivo dovrà essere
garantita la contestuale distruzione dei dati stessi. Inoltre,
l’accesso non autorizzato al dispositivo (furto) non dovrà
consentire la lettura dei dati.
Per quanto ad un primo approccio il problema possa sembrare
non estremamente complesso, i requisiti di riservatezza
impongono scelte tecnologiche spesso dolorose: il dover
garantire l’integrità dei dati significa anche dover garantire che
nessuna parte del programma salvi file indesiderati sul disco
fisso, per cui la scelta di ogni componente esterno al
programma va innanzi tutto vagliata sulla base della possibilità
di verificare che quest’ultimo sia compatibile con le esigenze di
sicurezza richieste.
Introduzione
V
Altresì il fatto che il programma memorizzi i dati su un pen-
disk porta a pensare ad una soluzione che sia interamente
residente sul pen-disk stesso; la soluzione più comoda per
l’utente per usare un simile software è indubbiamente quella
che consente di realizzare un software che sia “plug and play”:
l’utente inserisce il pen-disk nella porta USB e, senza dover
installare alcunché, accede al programma stesso; una volta
rimosso il pen-disk, il software non deve lasciare alcuna traccia
della propria esistenza se non sul pen-disk stesso.
Escludendo quindi una soluzione “tradizionale” di Rapid
Application Development per la realizzazione, vanno effettuate
sostanzialmente quattro scelte cruciali per definire il
successivo sviluppo:
• la scelta del supporto di memorizzazione;
• la scelta del linguaggio di programmazione;
• la scelta della modalità di realizzazione della base di dati;
• la scelta degli algoritmi crittografici.
Ridurre la scelta del dispositivo di memorizzazione ad un
“normale” pen-disk è sicuramente limitativo. Basti pensare che
la soluzione installation-less scelta per la realizzazione del
software lo rende particolarmente vulnerabile a tentativi di
copia (basta copiare i file da un disco all’altro ed il gioco è
fatto!), il che è sicuramente un serio problema per un prodotto
che si pensa di distribuire in economia di scala.
Inoltre, la scelta del dispositivo è basata anche su una scelta
che si andrà ad effettuare tra poco sulla base di dati: esistono,
infatti, dispositivi che includono un sistema di cifratura dei dati
Introduzione
VI
(il che risolverebbe già di per sé il problema della crittazione
della base dati); esistono inoltre dispositivi che contengono
una memoria EEPROM, accessibile in via crittografica, in cui
memorizzare le chiavi di decrittazione del software ed
eventuali dati di licenza. La difficoltà è scegliere dispositivi che
integrino, contemporaneamente, almeno una delle due
funzioni summenzionate a quella di un pen-disk tradizionale. Si
deve inoltre tenere conto che il costo del dispositivo inciderà
notevolmente sul costo del pacchetto finito e anche questo è
un non affatto trascurabile elemento di valutazione.
Il dispositivo dovrebbe altresì realizzare la funzione di Auto-
Play (come avviene per i CD), cosa che ormai oggi fanno tutti i
pen-disk, ma che va comunque verificata per il dispositivo
scelto.
Dato per scontato che il sistema operativo sia Microsoft
Windows, abbiamo bisogno di un linguaggio di
programmazione che:
• realizzi eseguibili che non accedano a librerie esterne
che debbono essere installate nella system directory o,
meglio ancora, realizzi eseguibili “monolitici” che
contengono tutto il necessario in un solo file;
• eventuali componenti esterni DEVONO essere open-
source, in quanto si deve garantire che non lascino file
temporanei sul disco di sistema.
Di fatto, probabilmente l’unico linguaggio utilizzabile è Visual
C++; si noti che la scelta di Visual C++ è molto onerosa: per
quanto si tratti di un linguaggio di programmazione
Introduzione
VII
estremamente potente è un linguaggio di basso livello che
richiede un notevole sforzo per realizzare parti di codice
(specialmente nella realizzazione delle interfacce) che altri
linguaggi visuali (ad es. Visual Basic) consentono di realizzare
molto più velocemente.
Come fatto per il linguaggio di programmazione, dobbiamo
effettuare delle esclusioni per la scelta della base di dati
necessaria:
• moduli come il JET di Microsoft Access sono da
escludere, perché distribuiscono file temporanei ovunque
e, tra l’altro, richiedono installazione (nel caso di JET,
installazione delle MDAC);
• analogamente software open source come PostgreSQL o
MySQL sono da scartare perché richiedono installazione.
Restano due soluzioni:
• SQLite, soluzione open source costituita da una “libreria
C embedded” che crea uno “zero-installation database”;
• realizzare a mano la base di dati.
La prima soluzione è chiaramente di più rapido sviluppo, ma
presenta lo svantaggio di dover richiedere la crittazione dei
singoli campi all’interno del database (il file del database non è
crittato, i singoli campi lo sono) e crittare i campi significa, di
fatto, non poter più effettuare query se non sequenziali.
Introduzione
VIII
Ultimo punto da affrontare è la scelta degli algoritmi
crittografici con cui cifrare i dati.
Uno dei problemi, non banale, del software è dove
memorizzare le chiavi di [de]crittazione. Metterle su un file
equivale a darle a chiunque. Si hanno due soluzioni:
• se si sceglie un dispositivo di quelli “a protezione” con
una RAM protetta, si potrebbe inserire la chiave nella
RAM protetta;
• si potrebbe non memorizzare la chiave fornendola
all’utente.
Capitolo I
1
CAPITOLO I
LA SICUREZZA NEI SISTEMI
INFORMATIVI
1.1 Introduzione: la sicurezza
informatica
Il tema della Sicurezza dei Sistemi Informativi Automatizzati è
un tema di fondamentale importanza e la recente
recrudescenza dei fenomeni di pirateria informatica ne
dimostra tutta la sua drammatica attualità.
Ogni organizzazione sta studiando e mettendo in atto misure
finalizzate a ridurre la possibilità di attacchi ai propri Sistemi
informativi e/o, in caso di attacco, a limitarne il più possibile le
conseguenze.
Il tema della Sicurezza dei Sistemi Informativi in ambito
aziendale diventa, pertanto, strategico al fine di garantire
l’affidabilità dei processi e dei dati elaborati sia all’interno di
ogni azienda, sia in ottica di interoperabilità e di cooperazione
tra le diverse Unità operative aziendali.
In relazione a quanto sopra ed in attuazione dei protocolli
d’intesa sottoscritti con le Associazioni di categoria, ANASIN,
ASSINFORM e ASSINTEL, che prevedono, tra l’altro, lo
sviluppo di studi e progetti congiunti, l’Autorità per
Capitolo I
2
l’Informatica nella Pubblica Amministrazione ha deciso, nel
1999, la costituzione di un Gruppo di studio per l’esame delle
problematiche relative alla sicurezza dei Sistemi Informativi (in
particolar modo nella pubblica amministrazione).
Il gruppo di studio, formato dai rappresentanti delle tre
Associazioni sopra indicate, dall’AIPA, da alcune importanti
Amministrazioni e da esperti del mondo accademico e
scientifico, ha elaborato un documento che detta le linee guida
per la sicurezza di un sistema informativo automatizzato.
Il crescente ricorso alle tecnologie dell’informazione e della
comunicazione intrapreso in ambito aziendale per lo
snellimento, l’ottimizzazione e una maggiore efficienza dei
processi operativi e gestionali, comporta una serie di nuovi
rischi che, se non adeguatamente affrontati, potrebbero
comportare gravi conseguenze sull’affidabilità dei dati e dei
servizi. Tali rischi sono imputabili a due fattori caratteristici
della tecnologia in questione: l’inaffidabilità cioè la non
garanzia di corretto funzionamento sia nelle componenti
hardware sia in quelle software, e l’esposizione alle intrusioni
informatiche. In termini più operativi è bene intendere la
Sicurezza del Sistema Informativo Automatizzato non solo
come “protezione del patrimonio informativo da rilevazioni,
modifiche o cancellazioni non autorizzate per cause accidentali
o intenzionali” ma anche come “limitazione degli effetti causati
dall’eventuale occorrenza di tali cause”.
Occorre inoltre considerare che la sicurezza del Sistema
Informativo Automatizzato non dipende solo da aspetti tecnici,
ma anche, se non principalmente, da quelli organizzativi,
sociali e legali.
Capitolo I
3
La sicurezza del Sistema Informativo Automatizzato deve
essere pertanto vista come caratteristica “globale”, in grado di
fornire, dinamicamente con l’evolversi temporale delle
necessità e delle tecnologie, il desiderato livello di disponibilità,
integrità e confidenzialità delle informazioni e dei servizi
erogati.
Viene definito sicuro un Sistema Informativo Automatizzato
che soddisfi le seguenti proprietà:
- Disponibilità : l’informazione ed i servizi che eroga devono
essere a disposizione degli utenti del sistema compatibilmente
con i livelli di servizio. .
- Integrità : l’informazione ed i servizi erogati possono essere
creati, modificati o cancellati solo dalle persone autorizzate a
svolgere tale operazione.
- Autenticità : garanzia e certificazione della provenienza dei
dati
- Confidenzialità o Riservatezza : l’informazione che
contiene può essere fruita solo dalle persone autorizzate a
compiere tale operazione.
L’approccio globale alla sicurezza richiede di considerare gli
aspetti tecnici (sicurezza fisica e logica), strategici (obiettivi e
budget), organizzativi (definizione di ruoli, procedure,
formazione), economici (analisi dei costi) ed infine legali (leggi
e raccomandazioni, normative).
Occorre partire dal presupposto che, a dispetto delle misure
attuate, un evento indesiderato possa comunque violare i
requisiti di disponibilità, integrità e riservatezza, attraverso
Capitolo I
4
meccanismi non previsti. Proteggere i requisiti di sicurezza di
un sistema significa quindi, in termini realistici:
ridurre ad un valore accettabile la probabilità che vengano
violati; individuare tempestivamente quando ed in quale parte
del sistema questo accade; limitare i danni e ripristinare i
requisiti violati nel minor tempo possibile.
Un primo punto di partenza per valutare il grado di rischio e un
piano di sicurezza informativa, consiste nel focalizzare le
risorse di un sistema informativo.
Tali risorse sono l’insieme delle entità (dagli operatori alle
componenti hardware, dal software di base a quello
applicativo) necessarie al suo funzionamento.
Dal punto di vista della sicurezza, non è importante distinguere
fra le risorse che costituiscono il sistema (i.e. le sue
componenti) e le risorse delle quali ha bisogno per funzionare:
si tratta in ogni caso di risorse “critiche” e quindi da
proteggere.
Una classificazione delle tipologie di risorsa comunemente
presenti in un sistema informativo è utile per procedere in
modo sistematico ed esaustivo nella identificazione delle
risorse stesse. Possiamo in particolare distinguere fra risorse
fisiche e logiche.
Le principali risorse fisiche solitamente presenti in un sistema
informativo moderno sono calcolatori (server e postazioni di
lavoro), periferiche (scanner, stampanti, modem),
apparecchiature di rete, i locali che ospitano le apparecchiature
e gli impianti di alimentazione e condizionamento di tali locali.
Vale la pena osservare che anche gli operatori umani possono
essere considerati per certi aspetti come risorse fisiche.
Capitolo I
5
Le risorse logiche presenti in un sistema informativo moderno
sono tipicamente i moduli del software applicativo e del
software di base (DBMS, Sistema Operativo, Software di
Rete), le basi di dati, i registri di configurazione dei dispositivi
(per esempio router).
Anche in questo caso, possono essere considerate come
risorse logiche anche l’insieme delle regole organizzative e
comportamentali degli operatori umani.
E’ importante osservare infine come il corretto funzionamento
di una risorsa possa dipendere da quello di altre. Questo
aspetto, che nella sezione metodologica viene definito come
“dipendenza funzionale fra risorse” è alla base dei fenomeni di
propagazione dei guasti, e va tenuto in conto nel valutare i
danni che un determinato attacco è in grado di apportare.
Una volta individuate le risorse critiche, si deve stabilire quali
eventi indesiderati possano determinarne un degrado nelle
caratteristiche di integrità, disponibilità e riservatezza.
Una definizione precisa di “evento indesiderato” permette di
verificare, a fronte di una analisi sistematica di tutti gli eventi
che potrebbero accadere intorno al sistema, se e quanto
ciascun evento sia indesiderato rispetto alla definizione data.
Un buon punto di partenza è costituito dal considerare come
evento indesiderato qualsiasi accesso (a servizio o
informazione) che non sia esplicitamente permesso dalla
politica di sicurezza del sistema.
L’insieme degli eventi indesiderati, tuttavia, è ben più esteso,
in quanto comprende eventi che non sono affatto degli attacchi
deliberati, bensì dei semplici eventi accidentali.
Stando alle statistiche, anzi, gli eventi accidentali quali il
guasto di un dispositivo o l’errore umano (per esempio
Capitolo I
6
cancellazione accidentale di file, installazione di componenti
incompatibili o infettate che corrompono il software di base)
restano la principale causa di perdita accidentale di dati.
1.2 I PRINCIPALI ATTACCHI E GLI
EVENTI ACCIDENTALI
Nel classificare l’insieme dei possibili attacchi al sistema, è
importante partire dal presupposto che chiunque tenti di
penetrarvi o danneggiarlo applicherà, in sequenza o in
parallelo (sfruttando eventuali effetti combinati), tutte le
tecniche di cui dispone su tutte componenti attaccabili.
Appare naturale caratterizzare un attacco in funzione della
componente attaccata e della tecnica utilizzata dall’intrusore.
Un approccio sistematico individua tutte le componenti del
sistema, sia fisiche (calcolatori, router, cavi) che logiche (file,
processi, etc..) e, per ciascuna di esse, individua tutte le
tecniche di attacco ad essa applicabili. Il risultato di questo
approccio può essere convenientemente riassunto in una
matrice avente le componenti su un asse e le tecniche di
attacco sull’altro. Una cella di tale matrice permette infatti di
descrivere se e come una certa tecnica può essere utilizzata
per attaccare una certa componente.
Attacchi a livello fisico
Gli attacchi a livello fisico sono principalmente tesi a sottrarre
o danneggiare risorse critiche. I principali tipi di attacco a
livello fisico sono: