函数到占位符分配

支持的平台:

在 YARA-L 中,使用函数处理数据并将结果存储起来的过程称为函数到占位符的分配。占位变量(以 $ 表示)用于表示从 UDM 事件和其他数据源中提取的特定数据点。然后,函数可以对这些事件字段或字段组合进行运算,并将运算结果分配给占位符变量,以便在查询的其他部分(例如 matchconditionoutcome 部分)中使用。

  • 函数:YARA-L 提供指标函数,可对事件字段执行计算或数据转换。

  • 占位符变量:这些变量以美元符号开头(例如 $user$ip),可以保存从事件字段或函数输出中派生的值。它们在 events 部分中定义,可在整个规则中使用。

  • 赋值:函数的输出会赋给占位变量。

限制

使用函数到占位符的分配时,存在以下两个限制:

  1. 函数到占位符分配的每个占位符都必须分配给包含事件字段的表达式。

    有效示例

    $ph1 = $e.principal.hostname
    $ph2 = $e.src.hostname
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.concat($ph2, ".com")
    
    $ph1 = $e.network.email.from
    $ph2 = strings.concat($e.principal.hostname, "@gmail.com")
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.to_lower($ph2)
    

    无效示例

    $ph1 = strings.concat($e.principal.hostname, "foo")
    $ph2 = strings.concat($ph1, "bar") // $ph2 has NOT been assigned to an expression containing an event field.
    
  2. 函数调用应依赖于一个且仅一个事件。但是,函数调用参数中可以使用来自同一事件的多个字段。

    有效示例

    $ph = strings.concat($event.principal.hostname, "string2")

    $ph = strings.concat($event.principal.hostname, $event.src.hostname)

    无效示例

    $ph = strings.concat("string1", "string2")

    $ph = strings.concat($event.principal.hostname, $anotherEvent.src.hostname)

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。