back to top

Guida Sicurezza di Rete

Lo straordinario sviluppo delle reti di comunicazione e dei servizi offerti mediante la tecnologia dell’Informazione, può considerarsi, senza ombra di dubbio, come la grande rivoluzione di fine secolo.

Mai prima d’ora l’uomo si era trovato a disporre di un mezzo tanto potente per comunicare il proprio pensiero: oggi possiamo raggiungere con facilità, da qualsiasi posto e a costi ridotti praticamente qualsiasi altro essere umano ovunque si trovi; ed anche i nostri documenti scritti, viaggiando ad incredibili velocità, possono raggiungere in pochi istanti numerosi destinatari.

La crescente disponibilità di banda passante, unità ai sempre minori costi di connettività ed alla disponibilità sempre maggiore dei punti d’accesso, ha fatto delle moderne reti di comunicazione il vero e proprio sistema nervoso del pianeta.

Eppure anche questa magnifica costruzione ha il suo tallone d’Achille: la sicurezza.

Proprio perché "reti aperte", le reti digitali sono intrinsecamente insicure: esse non sono state progettate in modo da garantire autoprotezione e difesa contro eventuali abusi.

Ne discende che esse sono particolarmente sensibili all’intercettazione ed all’alterazione dei dati trasmessi nonché alla violazione dei supporti informatici ad essa connessi.

Il problema è ancora più sentito quando si parla di commercio elettronico, o più in generale quando i dati trasferiti contengono informazioni riservate: la sicurezza è il presupposto fondamentale su cui si fonda il rapporto fiduciario fra acquirente e venditore, fra banche e correntisti.

Senza garanzie adeguate l’utente non avrà incentivi all’utilizzo di tali tecnologie che, sebbene siano più convenienti, sono anche più insicure.

Inoltre il desiderio dell’utente di garantire la propria riservatezza e anonimato mal si concilia con la necessità di imputabilità, cioè la possibilità effettiva di conoscere l’identità degli utenti e di ciò che stanno facendo.

Il tentativo di creare siti completamente anonimi va contro le nozioni di imputabilità, autenticità, integrità, revocabilità, non ripudiazione e non può essere in armonia con la necessità di applicare la legge di fronte ad una frode significativa.

Ideale sarebbe trovare un giusto bilanciamento fra queste diverse esigenze e tale compromesso dovrebbe essere attentamente protetto.

La protezione delle informazioni trasmesse via Internet richiede tutte le attenzioni normalmente dedicate ai corrispondenti documenti cartacei.

Il passaggio dai documenti tradizionali al relativo documento elettronico deve venire gestito in maniera tale da conservare, ed eventualmente migliorare, le tradizionali politiche di sicurezza al fine di consentire un sistema di comunicazione sicuro.

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, per converso, 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.

Concetti fondamentali sulle Reti

Il networking riguarda essenzialmente le comunicazioni, nonchè gli standard e i protocolli che consentono a due o più parti di comunicare in modo opportuno.

Le comunicazioni di rete sono regolate da un insieme standarizzato di protocolli.

Tali protocolli sono definiti dal modello di riferimento OSI (Open System Interconnection).

Il modello di riferimento OSI contiene una serie di regole e standard internazionali che consentono a qualsiasi sistema che rispetti questi protocolli di comunicare con altri sistemi altrettanto conformi.

Questi protocolli sono strutturati in sette livelli, separati ma interconnessi, ciascuno dei quali riguarda un aspetto specifico della comunicazione.

Tra l’altro, ciò consente a dispositivi hardware quali router e firewall di occuparsi del particolare aspetto della comunicazione di loro competenza, ignorando gli altri aspetti.

Di seguito i sette livelli OSI:

  1. Livello fisico: questo livello riguarda la connessione fisica tra due punti. Si tratta del livello più basso, il cui ruolo principale riguarda la trasmissione di flussi di bit grezzi (raw). Tale livello è inoltre responsabile dell’attivazione, del mantenimento e della disattivazione di queste comunicazioni a flusso di bit.
  2. Livello data-link: riguarda l’effettivo trasferimento di dati tra due punti. Il livello fisico provvede all’invio dei bit grezzi, ma questo livello fornisce funzioni superiori, quali la correzione degli errori e il controllo di flusso. Inoltre esso prevede procedure per l’attivazione, il mantenimento e la disattivazione di connessioni data-link.
  3. Livello di rete: è intermedio e ha soprattutto il ruolo di assicurare il trasferimento di informazioni tra livelli inferiori e superiori. Esso consente l’indirizzamento e l’istradamento.
  4. Livello di trasporto: consente il trasferimento in modalità trasparente di dati tra due sistemi. Provvedendo alla trasmissione dei dati in modo affidabile, questo livello consente ai livelli superiori di "occuparsi" di altri aspetti esulanti dal problema di assicurare un mezzo di comunicazione affidabile o economicamente conveniente.
  5. Livello di sessione: ha il compito di stabilire e poi mantenere le connessioni tra le applicazioni di rete.
  6. Livello della presentazione: riguarda la presentazione dei dati alle applicazioni in una sintassi o un linguaggio che esse sono in grado di comprendere. Esso tra l’altro consente la cifratura e la compressione dei dati.
  7. Livello di applicazione: riguarda la registrazione continua delle richieste di applicazioni.

Quando i dati vengono comunicati tramite questi protocolli, essi vengono inviati sotto forma di frammenti, chiamati pacchetti.

Ogni pacchetto contiene implementazioni di questi protocolli nei livelli.

Partiamo dal livello applicazione: il pacchetto viene avvolto dal livello della presentazione, poi dal livello di sessione, poi ancora dal livello di trasporto e così via.

Questo processo è chiamato incapsulamento.

Ogni livelo avvolto contiene un’intestazione (header) e un corpo (body): l’intestazoine e il corpo contengono rispettivamente le informazioni di protocollo e i dati occorrente per tale livello.

Il corpo di un livello contiene l’intero pacchetto di livelli precedentemente incapsulati.

Quando due applicazioni esistenti su due reti private comunicano attraverso Internet, i pacchetti di dati vengono incapsulati fino al livello fisico tramite il quale vengono trasferiti a un router.

Poichè al router non interessa sapere cosa c’è realmente nei pacchetti, esso deve solo implementare i protocolli fino al livello di rete.

Il router invia i pacchetti all’esterno su Internet ed essi raggiungono il router dell’altra rete.

Questo secondo router incapsula a sua volta il pacchetto in questione con le intestazioni del protocollo di livello inferiore necessarie affinchè il pacchetto possa raggiungere la sua destinazione finale.

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 (ad esempio 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:
    1. atti di vandalismo come la modifica dei contenuti delle pagine Web o la cancellazione del contenuto dell’intero sito;
    2. trafugamento di informazioni sensibili concernenti l’organizzazione, la configurazione di rete oppure la clientela o gli utenti);
    3. uso dell’host come base per lanciare attacchi contro altri sistemi (vedi attacchi DDOS – Distributed Denial of Service);
    4. 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).

La scelta del sistema operativo

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 (ad esempio, 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.

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).

Configurazione di 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.

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 TCP ed UDP in ascolto superflue;
  4. la rimozione o disabilitazione di tutte le risorse non richieste in relazione al ruolo dell’host (compilatori, interpreti, shell, scripts ed altri strumenti analoghi);
  5. la corretta gestione degli utenti e dei loro privilegi;
  6. 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.

Ponderare l’uso di programmi esterni

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 decidere se sfruttare le funzionalità aggiuntive fornite da script, plug-in ed altro, è 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.

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.

Inoltre, in aggiunta alle misure precauzionali già specificate nel paragrafo L’uso di programmi esterni e di script, è 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 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à (se non correttamente gestite).

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;
    • la durata ed il flusso di ciascuna delle connessioni;
  2. 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;
    • gli errori ed i warning segnalati dal sistema.
  3. 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;
    • 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.
  4. 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);
    • 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.
  5. raccogliere ed analizzare i file di log per i vari servizi di rete (web, mail, ftp,etc…).

Naturalmente la mole di informazioni che deriva da simili operazioni di monitoraggio può essere veramente considerevole per cui è sempre opportuno 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.

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.

Tipi di attacco ad una Rete (1a parte)

La sicurezza di una rete sta diventando ormai uno dei principali problemi a cui prestare massima attenzione; bisogna prendere in considerazione tutti i possibili tipi di attacco che un pirata informatico può effettuare nei confronti della nostra rete e apportare le giuste misure di sicurezza, senza dimenticare alcun minimo particolare.

Se un pirata penetrasse nella nostra rete potrebbe anche riuscire ad ottenere i privilegi di System Administrator e, se le sue intenzioni non sono delle migliori, ci potrebbe rovinare il lavoro di parecchi giorni oltre a manomettere magari alcuni hosts (pc, router, switch, ecc..).

Attacco ai routers, manipolazione del pacchetti e DOS

Nell’ambito dei routers si possono avere un certo numero di tipologie differenti di attacchi; in particolar modo quelli a basso livello che vengono eseguiti alterando i contenuti dei campi dei pacchetti spediti.

Essendo il settaggio del router è vincolato ad una password il primo dei problemi di sicurezza è senz’altro quello legato all’individuazione di questa. Questa va scelta sufficientemente lunga e complessa in modo che non sia facilmente individuabile.

In passato alcuni routers contenevano delle backdoor fornite dai costruttori per aiutare le società che si dimenticavano la password a reinserirsi nel sistema.

Ci possono anche problemi legati all’overflow dei buffers; in questi casi è necessario consultare i siti web dei costruttori e verificare se esistono delle patchs per questi problemi.

Altri tipi di attacco sono quelli legati alle manomissioni relative alle informazioni usate per l’instradamento eseguito dai protocolli, a quelli legati al protocollo SNMP (Simple Network Management Protocol), agli attacchi RIP, a quelli in cui si usa la frammentazione dei pacchetti, alla redirezione per giungere alla redirezione circolare nel caso di quegli attacchi definiti con il termine Denial of Service (DoS).

Spesso questi non hanno come scopo quello di impossessarsi delle risorse, ma semplicemente di metterle fuori uso.

Indipendentemente dall’obbiettivo che si pongono i metodi usati, i mezzi per eseguirli possono variare, anche se di fatti la tecnica fondamentale è comunque sempre legata alla manipolazione delle informazioni contenute all’interno delle testate dei pacchetti.

Un attacco che usa questo tipo di tecnica viene eseguito falsificando gli indirizzi contenuti dentro i pacchetti IP spediti al di fuori del network ma con valori che porterebbero a credere che questi provengano dalla rete stessa.

Questo tipo di attacco viene utilizzato per ottenere accesso a certe risorse o per introdurre nella rete dei dati alterati; non è però uno degli attacchi più semplici da portare a termine, in quanto oltre alla manipolazione dei pacchetti, bisogna tenere conto anche del numero di sequenza degli stessi.

Un altro tipo di attacco eseguito nei confronti dei routers è quello definito con il termine di Smurf.

In pratica l’attaccante invia verso il router un grosso numero di PING (funzioni ECHO del protocollo ICMP) verso un indirizzo broadcast usando come un falso indirizzo del mittente.

Il router quindi invia questo pacchetto all’indirizzo broadcast raggiungendo potenzialmente in una rete /24 fino a 255 sistemi.

La riuscita dipende chiaramente da come sono configurati gli hosts i quali nella peggiore delle ipotesi cercano di rispondere al falso indirizzo riuscendo a generare in una rete con 200 hosts un traffico di circa 80 Mb/sec.

In questo modo l’attaccante riesce a generare un’amplificazione dei pacchetti inviati arrivando ad occupare una quantità molto grossa di banda; un altro scopo è quello di riuscire a bloccare le trasmissioni di un determinato host al fine di cercare di sostituirsi a questo.

La protezione in questo caso consiste nel disabilitare un servizio del router e precisamente quello definito con il termine di IP directed broadcast.

Un router di fatto può essere paragonato a molti computer sui quali sono mantenuti in funzione alcuni servizi molti dei quali non sono necessari e addirittura possono essere utilizzati dagli Hacker per ottenere un certo numero di informazioni; questi servizi sono per esempio: finger, IP source routing, IP redirect.

Per sapere come questi sono configurati di default è necessario consultare il manuale fornito dal costruttore oppure è possibile interrogare il sistema con le apposite utilities fornite con questo.

Arrestando tutti questi processi, oltre ad avere un beneficio in termini di sicurezza, le prestazioni migliorano sicuramente.

In ogni caso il router può essere utilizzato per rafforzare la sicurezza di una rete in quanto possono essere settati in modo tale da sfolgere alcune funzioni dei firewalls.

Tipi di attacco ad una Rete (2a parte)

Un’altra tecnica è quella comunemente chiamata Spoofing: il termine inglese significa imbrogliare e di fatto l’attività è appunto quella di imbrogliare i sistemi facendosi credere di essere uno degli host considerati come trust (affidabili).

Sicuramente è una delle tecniche più avanzate nell’ambito dell’hacking in quanto pretende una conoscenza molto buona dello stack del protocollo TCP.

L’opera di falsificazione non è solo legata all’attività di sostituzione dei sistemi ma potrebbe anche essere usata per creare attacchi di tipo DoS.

La cosa importante da sottolineare è che all’interno dei pacchetti esiste un numero di sequenza il quale dovrebbe essere individuato in tutte quelle attività in cui si pretende un colloquio tra il server e il client.

Ogni sistema operativo dispone di metodologie proprie legate alla generazione di questi numeri sequenziali e sempre a riguardo esistono comunque studi di qualsiasi tipo al fine di riuscire a trovare un metodo appropriato per l’individuazione di questi.

Lo spoofing si basa sulla supposizione da parte dei servizi offerti dal TCP e dall’UDP che un indirizzo IP sia valido.

L’host di un Hacker può utilizzare un routing del codice IP di origine per presentarsi al server nelle vesti di un client valido; cioè specificare un percorso diretto verso una destinazione ed un percorso di ritorno verso l’origine (source routing); in questo modo l’attaccante può intercettare e modificare le trasmissioni.

Un metodo con cui un Hacker può prendere le vesti di un client considerato valido è il seguente:

  • l’Hacker cambia il proprio indirizzo IP in modo da farlo corrispondere all’indirizzo IP del client valido, in questo caso si parla di indirizzo "spoofato";
  • poi costruisce un percorso che conduce al server, ovvero il percorso diretto che i pacchetti dovranno prendere per giungere al server e poi tornare al suo host;
  • utilizza il percorso di origine per inviare al server una richiesta del client;
  • il server accetta la richiesta dell’hacker come se questa provenisse dal client valido e risponde;
  • ogni risposta alle richieste da parte del client valido viene inviata all’host dell’Hacker.

Un altro metodo per intromettersi da un client fidato ed un server è un raffinato metodo di desincronizzazione che consiste nello sfruttare il protocollo three-way handshake usato per creare una connessione; la vulnerabilità si riassume in quattro punti:

  • l’attaccante aspetta di ricevere il pacchetto SYN/ACK, proveniente da server e diretto verso il client (secondo passo del three-way handshake), della connessione da desincronizzare;
  • appena lo ha identificato spedisce un pacchetto di RST (spoofato) verso il server e immediatamente dopo uno di SYN (sempre spoofato) con gli stessi parametri (porta TCP e indirizzo IP) usati per la connessione da desincronizzare, ma con un differente numero di sequenza;
  • il server chiuderà la prima connessione grazie al pacchetto RST, e ne aprirà una uguale ma con un numero di sequenza diverso, spedendo il SYN/ACK;
  • l’attaccante, non appena identifica quest’ultimo, spedisce il pacchetto ACK necessario ad instaurare la connessione.

Per tutti questi tipi di attacco, un buon settaggio del firewall risulta sempre la soluzione migliore.

Un metodo di protezione, conosciuto con il termine di screening router, crea una linea statica di routing usata per passare al firewall tutte le connessioni relative al network protetto.

Un altro meccanismo utilizza due routers e precisamente uno tra il mondo internet ed il firewall ed un altro tra questo e la rete protetta.

Normalmente alcuni tipi di firewall hardware permettono di creare, grazie alla presenza di molte interfacce, diverse zone a differenti livelli di protezione definite con il termine di DMZ (demilitarized zone).

Le regole di filtraggio dei routers permettono di limitare i danni legati allo spoofing: non permettere il passaggio di nessun pacchetto in ingresso che contiene IP relativi a sistemi interni al network ed allo stesso tempo non permettere l’uscita di pacchetti che non siano segnati con IP valido relativo ad un sistema presente all’interno della rete.

Un altro genere di blocco può essere impostato per fermare tutti i pacchetti che provenendo dall’esterno contengono soltanto il SYN flag settato.

Un sistema minimo di protezione è quello di settare il tutto affinchè all’interno della cache ARP dei vari hosts ci siano tutti gli indirizzi hardware di tutti i routers legittimi.

I routers possono essere gestiti da remoto tramite telnet; è una buona idea quella di limitare od addirittura eliminare la possibilità di eseguire questa gestione.

Se i routers sono collocati in zone a rischio diventa necessario eseguire la limitazione degli accessi locali, tramite appositi armadi.

Firewall e sistemi anti-intrusione

Un firewall (parete tagliafuoco) è una struttura intesa ad impedire la diffusione del fuoco. Negli edifici i firewall sono i muri in mattone che dividono completamente le sezioni. In un auto un firewall è la parete metallica che separa l’abitacolo dal motore.

I firewall di Internet sono intesi per tenere le fiamme dell’inferno di Internet fuori dalla propria LAN privata, oppure per conservare i membri della propria LAN puri e casti negandogli l’accesso a tutte le tentazioni della diabolica Internet.

Con il termine FIREWALL si tende ad identificare in modo generico tutta una serie di funzioni e di apparecchiature che servono a proteggere un determinato dominio o rete privata.

I firewall sono usati con due scopi:

  1. tenere fuori la gente (worm / cracker);
  2. tenere dentro la gente (dipendenti / bambini).

Creare una politica è semplice:

  • determinare quali servizi si ha bisogno;
  • determinare il gruppo di persone che si vuole servire;
  • determinare a quali servizi ogni gruppo ha necessità di accedere;
  • per ciascun gruppo descrivere come si potrebbe rendere sicuro il servizio;
  • scrivere un’espressione che renda tutte le altre forme di accesso una violazione.

La politica diventerà sempre più complicata nel tempo, man mano che si acquisirà esperienza e ci si addentrerà maggiormente nel mondo del networking e della sicurezza nelle comunicazioni per preservare i propri dati.

Il mio personale consiglio è di realizzare una politica semplice e chiara ma allo stesso tempo efficiente.

Esistono due tipologie di firewall:

  • Firewall Filtranti – che bloccano i pacchetti di rete selezionati;
  • Proxy Server (talvolta detti firewall).

Firewall Filtranti (Packet Filtering Firewall)

Il Packet Filtering è il tipo di firewall presente nel kernel Linux.

Un firewall filtrante funziona a livello di rete.

È permesso ai dati di lasciare il sistema solo se lo permettono le regole del firewall.

Come i pacchetti arrivano sono poi filtrati in base alle informazioni sul tipo, sull’indirizzo di provenienza, sull’indirizzo di destinazione e sulle porte contenute in ciascuno di essi.

Molti router di rete hanno l’abilità di effettuare alcuni servizi di firewall.

Un firewall filtrante può essere pensato come un tipo particolare di router.

Per questo motivo è necessaria una profonda conoscenza della struttura dei pacchetti IP per lavorarci.

Poiché sono analizzati e registrati pochissimi dati, i firewall filtranti occupano meno la CPU, e creano minor latenza nella propria rete.

I firewall filtranti non forniscono un controllo a livello di password. Gli utenti non possono identificarsi.

La sola identità che un utente ha consiste nel numero IP assegnato alla sua macchina.

Ciò può essere un problema se si intende usare DHCP (assegnazione dinamica dell’IP).

Poiché le regole sono basate sui numeri IP, dovranno essere aggiustate non appena saranno assegnati nuovi numeri.

I firewall filtranti sono più trasparenti per gli utenti.

L’utente non deve impostare regole nella sua applicazione per utilizzare Internet.

Proxy Server

I Proxy sono principalmente usati per controllare, o monitorare, il traffico.

Alcuni proxy di applicazioni possono fare la cache dei dati richiesti, ciò abbassa le richieste di banda e diminuisce il tempo d’accesso per il successivo utente che vuole accedere a quegli stessi dati.

Inoltre fornisce un’evidenza inequivocabile su quanto è stato trasferito.

Esistono due tipi di proxy server:

  • Application Proxy (Proxy di Applicazione);
  • Proxy SOCKS – che "incrociano" le comunicazioni.

Application Proxy

Partiamo con un classico esempio per comprendere il funzionamento di un Application Proxy.

Prendiamo in esame il caso di una persona che effettua un telnet su un altro computer e poi da qui al resto del mondo.

Solo con un proxy server di applicazione il processo è automatizzato.

Non appena si fa telnet verso l’esterno il client per prima cosa vi manda al proxy.

Il proxy poi si connette al server che si è richiesto (il mondo esterno) e restituisce i dati.

Poiché i proxy server gestiscono tutte le comunicazioni, possono registrare qualsiasi cosa si vuole.

Per i proxy HTTP (web) ciò può includere qualsiasi URL che si visita, per i proxy FTP qualsiasi file si scarica.

Possono anche filtrare parole "inappropriate" dai siti che si visitano o controllare la presenza di virus.

Gli application proxy server possono autenticare gli utenti.

Prima di effettuare una connessione verso l’esterno, il server può richiedere all’utente, per prima cosa, di effettuare il login.

Ad un utilizzatore del web ciò comporterà la necessità di un login per ogni sito che desidera visitare.

Proxy SOCKS

Un server SOCKS è molto simile ad una vecchia switch board.

Semplicemente incrocia, attraverso il sistema, i "cavi" della propria connessione con un’altra connessione esterna.

La maggior parte dei server SOCKS funziona solamente con connessioni di tipo TCP e come i firewall filtranti non fornisco l’autenticazione degli utenti.

Possono comunque registrare dove si è connesso ogni utente.

Sistemi anti-intrusione

Il rilevamento delle intrusioni, come suggerisce il nome, è quell’attività volta a scoprire tentativi di intrusione o intrusioni già avvenute nei sistemi di calcolo e ad avviare azioni appropriate in risposta alle intrusioni stesse.

Per il rilevamento delle intrusioni s’impiegano molte tecniche che si differenziano secondo vari fattori.

Alcuni di questi sono i seguenti:

  • Fase in cui è avvenuto il rilevamento dell’intrusione: mentre si stava verificando, o solo successivamente;
  • Le informazioni esaminate per scoprire l’attività intrusiva.

Queste potrebbero comprendere comandi per l’interprete impartiti dall’utente, chiamate del sistema da parte dei processi, oltre a intestazioni e contenuto dei pacchetti di rete. Alcune forme d’intrusione si possono rivelare solo attraverso una correlazioni delle informazioni acquisite da più di una di queste sorgenti.

  • L’ampiezza della capacità di risposta.

Alcune semplici forme di risposta consistono nell’informare l’amministratore del sistema della potenziale intrusione oppure nel bloccare in qualche modo la potenziale attività intrusiva, ad esempio arrestando un processo impiegato in un’attività apparentemente intrusiva. Questi gradi di libertà nella progettazione di sistemi che impiegano tecniche per il rilevamento delle intrusioni hanno portato a un’ampia gamma di soluzioni che vanno sotto il nome di sistemi di rilevamento delle intrusioni (intrusion-detection systems – IDS).

Gestione delle password e delle politiche di accesso

L’individuazione delle passwords è una delle attività fondamentali a qualsiasi livello legate alla sicurezza dei sistemi informatici.

Le passwords sono di fatto il metodo per proteggere qualsiasi cosa a partire da un semplice router, uno switch o un accesso ad un sistema operativo.

Il settore delle password implica nell’ambito dell’hacking quella che viene definita ingegneria sociale in quanto l’individuazione di queste spesso dipende dallo studio degli individui che le settano:

  • gli utenti tendono a scegliere delle passwords semplici da ricordare;
  • se gli utenti sono portati a scegliere passwords complesse da ricordare tendono a scriverle da qualche parte. La soluzione prevede l’uso di software in grado di generare passwords difficili ma allo stesso tempo semplici da ricordare;
  • le passwords sono suscettibili ad un attacco di sniffing;
  • i files che contengono le passwords sono a volte accessibili e quindi decrittabili utilizzando strumenti sviluppati ad hoc (per esempio NTCrack).

Esistono in circolazione diversi programmi che cercano di decodificare le password usando metodi differenti.

Uno di questi metodi si basa sull’utilizzo di dizionari di parole creati appositamente per questo scopo mentre il secondo metodo genera delle combinazioni usando i set di caratteri specificati (se si selezionano tutti i caratteri, minuscoli e maiuscoli, e tutti i numeri, il numero delle combinazioni possibili per cercare di individuare una password di soli 8 caratteri è enorme).

E’ utile ricordare che:

  • i tentativi di accesso vengono sicuramente loggati, per cui un programma che tenta di indovinare una password mediante logica combinatoria potrebbe generare miglia e miglia di righe di log (il tentativo non passerà certamente inosservato);
  • il sistema potrebbe non permettere l’accesso da sistema remoto a livelli elevati, come nel caso di Unix a livello root;
  • il sistema potrebbe essere un honeypot in quanto generalmente un amministratore serio disabilita almeno l’accesso tramite TELNET al server;
  • il sistema potrebbe disabilitare l’accesso dopo un certo numeri di tentativi errati.

Windows, ad esempio, blocca un utente se si supera un certo numero di tentativi falliti; molti sistemi Unix dopo 3 tentativi vi scollegano.

Molti Hacker provano ad accedere ad una macchina sfruttando magari accessi di tipo GUEST spesso dimenticato dall’amministratore di sistema.

Dopo aver effettuato l’accesso a questo livello provano a copiare in qualche modo il file delle passwords particolare di quel sistema operativo.

Dopo di che si porteranno sul loro computer e, attivati quei programmi adatti alla decodifica, avranno accesso al sistema preso di mira con qualsiasi privilegio.

Risulta quindi conveniente utilizzare password con più di otto caratteri, contenenti sia lettere maiuscole che minuscole e non devono essere parole banali.

Ricordarsi di disabilitare gli account di tipo GUEST o comunque proteggerli con una password.

Cosa importante è tenere al sicuro i files contenenti le informazioni riguardo agli utenti e alle relative passwords.

Consigli per un corretto utilizzo dei Log

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;
    • la durata ed il flusso di ciascuna delle connessioni;
  2. 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;
    • gli errori ed i warning segnalati dal sistema;
  3. 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;
    • 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;
  4. 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);
    • 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;
  5. raccogliere ed analizzare i file di log per i vari servizi di rete (web, mail, ftp, etc…).

Naturalmente la mole di informazioni che deriva da simili operazioni di monitoraggio può essere veramente considerevole per cui è sempre opportuno 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.

Pubblicitร 

Leggi anche...

Autenticazione a due fattori (2FA): cos’è e come funziona

L'autenticazione a due fattori (in inglese Two Factor Authentication...

Authcode: cos’è e come funziona

Con il termine Authcode (o Auth-code) si fa riferimento...

HTTP Security Headers: aumentare la sicurezza del sito con .htaccess

Esistono diverse tecniche per innalzare il livello di sicurezza...

Criptare (e decriptare) file su Linux con OpenSSL

OpenSSL è un'implementazione rilasciata sotto licenza Open Source dei...

Cos’è una Botnet?

Con il termine botnet si fa riferimento ad una...

DDoS: cos’è, come funziona e come difendersi

Un DDoS (acronimo di Distribuited Denial of Service) รจ...
Pubblicitร