
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.
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 !
Un objet chez RG System Suite 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.
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.
Il est possible de filtrer les alertes à l’aide des caractéristiques suivantes de chaque agent :
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.
Comme indiqué précédemment l’objet est l’élément le plus bas niveau du système d’alerte RG.
Lorsque vous configurez une alerte sur les processus, vous pouvez dorénavant filtrer sur le nom du processus qui déclenche l’alerte !
À l’instar des processus, vous pouvez maintenant filtrer sur le nom du service qui déclenche l’alerte !
Certaines informations visibles depuis le pedigree d’un agent sont aussi accessibles lors de la création des filtres avancés d’alerte.
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.
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 pedigree, siblings 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 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 :
[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/”))