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 des détections en tant que simples requêtes de données à des investigations basées sur des événements. YARA-L est dérivé du langage YARA couramment utilisé dans l'analyse des logiciels malveillants. Le L signifie "logs" (journaux). YARA-L vous permet de tirer parti de 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 à accélérer l'adoption du moteur de détection des opérations de sécurité de Google, un dépôt GitHub avec 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 d'information
- Logiciel malveillant
- MITRE ATT&CK
- Règles principales du SOC
- É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'ajustement
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 Security Operations est chaque fois que l'événement $e1
se produit. À des fins de réglage, une condition not
est fournie pour exclure certains chemins non malveillants de l'argument de ligne de commande. Vous pouvez ajouter d'autres conditions not
à cette règle si vous identifiez des 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'utiliser 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 retenue dans la détection de règles afin d'enrichir la consommation en aval. Par exemple, vous pouvez ajouter des informations sur l'évaluation de la gravité qui reposent 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 Security Operations 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 non pas simplement 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 de condition 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 (telle que $hostname à partir de différentes sources de données) et même utiliser des outils tels que des expressions régulières pour fournir des correspondances. Il est essentiel d'adapter les règles à votre propre environnement. Pour ce faire, spécifiez 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 Security Operations n'a pas besoin d'envoyer d'alerte pour chaque détection. Vous pouvez suivre les détections à plusieurs fins et n'envoyer d'alertes que pour celles que vous jugez les plus critiques dans votre environnement.