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.
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!
Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.
Supporta il progetto