Importer ou mettre à jour la base des vulnérabilités avec Swarm

Cette procédure décrit comment mettre à jour la base de données des vulnérabilités d’une instance Cyberwatch déployée en mode hors-ligne avec Docker Swarm.

La base de données des vulnérabilités peut être mise à jour depuis un navigateur web ou en ligne de commande. L’import depuis un navigateur est adapté à une mise à jour ponctuelle de la base de données des vulnérabilités. Au contraire, l’import en ligne de commande sera plus adapté pour un usage fréquent puisqu’il peut être automatisé.

Prérequis

La procédure d’importation de la base des vulnérabilités nécessite :

  • une machine connectée à internet
  • des identifiants valides pour l’accès au repository du logiciel Cyberwatch
  • une instance Cyberwatch déployée en mode hors-ligne avec Swarm

Depuis un navigateur

Cette section décrit comment récupérer et importer la base de données des vulnérabilités depuis un navigateur web. Elle est adaptée à un usage ponctuel

  1. Télécharger l’archive des vulnérabilités depuis l’adresse https://dl.cyberwatch.fr/download_database. L’accès est protégé par une authentification basic auth. Les identifiants d’accès sont fournis par Cyberwatch

  2. Se connecter à l’interface web de l’instance Cyberwatch avec un compte Administrateur

  3. Se rendre sur la page vue d’ensemble d’admin

  4. Cliquer sur le bouton « Téléverser », près du titre « Base de donnée de sécurité »

  5. Importer le fichier précédemment téléchargé et cliquer sur « Mettre à jour »

En ligne de commande

Cette section décrit comment récupérer et importer la base de données des vulnérabilités depuis la ligne de commande. Elle est pensée pour être automatisée.

Récupérer la base de données

  1. Exporter les variables de connexion à Cyberwatch dans l’environnement (completer avec les identifiants fournis par Cyberwatch) :

     export CBW_USER=
     export CBW_PASSWORD=
    
  2. Récupérer la base de données de vulnérabilités :

    curl -u "$CBW_USER:$CBW_PASSWORD" \
       -sf https://dl.cyberwatch.fr/download_database \
       -o vulnerability_db.zip
    
  3. (Optionnel) Vérifier l’intégrité de la base de données de vulnérabilité :

    1. Extraire l’archive :

      unzip vulnerability_db.zip
      
    2. Récupérer la clé publique de Cyberwatch :

      curl https://dl.cyberwatch.fr/securitydb/cyberwatch.pub -o cyberwatch.pub
      
    3. Calculer le sha256 de la base :

      head -c -1 cyberwatch.sig > signature
      head -c -1 cyberwatch.db | sha256sum | cut -f1 -d' '| tr -d '\n' > cyberwatch.db.sha256
      
    4. Vérifier la signature :

      openssl dgst -sha256 -verify cyberwatch.pub -signature signature cyberwatch.db.sha256
      

      Le resultat de cette commande doit être Verified OK.

Importer l’archive dans Cyberwatch

  1. Importer l’archive vulnerability_db.zip sur la machine où Cyberwatch est installé

  2. Se connecter sur la machine où Cyberwatch est installé en SSH

  3. Déplacer le fichier .zip dans le dossier /var/lib/cyberwatch/security_database :

    mv vulnerability_db.zip /var/lib/cyberwatch/security_database/vulnerability_db.zip
    
  4. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    
  5. Importer les données de la base de données des vulnérabilités :

    sudo cyberwatch exec sidekiq_master security_database_import_task
    

Automatiser l’import à l’aide d’une tâche cron

Il est possible d’automatiser l’import de la base de sécurité à l’aide d’une tâche planifiée cron par exemple.

L’exécutable cyberwatch permet d’exécuter des commandes directement dans nos conteneurs à l’aide de la commande cyberwatch exec. Cette commande est équivalente à l’utilisation de la commande docker exec -it qui permet d’exécuter une commande via un shell interactif sur un conteneur.

Cette approche ne fonctionne cependant pas pour les scripts exécutés depuis une crontab, qui ne peut utiliser de shell interactif.

L’utilisation de la commande cyberwatch exec par défaut dans un script appelé par cron sera donc sans effet.

La solution consiste à appeler l’utilitaire cyberwatch en mode non-interactif. La commande de synchronisation de la base de données pourrait donc être :

sudo exec_interactive=false cyberwatch exec sidekiq_master security_database_import_task

La mise en place d’une tâche cron pourrait se faire de la façon suivante à l’aide d’un utilisateur sudoer :

# Ouverture de l'éditeur crontab
sudo crontab -e

# A la fin de l'éditeur, placer la ligne suivante qui permet un lancement de la tâche d'import tous les jours à 08h00 du matin :
0 8 * * * exec_interactive=false cyberwatch exec sidekiq_master security_database_import_task

Retour en haut