YARA-L 2.0 概览
YARA-L 2.0 是 Google Security Operations 中的一种专用语言,可处理企业日志数据,使安全专业人员能够探索该数据、调查威胁并构建检测规则。
本文档介绍了 YARA-L 及其语法,展示了如何使用它来表达各种内容,从基本过滤查询到查找复杂模式的规则。在 YARA-L 查询中使用部分来支持聚合函数、条件逻辑,并通过联接、模式匹配等方式添加上下文。
YARA-L 2.0 语法概览
如需创建 YARA-L 规则或查询,建议您熟悉并了解用于指定变量声明、定义和用法的结构和语法。
规则结构
YARA-L 规则包含以下部分,并且必须按以下顺序指定:
| 订单 | 部分 | 规则 | 搜索/信息中心 | 说明 |
|---|---|---|---|---|
| 1 | meta | 必需 | 不适用 | 描述规则,可以包含作者、严重程度、说明和优先级等值。请参阅元部分语法。 |
| 2 | 活动 | 必需 | 必需 | 定义如何过滤和联接事件。请参阅“事件”部分语法。 |
| 3 | 匹配 | 可选 | 可选 | 指定在聚合结果时要按哪些字段进行分组。请参阅“match”部分语法。 注意:如果您排除 match 部分,规则就可以与单个事件进行匹配。 |
| 4 | outcome | 可选 | 可选 | 定义在运行规则或触发规则时要输出哪些数据。请参阅结果部分语法。 |
| 5 | condition | 必需 | 可选 | 包含用于确定规则是否触发的逻辑。请参阅条件部分语法。 |
| 6 | 选项 | 可选 | 可选 | 允许启用或停用特定规则行为。请参阅选项部分语法。 |
以下示例说明了规则的通用结构:
rule <rule name>
{
meta:
// Stores arbitrary key-value pairs of the rule details, such as who wrote
// it, what it detects on, version control, etc.
events:
// Defines which events to filter and the relationship between events.
match:
// Values to return when matches are found.
outcome:
// Define the output of each rule and security alert.
condition:
// Condition to check events and the variables used to find matches.
options:
// Options to turn on or off while executing this rule. The `options` syntax is only valid for rules.
}
当您创建规则时,Google SecOps 会根据 YARA-L 语法执行类型检查,并显示错误,以帮助您修改规则,使其正常运行。以下示例展示了使用无效语法时出现的错误:
// $e.target.port is of type integer which cannot be compared to a string.
$e.target.port = "80"
// "LOGIN" is not a valid event_type enum value.
$e.metadata.event_type = "LOGIN"
此示例规则会查找在 10 分钟的时间范围内,每位用户连续登录失败 5 次的情况。
rule failed_logins
{
meta:
author = "Security Team"
description = "Detects multiple failed user logins within 10-minute windows."
severity = "HIGH"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "FAIL"
$user = $e.target.user.userid
match:
$user over 10m
outcome:
$failed_login_count = count($e.metadata.id)
$first_fail_time = min($e.metadata.event_timestamp.seconds)
condition:
#e >= 5
}
规则定义如下:
meta部分定义了规则作者(安全团队)、说明(检测 10 分钟内多次失败的用户登录尝试)和严重程度(高)。
检测 10 分钟内多次失败的用户登录
events部分定义了必须跟踪的事件:用户登录、用户登录失败(事件变量)以及指向user匹配变量(占位变量)的链接。outcome部分定义了要对事件和占位变量执行的计算:统计登录失败次数和首次失败发生的时间。match部分定义了用于对事件进行分组的变量 ($user) 以及这些事件必须在哪个时间段 (10m) 内发生才能被视为匹配。condition部分指定仅返回登录失败次数超过 5 次的用户。
后续步骤
其他信息
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。