Règles de détection par défaut
Langage des règles YARA-L
YARA-L est un langage de règles de détection développé par Google. L'objectif de YARA-L est de passer de simples requêtes de données à de véritables investigations axées sur les événements. YARA-L est dérivé du langage YARA couramment utilisé dans l'analyse des logiciels malveillants. L signifie "logs" (journaux). YARA-L vous permet d'exploiter toutes les informations provenant de plusieurs sources dans les détections et de corréler ces événements en alertes exploitables. Pour en savoir plus, consultez la présentation du langage YARA-L 2.0.
Exemples de règles de détection Google Security Operations
Pour vous aider à adopter plus rapidement le moteur de détection Google SecOps, un dépôt GitHub contenant des exemples de règles est disponible. Ce dépôt contient plusieurs catégories de règles de détection, y compris les suivantes :
- Google Cloud CloudAudit
- Google Workspace
- Avertissements informatifs
- Logiciels malveillants
- MITRE ATT&CK
- Règles SOC Prime
- Événements suspects
Chaque catégorie adopte une approche spécifique pour afficher les sources de données et spécifier les événements et les instructions de correspondance à utiliser.
Exemples de règles et d'ajustements
La règle suivante crée une variable d'événement $e1
qui permet de suivre le type d'événement. La variable d'événement peut être n'importe quelle valeur ayant une signification pour les données évaluées. Le champ UDM évalué dans cet événement est metadata.eventype
. Il est donc logique de l'appeler simplement e1
. Les lignes suivantes recherchent des occurrences spécifiques de correspondances d'expressions régulières dans e1
. La condition qui crée une détection dans Google SecOps est chaque fois que l'événement $e1
se produit. À des fins d'optimisation, une condition not
est fournie pour exclure certains chemins non malveillants pour l'argument de ligne de commande. D'autres conditions not
peuvent être ajoutées à cette règle si vous identifiez de faux positifs fréquents provenant d'autres chemins d'accès aux fichiers connus.
rule suspicious_unusual_location_svchost_execution
{
meta:
author = "Google Cloud Security"
description = "Windows 'svchost' executed from an unusual location"
yara_version = "YL2.0"
rule_version = "1.0"
events:
$e1.metadata.event_type = "PROCESS_LAUNCH"
re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase
condition:
$e1
}
Spécifier plusieurs variables d'événement
YARA-L vous permet d'inclure plusieurs variables d'événement dans une règle. Dans l'exemple suivant, la règle comporte les événements $e1
et $e2
. La condition indique la condition logique qui déclenche la détection.
rule ExcludeZeroValues {
meta:
author = "noone@google.com"
events:
$e1.metadata.event_type = "NETWORK_DNS"
$e1.principal.hostname = $hostname
// $e1.principal.user.userid may be empty string.
$e1.principal.user.userid != "Guest"
$e2.metadata.event_type = "NETWORK_HTTP"
$e2.principal.hostname = $hostname
// $e2.target.asset_id cannot be empty string as explicitly specified.
$e2.target.asset_id != ""
match:
// $hostname cannot be empty string.
$hostname over 1h
condition:
$e1 and $e2
}
Section "Résultat des règles"
Utilisez la section "Résultat" pour définir des variables de détention dans la détection des règles afin d'enrichir la consommation en aval. Par exemple, vous pouvez ajouter des informations sur le score de gravité qui s'appuient sur les données des événements analysés. La détection suivante examine deux événements pour attribuer la valeur $hostname
. Si la valeur $hostnames
correspond sur une période de cinq minutes, un score de gravité est appliqué. Lorsque vous utilisez des périodes, le moteur de détection Google SecOps n'examine que les blocs de temps distincts que vous spécifiez.
rule OutcomeRuleMultiEvent {
meta:
author = "noone@google.com"
events:
$u.udm.principal.hostname = $hostname
$asset_context.graph.entity.hostname = $hostname
$severity = $asset_context.graph.entity.asset.vulnerabilities.severity
match:
$hostname over 5m
outcome:
$risk_score =
max(
100
+ if($hostname = "my-hostname", 100, 50)
+ if($severity = "HIGH", 10)
+ if($severity = "MEDIUM", 5)
+ if($severity = "LOW", 1)
)
$asset_id_list =
array(
if($u.principal.asset_id = "",
"Empty asset id",
$u.principal.asset_id
)
)
$asset_id_distinct_list = array_distinct($u.principal.asset_id)
$asset_id_count = count($u.principal.asset_id)
$asset_id_distinct_count = count_distinct($u.principal.asset_id)
condition:
$u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}
Conclusion
YARA-L est un langage de détection flexible qui vous permet d'examiner les événements de sécurité et pas seulement de renvoyer une requête de données. La variable d'événement permet de suivre les valeurs de champ utilisées dans la section des conditions de la règle. Vous pouvez utiliser un seul événement, plusieurs événements au fil du temps, corréler des sources pour une seule valeur (comme $hostname à partir de différentes sources de données) et même utiliser des outils tels que les expressions régulières pour fournir des correspondances. Il est essentiel d'adapter les règles à votre propre environnement. Pour ce faire, vous pouvez spécifier des exclusions dans la logique. Vous pouvez également utiliser des listes de référence pour regrouper des éléments, puis faire référence à cette liste dans la règle. N'oubliez pas que Google SecOps n'a pas besoin d'être alerté pour chaque détection. Vous pouvez suivre les détections à des fins multiples et n'envoyer des alertes que pour celles que vous jugez les plus critiques dans votre environnement.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.