Tesi di laurea. Honeypot. Cap. I

Honeypot: un diverso approccio alla sicurezza informatica.
Brano tratto dal cap. 1. Sicurezza informatica. Definizione


Università degli Studi di Bari – Facoltà di Scienze Matematiche, Fisiche e Naturali. Corso di Laurea in Informatica. RELATORE: Prof. Emanuele COVINO   LAUREANDO: Mauro CICOLELLA. Anno Accademico 2007-2008
La →tesi di laurea di Mauro Cicolella è pubblicata sul sito dell’Università di Bari 



1. Sicurezza informatica
La sicurezza è da sempre legata al concetto di protezione dei dati che hanno valore per coloro che li utilizzano e la cui perdita può rappresentare un danno economico e d’immagine soprattutto per le aziende che su di essi basano il proprio business.

1.1 Definizione
Secondo la norma ISO 177991: “un sistema informatico é considerato sicuro quando è in grado di garantire determinati requisiti di sicurezza in termini di disponibilità, integrità, riservatezza e autenticità”.
Vediamo il significato di queste quattro parole chiave:
• disponibilità: il sistema deve garantire la disponibilità delle informazioni
agli utenti autorizzati nei tempi e nei modi previsti dalla policy aziendale;
• integrità: il sistema deve impedire e segnalare qualsiasi tentativo di manomissione dei dati da parte di persone non autorizzate o determinato da eventi casuali;
• riservatezza: le informazioni devono essere accessibili esclusivamente agli utenti autorizzati;
• autenticità: il sistema deve garantire la paternità delle informazioni.

Gli obiettivi della sicurezza sono normalmente descritti dal cosiddetto paradigma C.I.D. (dalle iniziali di confidenzialità, integrità e disponibilità). Tale paradigma è di difficile realizzazione, per cui un sistema informatico non sarà mai perfettamente sicuro e nessuna politica di sicurezza potrà impedire il verificarsi prima o poi di un’intrusione, sia che venga condotta dall’esterno sia che venga perpetrata dall’interno in maniera più subdola. I sistemi reali sono assai complessi e costituiti da molte componenti in stretta correlazione. Inoltre la sicurezza si scontra con il bisogno di garantire la piena fruibilità delle risorse, per cui occorre raggiungere una sorta di compromesso dal momento che una protezione assoluta implicherebbe delle limitazioni tali da negare i servizi persino agli utenti autorizzati. Non a caso si dice che un sistema realmente sicuro è solo quello spento e scollegato dalla rete. In più nella maggior parte dei casi il software utilizzato (dai sistemi operativi agli applicativi in generale) viene acquistato da terze parti, non potendo sostenere i costi di uno sviluppo interno. In questo modo si introduce un grave rischio perché non disponendo dei sorgenti è praticamente impossibile controllare il comportamento del codice, che può presentare vulnerabilità ed esporre a minacce di ogni tipo. Non da ultimo bisogna considerare che i costi della sicurezza devono essere opportunamente bilanciati in rapporto al valore delle risorse da proteggere.

1.2 Tipologia di aggressori e loro motivazioni
La compromissione di un dato può assumere vari aspetti a seconda dei casi e più precisamente si parla di:
• modifica: quando ne viene alterata l’integrità;
• generazione: quando vengono aggiunti dati falsi compromettendo
l’autenticità;
• intercettazione: quando il dato viene intercettato facendo venir meno
la riservatezza;
• interruzione: quando il dato viene distrutto e ciò ne impedisce la
disponibilità.

Generalmente le varie tipologie di attacco sfruttano un elemento comune, la vulnerabilità, cioè un imprevisto o un errore di progettazione e/o configurazione in grado di garantire ad un intruso l’accesso al sistema. Nonostante venga utilizzata erroneamente come sinonimo di pirata informatico, soprattutto dai media, la parola hacker denota una persona in grado di padroneggiare le tecnologie informatiche senza un fine necessariamente ostile. In realtà occorrerebbe adottare il termine cracker per indicare il vero pericolo, ovvero coloro che si introducono nei sistemi informatici altrui per provocare danni. Tuttavia vanno distinti ulteriormente quelli che agiscono per puro divertimento, dai criminali informatici professionisti. In generale possiamo concordare sull’utilizzo di un unico sostantivo, attacker, per denotare chiunque violi un sistema informatico. Un altro aspetto molto importante da valutare riguarda le motivazioni che spingono gli aggressori ad attaccare un sistema: alcuni sono mossi dalla curiosità o da semplice vanteria con gli amici, altri sono orientati al furto di informazioni o al danneggiamento di aziende e/o organizzazioni, altri ancora agiscono per motivazioni di carattere ideologico.

1.3 Categorie della sicurezza
Secondo il punto di vista di Bruce Schneier, uno dei massimi esperti in questo campo, “la sicurezza è riduzione del rischio” e poggia su tre pilastri fondamentali:
• prevenzione: chiudere qualunque breccia nel perimetro di sicurezza prima che venga sfruttata, ad esempio identificando le vulnerabilità in un sistema e adottando delle opportune contromisure come meccanismi di autenticazione robusti (password, smart-card, sistemi biometrici), firewall, crittografia.
• rilevazione: scoprire la presenza di una falla di sicurezza o un attacco in corso, identificarne la natura e possibilmente l’identità degli aggressori. In questo caso si può ricorrere ad Intrusion Detection System, analisi dei file di log, honeypot ecc.
• reazione: limitare le conseguenze di un attacco reagendo opportunamente ad esempio con il blocco del sistema vittima, o reindirizzando gli attacchi verso opportuni sistemi trappola in cui possano essere contenuti.

Tutto ciò rientra nel processo di analisi dei rischi, dove vengono identificate minacce e vulnerabilità, effettuate delle valutazioni in termini quantitativi e approntate le opportune contromisure. Si tratta di una attività alquanto difficile e costosa che richiede un notevole sforzo in termini di risorse, ma che ripaga certamente nel lungo termine.

1.4 Principali attacchi informatici
Vediamo di seguito una breve panoramica dei principali attacchi a cui sono esposti i sistemi informatici. Pur non essendo una trattazione esaustiva possiamo farci un’idea della vastità di problematiche da affrontare.

1.4.1 Exploit
Un exploit è una tecnica in grado di sfruttare un bug o una vulnerabilità di un sistema informatico per acquisire privilegi o addirittura prenderne il controllo. Esistono diversi modi per classificarli tra i quali la modalità con cui viene contattata l’applicazione target: un exploit remoto viene condotto attraverso la rete e non richiede precedenti accessi al sistema, mentre un exploit locale necessita di un accesso fisico alla macchina. Un’ulteriore classificazione tiene conto del tipo di vulnerabilità sfruttata (ad es. buffer overflow, format string attacks, ecc.)
La maggior parte di essi mira all’acquisizione dei privilegi di root (amministratore) per effettuare operazioni che non sono consentite ai normali utenti. Generalmente un exploit può sfruttare solo una specifica vulnerabilità e nel momento in cui questa viene individuata e corretta attraverso il rilascio di una opportuna patch, l’exploit stesso perde ogni efficacia. Per questo motivo molti pirati informatici cercano di non divulgare le loro scoperte (chiamate in gergo “zero-day exploit”) per sfruttarle il più a lungo possibile. A parte l’utilizzo illecito che può esserne fatto, bisogna sottolineare che gli exploit sono estremamente utili perché rappresentano la prova evidente dell’esistenza di un potenziale problema o di un difetto di sicurezza all’interno di un sistema informatico e stimolano di conseguenza l’adozione di opportuni correttivi.

1.4.2 Overflow
Generalmente si distinguono due tipologie di attacco basate sull’overflow: il buffer e lo stack overflow. Il primo è basato su un difetto del programma, che in presenza di una quantità di dati maggiore di quella attesa, produce una sovrascrittura di aree di memoria contigue. Di conseguenza il programma può dare risultati errati o imprevedibili, bloccarsi o bloccare il computer (in caso di coinvolgimento di driver di periferiche o di componenti del sistema operativo stesso). Questa debolezza dei programmi è nota da molto tempo, ma solo di recente la sua conoscenza si è diffusa tanto da permettere anche ai dilettanti di sfruttarla per bloccare o prendere il controllo di altri computer collegati in rete.
Un caso del genere si può verificare quando il programma non controlla in anticipo la dimensione dei dati in input, ma si limita a scrivere il loro valore in un buffer di lunghezza prestabilita, affidandosi alla buona fede dell’utente. Quando, per errore o per dolo, la quantità di dati supera la capienza del buffer destinato a contenerli, i dati in eccesso vanno a sovrascrivere le variabili interne del programma o di altri processi in esecuzione. Non tutti i programmi sono vulnerabili a questo tipo di inconveniente. In genere sono necessarie le seguenti condizioni:
• il programma deve prevedere un input di lunghezza variabile e non nota a priori;
• tali dati devono essere allocati in aree di memoria contigue ad altre strutture e risultare di vitale importanza per il programma stesso;
• il programmatore non deve aver previsto alcun meccanismo di validazione dell’input.

Naturalmente è facile verificare la prima condizione, mentre le altre sono strettamente legate alla correttezza del software.
Lo stack overflow consiste nella sovrascrittura dell’area dati del programma, ma questa volta non è causata dall’input ma dall’attività del programma stesso. In particolare può verificarsi in presenza di funzioni ricorsive che ad ogni chiamata memorizzano le informazioni di stato in un’apposita area di memoria denominata stack. Quando quest’ultimo è completamente riempito, in mancanza di opportuni controlli, vengono sovrascritte altre locazioni di memoria, causando gli stessi effetti visti per il buffer overflow.

1.4.3 Backdoor
Le backdoor (“porte di servizio”) rappresentano degli accessi privilegiati in grado di superare le procedure di sicurezza attivate in un sistema informatico. La loro creazione da parte degli amministratori consente una più agevole opera di manutenzione dell’infrastruttura informatica, ma spesso è determinata da attacker intenzionati a penetrare nel sistema senza essere rilevati. Possono anche essere installate autonomamente da alcuni malware (come virus, worm o trojan), in modo da consentire il controllo remoto della macchina senza l’autorizzazione del proprietario. Di solito l’accesso ottenuto in questo modo consente di sfruttare il sistema per il lancio di attacchi di tipo DoS.

1.4.4 Port scanning
Il port scanning è una tecnica utilizzata per raccogliere informazioni sui computer connessi in rete. Letteralmente significa “scansione delle porte” e consiste nell’inviare richieste di connessione al computer bersaglio utilizzando pacchetti TCP, UDP e ICMP modellati ad hoc per stabilire quali servizi di rete siano attivi. Una porta si dice “in ascolto” (“listening”) o “aperta” quando vi è un servizio o programma che la usa. Più in dettaglio si può stabilire se una porta è:
• aperta: l’host ha inviato una risposta indicando che un servizio è in ascolto su quella porta;
• chiusa: l’host ha inviato una risposta indicando che le connessioni alla porta saranno rifiutate;
• filtrata: non c’è stata alcuna risposta dall’host, ad esempio in presenza di un firewall.

Di per sé il port scanning non è pericoloso per i sistemi informatici, e viene comunemente usato dagli amministratori nelle procedure di controllo. Rivela però informazioni dettagliate che potrebbero essere usate per predisporre un piano di attacco sfruttando la conoscenza dei servizi attivi e documentandosi su eventuali vulnerabilità note. L’utilizzo di un firewall ben configurato può consentire tuttavia il corretto funzionamento dei sistemi impedendo in tutto o in parte la scansione delle porte e privando gli attacker di uno strumento estremamente utile.

1.4.5 Sniffing
Il termine sniffing indica l’attività di intercettazione dei dati che viaggiano attraverso una rete di comunicazione. Tale attività può essere svolta per scopi legittimi (ad esempio l’individuazione di problemi di connessione) ma anche per scopi illeciti (intercettazione di password o altri dati sensibili). I prodotti software utilizzati per eseguire queste attività sono detti sniffer e tra le loro funzionalità offrono una completa analisi del traffico stesso, oltre ad operare in modo del tutto trasparente.

1.4.6 Spoofing
Un attacco spoofing (letteralmente “falsificazione”) si verifica quando una persona o un programma altera la propria identità elettronica spacciandosi per qualcun altro, acquisendo così privilegi in maniera illegittima. Esistono varie forme di spoofing: in primo luogo l’IP spoofing permette di alterare l’indirizzo IP per mascherare la sorgente di un attacco o per superare alcuni sistemi di autenticazione basati su ACL (Access Control List). Un altro tipo di spoofing è il webpage spoofing, noto più comunemente come phishing. In questo caso un sito legittimo, es. di una banca, viene riprodotto fedelmente su un altro server, con lo scopo di far inserire agli utenti dati sensibili (userid e password) per carpirli in modo del tutto trasparente, sfruttando gli account ottenuti per azioni illecite.

1.4.7 Trojan horse
Un trojan horse (“cavallo di Troia”) è un software che deve il suo nome al fatto di celarsi all’interno di un programma apparentemente utile, per cui è proprio l’utente inconsapevolmente ad installarlo sulla propria macchina. In questo modo è possibile ottenere il controllo remoto di un sistema in maniera del tutto trasparente. Normalmente un trojan consta di 2 file:
• il server, che viene installato sulla macchina vittima;
• il client, usato per pilotare a distanza il sistema target.
I trojan non sono in grado di diffondersi autonomamente, per cui è necessario ingannare la vittima per spingerla ad installare i programmi fraudolenti. Spesso vengono utilizzati come alternativa ai worm e ai virus per installare delle backdoor o dei
keylogger.

1.4.8 Virus
Per virus informatico si intende una porzione di codice in grado, una volta eseguito, di infettare altri file in modo da riprodursi facendo copie di se stesso, senza farsi rilevare dall’utente.
I virus teoricamente potrebbero essere innocui, ma in realtà comportano comunque un certo spreco di risorse in termini di RAM, CPU e spazio sul disco fisso e la loro diffusione nasconde sempre uno scopo ostile. Generalmente un virus può danneggiare in modo diretto solo il software della macchina che lo ospita, anche se può indirettamente provocare danni all’ hardware, ad esempio causando il surriscaldamento della CPU mediante overclocking, oppure bloccando la ventola di raffreddamento o ancora agendo sul movimento delle testine degli hard disk.

1.4.8.1 Tipologie di virus
Sebbene accomunati da caratteristiche simili, è possibile denominarli in maniera particolare in base a proprietà specifiche soprattutto in merito alle modalità di diffusione e alla tipologia dei file ospite. In dettaglio parliamo di:
• virus polimorfici
dispongono di una routine di mutazione che permette di modificare il proprio codice ad ogni nuova infezione in modo da renderne più difficoltosa l’individuazione da parte dei software antivirus;
• virus eseguibili
attaccano i file di programma con estensione .EXE e .COM, ma anche altri file necessari per applicazioni specifiche con estensione .SYS, .DLL. Sono ormai abbastanza rari a causa della diffusione dei sistemi Windows che hanno soppiantato il vecchio DOS;
• boot virus
sostituiscono i dati contenuti nel MBR (Master Boot Record) con il proprio codice, in modo da essere eseguiti automaticamente ad ogni avvio del computer, senza lasciare traccia nella procedura di boot;
• macro virus
possono essere contenuti generalmente in un documento Office e sono costituiti da una macro2 in grado di diffondersi a tutti i documenti che vengono aperti con quella particolare applicazione;
• retrovirus
si annidano all’interno dei programmi antivirus, riuscendo a disabilitarli. Il nome deriva dai retrovirus biologici, in grado di attaccare il sistema immunitario (come, ad esempio, l’HIV);
• virus multipiattaforma
sono stati fatti molti tentativi per creare virus capaci di infettare differenti sistemi operativi su una stessa architettura hardware, ma si sono rivelati degli insuccessi o hanno avuto un successo molto limitato.

1.4.9 Worm
Il termine worm (in inglese “verme”) fu coniato per la prima volta negli anni settanta da John Brunner nel suo romanzo di fantascienza intitolato “The shockwave raider”, ma occorre arrivare al 3 novembre 1988 per vederlo balzare alla ribalta della cronaca. In quella occasione veniva diffuso un prototipo di worm realizzato dallo studente Robert Morris, che sfruttando tre diversi tipi di vulnerabilità dei sistemi Unix, aveva realizzato in linguaggio C un programma in grado di autoreplicarsi e diffondersi attraverso la rete.
In effetti un worm é simile ad un virus, ma a differenza di quest’ultimo non necessita di un file ospite a cui agganciarsi per agire e diffondersi sebbene provveda a modificare il computer che infetta, in modo da essere eseguito ad ogni avvio rimanendo costantemente attivo. Possiamo paragonarlo ad un agente infettivo capace di diffondersi attraverso le reti sfruttando il TCP/IP oppure altri protocolli. Il vettore di infezione più comune è la posta elettronica: il programma ricerca indirizzi e-mail memorizzati nel computer infetto ed invia una copia di se stesso come file allegato (attachment) a tutti o parte degli indirizzi individuati. I messaggi contenenti il worm utilizzano spesso tecniche di social engineering per indurre il destinatario ad aprire l’allegato, che spesso usa una estensione in grado di camuffare il worm come file non eseguibile. Un altro canale è rappresentato dai circuiti di file sharing dove si nascondono tra i file condivisi dall’utente vittima, spacciandosi per programmi di utilità o per crack di programmi molto costosi o ricercati, in modo da indurre altri utenti a scaricarlo ed eseguirlo. Infine ci sono worm che sfruttano le vulnerabilià del software e si diffondono automaticamente ai pc connessi in rete.

1.4.10 DoS e DDoS
Acronimo di denial of service, (letteralmente “negazione del servizio”), ovvero l’impossibilità da parte di un server di soddisfare le richieste provenienti dagli utenti legittimi a causa dell’eccessiva mole di richieste generata dall’attacker. In questo modo si provoca la saturazione della banda e l’esaurimento delle risorse di calcolo, causando addirittura il crash del server.
Una variante è il DDoS (Distributed Denial of Service) dal funzionamento identico ma realizzato sfruttando delle macchine di ignari utenti (denominate ”zombie”) controllate attraverso worm o trojan horse per concentrare un attacco congiunto su un unico bersaglio. Le tecniche più comuni per realizzare questi attacchi sono:
• smurf: si invia un falso messaggio a molti sistemi contenente come indirizzo del mittente l’IP dell’obiettivo. In questo modo le macchine contattate rispondono in massa all’indirizzo sovraccaricando il server corrispondente;
• banana attack: si indirizzano i messaggi in uscita da un sistema al sistema stesso, bloccando di fatto l’accesso esterno e provocando un sovraccarico;
• flood: è il più classico e si basa sulla creazione di un flusso di richieste di servizio soprattutto sfruttando i protocolli TCP e ICMP.

1.4.11 Hijacking
Consiste nel prendere il controllo di una comunicazione fungendo da intermediario non autorizzato. Si parla in gergo di man in the middle quando l’aggressore riesce ad intercettare, modificare e trasmettere messaggi tra due nodi in modo del tutto trasparente.

1.5 Intrusion detection system
Nonostante gli sforzi profusi non si può rendere un sistema informatico assolutamente sicuro, per cui risulta indispensabile disporre di un meccanismo per la rilevazione degli attacchi che non si è riusciti ad evitare. Il primo ad occuparsi di intrusion detection fu J.P. Anderson, che negli Anni ’80 propose alcuni metodi, ancora oggi utilizzati, basati sull’analisi del comportamento tipico di un utente che interagisce con il computer e che sono basati su due paradigmi fondamentali:
• anomaly detection
• misuse detection
Nel primo caso si suppone che un attacco consista in un evento anomalo, per cui risulta indispensabile definire esattamente cosa si intenda per eventi normali. In tale approccio si ritiene che gli stessi corrispondano alle attività svolte con maggiore frequenza, assumendo implicitamente l’equazione eventi rari = attacchi. In effetti ciò non è sempre vero perché spesso gli eventi rari sono assolutamente innocui mentre le reali minacce possono celarsi dietro attività molto comuni che non destano particolare attenzione.
Viceversa il paradigma misuse detection individua in partenza l’insieme dei possibili attacchi, riducendo la probabilità di falsi positivi, ma potendo individuare solo quelli effettivamente codificati aumenta il rischio di falsi negativi, cioè attacchi non rilevati. Confrontando i due approcci possiamo dedurre che nessuno dei due è superiore all’altro bensì sono complementari. L’approccio anomaly detection sembrerebbe il più efficace perché riduce il tasso di falsi negativi, ma paradossalmente l’elevato numero di falsi positivi prodotti può celare gli attacchi reali sia per la mole di dati da analizzare sia perché può indurre psicologicamente ad ignorare tali allarmi perché ritenuti infondati. Oltretutto si rischia di impedire attività poco frequenti ma assolutamente legittime. In conclusione si può affermare che questo approccio è adottabile solo se il costo di un attacco è di gran lunga superiore ai costi di gestione degli IDS. Da un punto di vista pratico si usa il paradigma misuse detection oppure un approccio misto (o ibrido), mentre quasi nessuno adotta l’anomaly detection.
Con il termine di IDS (Intrusion Detection System) si è soliti raggruppare una varietà di soluzioni tecnologiche che assumono denominazioni differenti in base al tipo di implementazione adottata, ma accomunate dalla caratteristica di rilevare i segni di una intrusione, cioè di una qualsiasi violazione della politica di sicurezza. Se l’IDS è collocato direttamente sull’host oggetto del monitoraggio si parla di Host IDS (HIDS); se rappresenta un nodo autonomo sulla rete si parla di Network IDS (NIDS). Infine in caso di combinazione delle precedenti due soluzioni si parla di Hybrid o Stack-based IDS. Normalmente gli IDS si limitano all’acquisizione di informazioni da utilizzare successivamente per pianificare delle opportune contromisure. In alcuni casi possono intraprendere delle azioni, affidandosi il più delle volte ad applicazioni esterne, in risposta ai tentativi di aggressione.

6626total visits,5visits today