Installation de CVE-SEARCH

Comment installer le portail CVE-SEARCH sous Ubuntu 20.04 LTS

Introduction

CVE-SEARCH est un outil qui permet d’importer les CVE (Commun Vulnerabilities and Exposures) ainsi que les CPE (Common Platforme Enumeration) au sein d’une base de données MongoDB accessible via votre navigateur.

L’objectif du projet était de permettre de consulter en local les bases de données publiques concernant les CVE/CPE sans mettre à mal les serveurs publiques du mitre. Autre avantage et pas des moindres , on devient autonome des infrastructures publiques.

Nous allons mettre en œuvre CVE-Search un serveur Linux Ubuntu 20.04 LTS.

Prérequis

CVE-Search nécéssite une configuration assez simple malgré la présence de Redis et MongoDB. J’ai effectué l’installation sur un serveur à base de processeur Intel Atom avec seulement 2 cores et 2Go de Ram. C’est juste plus long lors de l’initialisation de la base données (dans mon cas plus de 20 heures au total).

Type Serveur : Physique et/ou VM
CPU: 1 sockets et 2 cores
RAM: 2Go de Ram au minima mais 6Go semble nécessaire lors des imports initiaux
HDD : 32Go (SAS, SATA et/ou SSD)
OS: Ubuntu 20.04 LTS avec juste le serveur ssh installé

Pour cet article, je suis sur un socle Proxmox avec la configuration suivante:

Configuration de la VM CVE-Search

Une fois l’installation terminé du serveur, je vous recommande de modifier à minima le port SSH par défaut si votre machine est hébergé sur un réseau publique. Le durcissement du serveur CVE-Search ne sera pas aborder dans ce billet.

Installation des composants de base

Une fois connecté sous ssh sur la pétoire avec votre compte utilisateur favori, il faudra faire quelques opérations avec les droits sudo au départ mais rapidement nous resterons dans le cadre d’un compte utilisateur.

On commence par mettre le système à jour

sudo apt update && apt upgrade -y

sudo apt install lnav net-tools

L’outils lnav permet de naviguer dans les fichiers journaux du serveur et de voir ainsi le lancement des différents programmes.

On va sur le répertoire /opt

cd /opt

On lance ensuite la commande git avec les options suivantes (git est installé par défaut sous ubuntu 20.04 LTS)

git clone https//github.com/cve-search/cve-search.git

Un répertoire est créé ainsi la mise en place des programmes associées à CVE-Search.

cd cve-search

On peut commencer l’installation des composants suivants:

Python
apt install python3

suivi de la commande

pip3 install -r requirements.txt

MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

apt-get update
apt-get install -y mongodb-org
systemctl daemon-reload
systemctl start mongod
systemctl status mongod
systemctl enable mongod

Dernières commandes pour valider les dépendances toujours dans le répertoire /opt/cve-search

xargs sudo apt-get install -y < requirements.system

apt install redis-server

Configuration du serveur REDIS

vi /etc/redis/redis.conf

On vérifie que le paramètre requirepass est bien commenté avec un #

Préparation de la configuration de CVE-SEARCH out of the box

On copie les fichiers suivants situés dans le répertoire /opt/cve-search/etc/

cp configuration.ini.sample configuration.ini

cp plugins.txt.sample plugins.txt

cp sources.ini.sample source.ini

On va ensuite modifier le fichier configuration en retirant la variable password pour REDIS.

On commence à faire le remplissage des bases de données avec l’initialisation, on peut aller chercher un café…

On se positionne sur /opt/cve-search et on les commandes suivantes par ordre

./sbin/db_mgmt_cpe_dictionary.py -p
./sbin/db_mgmt_json.py -p
./sbin/db_updater.py -c

Retex sur l’initialisation de la base de données: Il vous faut compter une bonne heure sur la VM avec la configuration présenté au début du billet. J’ai eu pas mal de segmentation fault durant les imports et les différents batchs qui ont pris pratiquement 24 heures pour échouer sur une VM avec 4Go de Ram.
Ne pas hésiter à vérifier, revérifier et encore vérifier que les services MongoDB et Redis soient bien actifs et running.

Maintenant que l’on a un serveur qui contient en local les CVE et CPE, on va pouvoir les consulter via une interface Web. A ce stade les développeurs de CVE-Search nous laisse deux choix :

  • Le premier consiste à lancer un site web sur le port 5000 avec l’interpreteur Python3 en ligne de commande.
  • Le second consiste à mettre en oeuvre un service proxy basé sur NGINX.

Pour faire un test en local, le premier choix s’impose mais n’est pas très sérieux au vu de la capacité du serveur.

On va donc jouer avec NGINX, TMUX et un peu de ligne de commande python

L’Installation de Tmux pour permettre de conserver dans une console une ligne de commande active en python3 qui permet de maintenir à jour en temps réel les informations de vos bases de données…et oui c’est du brut. Normalement sous Ubuntu il est déja installé sinon faire sudo apt install tmux .

On va commencer en tester le service Web toujours en étant situé dans /opt/cve-search

python3 web.index.py

il suffit de taper la commande suivante sous le navigateur local du serveur https://127.0.0.1:5000

Sympa mais pas pratique du tout quand on est à distance, je vois déja certains d’entre vous dire, il suffit d’aller dans le fichier de configuration situé dans /opt/cve-search/etc/configuration.ini et modifié l’adresse IP 127.0.0.1 par l’adresse du serveur. Ca fonctionne mais autant mettre 123456 comme mot de passe root.

On va la faire à l’ancienne avec un bon vieux NGINX en proxy mais avant on va modifier les droits sur l’ensemble des répertoires pour arrêter de faire du sudo comme des ânes.

La commande magique a faire dans /opt :

chown -R votrecompteutilisateur: cve-search

On peut lancer l’installation du serveur NGINX

apt install nginx

une fois celui-ci installé on va dans /etc/nginx/sites-enabled

on copie le fichier default en cve

cp default cve

On créer le lien pour activer le site Web

ls -al /etc/nginx/sites-enabled/

on édite le fichier cve et on ajoute la variable proxy

On va de suite installer un certificat SSL pour permettre d’avoir un serveur opérationnel et propre. Les commandes suivantes demandent d’avoir les privilèges d’administration de votre système.

apt-cache search snapd
apt install snapd
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot --nginx

Pour permettre maintenant la mise en ligne de votre portail CVE-Search vous allez devoir lancer deux commandes dans un terminal dit Tmux /opt/cve-search.

La première console Tmux contiendra le lancement du site web python3 via un compte utilisateur et non admin (root)

python3 web/index.py

La seconde console Tmux contient la ligne de commande qui permet de garder le flux à jour

./sbin/db_updater.py -lvic

Et voila si tout c’est bien passé vous avez un serveur qui répond en https avec un certificat Let’s encrypt et qui pointe sur votre portail CVE-Search avec les mises à jour.

Enjoy 🙂

Liens pratiques
Documentation officiel: https://cve-search.github.io/cve-search/index.html
Sponsor du projet CVE-Search: https://www.circl.lu/services/cve-search/
CERT utilisant CVE-Search : https://cve-search.iicrai.org