在 YARA-L 2.0 中使用参考列表和数据表
借助参考列表和数据表,您可以通过将事件字段与自定义数据集进行比较来构建逻辑。您可以使用这些对象在搜索、信息中心和检测中管理大批量指标(例如已知不良 IP 或获批的主机名),而无需修改底层语法。
您可以在规则的 events 或 outcome 部分中使用参考列表或数据表。如需详细了解参考列表和数据表的行为和语法,请参阅参考列表和使用数据表。
应用参考列表和数据表语法
参考列表和数据表的语法类似,由对象 ID 和操作所需的匹配类型(string、regex 或 CIDR)定义。本部分展示了使用各种类型的参考列表的语法示例。
在 Google Security Operations 中,参考列表和数据表用于 YARA-L 规则的 events 或 outcome 部分,以将事件数据与上传的数据集进行比较。这些函数在规则评估过程中执行,用于过滤事件或丰富检测结果。
当您需要检查单个字段是否与预定义列表(例如已知恶意 IP 的列表)中的任何值匹配时,请使用参考列表。
- STRING:
$e.principal.hostname in %string_list_name 正则表达式:
$e.principal.hostname in regex %regex_list_nameCIDR:
$e.principal.ip in cidr %cidr_list_name
如果您的参考数据具有行或列结构,则可以使用数据表,以便将特定字段映射到特定列。
STRING:
$e.target.hostname in %table_name.column_name正则表达式:
$e.target.hostname in regex %table_name.column_nameCIDR:
$e.principal.ip in cidr %table_name.column_name
示例:参考列表语法和行为
以下示例说明了如何针对不同的数据集类型构建查询,以及如何将条件逻辑应用于匹配项:
示例:查询中的参考列表语法
// STRING reference list $e.principal.hostname in %string_reference_list // Regular expression reference list $e.principal.hostname in regex %regex_reference_list // CIDR reference list $e.principal.ip in cidr %cidr_reference_list
示例:数据表语法
// STRING data table $e.target.hostname in %data_table_name.column_name // Regular expression data table $e.target.hostname in regex %regex_table_name.column_name // CIDR data table $e.principal.ip in cidr %cidr_table_name.column_name
示例:not 和 nocase 运算符
nocase 运算符与 STRING 列表和 REGEX 列表兼容。
// Exclude events whose hostnames match substrings in my_regex_list.
not $e.principal.hostname in regex %my_regex_list
// Event hostnames must match at least one string in my_string_list (case insensitive).
$e.principal.hostname in %my_string_list nocase
nocase 运算符与 STRING 列表和 REGEX 列表兼容。
出于性能方面的考虑,检测引擎会限制参考列表的使用。
- 规则中最多可包含的
in语句(无论是否包含特殊运算符):10 个 - 使用
regex运算符的in语句数上限:5 - 使用
cidr运算符的in语句数上限:5
如需详细了解参考列表行为和参考列表语法,请参阅参考列表。
为了在搜索、信息中心和检测方面保持最佳性能,YARA-L 引擎强制执行以下限制:
- 查询中
in语句的最大数量(无论是否包含特殊运算符):7 - 含
regex运算符的in语句数上限:4 - 使用
cidr运算符的in语句数上限:2
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。