Dans ce tutoriel, je vais vous expliquer comment déployer Greenbone (ex OpenVAS) en conteneur avec Docker.
Greenbone est une suite de plusieurs composant (Interface Web, Vulnerability Manager et Scanner) qui va vous permettre de mettre en place des scans de vulnérabilité sur votre infrastructure de façon plus ou moins automatique.
Avec Greenbone vous aurez un aperçu de l’état de vulnérabilité de vos serveurs, pour chaque vulnérabilité trouver, vous aurez des liens vers des documents pour les corrigés.
J’utilise régulièrement cet outils afin d’avoir une vue d’ensemble et cela m’a permit de corriger pas mal de vulnérabilité, surtout quand il y a seulement une mise à jour logiciel à faire.
Pour commencer, vous aurez besoin d’un serveur Linux avec Docker. Concernant les prérequis logiciels, cela dépendre du nombre de scan que vous allez faire et de la taille de votre environnement, pour commencer 2CPU et 4 Go Ram est un bon départ.
Sur le serveur, créer un dossier pour mettre le fichier docker-compose.yml de Greenbone.
sudo mkdir /containers/greenbone/Aller dans le dossier créé puis créer le dossier docker-compose.yml et coller le contenu ci-après :
sudo nano docker-compose.ymlLe contenu du fichier :
services:
vulnerability-tests:
image: greenbone/vulnerability-tests
environment:
STORAGE_PATH: /var/lib/openvas/22.04/vt-data/nasl
volumes:
- vt_data_vol:/mnt
notus-data:
image: greenbone/notus-data
volumes:
- notus_data_vol:/mnt
scap-data:
image: greenbone/scap-data
volumes:
- scap_data_vol:/mnt
cert-bund-data:
image: greenbone/cert-bund-data
volumes:
- cert_data_vol:/mnt
dfn-cert-data:
image: greenbone/dfn-cert-data
volumes:
- cert_data_vol:/mnt
depends_on:
- cert-bund-data
data-objects:
image: greenbone/data-objects
volumes:
- data_objects_vol:/mnt
report-formats:
image: greenbone/report-formats
volumes:
- data_objects_vol:/mnt
depends_on:
- data-objects
gpg-data:
image: greenbone/gpg-data
volumes:
- gpg_data_vol:/mnt
redis-server:
image: greenbone/redis-server
restart: on-failure
volumes:
- redis_socket_vol:/run/redis/
pg-gvm:
image: greenbone/pg-gvm:stable
restart: on-failure
volumes:
- psql_data_vol:/var/lib/postgresql
- psql_socket_vol:/var/run/postgresql
gvmd:
image: greenbone/gvmd:stable
restart: on-failure
volumes:
- gvmd_data_vol:/var/lib/gvm
- scap_data_vol:/var/lib/gvm/scap-data/
- cert_data_vol:/var/lib/gvm/cert-data
- data_objects_vol:/var/lib/gvm/data-objects/gvmd
- vt_data_vol:/var/lib/openvas/plugins
- psql_data_vol:/var/lib/postgresql
- gvmd_socket_vol:/run/gvmd
- ospd_openvas_socket_vol:/run/ospd
- psql_socket_vol:/var/run/postgresql
depends_on:
pg-gvm:
condition: service_started
scap-data:
condition: service_completed_successfully
cert-bund-data:
condition: service_completed_successfully
dfn-cert-data:
condition: service_completed_successfully
data-objects:
condition: service_completed_successfully
report-formats:
condition: service_completed_successfully
gsa:
image: greenbone/gsa:stable
restart: on-failure
ports:
- 9392:80
volumes:
- gvmd_socket_vol:/run/gvmd
depends_on:
- gvmd
ospd-openvas:
image: greenbone/ospd-openvas:stable
restart: on-failure
hostname: ospd-openvas.local
cap_add:
- NET_ADMIN # for capturing packages in promiscuous mode
- NET_RAW # for raw sockets e.g. used for the boreas alive detection
security_opt:
- seccomp=unconfined
- apparmor=unconfined
command:
[
"ospd-openvas",
"-f",
"--config",
"/etc/gvm/ospd-openvas.conf",
"--mqtt-broker-address",
"mqtt-broker",
"--notus-feed-dir",
"/var/lib/notus/advisories",
"-m",
"666"
]
volumes:
- gpg_data_vol:/etc/openvas/gnupg
- vt_data_vol:/var/lib/openvas/plugins
- notus_data_vol:/var/lib/notus
- ospd_openvas_socket_vol:/run/ospd
- redis_socket_vol:/run/redis/
depends_on:
redis-server:
condition: service_started
gpg-data:
condition: service_completed_successfully
vulnerability-tests:
condition: service_completed_successfully
mqtt-broker:
restart: on-failure
image: greenbone/mqtt-broker
networks:
default:
aliases:
- mqtt-broker
- broker
notus-scanner:
restart: on-failure
image: greenbone/notus-scanner:stable
volumes:
- notus_data_vol:/var/lib/notus
- gpg_data_vol:/etc/openvas/gnupg
environment:
NOTUS_SCANNER_MQTT_BROKER_ADDRESS: mqtt-broker
NOTUS_SCANNER_PRODUCTS_DIRECTORY: /var/lib/notus/products
depends_on:
- mqtt-broker
- gpg-data
- vulnerability-tests
gvm-tools:
image: greenbone/gvm-tools
volumes:
- gvmd_socket_vol:/run/gvmd
- ospd_openvas_socket_vol:/run/ospd
depends_on:
- gvmd
- ospd-openvas
volumes:
gpg_data_vol:
scap_data_vol:
cert_data_vol:
data_objects_vol:
gvmd_data_vol:
psql_data_vol:
vt_data_vol:
notus_data_vol:
psql_socket_vol:
gvmd_socket_vol:
ospd_openvas_socket_vol:
redis_socket_vol:Télécharger les images :
sudo docker compose pullDémarrer les conteneurs :
sudo docker compose up -dVérifier dans les logs qu’il n’y ait pas de problèmes :
sudo docker compose logs -fLe premier démarrage des conteneurs Greenbone prend du temps, car il va construire la base de données et mettre à jour toutes les vulnérabilités, ce qui peut prendre 1 heure.
Pour accéder à Greenbone, ouvrir un navigateur Internet et aller à l’adresse suivante : http://ip-docker-server:9392

Les identifiants par défaut sont admin / admin
A la connexion, on arrive sur un tableau de bord :

Si le graphique temporel des CVE et le camembert NVTs n’est pas chargé, c’est que l’initialisation des données n’est pas encore fini.
Pour lancer un scan d’un ordinateur, Aller sur Scans 1, cliquer sur la baguette 2 puis sur Task Wizard 3.

Entrer l’adresse IP de l’ordinateur 1 à scanner et cliquer sur Scan 2.

Le scan est ajouté :

Il est possible de renommer le scan, cliquer sur l’icone d’édition 1.

Nommer la tâche 1 (souvent je donne le nom du serveur) et cliquer sur Save 2.

La tâche est renommé et en cours …

Patienter pendant le scan, la durée peut varier en fonction du nombre d’élément qui vont être découvert et donc du test des différentes vulnérabilité possible.
Pour accéder au rapport, cliquer sur la date du denier rapport 1.

Aller sur l’onglet Results pour avoir la liste des vulnérabilités trouvées.

En cliquant sur la première vulnérabilité, le détail s’affiche en dessous et je peux voir que pour corriger cette faille, je dois mettre à jour Tomcat.

Pour mettre à jour les vulnérabilités deux solutions :
Solution 1 :
docker compose pull notus-data vulnerability-tests scap-data dfn-cert-data cert-bund-data report-formats data-objects
docker compose greenbone-community-edition up -d notus-data vulnerability-tests scap-data dfn-cert-data cert-bund-data report-formats data-objectsSolution 2 :
docker compose run --rm greenbone-feed-sync greenbone-feed-sync --type nasl
docker compose run --rm greenbone-feed-sync greenbone-feed-sync --type notus
docker compose run --rm greenbone-feed-sync greenbone-feed-sync --type scap
docker compose run --rm greenbone-feed-sync greenbone-feed-sync --type cert
docker compose run --rm greenbone-feed-sync greenbone-feed-sync --type gvmd-dataLa mise à jour peut également prendre du temps.
Penser à changer le mot de passe par défaut dans les paramètres de l’utilisateur, il sera dommage de donner à un pirate l’accès à la liste des vulnérabilités de votre système.
Vous savez comment mettre en place un scanner de vulnérabilité avec Docker.
N’hésiter à user et à en abuser pour augmenter détecter les failles sur votre SI.
Personnellement, il m’a permis de voir des services que je ne sais pas qu’il était présent et de plus vulnérable, ce qui m’a permit de les corriger.
