Structure et bonnes pratiques des règles YARA-L 2.0
Ce document décrit les bonnes pratiques recommandées par Google Security Operations pour écrire des règles dans YARA-L 2.0.
Exclure les valeurs nulles
Il est possible que des champs soient automatiquement omis dans les événements pour lesquels vous exécutez vos règles. Lorsque des champs sont omis, ils sont définis par défaut sur leur valeur zéro.
Par exemple, une valeur de chaîne omise est définie par défaut sur "".
Si vous assimilez deux champs omis, ils peuvent tous les deux être définis par défaut sur leur valeur nulle. Cela peut entraîner des correspondances non souhaitées lorsque deux champs correspondent parce qu'ils ont tous les deux une valeur nulle. Vous pouvez éviter ce comportement en spécifiant explicitement la valeur zéro.
Par exemple, si vous avez une règle qui assimile deux événements en fonction de deux champs, il est possible que ces deux champs soient vides, ce qui entraînera une correspondance :
$e1.field1 = $e2.field2
Si les deux options e1.field1 et e2.field2 sont omises dans les données, "" = "" est défini sur "true", ce qui entraîne une correspondance.
Les expressions de comparaison suivantes garantissent qu'aucune correspondance n'est trouvée, car e1.field1 et e2.field2 n'incluent aucune donnée :
$e1.field1 = $e2.field2
$e1.field != ""
Valeurs nulles et règles dépendant de l'enrichissement
Si une règle dépend de données enrichies qui n'ont pas encore été mises à jour, la valeur peut être nulle ou égale à zéro. Il est donc recommandé de filtrer les valeurs nulles (vérifications de valeurs nulles) sur les règles dépendantes de l'enrichissement. Découvrez comment Google SecOps enrichit les données d'événements et d'entités et comment utiliser les données enrichies par le contexte dans les règles.
Ajouter un filtre de type d'événement
Dans l'exemple suivant, les adresses IP de chaque événement UDM sont vérifiées par rapport à la liste de référence, ce qui consomme beaucoup de ressources :
events:
// For every UDM event, check if the target.ip is listed in
// the suspicious_ip_addresses reference list.
$e.target.ip in %suspicious_ip_addresses
Si votre règle YARA-L ne détecte que les événements UDM d'un certain type d'événement, l'ajout d'un filtre de type d'événement peut vous aider à optimiser votre règle en réduisant le nombre d'événements que la règle doit évaluer.
events:
// For every UDM event of type NETWORK_DNS, check if the target.ip is
// listed in the suspicious_ip_addresses reference list.
$e.metadata.event_type = "NETWORK_DNS"
$e.target.ip in %suspicious_ip_addresses
Ajoutez ces filtres au début de la section "Événements". Vous devez également placer les filtres d'égalité avant les expressions régulières ou d'autres comparaisons. Les filtres sont appliqués dans l'ordre dans lequel ils apparaissent dans la règle.
Pour consulter des blogs de la communauté sur l'utilisation de YARA-L, consultez les ressources suivantes :
- Principes de base de YARA-L
- Variables de règles YARA-L
- Opérateurs et modificateurs YARA-L
- Créer une règle d'événement unique à l'aide d'une expression régulière
- Agrégation des événements dans les règles
- Définir un seuil dans les conditions
- Navigation dans l'éditeur de règles
- Options des règles YARA-L
- Créer une règle d'événement unique : correspondance de chaîne
- Créer une règle multi-événements : joindre des événements
- Créer une règle multi-événements : ordonner les événements
- Créer une règle multi-événements : plusieurs jointures et nombres dans les conditions
- Créer une règle multi-événements : fenêtres glissantes
- Présentation des résultats dans une règle d'événement unique
- Résultats dans une règle multi-événements : nombre
- Résultats dans les règles multi-événements : tableaux
- Résultats dans une règle multi-événements : max, min, somme
- Résultats : score de risque, logique conditionnelle et opérateurs mathématiques
- Functions – strings.concat
- Fonctions : strings.coalesce
- Fonctions : réseau
- Liste de références
- Listes de référence CIDR
- Listes de référence des expressions régulières
- Fonction Strings : majuscules ou minuscules
- Fonction d'expression régulière : re.regex
- Fonction d'expression régulière : re.capture
- Fonction de chaîne : strings.base64_decode
- Fonction d'expression régulière : re.replace
- Premiers pas avec la recherche statistique
- Recherche statistique : plus qu'un simple décompte
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.