OpenVAS

359 views
Skip to first unread message

Laurent Caillette

unread,
May 3, 2017, 1:27:22 AM5/3/17
to tec...@googlegroups.com
"OpenVAS"
est un analyseur de vulnérabilités. Il se connecte à des machines cibles, inventorie leurs caractéristiques, et produit des rapports. Il existe une foule d'outils pour faire ça, mais OpenVAS est le seul qui soit gratuit avec des sources ouvertes. OpenVAS est un fourchage de Nessus, avant que ce dernier devienne un produit commercial. 

OpenVAS propose deux approches complémentaires : analyse de boîte noire, et de boîte blanche. 

Une boîte noire correspond à une machine dont OpenVAS n'a d'autre connaissance préalable que l'adresse sur le réseau. Après avoir inventorié les ports ouverts, OpenVAS essaye diverses requêtes prédéterminées. Par exemple s'il trouve le port 80 ouvert, il envoie une requête HTTP malformée et analyse le message d'erreur, qui contiendra éventuellement la version du serveur HTTP. Il y a des actions plus agressives, comme pour voir si l'antivirus d'un serveur SMTP plante en essayant d'ouvrir la pièce jointe qui est un fichier zip avec une arborescence récursive.

Une boîte blanche correspond à une machine à laquelle OpenVAS peut se connecter par SSH, en tant qu'utilisateur système. Je n'ai pas regardé ce qu'il faisait mais d'après les résultats obtenus, OpenVAS inventorie au moins les bibliothèques et outils. Par exemple si wget est mentionné dans une CVE, je suppose qu'OpenVAS lancera un ``wget --version`` pour voir si wget est présent et si sa version peut poser problème. Comme pour les tests en boîte noire il est probable qu'OpenVAS entreprenne par défaut des actions susceptibles de planter une machine vulnérable. 

Même si on peut limiter le choix des vulnérabilités, l'analyse de boîte blanche a de quoi faire peur. Il faut donner à ce machin dont la mascotte est un vilain monstre vert le droit de se connecter à ses machines favorites pour y causer plein de désagréments. Autrement il reste deux possibilités :
- S'en tenir à l'analyse de boîte noire.
- Faire tourner OpenVAS sur une réplique parfaite de la machine à tester, débarrassée des données sensibles, et sans accès à d'autres machines sensibles. C'est facile avec une installation automatisée.

OpenVAS est fait pour déclencher des tâches planifiées sur un serveur dédié, afin d'analyser un grand nombre de machines (par exemple tout un sous-réseau). C'est typiquement l'outil qu'on fait tourner sur un réseau d'entreprise, du dehors ou du dedans. Pour analyser son réseau du dehors, une machine virtuelle dans le nuage est tout indiquée. Dans ce cas on pourra bénéficier d'une image de Kali déjà fournie par l'hébergeur. 



== L'approche d'OpenVAS est-elle viable ?

OpenVAS base sa détection sur plusieurs catalogues de vulnérabilités, le plus connu étant CVE. Beaucoup d'antivirus basent eux aussi leur détection sur un catalogue, bien que cette approche soit généralement reconnue comme inefficace. Alors pourquoi OpenVAS ferait-il mieux ?

OpenVAS part du principe que la configuration qu'il analyse n'a pas pour but de dissimuler ses dysfonctionnements potentiels. Autrement dit, les numéros de version qu'il récupère sont supposés vrais.

Un antivirus, en revanche, doit détecter des logiciels malveillants conçus pour échapper à la détection.  

Évidemment OpenVAS se limite à la détection de vulnérabilités connues. C'est moins impressionnant que les approches d'analyse comportementale qui parviennent à détecter toutes les vulnérabilités au sein d'une même famille. Mais une écrasante majorité des attaques se basent sur des vulnérabilités déjà répertoriées. Donc, l'approche basée sur un catalogue est viable -- surtout si on n'oublie pas de mettre à jour le catalogue-_. 

À ce jour OpenVAS en connaît plus de `415.000`, tous catalogues confondus (NVT, CVE, CPE, Opal, CERT-Bund, DFN-Cert). Il ne faut pas se laisser étourdir par ces chiffres car c'est facile configurer une machine de travers sans qu'OpenVAS y détecte un problème. 


=== Digression : l'approche comportementale

L'approche comportementale peut elle-même être divisée en deux catégories : curative et préventive. 

L'approche comportementale curative est celle retenue par des produits comme "grsecurity"
pour Linux, ou "Microsoft EMET"
. Ils empêchent certains comportements qui ne peuvent être que ceux d'un logiciel malveillant déjà en place. Je ne peux résister à l'envie de citer la conférence "Capturing 0Day Exploits With Perfectly Placed Hardware Traps"
qui laisse entrevoir des jours radieux à l'approche comportementale curative. 

L'approche comportementale préventive consiste à étudier en laboratoire un comportement normal, et à chercher les indices de failles de sécurité potentielles, par exemple des accès mémoire à des adresses qu'on croyait avoir vérifiées sauf que dans certains cas c'est pas vrai. C'est ce que font "Bochspwn"
et son petit cousin "Xenpwn"
. L'approche comportementale préventive est une véritable usine à CVE ; par exemple Bochspwn et Xenpwn ont permis de mettre à jour un paquet de vulnérabilités dans Xen. 

Et une fois qu'on a toutes ces belles CVE qu'est-ce qu'on fait ? On met à jour son catalogue et on fait tourner OpenVAS. 



== Installation

Greenbone, l'éditeur d'OpenVAS, fournit le Greenbone Security Manager Community Edition sous forme d'image de machine virtuelle pour VirtualBox, VMWare, et Hyper-V. Pour `OpenVAS 8` l'image VirtualBox était assez pourrie, avec un adaptateur "Bridged" qui expose la machine sur le réseau alors que les mots de passe sont ceux par défaut. C'est un peu bizarre pour des gens qui font de la sécurité leur métier -- ai-je aussi mentionné que le certificat HTTPS de leur site n'est pas à jour ?-_

Il doit y avoir moyen d'installer OpenVAS sur Debian et autre distros Linux, mais le plus simple, c'est de l'installer sur `Kali 2007.1` qui supporte officiellement `OpenVAS 9`, là on a de grandes chances que tout fonctionne ensemble. 

Dans l'article précédent nous avons vu comment installer Kali sur VirtualBox, avec carte réseau Host-only accessible sur ``192.168.100.107``. Une fois cela fait, on connecte en ``root`` et on lance les commandes suivantes :

<<<
apt install openvas
greenbone-nvt-sync
openvassd
openvasmd --rebuild
openvasmd --create-user=admin --role=Admin && openvasmd --user=admin --new-password=XXXXXX
greenbone-scapdata-sync
greenbone-certdata-sync
openvas-manage-certs -a
>>>

C'est bien de générer un vrai mot de passe (genre 20 caractères) avec KeyPassX. 

OpenVAS n'est pas installé par défaut sur Kali car c'est une très grosse bestiole. Les mises à jour des catalogues prennent énormément de temps. Le téléchargement de LaTeX (pour la génération de rapports) n'est pas gratuit non plus.

Pour s'assurer que l'installation s'est bien passée :

<<<
openvas-manage-certs -a
gsad
openvas-check-setup
>>>

À partir d'un navigateur sur l'hôte VirtualBox, on ouvre le "Greenbone Security Assistant"
qui est l'interface Web d'OpenVAS. 

Si l'installation se fait dans une VirtualBox c'est le moment de prendre un instantané ("snapshot") et d'ajouter le mot de passe généré dans le descriptif.

Les mises à jour ultérieures des vulnérabilités se feront avec :

<<<
greenbone-nvt-sync
greenbone-scapdata-sync
greenbone-certdata-sync
>>>


== Ma première analyse en boîte noire

Ça fait toujours sérieux de rappeler que d'un point de vue éthique et souvent légal, un test de vulnérabilité doit faire l'objet de l'assentiment préalable du propriétaire de la machine soumise au test. Certains réseaux sont soumis à des conditions d'utilisation excluant les connexions non-sollicitées à d'autres machines du réseau. Maintenant que c'est dit on peut s'amuser. Par exemple on va se faire ``192.168.1.*`` (le sous-réseau défini par de nombreux routeurs Wi-Fi).

À partir du "Greenbone Security Assistant" on va dans "Configuration" `>` "Target" pour créer la cible d'une analyse. Pour une nouvelle cible, on clique sur la petite étoile en haut à droite.

Dans le dialogue "New Target" :
- Name: ``192.168.1.*``
- Hosts: Manual, ``192.168.1.0/24``

Puis on va dans "Scans" `>` "Tasks" pour créer une tâche d'analyse, en cliquant sur la petite étoile en haut à droite (choisir "New Task").
- Name: `Scan 192.168.1.*`
- Scan Targets: `192.168.1.*`
- Scan Config: Full and fast

On démarre l'analyse immédiatement en cliquant sur la flèche verte dans la colonne de droite, dans la ligne nouvellement créée.

On va dans le détail de la tâche, on clique sur un des liens de "Reports" pour afficher le rapport et l'avancement de l'analyse. Le rafraîchissement automatique (en haut à droite) ne fonctionne que rarement.

Et puis on attend. Ce qui est bien c'est qu'un rapport affiche les vulnérabilités au fur à mesure de leur découverte, pas besoin d'attendre que tout soit fini. 

Si le rapport est vide, diverses options apparaissent pour nous consoler. Avec celle nommée "Decrease the minimum QoD in the Filter to 30 percent to see those results", on abaisse le seuil de certitude (QoD, "Quality of Detection") en-dessous duquel les vulnérabilités n'apparaissent pas. Ce seuil est ajustable dans l'éditeur de filtre (accessible en cliquant sur la petite clé à molette en haut à droite). 

Pour télécharger le rapport, on choisit le format en haut à droite, et on clique sur la petite flèche blanche sur fond vert. Le rapport PDF ne prend pas en compte un changement du seuil de certitude. Pour un rapport qui reflète l'affichage il vaut mieux télécharger celui en HTML.

Que signifie l'indice de certitude d'une vulnérabilité ? Il y a des vulnérabilités qu'OpenVAS ne peut pas vérifier ; es fois ça serait trop compliqué, des fois on n'a pas envie d'essayer (cas extrême : le processeur prend feu). Donc OpenVAS utilise des heuristiques. Mais ces heuristiques ne garantissent rien. Par exemple on sait qu'OpenSSH-6.7p1 est vulnérable à une certaine attaque, sauf s'il a été reconfiguré avec une certaine option qui désactive la fonction cachée de reconnexion automatique (``UseRoaming=no``). Comme cette vulnérabilité concerne une boîte noire, OpenVAS ne sait pas comment OpenSSH est configuré. Dans le doute il fait apparaître la vulnérabilité avec un indice de certitude assez bas. Une fois qu'on a fait la chasse aux faux positifs, on peut désactiver une vulnérabilité pour une machine donnée. Dans le cas cité on peut aussi mettre à jour OpenSSH.


=== Mais ça marche en vrai ?

Ce qui est bien c'est que le détail de la vulnérabilité affiche un descriptif très complet. Par exemple, après avoir demandé l'autorisation écrite à tous les gens du café où j'écris cet article, j'ai lancé une analyse et au bout d'une heure je vois une belle faille "Microsoft Windows SMB Server Multiple Vulnerabilities-Remote (4013389)" avec une gravité de `9,3/10` et une certitude de `99 %`. Dans le descriptif de la vulnérabilité il y a des liens vers la doc Microsoft, et un lien vers le repo de Metasploit sur github, pour un commit qui ajoute des trucs dans un module SMB. Le code pour exploiter la vulnérabilité est donc déjà disponible dans Kali. 


=== Et nmap ?

Oui avec nmap tu peux faire :

<<<
sudo nmap -v -sS -A -T4 192.168.1.*
>>>

Et là tu as la détection du système d'exploitation et des services directement. Il se peut qu'on ait laissé un port ouvert sans que le service derrière soit associé à une vulnérabilité connue, mais on avait de bonnes raisons par ailleurs de le laisser fermé.

Juste un exemple. Au café du coin tu vois un mec moustachu s'installer avec son double capuccino-macchiato et paillettes de chocolat, sortir un MacBook Pro `13"` tout neuf et un SecurId. T'as envie de savoir si le collègue est soigneux, donc tu démarres le nmap (après avoir fait signer une autorisation à tous les clients du café). Et voilà qu'entre autres bêtises tu découvres un service JDBC qui attend juste que tu t'intéresses à lui ! Tu ne vas pas plus loin parce qu'il n'y a que dans Mr. Robot que les mecs ont 40 heures par jour à consacrer à ce genre d'exploration. Soit le mec n'est pas trop doué en sécurité, soit il essaye de d'appâter avec un pot-au-miel, mais vu le choix de la boisson et les moustaches c'est dur d'imaginer qu'il soit si doué que ça.


=== Consolidation

Par défaut, OpenVAS conserve le résultat des différentes analyses et sait les agréger pour une machine donnée. Comme ces analyses utilisent les résultats de nmap, OpenVAS est capable de montrer tous les services ouverts, avec éventuellement un score de vulnérabilité de zéro. Il doit y avoir moyen de modifier le score de vulnérabilité associée à un service.

De plus, OpenVAS agrège les résultats de traceroute pour bâtir un graphe du réseau qu'il affiche sur la page d'accueil. Bon le graphe risque d'être imparfait si on a des machines avec plusieurs interfaces ou un DNS inverse mal configuré mais c'est graphiquement réjouissant.

Cette vision consolidée doit permettre de découvrir des choses passionnantes sur l'état de son parc informatique. Cela dit quand on veut des résultats rapidement pour une machine donnée, le plus simple ça reste nmap.


== Analyse en boîte blanche

Le stade suivant c'est l'analyse en boîte blanche avec une analyse "Full and very deep ultimate" qui dégaîne toute l'artillerie. 

Il est sain de créer une paire de clés dédiée à l'analyse car on va confier la clé privée au gros monstre vert :

<<<
( cd ~/.ssh && echo -e  'y\n'| ssh-keygen -b 2048 -t rsa -f pentest_rsa -q -N "" )
>>>

Il suffit d'une ligne pour créer un utilisateur ``pentest`` avec la bonne clé publique sur une VirtualBox dont l'adresse est ``192.168.100.110`` sur ``vboxnet0`` :

<<<
cat ~/.ssh/pentest_rsa.pub |                         \
    ssh ro...@192.168.100.110 "                       \
        useradd -m pentest                       &&  \
        mkdir -p /home/pentest/.ssh              &&  \
        cat > /home/pentest/.ssh/authorized_keys &&  \
        chmod -R u=rwx,g=,o= /home/pentest       &&  \ 
        chown -R pentest:pentest /home/pentest       \
    "
>>>

(Pour créer cette machine il suffit d'installer une Debian dans une VirtualBox, avec la même configuration réseau que pour Kali, avec juste l'IP qui change.)

Après dans le "Greenbone Security Assistant" on va dans "Configuration" `>` "Credentials", et on clique sur l'étoile en haut à gauche pour créer un nouvel accès.
- Name: Pentest
- Type: Username `+` SSH Key
- Allow insecure use: Yes
- Auto-generate: No
- Username: pentest
- Private Key: [choisir le fichier ``~/.ssh/pentest_rsa``]

Avant de créer une nouvelle analyse il faudra créer une nouvelle "Target" avec "Pentest" comme accès SSH. Et là on peut être sûr que sauf erreur quelque part, l'analyse va durer un bout de temps.


== Conclusion

Nous avons vu la mise en œuvre minimale d'OpenVAS pour une analyse de boîte noire et de boîte blanche. Après il y a tout un tas de fonctionnalités de planification, de filtrage des vulnérabilités, de seuillage en fonction de la gravité, etc. Leur utilisation dépendra du contexte et des politiques de sécurité. 

Évidemment -- et c'est vrai pour tous ces outils d'analyse -- OpenVAS ne détecte pas tout et ce n'est pas parce qu'aucune vulnérabilité apparaît avec une certitide de plus de `30 %` qu'on est en sécurité.

Une bonne raison pour utiliser OpenVAS, c'est qu'il permet à tous les adolescents prépubères fans de Mr. Robot de trouver des vulnérabilités accompagnées de la recette pour les exploiter. En effet la publication d'une vulnérabilité s'accompagne souvent d'un programme de démonstration qu'on retrouve dans la prochaine version de Kali. Laisser des vulnérabilités connues sur une machine connectée au réseau, c'est dire à tous ceux qui peuvent s'y connecter :

--- Venez me défoncer les amis !

Bien sûr c'est moins flagrant pour les vulnérabilités détectables uniquement avec une analyse de boîte blanche, et pour des machines accessibles uniquement au sein d'une entreprise dont on est sûr que tous les gens sont bien intentionnés, ou incapables d'utiliser un ordinateur.

Mais tous ceux qui ont la responsabilité d'un serveur directement connecté à Internet devraient considérer l'audit de vulnérabilité automatisé comme un minimum vital. Parce que c'est super-facile d'oublier une mise à jour de quelque chose, et qu'on n'est pas forcément au courant de toutes les nouvelles vulnérabilités. Le graphe d'évolution des CVE d'OpenVAS montre que depuis 2005 il en sort plusieurs milliers par an, tous niveaux de gravité confondus. Avec les armes de guerres des agences gouvernementales qui se retrouvent dans les mains d'adolescents désœuvrés, louper une mise à jour va finir par coûter cher.



== Références

"User Manual: Greenbone Security Manager with Greenbone OS 3.1"
(C'est la documentation de Greenbone appliance, certaines parties concernent OpenVAS.)

"OpenVAS CLI Documentation"

"Get OpenVAS Working Properly in Kali"


"How to Use OpenVAS to Audit the Security of Your Network (`1/2`)"

"How to Use OpenVAS to Audit the Security of Your Network (`2/2`)"

Reply all
Reply to author
Forward
0 new messages