Salut Nous connaissons et aimons tous les produits pour les processus d'évaluation de la vulnérabilité tels que Nessus , Qualys , Max Patrol et toutes sortes d'autres OpenVAS . L'une des principales tâches qu'ils résolvent consiste à contrôler les vulnérabilités versionnées.
Il s'agit d'un processus assez simple de comparaison des versions logicielles installées avec la plage «ne contient pas de vulnérabilités connues». Eh bien, les responsables de la sécurité de l'information, ainsi que le développement et les administrateurs, décident quels risques peuvent être pris et ce qui doit être corrigé aujourd'hui.
Il existe de nombreux outils différents pour résoudre ce problème, mais de notre point de vue, ils ont tous un problème commun - ils nécessitent un déploiement gênant distinct et engendrent un autre outil avec un compte root dans votre infrastructure. Mais après tout, pour une action aussi simple que la collecte d'informations sur les packages racine installés n'est pas nécessaire! Et généralement, dans l'infrastructure, il existe déjà des systèmes déployés avec la capacité de consolider les données, la collaboration et l'exécution à distance des commandes sur les serveurs. Par conséquent, nous avons décidé de créer un outil qui permettrait en quelques clics de déployer un système de surveillance des vulnérabilités Linux dans notre environnement avec un minimum de changements de production.
Qu'est-ce qui est déployé dans la plupart des systèmes alimentaires? Bien sûr, la surveillance. Et bien souvent, c'est Zabbix . Alors allons-y et fixons-le!
Dans une main Zabbix
Tout est simple: un système d'agent distribué, des tableaux de bord pour la visualisation, un système d'accès multi-utilisateurs et la réalisation d'actions selon des critères spécifiés ont déjà été réalisés sans nous. Nous n'avons pas besoin de réinventer la roue et de tout faire à partir de zéro.
Zabbix a suffisamment de droits pour recevoir des informations sur les paquets, où les mettre aussi. Il reste à les combiner et à les envoyer pour analyse à l' API Vulners . Ensuite, traitez les connaissances acquises sur les vulnérabilités.
Mais commençons par une courte introduction sur ce que Zabbix peut faire et ce que nous devons faire.
Les agents Zabbix sont installés sur le serveur et permettent:
- Obtenez une large gamme de métriques de système d'exploitation
- exécuter des scripts et des programmes et obtenir le résultat de leur exécution;
- exécuter toutes les commandes dans un processus séparé (fork), indépendant des processus de l'agent Zabbix;
- travailler avec plusieurs serveurs Zabbix à la fois;
- travailler derrière un pare-feu, établir une connexion au serveur, ou vice versa, attendre les connexions entrantes.
Le serveur Zabbix reçoit des mesures de surveillance en entrée, les écrit dans la base de données et effectue un traitement supplémentaire.
Analysant les données obtenues et selon une logique assez souple, il peut effectuer différentes actions:
- Envoyer des alertes sur différents canaux (mail, sms, messagerie instantanée, etc.);
- Connectez-vous aux serveurs via SSH ou IPMI et exécutez diverses commandes sur eux;
- Ou, exécutez diverses commandes correctives sur les serveurs en utilisant des connexions d'agent Zabbix avec eux;
L'interface Web est écrite en PHP et vous permettra d'afficher les métriques collectées par Zabbix, les graphiques, les alertes déclenchées sur les problèmes et les commandes et actions exécutées par le système de surveillance.
L'administration de Zabbix s'effectue également via l'interface Web.
L'API Zabbix est une API Web et fait partie de l'interface Web. Il utilise le protocole JSON-RPC.
- Vous permet de recevoir, créer, configurer et supprimer tous les objets du système de surveillance.
- En utilisant l'API, vous pouvez facilement intégrer le système de surveillance à divers systèmes externes.
Cependant, Zabbix ne sait rien des vulnérabilités! Mais Vulners les connaît :)
De l'autre côté des Vulner
- Agrégateur de données de vulnérabilité provenant de plus de 115 sources
- API pratique pour diverses méthodes de numérisation
- Fournit des données sous une forme lisible par machine normalisée
- Très rapide
- Permet la corrélation des données provenant de diverses sources
Nous avons essayé de les intégrer les uns aux autres et c'est ce qui en est ressorti.
Contrôle des menaces Zabbix
Il s'agit d'un plugin Zabbix open source écrit en Python qui:
- Affiche des informations sur les vulnérabilités trouvées dans votre infrastructure dans l'interface Web Zabbix.
- Affiche le niveau de menace de chaque vulnérabilité selon la norme CVSS.
- Et il propose des méthodes facilement applicables pour éliminer les vulnérabilités trouvées.
CVSS est une norme industrielle ouverte pour évaluer la criticité de la vulnérabilité. En fait - échelle de 10 points.
L'utilisation de cette technique vous permet de regrouper les vulnérabilités trouvées dans différents systèmes et avec différentes propriétés dans un seul dénominateur, ce qui simplifie la hiérarchisation des problèmes détectés.
Nous avons parlé de ce plugin lors du
Meetup Zabbix Moscou . Pour ceux qui n'aiment pas lire, mais aiment regarder - il y a un reportage
vidéo .
Le résultat du plugin dans Zabbix est le suivant:

Ceci est un tableau de bord dans Zabbix. Sur lequel, de gauche à droite, les informations suivantes s'affichent:
- Distribution du score CVSS par serveurs. Le graphique circulaire montre la relation - combien de serveurs nous avons avec des vulnérabilités critiques, combien de vulnérabilités non critiques ont ou n'ont pas du tout de vulnérabilités connues.
- Score CVSS médian de l'ensemble de l'infrastructure. Il est affiché sous forme de graphique, ce qui permet d'observer la dynamique de son évolution.
- Liste des packages vulnérables avec un index de l'impact de la vulnérabilité sur l'infrastructure.
- Une liste complète des serveurs vulnérables avec un niveau de menace pour chacun d'eux.
- Liste des bulletins de sécurité qui ont été «trouvés» dans l'infrastructure.
Ci-dessous plus en détail sur les plus intéressants:
Informations sur les serveurs vulnérables:

Le panneau affiche une liste de tous les serveurs avec un niveau de vulnérabilité supérieur à critique. Le niveau de criticité minimum acceptable, après lequel le serveur commence à apparaître comme vulnérable, est spécifié dans les paramètres du plugin.
Les informations suivantes sont disponibles pour chaque serveur:
- En fait, le nom du serveur vulnérable.
- Score maximum du serveur CVSS. Le score le plus élevé de toutes les vulnérabilités trouvées pour ce serveur s'affiche.
- Une commande pour éliminer toutes les vulnérabilités détectées sur ce serveur. Ceci fait, nous obtenons un serveur sur lequel il n'y a pas de vulnérabilités versionnées connues.
Les données sont présentées avec un tri CVSS, du maximum au minimum. Cela vous permet de garder les serveurs qui nécessitent le plus d'attention, toujours en haut de la liste, sous vos yeux.
Le panneau suivant montre les packages vulnérables:

Ici, pour chaque paquet vulnérable de notre infrastructure, nous avons un bref résumé:
- Nom du package vulnérable.
- Version vulnérable du package.
- Nombre de serveurs sur lesquels la version vulnérable du package est installée.
- Score CVSS pour cette version du package.
- Index de l'impact de cette vulnérabilité sur les infrastructures.
- Une liste de tous les serveurs sur lesquels une version vulnérable du package est détectée.
- Lien vers le bulletin de sécurité. Vous permet de lire et de comprendre à quel point cette vulnérabilité est critique dans notre situation.
- L'équipe corrigeant la vulnérabilité dans ce package.
Les données sont présentées triées par indice d'impact , du maximum au minimum.
L'Impact Index est le nombre de serveurs affectés multiplié par le score de vulnérabilité CVSS. Il arrive souvent qu'une vulnérabilité avec un score moins élevé soit beaucoup plus répandue dans l'infrastructure, et donc potentiellement plus dangereuse.
Choisissez des stratégies de gestion de la vulnérabilité
Cependant, vous ne pouvez pas simplement prendre et mettre à niveau tous les packages sur tous les serveurs vers la dernière version, ce qui élimine les vulnérabilités existantes.
Dans toute infrastructure composée de plusieurs serveurs, il existe de nombreuses restrictions: la dépendance d'un logiciel à la version d'un autre, les risques de fonctionnalité altérée, etc.
Par conséquent, il y a toujours un choix - quels packages nous pouvons mettre à jour sans douleur. Quels packages nécessitent un plan de travail distinct pour la mise en œuvre des mesures compensatoires. Et par ce que nous pouvons accepter des risques.
L'approche proposée dans le plugin vous permet de choisir la stratégie d'élimination des vulnérabilités qui vous convient:
- Une vulnérabilité dans l'ensemble de l'infrastructure: si une vulnérabilité spécifique est critique pour vous, le plugin vous fournit des informations sur l'emplacement de cette vulnérabilité dans votre infrastructure et sur la manière de la corriger immédiatement dans l'ensemble de l'infrastructure.
- Toutes les vulnérabilités sur un serveur spécifique: si vous avez besoin d'un serveur complètement sécurisé, par exemple, situé dans la DMZ ou derrière le périmètre de l'entreprise, en utilisant le plug-in, vous obtenez des informations sur la façon d'éliminer toutes les vulnérabilités trouvées sur celui-ci.
Correction des vulnérabilités trouvées
Mais il ne suffit pas de savoir quelles vulnérabilités nous avons et de déterminer comment et lesquelles peuvent être corrigées. Il faut aussi faire ça!
Des systèmes tels que Puppet ou Ansible sont largement utilisés pour la gestion centralisée de la configuration et les mises à jour logicielles. Vous pouvez utiliser la commande fix qui corrige la vulnérabilité et l'exécuter de manière centralisée à l'aide de ces systèmes.
Si votre infrastructure n'utilise pas de tels systèmes, Zabbix Threat Control vous permet d'éliminer les vulnérabilités directement à partir de l'interface Web de Zabbix.

Pour cela, le plugin utilise la fonctionnalité standard de Zabbix: confirmation des événements et exécution des commandes à distance:
- Dès que le problème est confirmé via l'interface web par un utilisateur autorisé;
- Une commande distante est lancée qui exécute sur le serveur cible, ou la liste des serveurs, une commande fix qui corrige la vulnérabilité.
Comment ça marche

- Le serveur Zabbix reçoit des informations sur les packages et le système d'exploitation de tous les serveurs de l'infrastructure via des agents zabbix.
- Le plugin (utilisant l'API Zabbix) reçoit un rapport de système d'exploitation précédemment compilé par le serveur Zabbix. Le plugin ne reçoit rien directement des serveurs. Et à ce stade ne nécessite pas de contact direct avec eux.
- Après avoir traité les informations reçues de Zabbix, le plugin les transmet à Vulners. D'où il reçoit une liste des vulnérabilités trouvées, leur criticité, et un moyen de les éliminer.
- Le plugin traite les données reçues, les agrège pour générer des statistiques et génère des paquets de données pour la transmission à Zabbix.
- Le plugin pousse les données Zabbix dans le format de système de surveillance requis. Il le fait en utilisant l'utilitaire zabbix-sender. Après cela, vous avez déjà tout surveillé sur les vulnérabilités trouvées, qui sont affichées sur le tableau de bord montré précédemment.
- Après avoir confirmé le problème, une commande à distance est exécutée, qui passe au plugin:
- Le nom de la personne qui l'a initié
- Fix Vulnerability Fix Team
- Liste des serveurs
- Après avoir reçu tout ce contrôle des menaces Zabbix:
- Vérifie que la commande de correction est lancée par ceux qui en ont besoin. De celui qui n'est pas nécessaire - il n'accepte pas la commande :)
- Exécute la commande qui lui est transférée sur le nombre de serveurs nécessaire.
Par défaut, le plugin envoie une commande fix aux serveurs vulnérables à l'aide de l'utilitaire zabbix-get, accédant à l'agent Zabbix sur le serveur cible avec le paramètre nowait
. Cette méthode de connexion permet au processus de mise à jour des packages de s'exécuter en arrière-plan sans être lié aux processus de l'agent zabbix. Il est également possible d'exécuter la commande sur le serveur cible via une simple connexion SSH. La manière d'exécuter les commandes fix est sélectionnée en option dans le fichier de configuration du plugin.
Et du fait du travail - l'absence de serveurs vulnérables, votre bon sommeil et votre bonne humeur :)
L'installation
Nous avons parlé de ce qu'est Zabbix Threat Control , pourquoi il est nécessaire et comment il fonctionne. Nous allons maintenant vous expliquer comment l'installer et le configurer!
Dépendances
Pour fonctionner, le plugin ne nécessite rien de surnaturel. Il est nécessaire que sur le serveur Zabbix sur lequel nous définissons le plan, les éléments suivants soient:
- zabbix v3.4 pour l'utilisation de tableaux de bord personnalisés (ils n'apparaissaient que dans cette version).
- zabbix-sender est nécessaire pour envoyer des données de vulnérabilité au système de surveillance.
- zabbix-get pour envoyer des commandes fix qui corrigent les vulnérabilités des serveurs.
- python v3 avec modules: pyzabbix, jpath, requêtes pour exécuter les principaux scripts du plugin.
Sur tous les serveurs pour lesquels l'analyse des vulnérabilités est requise, uniquement:
- zabbix-agent pour la collecte de données et l'exécution de scripts.
- python v2 pour exécuter le script collectant le rapport du système d'exploitation.
Installer le plugin à partir de packages
Pour commencer, connectez le référentiel aux packages:
Distributions RPM
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
Distributions DEB
wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb
Après cela, sur le serveur Zabbix, nous installons le package principal qui fournit toute la logique du plug-in et le package qui rend compte sur le système d'exploitation:
Distributions RPM
yum install zabbix-threat-control-main zabbix-threat-control-host
Distributions DEB
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
Et sur tous les autres serveurs qui nécessitent une analyse des vulnérabilités, nous installons un package qui génère des rapports sur le système d'exploitation:
Distributions RPM
yum install zabbix-threat-control-host
Distributions DEB
apt-get update && apt-get install zabbix-threat-control-host
Installation à partir de la source
Si vous préférez l'installation à partir de la source, cela est également très simple:
Sur le serveur Zabbix, nous installons les scripts principaux qui fournissent toute la logique du plug-in et le script qui rapporte sur l'OS:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Sur tous les autres serveurs qui nécessitent une analyse des vulnérabilités, nous installons uniquement un script qui rend compte du système d'exploitation:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Personnalisation
Après l'installation, vous devez configurer le plugin et préparer un système de surveillance pour son fonctionnement. Voici une description étape par étape de toutes les actions nécessaires.
Configuration de serveurs nécessitant une analyse
Vous devez activer l'agent Zabbix pour exécuter des commandes à distance. Pour ce faire, sur tous les serveurs pour lesquels une analyse est requise, modifiez les paramètres dans le fichier de configuration de zabbix-agent comme indiqué ci-dessous:
EnableRemoteCommands=1 LogRemoteCommands=1
Le fichier de configuration de l'agent zabbix se trouve généralement ici: /etc/zabbix/zabbix_agentd.conf
Si vous souhaitez utiliser la fonctionnalité pour éliminer les vulnérabilités trouvées à l'aide de Zabbix Threat Control , vous devez autoriser l'utilisateur zabbix à mettre à jour les packages (mais pas les installer ni les désinstaller).
Pour ce faire, ajoutez la ligne suivante au fichier
/etc/sudoers
:
Pour les distributions RPM , la ligne ressemble à ceci:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Pour les distributions DEB un peu différemment:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Connectez-vous à Vulner
Pour utiliser l'API Vulners, vous avez besoin d'une clé api. Pour l'obtenir:
- Inscrivez-vous sur vulners.com
- Dans votre compte, accédez à l'onglet API KEYS
- Sélectionnez "Numériser" dans la zone Portée et appuyez sur "GÉNÉRER UNE NOUVELLE CLÉ".
Vous obtiendrez une clé API qui ressemble à ceci: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK

Maintenant, vous devez ajouter la clé API Vulners au fichier de configuration du plugin /opt/monitoring/zabbix-threat-control/ztc_config.py
Un exemple:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Connectez-vous à Zabbix
Pour que le plugin puisse se connecter à Zabbix, vous devez spécifier les données suivantes dans le fichier de configuration: /opt/monitoring/zabbix-threat-control/ztc_config.py
- Adresse de l'interface Web Zabbix pour travailler avec Zabbix-API;
- nom d'utilisateur et mot de passe sous lesquels nous nous connecterons à l'API Zabbix.
Nom de domaine et port du serveur Zabbix pour l'envoi de données à l'aide de l'utilitaire zabbix-sender.
Un exemple:
zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051'
Préparation de Zabbix
Vous devez créer des objets dans Zabbix qui fournissent le plugin. Pour ce faire, exécutez le script /opt/monitoring/zabbix-threat-control/ztc_create.py
. Le script vérifiera que le plugin est correctement configuré et, en utilisant l'API, il créera dans Zabbix:
- Groupe d'hôtes auquel sont ajoutés des hôtes affichant des vulnérabilités.
- Le modèle par lequel le rapport du système d'exploitation est collecté sur tous les serveurs.
- Hôtes pour afficher les vulnérabilités par packages, serveurs, bulletins et statistiques générales.
- Une action pour exécuter des commandes de correction de vulnérabilité à distance.
- Tableau de bord pour un affichage facile de toutes ces informations.

Après avoir créé tous les objets dans Zabbix, le script affichera:
- Lien vers le tableau de bord créé dans Zabbix, sur lequel les vulnérabilités seront affichées.
- Heure à laquelle l'analyse de l'infrastructure à la recherche de vulnérabilités sera lancée.
Une fois que tous les objets nécessaires ont été créés dans Zabbix, vous devez accéder à l'interface Web de Zabbix et lier le modèle "Vulners OS-Report" que vous venez de créer par le script à tous les serveurs qui nécessitent une analyse des vulnérabilités.

Après cela, il reste à attendre que le plugin démarre à l'heure spécifiée lors de l'installation.
Scannez!
Le script principal de traitement des données ( ztc.py
) est ztc.py
automatiquement, une fois par jour, via le "Service Item ..." sur l'hôte "Vulners - Statistics" à l'heure spécifiée par le script.
Vous pouvez modifier l'heure de début du plug-in à votre convenance en modifiant l '"intervalle de planification" dans cet élément de données. Dans ce cas, il est également nécessaire d'ajuster le temps de collecte des statistiques dans les trois éléments de données du modèle "Vulners OS-Report" - les métriques du modèle devraient fonctionner 10 ... 15 minutes plus tôt que la métrique principale "Service Item ..." sur l'hôte "Vulners - Statistics".
La durée pendant laquelle toutes les données de vulnérabilité seront traitées dépend du nombre de serveurs dans l'infrastructure et du nombre de packages installés sur ceux-ci. Environ 30 minutes sont consacrées au traitement de 1 000 serveurs.
Plans
Ce n'est que la première version du plugin Zabbix Threat Control. Et nous continuons à le développer.
Les plans:
- Ajoutez des informations sur les tableaux de bord trouvés dans l'infrastructure CVE.
- Refusez d'installer des scripts sur les agents et de collecter toutes les informations nécessaires sur le système d'exploitation et les packages à l'aide des clés d'élément de données intégrées à l'agent Zabbix.
Et comme il est open source - rejoignez-nous! Les demandes de tirage sont les bienvenues :)