Greenbone : déploiement en conteneur d’un scanner de vulnérabilité

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.yml

Le 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 pull

Démarrer les conteneurs :

sudo docker compose up -d

Vérifier dans les logs qu’il n’y ait pas de problèmes :

sudo docker compose logs -f

Le 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-objects

Solution 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-data

La 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.

Romain Drouche
Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire