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 专业人士的解答。