Senza alcun dubbio, i costi derivanti dagli attacchi alla rete sono in netta crescita. Secondo il "Computer Crime Survey" ( www.crime-research.org ), una ricerca condotta ogni anno dal Computer Security Institute ( www.gocsi.com ) in collaborazione con lFbi, nel 2004 le 494 società esaminate hanno subito danni complessivamente per circa 142 milioni di dollari, con cause che vanno dagli attacchi di tipo denial of service, al furto di informazioni attraverso ad esempio attacchi alle password o intercettazione di pacchetti (packet sniffing), allabuso delle risorse informatiche con attacchi all'infrastruttura della rete (name server, access provider, etc...) da parte di utenti non privilegiati, e ai guasti provocati dai virus.
La grande maggioranza dei worm e degli altri attacchi che provengono da Internet sono resi possibili dalle vulnerabilità presenti in un numero molto limitato di servizi dei più diffusi sistemi operativi.
Ciò si deve al fatto che coloro che effettuano gli attacchi agiscono in modo opportunistico, ovvero scelgono la strada più semplice e comoda, sfruttando le vulnerabilità più conosciute e impiegando gli strumenti di aggressione più efficaci e diffusi. Contano sul fatto che le organizzazioni spesso non pongono rimedio ai problemi e quindi spesso si conducono attacchi indiscriminati, scegliendo gli obiettivi dai risultati di una serie di scansioni in Internet per rilevare i sistemi vulnerabili.
La facile e distruttiva diffusione di worm come Blaster, Slammer e Code Red, ad esempio, può essere direttamente addebitata allo sfruttamento di vulnerabilità per le quali non sono state tempestivamente applicate le opportune correzioni.
Nel 2001, Il SANS Institute e il National Infrastructure Protection Center (NIPC) presso l'FBI pubblicarono un documento che elencava le dieci vulnerabilità più critiche per la sicurezza in Internet. Da allora migliaia di organizzazioni hanno utilizzato quella lista, e le sue evoluzioni in Venti vulnerabilità diffuse negli anni seguenti, come guida per risolvere rapidamente i buchi di sicurezza più pericolosi.
Il nostro scopo è quello di far conoscere uno strumento per prevenire lo sfruttamento di eventuali vulnerabilità presenti in una rete. Tale strumento è lo scanner di vulnerabilità Nessus.
Nel capitolo 2 parleremo delle vulnerabilità, introducendone il concetto e mostrando alcuni esempi delle vulnerabilità più diffuse. Nel capitolo 3 introdurremo gli scanner di vulnerabilità ovvero gli strumenti veri e propri per individuare le falle dei nostri sistemi al fine di evitarne lo sfruttamento. Nel capitolo 4 presenteremo il Nessus, lo scanner di vulnerabilità più diffuso e funzionale; ne illustreremo i vantaggi e le caratteristiche per poi fornire nel capitolo 5 un esempio pratico del suo utilizzo.
La vulnerabilità è la debolezza di un sistema di sicurezza che può essere sfruttata per causare danni. La vulnerabilità di un sistema può essere rappresentata da:
- Disastri naturali
- Errori umani
- Buchi software o hardware
- Attacchi
Vulnerabilità comuni per i client di una rete sono,
ad esempio, la presenza di porte NetBIOS
aperte per la condivisione di file e stampanti, o programmi non autorizzati
come un server Web o in software per la condivisione peer-to-peer
dei file.
Vediamo ora alcune tra le principali vulnerabilità dei sistemi operativi.
In quasi tutte le interazioni tra gli utenti e i sistemi informativi vengono utilizzate password, frasi identificative o codici di sicurezza. La maggior parte delle forme di autenticazione, come la maggior parte delle protezioni per file e dati, si basa su password fornite dall'utente. Dal momento che gli accessi correttamente autenticati spesso non vengono registrati, o anche se vengono registrati non lo sono in modo da fornire alcun segnale di allarme, una password compromessa rappresenta un'opportunità potenziale di esplorare un sistema dall'interno senza essere identificati. Un aggressore avrebbe accesso completo a qualsiasi risorsa disponibile per quell'utente e sarebbe molto vicino ad essere in grado di accedere ad altri account, a macchine vicine e forse anche ad ottenere privilegi di amministrazione.
Le più comuni vulnerabilità delle password sono dovute a:
- Account utente senza password o con
password deboli.
- Al fatto che, a prescindere dalla robustezza delle password, spesso gli utenti
non le proteggono adeguatamente.
- Al fatto che il sistema operativo o il software applicativo creano account
di amministrazione con password deboli o privi di password.
- Al fatto che gli algoritmi di hashing delle password sono noti e spesso gli
hash vengono memorizzati in modo da essere accessibili a chiunque.
La difesa migliore e la più corretta contro queste vulnerabilità è una solida politica che includa le istruzioni per creare delle buone password e che riassuma i comportamenti corretti per conservarne la riservatezza, unita a una verifica attiva dell'integrità delle password.
Microsoft Internet Explorer (IE) è il web browser installato di serie sulle piattaforme Microsoft Windows. Tutte le versioni esistenti di Internet Explorer presentano vulnerabilità critiche, se non sono mantenute aggiornate con le patch più recenti. È possibile progettare pagine Web che sfruttino queste vulnerabilità sull'Internet Explorer dell'utente che visualizza tali pagine.
Le vulnerabilità possono essere classificate in diverse
categorie che comprendono lo spoofing
di pagine Web o dell'interfaccia Windows, le vulnerabilità dei controlli
ActiveX, le vulnerabilità
da Active scripting, l'interpretazione non corretta di MIME-type
e di content-type e i buffer
overflow. Le conseguenze possono riguardare la rivelazione del contenuto
di cookie, file o dati in locale; l'esecuzione di programmi in locale; il download
e l'esecuzione di codice arbitrario, fino al controllo completo del sistema
vulnerabile.
2.3 Condivisione di rete con NETBIOS
Microsoft Windows fornisce alle macchine host la possibilità
di condividere attraverso la rete file o cartelle con altri host tramite le
condivisioni di rete. I meccanismi che permettono questa funzione sono il protocollo
Server Message Block (SMB) o il Common Internet File System (CIFS). Questi protocolli
permettono agli host di operare su file remoti come se risiedessero in locale.
Per quanto questa funzione di Windows sia utile e valida, la configurazione
impropria delle condivisioni di rete può mettere in pericolo i file di
sistema o può favorire processi che portino utenti o programmi ostili
ad ottenere il pieno controllo dell'host. Uno dei metodi tramite i quali il
worm I-Worm.Klez.a-h (della famiglia Klez), il virus Sircam (vedi il CERT Advisory
2001-22) e il worm Nimda (vedi il CERT Advisory 2001-26) si sono diffusi così
rapidamente nel 2001 era proprio quello di scoprire le condivisioni di rete
non protette e di replicarsi in queste. Molti possessori di computer aprono
inconsciamente i loro sistemi agli hacker quando vogliono favorire i colleghi
o i collaboratori esterni condividendo i loro dischi in lettura e in scrittura
per gli utenti della rete. Facendo attenzione quando si configura le condivisione
di rete, i rischi possono essere adeguatamente mitigati.
2.4 Condivisione di file Peer-to-Peer
Usando il software P2P si va incontro a un certo numero di vulnerabilità. Queste possono essere raggruppate in tre tipologie: vulnerabilità tecniche, quelle che possono essere sfruttate da remoto; vulnerabilità di condivisione, che possono essere sfruttate alterando o mascherando i contenuti binari che altri richiedono; vulnerabilità legali, che possono derivare da violazioni delle leggi sui diritti d'autore o quelle che non permettono la diffusione di materiale di contenuto deplorevole.
Esistono molte altre vulnerabilità, l'elenco completo delle 20 vulnerabilità più critiche per la sicurezza in internet è reperibile all'indirizzo http://www.datasecurity.it/top20/index.html
Per poter identificare le debolezze della propria rete e dei propri sistemi, al fine di evitarne uno sfruttamento da parte di utenti maliziosi, esistono strumenti appositi: gli scanner di vulnerabilità.
Lo scanning delle vulnerabilità è dunque il processo
di controllo di tutti i metodi potenziali di attacco, atti a manomettere la
rete di unorganizzazione.
Tra gli elementi a rischio che questi software sono in grado di rilevare troviamo
le varie vulnerabilità citate nel paragrafo precedente come i bug delle
applicazioni, i virus o le politiche troppo deboli per il controllo degli accessi
come ad esempio sistemi di autenticazione degli utenti non sicuri, soprattutto
nel caso in cui si usano password facilmente identificabili. Gli scanner per
la rilevazione delle vulnerabilità sono anche in grado di rilevare le
applicazioni configurate in modo non corretto, che possono minare le difese
di una rete.
Due passi che ci permettono l'analisi di un sistema su una rete sono il probing sistematico di un server posto in rete e lo scanning.Con il primo possiamo ottenere informazioni sul sistema allo scopo di conoscere le vulnerabilità relative a:
-amministratori e utenti della rete
-posizione del server
-presenza o meno di intranet
-sistemi di rilevamento delle intrusioni
-server dns e sua configurazione
-indirizzi IP assegnati
-eventuale accesso telefonico
Il secondo ci permette di rilevare quali sono le macchine attive e raggiungibili via internet e quali servizi sono disponibili usando tecniche come:
-il ping sweep (utili per rilevare se un determinato host sia attivo o meno)
-il portscanning (processo di connessione a porte TCP
e UDP sul sistema nel quale si
vuole tentare una penetrazione al fine di determinare quali servizi siano in
esecuzione o in stato di LISTENING)
-il rilevamento del sistema operativo tramite stack TCP/IP fingerprinting
I punti deboli di una rete possono essere quindi innumerevoli e nascosti nei servizi e nei sistemi più disparati. Vediamo ora uno scanner di vulnerabiltà, il Nessus, per evitare che questi punti deboli siano sfruttati.
Nessus è un portscanner, ovvero un software che verifica la sicurezza di un sistema tentando di accedervi mediante le porte di uno o più protocolli. Il fine è quello "nobile" di scoprire eventuali debolezze in un sistema ed evitarne lo sfruttamento da parte di utenti maliziosi.
Il progetto Nessus nacque in Francia da Renaud Deraison agli
inizi del 1998 ed in soli quattro mesi vide la luce la prima versione. Il suo
scopo era quello di colmare un vuoto: non esistevano infatti software gratuiti
di questo tipo abbastanza recenti!
Deraison voleva costruire un prodotto che fosse free, open-source, in continua
evoluzione. A questi primi obiettivi se ne aggiunse un altro: quello di rendere
sicure le trasmissioni sulla rete generate dal programma. Di questo si occupò
Jordan Hrycaj. Durante il suo lavoro Deraison riuscì inoltre a corredare
il suo prodotto di altre importanti qualità. Ad esempio Nessus non dà
niente per scontato: se deve controllare la robustezza della configurazione
di un webserver non lo va a cercare alla porta 80, ma le verifica tutte!
Nessus è quindi un progetto che ha come scopo quello di fornire alla comunità uno strumento potente, facile, free per analizzare e scoprire le vulnerabilità di una rete ed evitare la riuscita di eventuali attacchi. E' probabilmente il più completo ed evoluto strumento di vulnerability scanning disponibile nel mondo open source.
Il pacchetto Nessus è formato da due programmi: il client ed il server.
Il server (nessusd) è il motore che esegue lo scan vero e proprio, esiste
solo in versione Unix-like ed è quindi la parte del pacchetto che offre
i servizi: in questo caso un servizio è semplicemente un test, per esempio
testare se il servizio FTP è configurato in modo tale da temere qualche
attacco. Il client (nessus) è l'interfaccia (disponibile in diversi linguaggi
per diversi sistemi operativi) con cui si può configurare una sessione
di scan (indirizzi target, tipi di check da eseguire ecc.) da far eseguire sul
server. Attraverso il client nessus è possibile impostare gli host (computer)
della rete da sottoporre ai test, quali e che tipo di test effettuare, oltre
ad altre opzioni (es. dove salvare i risultati, in quale formato, ...). Il client
(nessus) e il server (nessusd) possono essere installati nella stessa macchina
oppure su macchine diverse. Esistono inoltre client grafici per Windows, Posix/GTK+
(Linux, Solaris, ...) e JAVA.
Nessus presenta una struttura modulare, con dei plug-in che possono essere aggiornati per individuare vulnerabilità recenti. Tale struttura è il punto di forza di Nessus, i plug-in sono veri e propri moduli esterni al progetto originale e ad esso perfettamente integrabili. L'istallazione del pacchetto Nessus fornisce, oltre a client e server, un numero base di plug-in. In qualsiasi momento si possono scaricare dalla rete plug-in aggiuntivi, la loro istallazione si riduce a sistemarli nell'apposita directory.
Sul sito www.nessus.org oltre alla possibilità di scaricare dei nuovi plug-in, il creatore di Nessus ha cercato di costruire quasi una piccola comunità che, ci si augura, faccia crescere sempre di più il progetto Nessus. Sul tale sito infatti si possono trovare varie liste aperte al pubblico ma con la costante supervisione di Deraison. La prima è una lista di bug: chiunque ritenesse di avere scoperto un nuovo bug può segnalarlo alla comunità, fornendo una spiegazione dettagliata del problema. Chiunque volesse scrivere uno script che testi il sistema contro uno dei bug presenti in questa lista, può proporsi come realizzatore. Gli script devono essere scritti in C oppure in NASL (Nessus Attack Scripting Language) un mini linguaggio inventato sempre da Deraison appositamente per scrivere tali test di sicurezza in modo semplice e veloce. I programmi realizzati dall'utenza saranno poi testati e controllati da Renaud Deraison per essere infine resi disponibili a tutti.
Esiste poi un'altra lista di bug, già segnalati, ma per i quali non si realizzerà un plug-in per Nessus, ovviamente per ciascun elemento della lista ci saranno le motivazioni che hanno portato a questa scelta. Infine, esistono le liste dei plug-in attualmente in lavorazione ed ovviamente quella dei plug-in disponibili. La struttura straordinariamente dinamica pensata da Deraison, conferirebbe a Nessus una longevità notevole avvalorata dal fatto che il codice è disponibile a tutti. Tuttavia va osservato che il controllo dei plug-in da parte di Deraison, sebbene necessario a rendere Nessus sicuramente privo di codice malizioso, potrebbe essere vincolante e diventare una delle cause di un futuro abbandono del pacchetto da parte dell'utenza.
Come per qualsiasi software client/server va analizzato il sistema di comunicazione.
Innanzitutto va detto che il server deve girare su una macchina avviata con privilegi di root nel sistema che si intende controllare. Il client, invece, può essere lanciato da qualsiasi macchina in qualche modo connessa alla precedente. Il client può effettuare qualsiasi tipo di richiesta, queste ovviamente verranno eseguite compatibilmente alla topologia della rete! Ovvero, la macchina sulla quale risiede il server di Nessus può effettuare lo scanning solo delle macchine che in qualche modo riesce a raggiungere; inoltre, può effettuare test che richiedono permessi particolari solo sulle macchine presso cui gode di tali permessi.
Client e server comunicano di default sulla porta 3001 del protocollo TCP. Questa impostazione può essere facilmente modificata, indicando al server su quale altra porta TCP mettersi in ascolto. Il traffico generato sulla rete dall'esecuzione di Nessus non è elevato se non nella parte di comunicazione dei risultati. Una volta che il client ha eseguito il login, il server gli invia la lista dei plug-in disponibili, che risulta essere una comunicazione abbastanza leggera, così come la successiva richiesta che il client invierà. Infatti esso dovrà semplicemente indicare quali plug-in desidera siano performati e su quali macchine, indicandone il DNS o l'indirizzo IP. A questo punto il server creerà un thread per ciascuna macchina da controllare. Il nuovo processo si occuperà di effettuare i test richiesti e comunicare al client il costante avanzamento della sua richiesta. Queste informazioni viaggiano sulla rete in modo cifrato e richiedono un flusso di comunicazione continuo. Una volta che il thread ha eseguito il lavoro richiesto, morirà, ed il client potrà fornire all'utente tutti i dettagli dello scanning.
In principio, non si prevedeva la necessità di fornire un'interazione protetta tra client e server, è per questo motivo che lo strato di cifratura non è visto come parte integrante del software; addirittura è possibile disabilitare questa funzione, anche se fortemente sconsigliato. Il curatore di questo modulo è stato Jordan Hrycaj, il quale ha deciso di adottare lo schema a chiave pubblica El Gamal.
In definitiva Nessus presenta le seguenti caratteristiche:
- Supporto CVE ( Common Vulnerabilities and exposures )
- Architettura a plug-in
- Database delle vulnerabilità costantemente aggiornato ( alcuni script vengono rilasciati dallo staff di Nessus poche ore dopo la pubblicazione di un nuovo bug sulle mailing list della sicurezza )
- I nuovi script di test vengono scaricati e installati facilmente ( comando "nessus-update-plugins" )
- E' scritto in C o in NASL ( Nessus Attack Script Language )
- Ricerca intelligente dei servizi ( porte non standard, servizi multipli )
- Test condizionali ( se il servizio web non c'è gli attacchi CGI non vengono lanciati )
- Velocità di esecuzione ( scan in multithread )
- Gratuito e open-source
- Inoltre la comunicazione avviene in maniera Client/Server, dove il sysad è l'utente del server ( amministratore ) il quale stabilisce per ogni untente nome e password. Ogni utente sarà provvisto di una coppia chiave pubblica, chiave privata e l'accesso degli utenti avviene in modo autenticato. Le comunicazioni avvengono in modo cifrato.
5. ESEMPI DI UTILIZZO DI NESSUS
Il primo passo è quello di installare nessusd (server) e nessus (client). Il software Nessus è reperibile all'indirizzo www.nessus.org . Il nostro test è stato effettuato su una macchina Unix con la distribuzione Linux Suse 8.0 sulla quale abbiamo installato la release Nessus 2.0.
A questo punto dobbiamo settare il server creando un account e poi farlo partire prima di passare al lato client.
5.2 Creazione dell'account nessusd
Il server nessusd ha un proprio database di utenti, quindi bisogna aggiungere un nuovo utente al database del sistema di servizio. Ciascun utente può avere delle restrizioni sul numero delle macchine che può esaminare.
Per creare un nuovo utente utilizziamo il comando
nessusd -P username,passwd.
Per verificare che tutto è andato bene scriviamo
nessusd -L
Possiamo adesso aggiungere un nuovo utente che può eseguire il Nessus con delle regole utilizzando l'utility
nessus-adduser
# nessus-adduser
Addition of a new nessusd user Login : rafmax User rules Please see the nessus-adduser(8) man page for the rules syntax Enter the rules for this user, and hit ctrl-D once you are done : //deny 127.0.0.1 Login : rafmax //deny 127.0.0.1
user added. |
Abbiamo quindi registrato un utente di
nome rafmax che ha il permesso di eseguire il nessus
solamente sul propio sistema quindi se rafmax è l'amministratore, ha
il permesso di
fare uno scan dettagliato sul propio sistema per trovare possibbili bug.
5.3 Configurazione del nessus-daemon
Una volta settato il tutto possiamo lanciare il nessus-daemon
così da passare subito dopo al
lato client.
Il file di configurazione del nessus-daemon è di default /usr/local/etc/nessus/nessus.conf.
Non sono necessarie particolari modifiche per far funzionare un Nessus compilato
con le opzioni di default, in ogni caso fra i parametri configurabili, oltre
a PATH vari, ci sono alcune impostazioni sul numero di test simultanei da eseguire,
sul range di porte su cui fare lo scan nonchè sui settaggi utilizzati
per il canale criptato fra client e server.
E' possibile avviare il nessusd come root attraverso il comando
nessusd -D
Possiamo adesso finalmente avviare il client scrivendo in una consolle nessus
Apparirà così la schermata di dialogo
![]() |
Inseriamo l'indirizzo dell'host su cui è in funzione il nessusd-server e la porta su cui è in ascolto (3001 per default).
Eseguiamo il login con relativa password cliccando sul bottone "Log in". |
Configurazione del controllo di sicurezza
![]() |
E' possibile scegliere i vari test a cui siamo interessati. Ogni test utilizza un diverso plugin.
Cliccando sul plugin nel pannello sottostante appare una breve descrizione di cosa fa il plugin selezionato. |
Preferenze del plugin
![]() |
Questa schermata può essere utilizzata per modificare il comportamento di default di un plugin. E' possibile inoltre specificare informazioni addizionali in modo che il controllo e la revisione siano più completi. |
Scan options
![]() |
In questa schermata è possibile settare: -il range di porte da controllare
-il numero di host da visionare contemporaneamente -il numero di plugin da utilizzare contemporaneamente contro un singolo host
|
Target selection
![]() |
In questa schermata vengono settati gli indirizzi degli host che vogliamo controllare. E' possibile utilizzare differenti scelte per definire gli indirizzi obbiettivi:
10.163.156.1 un solo indirizzo IP 10.163.156.1-254 una serie di indirizzi IP |
Rules section
![]() |
Rules permettono ad un utente di restringere il suo test. Ad esempio vogliamo esaminare gli indirizzi 10.163.156.1/24 eliminando dalla scansione l'indirizzo 10.163.156.5 A questo punto è possibile avviare la scansione cliccando sul bottone "Start the scan"
|
Rapporto
![]() |
Dal rapporto risulta che su 10 host controllati sono stati trovati:
54 buchi di sicurezza
303 warning
113 security note
Considerare che:
- Nessus non è stato pensato come tool per hacker.
- Alcune segnalazione di warning o alert si basano o su assunzioni relativamente
paranoiche o su condizioni che di fatto non esistono sul server interessato
("falsi positivi").
- Studiare i report di Nessus e le descrizioni sui buchi trovati è un
buon metodo per iniziale a familiarizzare con il mondo variegato dei "Security
Alert", che spesso oltre a descrivere il buco trovato, indicano le soluzioni
su come correggerlo.
- E' bene abituarsi a lanciare regolarmente un Nessus con i plugin aggiornati
sui propri server.
www.nessus.org sito ufficiale Nessus
Bibliografia
Chris Brenton, Cameron Hunt, Active Defense, editore Jackson Libri 2003
Littlejhon Shinder Debra, Networking, editore Jackson Libri 2003