[TIPS & TRICKS] Le filtrage granulaire des alertes

[TIPS & TRICKS] Le filtrage granulaire des alertes

Auteur : Virgile CABANE
Publié le : 19/10/2018 19 octobre Oct. 2018

Article mis à jour le : 06/11/2018

Nous vous proposons désormais une nouvelle catégorie d'article vous permettant d'approfondir certaines thématiques, et aujourd'hui nous commençons avec une fonctionnalité nouvellement développée : les alertes avancées !

La mise en place des règles d'alerte depuis un noeud fait gagner du temps, mais la rigidité de cette organisation hiérarchique force l'utilisateur à perpétuellement devoir faire le compromis entre sa topologie d'agent et de noeud, ainsi que les règles qui s'y appliquent. Par exemple, on souhaite être alerté quand l'antivirus Windows Defender n'est pas actif, en revanche lorsqu'un autre antivirus est en place, on désire ignorer ces alertes.
 

Mais alors, comment personnaliser les conditions de déclenchement d'une alerte ?

Grâce au filtrage avancé d'alerte !

Vous avez certainement remarqué l'ajout d'un nouveau bouton "Avancé" dans les alertes. C'est là que se cachent les filtres avancés d'alerte !

L'idée est d'offrir la possibilité de filtrer les objets suivants des règles que l'on peut définir à l'aide d'un langage simple à prendre en main.

Mais parlons un peu technique. Et oui, afin d'utiliser cette nouvelle fonctionnalité, il faut tout d'abord comprendre comment elle marche !

Qu'est-ce qu'un objet ?

Un objet chez RG System c'est l'élément le plus bas niveau du système d'alerte : le disque "C:", l'antivirus "BitDefender", une interface réseau etc.

Sur un agent, plusieurs plugins sont présents (exemple : Disque) et chacun de ces plugins peut être découpé en sous-éléments (exemple : C:, E:, disque réseau...) nommés objets.

Et ce langage ?

Le principal intérêt d'un filtre avancé d'alerte est d'être défini sur un noeud et d'utiliser cette option afin de filtrer les agents sur lesquels l'alerte va être appliquée.

Le langage mis en place se base sur l'expression language de symfony et peut nécessiter l'utilisation de regex. Pour ceux qui ne sont pas familiers avec ces notions nous vous conseillons de jeter un coup d'oeil à la documentation de l'expression language ainsi qu'à celle des regex.

Lors de la définition d'un filtre avancé d'alerte, certaines données sont accessibles comme les propriétés de l'agent actuellement analysé, l'objet, le pedigree de l'agent, les propriétés de l'alerte etc.

Vous trouverez ici une liste exhaustive de l'ensemble des variables disponibles pour créer vos filtres suivis d'un ensemble d'exemples de leur utilisation.

L'agent

Il est possible de filtrer les alertes à l'aide des caractéristiques suivantes de chaque agent :

  • ID > agent.agentId
  • Commentaire > agent.comment
  • Nom > agent.name
  • Type > agent.type
  • Type réel > agent.trueType

La définition de l'alerte

Dans le système d'alerte RG, la définition de l'alerte (ou alertUse) est l'élément regroupant les paramètres de déclenchement habituels des alertes.

  • Durée > alertUse.duration
  • Seuil > alertUse.threshold

L'objet

Comme indiqué précédemment l'objet est l'élément le plus bas niveau du système d'alerte RG.

  • Description > object.description
  • Nom > object.name

[Processus uniquement] Le processus

Lorsque vous configurez une alerte sur les processus, vous pouvez dorénavant filtrer sur le nom du processus qui déclenche l'alerte !

  • Nom > process.name

[Service uniquement] Le service

À l'instar des processus, vous pouvez maintenant filtrer sur le nom du service qui déclenche l'alerte !

  • Nom > service.name

Le pedigree

Certaines informations visibles depuis le pedigree d'un agent sont aussi accessibles lors de la création des filtres avancés d'alerte.

  • Informations du processeur > pedigree.get('CpuInfos')
  • Nom de la machine > pedigree.get('CSName')
  • Informations des disques > pedigree.get('DiskInfos')
  • Domaine réseau > pedigree.get('Domain')
  • Type de disque > pedigree.get('DriveType')
  • Numéro de série du matériel > pedigree.get('HardwareSerialNumber')
  • Date d'installation de l'OS > pedigree.get('InstallDate')
  • Date de dernier démarrage (UTC) > pedigree.get('LastBootTime')
  • Date de dernier démarrage (local à la machine) > pedigree.get('LastBootTimeOffsetApplied')
  • Fabricant > pedigree.get('Manufacturer')
  • Informations mémoire vive > pedigree.get('MemoryInfos')
  • Modèle du matériel > pedigree.get('Model')
  • Informations réseau > pedigree.get('NetworkInfos')
  • Nom du système d'exploitation > pedigree.get('OSName')
  • La machine fait-elle partie d'un domaine > pedigree.get('PartOfDomain')
  • Numéro de licence Windows > pedigree.get('SerialNumber')
  • Etat de la température de la machine > pedigree.get('ThermalState')

Comme vous l'aurez remarqué, les attributs du pedigree sont accedées via la fonction get(), ce qui s'explique par le fait que ces données sont des élements de type clé/valeur rassemblés sous la variable pedigree.

Les "jumeaux"

Comment procéder afin de vérifier certaines conditions sur les autres objets du même Plugin que celui analysé ? Par exemple comment m'assurer que l'agent actuellement analysé possède un autre antivirus avant d'évincer la génération d'alerte si Windows Defender n'est plus à jour ? La variable siblings est là pour ça, c'est un tableau qui contient l'ensemble des objets du même Plugin que l'objet analysé. Tout comme pedigreesiblings est une variable de type clé/valeur. Vous pourrez découvrir dans la section "Exemples" de ce post quelques cas d'utilisation de cette variable.

Le système clé/valeur

Le système clé valeur permet d'utiliser des fonctions sur un tableau, que ce soit un tableau de string indéxé par des string comme dans pedigree ou un tableau de tableaux comme siblings. Sur ces deux variables, il est possible d'utiliser les fonctions suivantes :

  • var.get(x) > permet de lire le tableau à l'index x
  • var.keys() retourne un nouvel élément clé/valeur constitué des clés de l'élément var
  • var.values() retourne un tableau (qui n'est plus de type clé/valeur) contenant les valeurs de var
  • var.in(x) retourne true si l'élément x est trouvé dans les valeurs de var
  • var.onMatches(x) retourne true si l'un des éléments de var respecte la regex x
  • var.allMatch(x) retourne true si tous les éléments de var respectent la regex x
  • var.column(x) retourne la colonne de var à l'index x en tant que clé/valeur
  • var.count() retourne le nombre d'éléments contenus dans var
  • var.filter(x) filtre var et retourne un nouveau clé/valeur issue contenant les éléments qui respectent la regex x

Exemples

[Disque] Ne pas alerter sur la taille des disques "Google File Stream" quand l'ordinateur a un processeur Intel

object.name != "Google File Stream" and pedigree.get("CpuInfos") matches "/Intel/"

[Antivirus] Ne pas alerter sur Windows Defender si un autre antivirus est installé

not(object.name == "Windows Defender" and siblings.count() > 0)

[Antivirus] Ne pas alerter sur Windows Defender si BitDefender est installé

not(object.name == "Windows Defender" and siblings.column("name").oneMatches("/bitdefender/i"))

[Antivirus] Ne pas alerter sur Windows Defender si BitDefender n'est pas installé

object.name != "Windows Defender" or (siblings.column("name").filter("/bitdefender/i").count() > 0)

[Service] Ne pas alerter sur les services qui contiennent Google Chome dans leur nom ou id

not (services.column("name").allMatch("/Google Chrome/")) or services.column(“serviceId”).allMatch(“/GoogleChrome/”)


Notes de modifications (date du 06/11/2018) :
- Faute de frappe (onMatches devient oneMatches)
- Erreur d’expression (object.name != "Google File Stream" and pedigree.get('CpuInfos') matches "*Intel*" devient object.name != "Google File Stream" and pedigree.get("CpuInfos") matches "/Intel/")
- Erreur d’expression (not(object.name == "Windows Defender" and siblings.column("name").matches("BitDefender")) devient not(object.name == "Windows Defender" and siblings.column("name").oneMatches("/bitdefender/i")))
- Erreur d’expression (object.name != "Windows Defender" or not siblings.column("name").filter("BitDefender").count() > 0 devient object.name != "Windows Defender" or (siblings.column("name").filter("/bitdefender/i").count() > 0))
- Erreur d’expression (not service.name matches "CDPUserSvc_*" devient not (services.column("name").allMatch("/CDPUserSvc_/")))

Notes de modifications (date du 07/03/2019) :

- Précision sur expression (not (services.column("name").allMatch("/CDPUserSvc_/")) devient not (services.column("name").allMatch("/Google Chrome/")) or services.column(“serviceId”).allMatch(“/GoogleChrome/”))

Historique

<< < ... 5 6 7 8 9 10 11 ... > >>
Information sur les cookies
Nous avons recours à des cookies techniques pour assurer le bon fonctionnement du site, nous utilisons également des cookies soumis à votre consentement pour collecter des statistiques de visite.
Cliquez ci-dessous sur « ACCEPTER » pour accepter le dépôt de l'ensemble des cookies ou sur « CONFIGURER » pour choisir quels cookies nécessitant votre consentement seront déposés (cookies statistiques), avant de continuer votre visite du site. Plus d'informations
 
ACCEPTER CONFIGURER REFUSER
Gestion des cookies

Les cookies sont des fichiers textes stockés par votre navigateur et utilisés à des fins statistiques ou pour le fonctionnement de certains modules d'identification par exemple.
Ces fichiers ne sont pas dangereux pour votre périphérique et ne sont pas utilisés pour collecter des données personnelles.
Le présent site utilise des cookies d'identification, d'authentification ou de load-balancing ne nécessitant pas de consentement préalable, et des cookies d'analyse de mesure d'audience nécessitant votre consentement en application des textes régissant la protection des données personnelles.
Vous pouvez configurer la mise en place de ces cookies en utilisant les paramètres ci-dessous.
Nous vous informons qu'en cas de blocage de ces cookies certaines fonctionnalités du site peuvent devenir indisponibles.
Google Analytics est un outil de mesure d'audience.
Les cookies déposés par ce service sont utilisés pour recueillir des statistiques de visites anonymes à fin de mesurer, par exemple, le nombre de visistes et de pages vues.
Ces données permettent notamment de suivre la popularité du site, de détecter d'éventuels problèmes de navigation, d'améliorer son ergonomie et donc l'expérience des utilisateurs.