默认检测规则
YARA-L 规则语言
YARA-L 是由 Google 开发的检测规则语言。YARA-L 的目的是将检测从仅限数据查询的形式转变为实际的事件驱动型调查。YARA-L 衍生自 YARA 语言中常用的 恶意软件分析L 代表日志。YARA-L 使你可以利用 检测中来自多个来源的所有信息,并将 将这些事件转换为可作为行动依据的提醒有关详情,请参阅 YARA-L 2.0 语言。
Google Security Operations 示例检测规则
为了帮助您加速采用 Google Security Operations 检测引擎, 您可以找到包含示例代码的 GitHub 代码库 规则。此代码库包含 几种不同类别的检测规则,包括:
- Google Cloud CloudAudit
- Google Workspace
- 信息性警告
- 恶意软件
- MITRE ATT&CK
- SOC Prime 规则
- 可疑事件
每个类别在查看数据源和 指定要使用的事件和匹配语句。
示例规则和调整
以下规则会创建一个事件变量 $e1
,用于跟踪事件类型。事件变量可以是对数据有意义的任何值
。此事件中评估的 UDM 字段为
metadata.eventype
,因此可以将其命名为 e1
。下面几行
在 e1
中搜索正则表达式匹配出现的特定实例。在 Google Security Operations 中创建检测的条件是,每当事件 $e1
发生时。出于调优目的,系统提供了 not
条件,用于排除命令行参数的某些非恶意路径。如果您发现其他已知文件路径中经常出现误报,可以向此规则添加其他 not
条件。
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
}
指定多个事件变量
借助 YARA-L,您可以在一条规则中使用多个事件变量。在以下示例中,规则包含事件 $e1
和 $e2
。条件说明
触发检测的逻辑条件。
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
}
规则结果部分
使用结果部分将规则检测中的保留变量设置为
可为下游使用提供补充信息例如,您可以添加严重级别
根据所分析事件的数据来生成评分信息。以下检测会检查两个事件,以归因 $hostname
值。如果值 $hostnames
在 5 分钟内匹配,系统会应用严重程度得分。使用时间段时,Google Security Operations 检测引擎仅
检查您指定的离散时间段。
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")
}
总结
YARA-L 是一种灵活的检测语言,可让您检查安全事件,而不仅仅是返回数据查询。事件变量用于跟踪规则的条件部分中使用的字段值。您 可以使用单个事件、多个事件随时间变化的情况、将特定事件 单个值(例如来自不同数据源的 $hostname),甚至可以使用 例如正则表达式来提供匹配项。请务必根据您自己的环境调整规则,您可以在逻辑中指定排除项来实现这一点。您还可以使用引用列表将项分组,然后在规则中引用该列表。请注意,Google 安全运营团队不需要针对每项检测发出提醒。您可以出于多种目的跟踪检测,并仅针对您确定的环境中最重要的检测发出提醒。