Recherche de vulnérabilités avec VULS

10 avril 2016 Sécurité 0 Commentaire

Future-Architect a crée un scanner de vulnérabilités nommé VULS (supporte Ubuntu, Debian, CentOS, Amazon Linux et RHEL). VULS vous permettra de partir à la recherche de vulnérabilités déjà connues (CVE) sur vos machines. Son installation est relativement facile, tout comme son utilisation.

Puisque VULS peut effectuer des scans sur des remote-server je vous propose de l’installer sur une machine virtuelle, ici j’utiliserai Debian.

 

 

Recherche de vulnérabilités avec VULS

Installation des dépendances

Une fois connecté à notre machine virtuelle nous allons pouvoir lancé l’installation des paquets requis

sudo apt-get -y install sqlite git gcc
wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
mkdir $HOME/go

 

Créons maintenant le fichier /etc/profile.d/goenv.sh

sudo nano /etc/profile.d/goenv.sh

 

Ajoutons les lignes suivantes

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

 

Ajoutons ces nouvelles variables d’environnement au shell

source /etc/profile.d/goenv.sh

 

 

Déploiement de go-cve-dictionnary

go-cve-dictionnary est une API vous permettant de récupérer les CVE (Common Vulnerabilities and Exposures) et de les stocker au format SQLite3

Installons donc go-cve-dictionnary

sudo mkdir /var/log/vuls
sudo chown root /var/log/vuls
sudo chmod 700 /var/log/vuls
go get github.com/kotakanbe/go-cve-dictionary

 

Démarrons go-cve-dictionnary en mode serveur et récupérons toutes les CVE (peut prendre un peu de temps)

go-cve-dictionary server
... Fetching ...

 

Une fois le téléchargement terminé vérifions que la base de données soit bien présente

ls -alh cve.sqlite3
-rw-r--r-- 1 ec2-user ec2-user 7.0M Mar 24 13:20 cve.sqlite3

 

Puisque nous avons pu collectés notre dictionnaire de vulnérabilités nous allons maintenant pouvoir redémarrer go-cve-dictionnary en mode serveur

go-cve-dictionary server
[Apr 10 17:01:20] INFO Opening DB. datafile: /root/cve.sqlite3
[Apr 10 17:01:20] INFO Migrating DB
[Apr 10 17:01:20] INFO Starting HTTP Sever...
[Apr 10 17:01:20] INFO Listening on 127.0.0.1:1323

 

 

Déploiement de VULS

Ne touchez plus à cette première session SSH mais ouvrez en une seconde.

Récupérons VULS

go get github.com/future-architect/vuls

 

 

Configuration des machine à scanner

Les données concernant les machines à scanner doivent etre stockées au format TOML

Créons donc notre fichier de configuration

sudo nano config.toml

 

Ajoutez les lignes suivantes puis configurez les (dans l’exemple ci-dessous nous scannerons la machine virtuelle)

[servers.127-0-0-1]
host = "127.0.0.1"
port = "22"
user = "utilisateur"
keyPath = "/root/.ssh/id_rsa"

 

 

Recherche de vulnérabilités

Commençons par préparer VULS

vuls prepare
[Apr 10 17:20:57] INFO [localhost] Detecting OS...
[Apr 10 17:20:57] INFO [localhost] Installing...
[Apr 10 17:20:57] INFO [127-0-0-1:22] apt-get update...
[Apr 10 17:21:05] INFO [127-0-0-1:22] Installed: aptitude
[Apr 10 17:21:05] INFO [localhost] Success

 

 

La préparation s’étant correctement déroulé, nous allons pouvoir lancer un scan via la commande vuls scan

root@test:~$ vuls scan
INFO[0000] Begin scanning (config: /root/config.toml)
[Apr 10 17:23:18] INFO [localhost] Validating Config...
[Apr 10 17:23:18] INFO [localhost] Detecting OS...
[Apr 10 17:23:18] INFO [localhost] Scanning vulnerabilities...
[Apr 10 17:23:18] INFO [localhost] Check required packages for scanning...
[Apr 10 17:23:18] INFO [localhost] Scanning vulnerable OS packages...
[Apr 10 17:23:26] INFO [127-0-0-1:22] (1/1) Upgradable: optipng-0.7.5-1 -> 0.7.5-1+deb8u1
[Apr 10 17:23:28] INFO [127-0-0-1:22] (1/1) Scanned optipng-0.7.5-1 : [CVE-2016-2191]
[Apr 10 17:23:28] INFO [127-0-0-1:22] Fetching CVE details...
[Apr 10 17:23:28] INFO [127-0-0-1:22] Done
[Apr 10 17:23:28] INFO [localhost] Scanning vulnerable software specified in the CPE...
[Apr 10 17:23:28] INFO [localhost] Reporting...
127-0-0-1 (debian 8.4)
======================
CVE-2016-2191 ?



CVE-2016-2191
-------------
Score ?
NVD https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-2191
CVE Details http://www.cvedetails.com/cve/CVE-2016-2191
Debian-CVE https://security-tracker.debian.org/tracker/CVE-2016-2191


[Apr 10 17:23:28] INFO [localhost] Insert to DB...

 

Une vulnérabilité a été détectée sur le serveur. Pour voir plus d’informations nous allons utiliser l’interface terminal de vuls

vuls tui

 

Recherche de vulnérabilités avec VULS

 

 

Recherche de vulnérabilités sur machine en réseau

Si vous avez plusieurs distributions Linux sur votre réseau vous pouvez utiliser le mode auto-discovery de VULS

Utilisez la commande help pour connaitre le range d’IP de votre réseau (si vous ne le connaissez pas)

vuls discover -help

 

Vuls nous indique alors quel range nous devons scanner

root@test:~$ vuls discover -help
discover:
 discover 192.168.0.0/24

 

Scannons alors ce range d’IP

root@test:~$ vuls discover 192.168.0.0/24

 

Si des machines sont découverte VULS vous proposera alors une configuration toute prête pour lancer votre scan. Ci-dessous un exemple de retour de cette commande venant de la documentation officielle de VULS

$ vuls discover 172.31.4.0/24
# Create config.toml using below and then ./vuls --config=/path/to/config.toml

[slack]
hookURL = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
channel = "#channel-name"
#channel = "#{servername}"
iconEmoji = ":ghost:"
authUser = "username"
notifyUsers = ["@username"]

[mail]
smtpAddr = "smtp.gmail.com"
smtpPort = 465
user = "username"
password = "password"
from = "from@address.com"
to = ["to@address.com"]
cc = ["cc@address.com"]
subjectPrefix = "[vuls]"

[default]
#port = "22"
#user = "username"
#password = "password"
#keyPath = "/home/username/.ssh/id_rsa"
#keyPassword = "password"

[servers]

[servers.172-31-4-82]
host = "172.31.4.82"
#port = "22"
#user = "root"
#password = "password"
#keyPath = "/home/username/.ssh/id_rsa"
#keyPassword = "password"
#cpeNames = [
# "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
#]

 

Source