Come fare un vulnerability Assessment con nmap

Diciamolo subito, se il nostro scopo è quello di implementare un processo di Vulnerability Management e ci serve tenere sotto scansione centinaia o migliaia di server organizzati per produzione, test e sviluppo, allora quello che ci serve è un tool di vulnerability assessment più potente.

Photo by Les Haines

Diciamolo subito, se il nostro scopo è quello di implementare un processo di Vulnerability Management e ci serve tenere sotto scansione centinaia o migliaia di server organizzati per produzione, test e sviluppo, allora quello che ci serve è un tool di vulnerability assessment più potente.

Possiamo sceglierlo opensource come OpenVAS o commerciale come Nessus o Nexpose. Questo dipende dal nostro budget e dalle nostre esigenze.

A volte però ci serve qualcosa di veloce che ci dia una rapida overview sullo stato di salute di una macchina, o più semplicemente possiamo non avere accesso momentaneamente ai nostri strumenti più blasonati.

Proprio ieri cercavo una soluzione per un mio vecchio netbook, un Asus Aspire D257. Anche con tutta la pazienza del mondo, far girare Nexpose Community è un bagno di sangue. Ho trovato, facendo un po’ di ricerche un’estensione di nmap, Vulscan che sembra fare al caso mio.

Vulscan è uno script NSE, quindi del codice scritto in lua che estende le funzionalità di nmap, che sfrutta le informazioni che il portscanner ha ricavato dall’identificazione dei servizi, vitale sarà lanciare nmap con l’opzione -sV, per elencare le vulnerabilità note per quella versione.

Questo grazie ad una serie di file CSV che fungono da base dati delle vulnerabilità.

Cos’è un vulnerability assessment?

Prima di vedere come installare Vulscan chiariamo quale sia il problema che vogliamo risolvere. Noi abbiamo un indirizzo IP, o una subnet, e vogliamo sapere quali sono le vulnerabilità dei servizi in ascolto su quelle macchine.

Perché mi serve quest’informazione? Mi serve innanzitutto per fare un censimento della versione del software che espone servizi per la mia società o per un mio cliente. Mi serve perché posso creare un piano di patching sulla base delle priorità assegnate a ciascuna vulnerabilità e posso partire da questi risultati per prendere il controllo di una macchina se sto facendo un penetration test. Ovviamente devo essere stato autorizzato a questo step ulteriore.

Un portscan non è illegale e molte società o non lo rilevano o lo ignorano. Avere una knowledge base che ci permette di sapere che esposto ho un IIS 5.0 e che è vulnerabile a X, Y e Z continua a non essere illegale. In fondo ho solo fatto una GET / per sapere la versione del web server. Cercare di bucarlo, sì diventa illegale, quindi a meno che non sia un’attività concordata col cliente, evitate di cacciarvi nei guai.

Come si installa Vulscan

Vulscan è disponibile per il download a questa URL. Una volta scaricato e scompattato, avrete una directory vulscan contenente lo script nse e il file CSV che costituiscono la knowledge base. Questi file CSV sono disponibili, in una versione più aggiornata, sempre nella pagina di download del progetto.

Il percorso dove copiare vulscan dipende in realtà dal sistema operativo che state utilizzando. Ho verificato che per almeno Kali linux e OS X, la directory degli script di nmap è in /usr/local/share/nmap/scripts

$ tar xfvz nmap_nse_vulscan-2.0.tar.gz
$ sudo cp -a vulscan /usr/local/share/nmap/scripts
...
$ ls -l /usr/local/share/nmap/scripts/vulscan
total 74976
-rwxr-xr-x@ 1 thesp0nge  staff    16M Aug 14  2013 cve.csv
-rwxr-xr-x@ 1 thesp0nge  staff   1.7M Aug 14  2013 exploitdb.csv
-rwxr-xr-x@ 1 thesp0nge  staff   1.5M Aug 14  2013 openvas.csv
-rwxr-xr-x@ 1 thesp0nge  staff   6.5M Aug 14  2013 osvdb.csv
-rwxr-xr-x@ 1 thesp0nge  staff   675K Aug 14  2013 scipvuldb.csv
-rwxr-xr-x@ 1 thesp0nge  staff   4.0M Aug 14  2013 securityfocus.csv
-rwxr-xr-x@ 1 thesp0nge  staff   1.8M Aug 14  2013 securitytracker.csv
-rwxr-xr-x@ 1 thesp0nge  staff    16K Aug 14  2013 vulscan.nse
-rwxr-xr-x@ 1 thesp0nge  staff   4.4M Aug 14  2013 xforce.csv

Una volta installato, possiamo vedere che i file CSV con le vulnerabilità sono fermi al 2013. Sul sito ci sono delle versioni più aggiornate, in particolare sono 3 i file modificati rispetto ad Agosto 2013.

$ cd /usr/local/share/nmap/scripts/vulscan
$ curl http://www.computec.ch/projekte/vulscan/download/exploitdb.csv -o exploitdb.csv
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1848k  100 1848k    0     0   783k      0  0:00:02  0:00:02 --:--:--  783k
$ curl http://www.computec.ch/projekte/vulscan/download/scipvuldb.csv -o scipvuldb.csv
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5080k  100 5080k    0     0  1003k      0  0:00:05  0:00:05 --:--:-- 1038k
$ curl http://www.computec.ch/projekte/vulscan/download/securityfocus.csv -o securitytracker.csv
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4399k  100 4399k    0     0   805k      0  0:00:05  0:00:05 --:--:--  818k

Qui possiamo vedere una pecca, grossa. La bontà di questo strumenti dipende esclusivamente dalla knowledge base. Se è aggiornata, allora tutto ha un senso, altrimenti stiamo facendo delle scansioni ma ci stiamo perdendo dietro dei pezzi.

L’archivio aggiornato costantemente è quello del SCIP, forse perché l’autore di Vulscan è svizzero. Se vogliamo migliorare l’accuratezza delle nostre scansioni, nessuno ci vieta di aggiungere un altro feed.

Vi invito a leggervi la documentazione di Vulscan, presente nello stesso file nse. Descrive come creare il proprio file CSV con vulnerabilità custom e come usare l’opzione --script-args vulscandb=your_own_database per specificare il proprio database.

Come si usa Vulscan

Ricordate, Vulscan ha bisogno che chiediate ad nmap di fare il fingerprint della versione del servizio per poter funzionare.

Vi consiglio di usare l’opzione -oA di nmap per salvare l’output. Vulscan sa essere molto verboso, soprattutto se ci sono tante issue.

nmap -sV --script=vulscan/vulscan.nse localhost -oA localhost

# Nmap 6.47 scan initiated Fri Jul 24 09:11:51 2015 as: nmap -sV --script=vulscan/vulscan.nse -oA localhost localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0026s latency).
Not shown: 497 closed ports, 495 filtered ports
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 6.2 (protocol 2.0)
| vulscan: scip VulDB - http://www.scip.ch/en/?vuldb:
| [11124] OpenSSH 6.2/6.3 Post Authentication sshd process initialize mm_newkeys_from_blob privilege escalation
| [76326] OpenSSH 6.8 XSECURITY ForwardX11Trusted privilege escalation
| [12724] OpenSSH up to 6.6 Fingerprint Record Check sshconnect.c verify_host_key HostCertificate weak authentication
| [12683] OpenBSD OpenSSH up to 6.5 Configuration Handler child_set_env() Wildcard privilege escalation
| [12124] OpenSSH 6.4 J-PAKE Protocol Handler schnorr.c hash_buffer denial of service
| [7775] Red Hat Linux/Fedora 6 OpenSSH glibc error() privilege escalation
...
631/tcp  open  ipp        CUPS 2.0
| vulscan: scip VulDB - http://www.scip.ch/en/?vuldb:
| [75844] CUPS up to 2.0.2 Templating Engine cross site scripting
| [75843] CUPS up to 2.0.2 Admin Control List Localized String privilege escalation
| [69199] CUPS 2.0.1 cupsRasterReadPixels() buffer overflow
| [46101] Apple CUPS 2008.0 Symlink privilege escalation
...

Off by one

Vulscan basa la sua accuratezza su quanto è stato in grado nmap di rilevare la versione di un particolare software e sulla bontà della propria base dati. La mia opinione è che ci sia tanto rumore quindi i risultati vanno presi con le pinze e soprattutto con il cervello.

Vulscan è una buona estensione quando siete in emergenza o quando non potete usare strumenti che fanno un’intelligence più sofisticata.

Una pecca è che Vulscan fa assessment solo dei servizi, non del sistema operativo. Per questo dovete sbrigarvela da soli o, visto che il codice è open, dare una mano allo sviluppatore aggiungendo questa funzionalità.

Sicuramente ci offre un punto di partenza, per le nostre analisi. Vale sempre la solita regola: non fidatevi solamente del tool, usate anche il vostro cervello.

Enjoy it!

comments powered by Disqus