Règles de détection par défaut
Langage de 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 les 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 différentes catégories de règles de détection, parmi lesquelles:
- 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 dans la façon dont elle voit les sources de données et spécifie les événements et les instructions correspondantes à utiliser.
Exemples de règles et de réglages
La règle suivante crée une variable d'événement $e1
qui permet de suivre l'événement
type d'événement. Il peut s'agir de n'importe quelle valeur ayant un sens dans les données
en cours d'évaluation. Le champ UDM évalué dans cet événement est
metadata.eventype
, il est donc logique de l'appeler simplement e1
. Lignes suivantes
recherche des occurrences spécifiques de correspondances d'expressions régulières dans e1
. La condition selon laquelle
crée une détection dans Google Security Operations à chaque fois que l'événement $e1
à un emplacement. À 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
La détection suivante examine deux événements pour attribuer la valeur $hostname
. Si
la valeur $hostnames
doit correspondre sur une période de cinq minutes, un score de gravité est
appliquée. Lorsque vous utilisez des périodes, le moteur de détection des opérations de sécurité de Google
examine 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 sert à suivre les valeurs de champ utilisées dans la section condition de la règle. Toi vous pouvez utiliser un seul événement, plusieurs événements au fil du temps, corréler les sources pour à valeur unique (comme $hostname provenant de différentes sources de données), et utilisez même des outils telles que les expressions régulières pour obtenir des correspondances. Il est essentiel d'adapter les règles à votre propre environnement. Pour ce faire, spécifiez des exclusions dans la logique. Toi Vous pouvez également utiliser des listes de référence pour regrouper des articles, puis y faire référence dans la règle. N'oubliez pas que Google Security Operations n'a pas besoin pour la détection. Vous pouvez suivre les détections pour plusieurs et n'émettent des alertes que pour ceux qui, selon vous, environnement.