Créer un scanner de vulnérabilités avec un Raspberry Pi (mais pas que…)

I. Présentation

Les vulnérabilités sont la plaie des administrateurs. Sur l'année 2021, il y en a eu pas moins de 18,378 ! Soit un peu plus de 50 par jour (chiffres NIST)... Ces vulnérabilités peuvent toucher plusieurs zones du système d'information : OS, matériel, logiciel, etc. Il est important de pouvoir les détecter et les corriger le plus rapidement possible.

Dans ce tutoriel, nous allons voir comment, avec peu de ressources, créer un scanner de vulnérabilités qu'on pourra paramétrer pour réaliser des scans de manière régulière. Pour cela, nous allons utiliser Greenbone (auparavant nommé OpenVAS) qui va nous permettre de créer des rapports complets sur les vulnérabilités trouvées dans notre parc.

Ce logiciel dispose d'une version open source appelée GSE (Greenbone Source Edition) qui compile plusieurs logiciels permettant le fonctionnement de la pile :

  • Greenbone Vulnerability Manager (GVM) : la partie qui gère les listes de vulnérabilités et la base de données
  • Greenbone Security Assistant (GSA) : l'interface web
  • OpenVas scanner : la partie "opérationnelle" de la pile

Note : le Raspberry Pi 3, bien que techniquement compatible, n'est pas suffisant pour ce tutoriel à cause de ses 1 Go de RAM, ce qui rend les synchronisations et scans très très longs. Le minimum est d'avoir 2 Go de RAM, ce qui est possible avec le Rasbpberry Pi 4. Pour ma part, j'ai fait l'installation sur un Odroid C2.

Vous n'avez pas de RPi ? Pas grave, vous pourrez quand même utiliser GreenBone en VM.

II. Où installer Greenbone ?

A. Sur un Raspberry

Pourquoi choisir un Raspberry Pi? Tout simplement pour les raisons habituelles : faible coût, faible encombrement et faible consommation d'énergie. L'appareil pourra alors rester branché, ce qui est pratique si on veut programmer des scans réguliers.

Pour cette réalisation, nous utiliserons le système d'exploitation Kali Linux. Celui-ci, basé sur Debian, est spécialisé dans l'audit de sécurité, et plus particulièrement le pentest, ou sécurité offensive. Sa version complète est fournie avec bon nombre d'outils, nous ne les utiliserons pas ici, mais vous pouvez en profiter pour voir ce qui est disponible. Attention toutefois, l'utilisation de certains outils fournis peuvent vous occasionner des problèmes si vous les utilisez sur des cibles qui ne vous appartiennent pas ! Le principal intérêt à cela est que Greenbone est présent dans les paquets de Kali Linux, nous éviterons ainsi la compilation de l’outil depuis ses sources.

Pour l'installation, je vais utiliser le logiciel Balena Etcher pour la préparation de ma carte SD (16 Go minimum), il est lui aussi open source et téléchargeable à cette adresse. Vous aurez aussi besoin de l'image ARM de Kali à cette adresse.

Vous avez tout? Parfait!

Passons maintenant à la partie pratique. Insérez votre carte SD dans votre PC puis lancez Balena Etcher.

Interface balena Etcher

Ici, c'est très simple :

  1. Cliquez sur "Flash from file" et allez chercher le fichier img.xz contenant l'image de Kali Linux
  2. Cliquez sur "Select Target" et sélectionnez votre carte SD
  3. Enfin, cliquez sur "Flash" pour lancer le processus

Celui-ci peut être assez long, je vous conseille de surveiller votre batterie si vous utilisez un ordinateur portable afin de ne pas endommager la carte SD.

Lorsque l'écriture et la vérification de l'image est terminée, insérez la carte SD dans le Rpi et branchez-le.

B. En VM

Si vous souhaitez utiliser le scanner de vulnérabilités en VM, rien de plus simple. Greenbone a en effet prévu une machine virtuelle toute prête, nommée "GreenBone Entrerpise Trial" qui correspond à la version communautaire.

Vous pouvez la télécharger depuis leur site Internet à cette adresse.

L'image est disponible pour VirtualBox ou VMWare au choix, les prérequis pour la VM sont 2 CPUs et 5Go de RAM, prévoyez donc un PC suffisamment puissant.

Note, il est possible de compiler GVM depuis les sources pour une installation sur un poste en Debian par exemple. Je ne détaillerais pas les étapes ici, cela rendrait le tuto trop lourd, mais beaucoup de ressources sont dispo sur le web pour faire ceci, y compris un script d'installation automatisé comme par exemple ici

Une fois l'installation terminée, il suffira de double-cliquer sur le fichier OVA pour l'importer dans votre logiciel de virtualisation préféré.

III. Installation de Greenbone

A. Sur Raspberry

Kali Linux active par défaut le SSH, ce qui facilite grandement l'administration vu qu'il n'est pas toujours possible de brancher un écran au Raspberry. Les identifiants par défaut sont kali et ... kali, vous vous doutez donc de la première chose que l'on va faire après s'être connecté :

sudo passwd kali

Ceci afin de changer le mot de passe de l'utilisateur.

Deuxième étape, la mise à jour de la liste des paquets :

sudo apt-get update

Et enfin, la mise à jour des paquets installés :

sudo apt-get upgrade

Note : il est possible que le système vous pose deux questions pendant les mises à jour. Une sur un logiciel qui s’appelle kismet, l'autre qui s’appelle libssl. Il suffira de sélectionner "Yes" aux deux questions. Note bis : la mise à jour peut durer assez longtemps...

Maintenant que notre système est à jour, une petite étape supplémentaire. Nous utiliserons principalement le Rpi via SSH ou Greenbone via l'interface Web, nous n'avons donc pas besoin de l'interface graphique de Kali, nous pouvons donc la désactiver. Cette étape n'est pas obligatoire, mais elle nous fera gagner un peu de puissance :

sudo systemctl set-default multi-user.target

Nous allons pouvoir passer à l'installation de Greenbone à proprement parler. Une commande suffit :

sudo apt-get install gvm

Une fois validé, de nombreuses dépendances vont êtres installées, aussi, il faudra répondre "Y" à la question suivante :

After this operation, 489 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

L'opération peut être un peu longue encore une fois, il faut patienter.

B. Sur VM

Au premier démarrage de la VM, l'assistant de configuration de lance pour le paramétrage de GreenBone. Les identifiants par défaut sont admin/admin (attention, le clavier est en QWERTY!), la navigation se fait grâce à la touche tabulation et les flèches.

Installation de Greenbone

Bien entendu ici, il faut sélectionner "Yes", ce qui va lancer l'assistant de configuration. La prochaine étape consiste à créer un utilisateur pour l'interface web :

Je rappelle que le clavier est en qwerty... Donc attention au mot de passe que vous indiquez, préférez un mot de passe simple sans lettres "qwertiennes", vous pourrez le changer par la suite. L'étape d'après n'est nécessaire que si vous avez une clé de licence, étant donné que nous n'en avons pas, il suffit de sélectionner "Skip". Ceci va lancer les vérifications, notamment des "feeds".

Les "Feeds" sont des catalogues qui sont synchronisés depuis les serveurs de Greenbone et qui contiennent plusieurs choses comme les NVTs (Network Vulnerabilitty Tests), les données SCAP et CERT (catalogues de vulnérabilités connues), etc. Autant dire que sans ces données, pas de Greenbone!

Donc, revenons-en à nos affaires, nous sommes accueillis par ce message :

Nous avons donc un problème : aucune synchronisation n'a été faite, on nous dit de la provoquer manuellement dans le menu Feed. En validant, on se retrouve sur le menu principal composé de quatre entrées :

  • Setup : pour la configuration des paramètres
  • Maintenance : comme son nom l'indique
  • Advanced : pour gérer les licences
  • About : pour avoir des infos sur la version

Première étape : changer la disposition du clavier (ce sera plus pratique), on va sélectionner le menu "Setup" puis "Keyboard Layout Selection" puis "French" :

Suite à cela, si vous le souhaitez, vous pouvez changer le mot de passe de l'utilisateur de l'interface web dans le menu "Setup" puis "User".

Notre Greenbone est installé, il reste la configuration.

IV. Configuration

A. Sur Raspberry

Pour que Greenbone puisse fonctionner, il faut plusieurs choses :

  • Créer une base de données
  • Synchroniser le catalogue de vulnérabilités
  • Créer un administrateur
  • Initialiser le module de scan
  • Initialiser l'interface web

Heureusement pour nous, les développeurs ont pensé à tout et l'ensemble peut se faire à l'aide d'une seule commande :

sudo gvm-setup

Note : pour synchroniser les données de vulnérabilités, il faut impérativement que le port rsync soit ouvert en sortie. Le volume étant assez conséquent, il faudra encore une fois être patient!

Noter que pendant ces étapes, le mot de passe de l’administrateur va être généré aléatoirement :

[*] Creating user admin for gvm
[*] Please note the generated admin password
[*] User created with password '298f82f9-0b8b-4cfe-bbc2-955a1252fbd2'

Vous en conviendrez, certes il est sécurisé, mais pas très facile à retenir, heureusement, on peut le changer. Lorsque toutes les étapes ont été menées, tapez la commande suivante :

sudo -E -u _gvm -g _gvm gvmd --user=admin --new-password=new_password

Bien sûr, remplacez "new_password" par votre mot de passe.

Bien, maintenant, il faut vérifier que notre installation est complète, qu'elle ne comporte pas d'erreur. Là encore, il suffit d'une seule commande pour s'en assurer :

sudo gvm-check-setup

Si tout s'est bien passé, vous devriez avoir le message suivant :

It seems like your GVM-21.4.3 installation is OK.

Sinon, le script vous dira quoi faire. Pour ma part tout est OK donc je peux continuer.

B. Sur VM

Comme vu au démarrage, aucune synchronisation n'a eu lieu, notre VM est donc dépourvue de toute donnée de tests ou de vulnérabilités. On va donc peupler tout ça en lançant notre première synchro.

Allons dans le menu "Setup" puis "Feeds" :

Nous allons paramétrer le port de synchronisation pour sélectionner HTTPS, ainsi, nous éviterons les blocages, car celui-ci est (en théorie) toujours ouvert en sortie sur les pare-feux. On sélectionne donc "Greenbone Server" et "Synchronisation Port". Au passage, si vous avez un proxy dans votre infra, c'est aussi ici qu'il faudra l'indiquer.

On sélectionne 443, on sauvegarde (Save) puis on revient au menu principal pour sélectionner cette fois-ci "Maintenance" puis "Feed" et enfin "Update"

La tâche est lancée en arrière-plan. Petit bémol : rien ne nous indique ici son avancement, il faudra aller sur l'interface web pour voir si celle-ci est terminée ou non.

Pour se rendre sur l'interface web, rien de plus simple, sélectionnez "Logout", vous verrez alors le terminal afficher l'adresse de la VM, pour ma part "http://192.168.1.49".

Rendez-vous donc sur cette interface, à noter que vous allez avoir un avertissement pour le certificat, celui-ci étant autosigné. La page de login s'affiche ensuite :

Page d'accueil de Greenbone

Renseignez les identifiants créés auparavant, vous allez arriver sur le dashboard :

Dashboard Greenbone

Allez dans le menu "Administration" puis "Feed Status" pour voir si la synchronisation est terminée, pour ma part, pas encore, tout est en "Update in progress..."

Patientez jusqu’à ce que le statut change, le scanner restera inutilisable avant cela.

V. Démarrage de l'interface Web (Rpi seulement)

Maintenant que tout est installé et contrôlé, il nous reste à démarrer l'interface qui nous permettra d'utiliser le scanner. Mais avant ça, il va falloir changer quelques paramètres pour permettre l'accès à la page web. En effet par défaut, cette page n'est consultable que sur l'adresse de loopback (127.0.0.1). Pour modifier ce comportement, il faudra créer un premier fichier et en modifier un autre.

Tout d'abord, il faut stopper les services en cours :

sudo gvm-stop

Il faut ensuite modifier l'adresse d'écoute dans le fichier /lib/systemd/system/greenbone-security-assistant.service, à la ligne :

ExecStart=/usr/sbin/gsad --listen=127.0.0.1 --port=9392

Remplacer "127.0.0.1" par "0.0.0.0", ce qui nous donne :

ExecStart=/usr/sbin/gsad --listen=0.0.0.0 --port=9392

Note : vous pouvez également changer le port si vous le souhaitez

Et maintenant, vous pouvez relancer le service :

sudo gvm-start

Si tout s'est bien passé, l'interface est disponible à l'adresse https://ip_du_raspberry:9392, vous allez avoir un avertissement de certificat, c'est normal, car il s'agit d'un certificat autosigné.

Et l'interface s'affiche :

Page d'accueil de Greenbone

Connectez-vous avec les identifiants précédemment créés (admin et le mot de passe que vous avez modifié), vous arriverez alors sur le tableau de bord :

Dashboard Greenbone

Allez dans le menu "Administration" puis "Feed Status" pour voir si la synchronisation est terminée, pour ma part, pas encore, tout est en "Update in progress..."

Patientez jusqu’à ce que le statut change, le scanner restera inutilisable avant cela. Sur un Rpi 2Go l'opération peut être très longue (plusieurs heures pour moi!).

Note : la première ligne "NVT" doit apparaître. Si ce n'est pas le cas, c'est qu'il y a eu un problème de synchronisation. Stoppez GVM et redis, redémarrez redis et réexécutez gvm-setup. Enfin, relancer sudo gvm-start

VI. Utilisation du scanner

Le dashboard est l'endroit central d'où vous pourrez visualiser les scans précédemment effectués ainsi qu'un graphique concerne le nombre de vulnérabilités connues en fonction des années et le nombre de NVTs classées par sévérité.

Au-dessus de tout cela se trouve le menu, notamment celui appelé "Scans".

C'est à partir de là que les scans pourront être lancés et visualisés, vous pourrez même à la fin télécharger un joli rapport en PDF! Lançons dès à présent notre premier scan en cliquant sur Scans > Task dans le menu :

La page des scans est sensiblement identique à celle de l'accueil. En haut à gauche se trouvent plusieurs boutons pour lancer les scans :

Le premier vous fournira de l'aide sur les taches, le second est un assistant de création de tâches, le troisième permet d'en créer manuellement. Nous utiliserons la fonctionnalité d'assistant pour notre premier scan, car elle permet rapidement de rendre le scanner opérationnel. On va donc cliquer dessus puis sur "Advanced Task Wizard".

Fenetre de création de tache

 

Premièrement, on va donner un nom à notre tâche, ensuite, on choisit le mode de scan utilisé parmi ceux disponibles:

  • Base : il s'agit d'un scan permettant de collecter des informations sur le(s) système(s) cible. Aucune vulnérabilité n'est cherchée
  • Discovery : c'est un inventaire complet du(des) système(s) cible, on va pouvoir récolter des informations sur le matériel, l'OS, les ports utilisés, les services, etc.
  • Host Discovery : c'est un simple ping scan
  • System Discovery : détecte le(s) système(s) cible, notamment l'OS et le hardware
  • Full and Fast : c'est le mode de scan par défaut, il va exécuter tous les types précédents et tester les vulnérabilités sur les cibles. À noter que seuls les tests qui n'endommageront pas le système cible sont utilisés.
  • Full an Fast Ultimate : Pas de garde-fous, ce type de scan utilise l'ensemble des tests, y compris ceux pouvant perturber un service, voir provoquer un arrêt du système
  • Full and Very Deep : "deep" veut dire profond... Je vous laisse deviner comment se comporte ce type de scan. Basé sur Full and Fast, il utilise tous les tests disponibles, y compris ceux concernant des services qui n'auraient pas été détectés sur les cibles. Ce scan est trèèèèès lent!
  • Full and very deep ultimate : le mix des deux précédents
  • Empty : template vide permettant de créer ses propres configurations.

Nous choisirons pour commencer le classique, à savoir Full and Fast.

Au niveau des cibles, on peut spécifier une IP, une plage (des IPs séparées d'un tiret), un sous-réseau sous forme CIDR (ex. 192.168.0.0/24), un nom d’hôte, une adresse IPv6, une plage Ipv6; bref, tout ce dont on a besoin. Il va de soi que plus le nombre de cibles est grand, plus le scan sera long!

Je choisis de scanner l'ensemble de mon réseau domestique, à savoir 192.168.1.0/24. Pour réaliser le scan, Greenbone va s'appuyer sur différents outils, notamment le célèbre Nmap pour scanner les hôtes, les ports ouverts, etc... En fonction de ce qui est détecté, Greenbone va approfondir l'analyse avec des outils complémenaires.

On peut ensuite choisir de démarrer la tâche immédiatement ou la programmer pour plus tard. Enfin, pour affiner les résultats, on peut ajouter des identifiants SSH, SMB ou encore ESXI. Un mail peut être envoyé à la fin du scan, contenant l'ensemble des résultats.

Je ne change donc que le nom et la plage réseau pour ma part et clique sur "Create".

Ma tâche est démarrée, je le vois au petit camembert qui est devenu tout vert :

Démarrage d'une tâche

Encore une fois, la durée de la tâche dépend du nombre de cibles qui seront découvertes puis scannées. L'avancement de la tâche est indiqué dans la barre de progression au centre. Vous pouvez cliquer sur la ligne pour voir les résultats en temps réel (nombre d'hôtes, vulnérabilités déjà découvertes, etc.).

Une fois la tâche terminée, le camembert deviendra bleu et un lien apparaitra sous la colonne "Last Report". En cliquant sur ce lien, on tombe sur le rapport de scan :

Ce rapport est exportable en PDF ou XML, en fonction de ce que vous souhaitez. Il se déclenche en cliquant sur le bouton en forme de téléchargement . Le filtre par défaut permet de classer les vulnérabilités par ordre de sévérité, personnellement c'est préférable ainsi, mais à vous de voir.

La mise en page est agréable et synthétique, avec un sommaire permettant de naviguer facilement (car le rapport peut faire plus d'une centaine de pages!). Il présente les vulnérabilités découvertes classées par hôtes :

Si je clique sur l'une des vulnérabilités, j'ai un petit texte explicatif avec le résultat "brut" du test :

VII. Conclusion

Dans ce tutoriel nous avons vu comment installer et utiliser GreenBone pour scanner son réseau à la recherche de vulnérabilités. Pour améliorer sa résilience, il est conseillé d'exécuter régulièrement ce type de scan afin d'être prévenu au plus vite d'une vulnérabilité critique ou élevée. Avec la possibilité de programmer les scans, GreenBone répond parfaitement à cela, même dans son édition gratuite.

À noter qu'il est également possible de faire des audits de conformité directement depuis l'outil, pratique si vous êtes engagés dans une procédure de certification, par exemple. Enfin, le catalogue de vulnérabilité est entièrement parcourable, ce qui vous permet d'avoir une "copie" des sites listant les vulnérabilités, pratique pour vérifier au coup par coup quand on a un doute sans avoir à chercher sur le net.

À noter la nécessité de faire régulièrement des mises à jour des données de vulnérabilités, sur la VM c'est simple, il suffit de reproduire les étapes de la partie IV B. Sur Rapsberry (ou toute autre distribution), il faut exécuter les commandes suivantes :

Mettre à jour le Feed NVT :

sudo runuser -u _gvm – greenbone-nvt-sync

Mettre à jour le Feed SCAP :

sudo runuser -u _gvm – greenbone-feed-sync --type SCAP

Mettre à jour le feed CERT :

sudo runuser -u _gvm – greenbone-feed-sync --type CERT

Mettre à jour les données GVM (non nécessaire de le faire aussi souvent que les autres) :

sudo runuser -u _gvm – greenbone-feed-sync --type GVMD_DATA

Bonne chasse !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Duchemin

Administrateur réseau/sécu, je suis aussi formateur en centre; j'alterne donc entre utilisation et partage de mes compétences, mes deux passions. Adepte de la secte Cisco, je suis également à l’aise sur Linux et administrateur de plusieurs serveurs Windows.

kptainflintt has 6 posts and counting.See all posts by kptainflintt

2 thoughts on “Créer un scanner de vulnérabilités avec un Raspberry Pi (mais pas que…)

  • Bonjour, et merci beaucoup pour cet article très instructif.
    Je suis allé voir le site avant de vouloir le tester mais il semble être payant (assez flou sur leur site car c’est sur devis).
    Je suppose que la version TRIAL proposée en téléchargement (VM VMWare Workstation Pro dans mon cas) est limitée dans le temps ou en fonctionnalités.
    Avez-vous des précisions à ce sujet, et si oui pourriez-vous les rajouter à l’article.
    Encore merci.
    bonne journée

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.