创建检测规则

编辑

要创建新的检测规则,请按照以下步骤操作

  1. 定义规则类型。此步骤的配置因规则类型而异。
  2. 配置基本规则设置。
  3. 配置高级规则设置(可选)。
  4. 设置规则的计划。
  5. 设置规则操作(可选)。
  6. 设置响应操作(可选)。
  • 在任何步骤中,您都可以在保存之前预览规则,以查看您可以期望获得什么样的结果。
  • 为了确保规则在执行时不搜索冷数据和冻结数据,请配置 excludedDataTiersForRuleExecution 高级设置(这适用于空间中的所有规则),或向单个规则添加查询 DSL 过滤器

使用跨集群搜索的检测规则需要额外的配置。请参阅跨集群搜索和检测规则

创建机器学习规则

编辑

要创建或编辑机器学习规则,您必须拥有相应的许可证或使用云部署。此外,您必须具有machine_learning_admin 用户角色,并且选定的机器学习作业必须正在运行,规则才能正常工作。

  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要基于机器学习异常阈值创建规则,请在创建新规则页面上选择机器学习,然后选择

    1. 所需的机器学习作业。

      如果所需的作业当前未运行,则在您完成配置并启用规则时,它将自动启动。

    2. 创建警报的异常分数阈值。
  4. (可选,需要白金或更高订阅)使用按以下项抑制警报来减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报

    由于机器学习规则从不包含源事件字段的异常生成警报,因此您只能在配置警报抑制时使用异常字段。

  5. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  6. 单击继续配置基本规则设置

创建自定义查询规则

编辑
  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要基于 KQL 或 Lucene 查询创建规则,请在创建新规则页面上选择自定义查询,然后

    1. 定义规则搜索警报的 Elasticsearch 索引或数据视图。
    2. 使用过滤器和查询字段创建用于检测警报的标准。

      以下示例(基于预构建规则通过 VssAdmin 删除或调整卷影复制大小)检测何时执行 vssadmin delete shadows Windows 命令

      • 索引模式winlogbeat-*

        Winlogbeat 将 Windows 事件日志发送到 Elastic Security。

      • 自定义查询event.action:"Process Create (rule: ProcessCreate)" and process.name:"vssadmin.exe" and process.args:("delete" and "shadows")

        winlogbeat-* 索引中搜索具有 deleteshadow 参数的 vssadmin.exe 执行,这些参数用于删除卷的卷影副本。

        Rule query example
    3. 您可以使用 Kibana 保存的查询(已保存的查询菜单)和来自已保存时间线的查询(从已保存的时间线导入查询)作为规则条件。

      当您使用已保存的查询时,将出现在每次规则执行时动态加载已保存的查询“查询名称复选框

      • 选择此选项可在每次规则运行时使用已保存的查询。这会将规则链接到已保存的查询,并且您将无法修改规则的自定义查询字段或过滤器,因为规则将仅使用已保存查询中的设置。要进行更改,请修改已保存的查询本身。
      • 取消选择此选项可将已保存的查询加载为一次性填充规则的自定义查询字段和过滤器的方法。这会将设置从已保存的查询复制到规则,因此您可以根据需要进一步调整规则的查询和过滤器。如果稍后更改了已保存的查询,则该规则将不会继承这些更改。
  4. (可选,需要白金或更高订阅)使用按以下项抑制警报来减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报
  5. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  6. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  7. 单击继续配置基本规则设置

创建阈值规则

编辑
  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要基于源事件字段阈值创建规则,请在创建新规则页面上选择阈值,然后

    1. 定义规则分析警报的 Elasticsearch 索引。
    2. 使用过滤器和查询字段创建用于检测警报的标准。

      您可以使用 Kibana 保存的查询(已保存的查询菜单)和来自已保存时间线的查询(从已保存的时间线导入查询)作为规则条件。

    3. 使用分组依据阈值字段来确定哪个源事件字段用作阈值以及阈值的值。

      不支持将嵌套字段用于分组依据

    4. 使用计数字段按某个字段的基数限制警报。

      例如,如果分组依据source.ip, destination.ip 且其阈值10,则会为至少在 10 个规则搜索结果中出现的每对源 IP 和目标 IP 地址生成一个警报。

      您也可以将分组依据字段保留为未定义。然后,当搜索结果的数量等于或大于阈值时,该规则会创建一个警报。如果您将计数设置为按 process.name >= 2 限制结果,则仅会为在所有事件中出现至少 2 个唯一进程名称的源/目标 IP 对生成警报。

      由阈值规则创建的警报是合成警报,与源文档不相似。警报本身仅包含有关聚合的字段(分组依据字段)的数据。其他字段被省略,因为它们在所有计入阈值的源文档中可能会有所不同。此外,您可以从 kibana.alert.threshold_result.count 字段中引用超过阈值的文档的实际计数。

  4. (可选,需要白金或更高订阅)选择抑制警报以减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报
  5. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  6. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  7. 单击继续配置基本规则设置

创建事件关联规则

编辑
  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要使用 EQL 创建事件关联规则,请在创建新规则页面上选择事件关联,然后
  4. 要使用 EQL 创建事件关联规则,请选择事件关联,然后

    1. 定义规则在查询事件时搜索的 Elasticsearch 索引或数据视图。
    2. 编写一个EQL 查询,用于搜索匹配的事件或一系列匹配的事件。

      要查找序列中缺少的事件,请使用缺少事件语法。

      例如,以下规则检测 msxsl.exe 何时建立出站网络连接

      • 索引模式winlogbeat-*

        Winlogbeat 将 Windows 事件发送到 Elastic Security。

      • EQL 查询:

        sequence by process.entity_id
          [process
            where event.type in ("start", "process_started")
            and process.name == "msxsl.exe"]
          [network
            where event.type == "connection"
            and process.name == "msxsl.exe"
            and network.direction == "outgoing"]

        winlogbeat-* 索引中搜索以下序列:msxsl.exe 进程启动事件,后跟由 msxsl.exe 进程启动的出站网络连接事件。

        eql rule query example

        对于序列事件,当检测到序列中列出的所有事件时,Elastic Security 应用程序会生成单个警报。要查看匹配的序列事件的更多详细信息,您可以在时间线中查看警报,如果所有事件都来自同一进程,则在“分析事件”视图中打开警报。

  5. (可选)单击 EQL 设置图标 (EQL 设置图标) 以配置 EQL 搜索使用的其他字段

    • 事件类别字段:包含事件分类,例如 processfilenetwork。此字段通常映射为 keyword 系列中的字段类型。默认为 event.category ECS 字段。
    • 决胜字段:如果事件具有相同的时间戳,则设置辅助字段以对事件进行排序(按升序、字典顺序)。
    • 时间戳字段:包含用于对事件序列进行排序的事件时间戳。这与 时间戳覆盖 高级设置不同,后者用于在某个范围内查询事件。默认为 @timestamp ECS 字段。
  6. [预览] 此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。 (可选,需要 Platinum 或更高订阅)使用 通过以下方式抑制警报 来减少规则创建的重复警报或重复警报的数量。有关详细信息,请参阅 抑制检测警报
  7. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  8. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  9. 单击继续配置基本规则设置

创建指标匹配规则

编辑

Elastic Security 对指标匹配规则提供有限的支持。有关详细信息,请参阅 对指标匹配规则的有限支持

  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要创建一条规则来搜索其指定字段值与指标索引模式中指定的指标字段值匹配的事件,请在 创建新规则 页面上选择 指标匹配,然后填写以下字段

    1. :指定要搜索的数据的各个索引模式或数据视图。
    2. 自定义查询:用于从 Elastic Security 事件索引检索所需结果的查询和筛选器。例如,如果您只想匹配仅包含 destination.ip 地址字段的文档,请添加 destination.ip : *

      如果要让规则检查索引中的每个字段,请使用此通配符表达式:*:*

      您可以使用 Kibana 保存的查询(已保存的查询菜单)和来自已保存时间线的查询(从已保存的时间线导入查询)作为规则条件。

    3. 指标索引模式:包含您要为其生成警报的字段值的指标索引模式。此字段会自动填充 securitySolution:defaultThreatIndex 高级设置中指定的索引。有关详细信息,请参阅 更新默认的 Elastic Security 威胁情报索引

      指标索引中的数据必须与 ECS 兼容,因此必须包含 @timestamp 字段。

    4. 指标索引查询:用于从指标索引模式筛选字段的查询和筛选器。默认查询 @timestamp > "now-30d/d" 在过去 30 天内搜索指定的指标索引中摄取的指标,并将开始时间向下舍入到最近的一天(解析为 UTC 00:00:00)。
    5. 指标映射:比较指定的事件和指标字段的值,如果值相同,则生成警报。

      仅支持单值字段。

      要定义比较索引中的哪些字段值,请添加以下内容

      • 字段:用于比较 Elastic Security 事件索引中值的字段。
      • 指标索引字段:用于比较指标索引中值的字段。
    6. 您可以添加 ANDOR 子句来定义何时生成警报。

      例如,要创建一条规则,当 logs-*packetbeat-* Elastic Security 索引中的 host.name destination.ip 字段值与 mock-threat-list 指标索引中的相应字段值相同时,生成警报,请输入以下图像中看到的规则参数

      Indicator match rule settings

      在创建规则之前,请创建 时间线模板,以便可以在此处选择它们。当在时间线中调查规则生成的警报时,时间线查询值将替换为其相应的警报字段值。

  4. (可选,需要白金或更高订阅)选择抑制警报以减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报
  5. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  6. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  7. 单击继续配置基本规则设置

将值列表与指标匹配规则一起使用

编辑

虽然有多种方法可以将数据添加到指标索引中,但您可以使用值列表作为指标匹配规则中的指标匹配索引。例如,请看以下场景

您上传了已知勒索软件域的值列表,并且您希望在这些域中的任何一个与安全事件索引模式中的域字段中包含的值匹配时收到通知。

  1. 上传指标的值列表。
  2. 创建指标匹配规则并填写以下字段

    1. 索引模式:规则在其上运行的 Elastic Security 事件索引。
    2. 自定义查询:用于从 Elastic Security 事件索引检索所需结果的查询和筛选器(例如,host.domain :*)。
    3. 指标索引模式:值列表存储在名为 .items-<Kibana space> 的隐藏索引中。在此字段中输入此规则将在其中运行的 Kibana 空间的名称。
    4. 指标索引查询:输入值 list_id :,后跟您要用作指标索引的值列表的名称(在上面的步骤 1 中上传)。
    5. 指标映射

      • 字段:输入要用于比较 Elastic Security 事件索引中的值的字段。
      • 指标索引字段:输入您创建的值列表的类型(即,keywordtextIP)。

        如果您不记得此信息,请参阅相应的 值列表,并在 类型 列中查找列表的类型(例如,类型可以是 KeywordsTextIP)。

indicator value list

创建新的术语规则

编辑
  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 要创建一条规则来搜索在源文档中检测到的每个新术语,请在 创建新规则 页面上选择 新术语,然后

    1. 通过输入各个 Elasticsearch 索引模式或选择现有数据视图来指定要搜索的数据。
    2. 使用过滤器和查询字段创建用于检测警报的标准。

      您可以使用 Kibana 保存的查询(已保存的查询菜单)和来自已保存时间线的查询(从已保存的时间线导入查询)作为规则条件。

    3. 使用 字段 菜单选择要检查新术语的字段。您最多还可以选择三个字段来检测新术语的组合(例如,以前从未一起观察到的 host.iphost.id)。

      在检查多个字段时,将分别评估这些字段中值的每个唯一组合。例如,具有 host.name: ["host-1", "host-2", "host-3"]user.name: ["user-1", "user-2", "user-3"] 的文档具有 9 (3x3) 个 host.nameuser.name 的唯一组合。具有 11 个 host.name 值和 10 个 user.name 值的文档具有 110 (11x10) 个唯一组合。新术语规则每个文档仅评估 100 个唯一组合,因此选择具有大量值数组的字段可能会导致不正确的结果。

    4. 使用 历史窗口大小 菜单以分钟、小时或天为单位指定搜索的时间范围,以确定术语是否为新术语。历史窗口大小必须大于规则间隔加上额外的回溯时间,因为规则将查找术语在历史窗口中出现的唯一时间也规则间隔和额外回溯时间内。

      例如,如果规则的间隔为 5 分钟,没有额外的回溯时间,并且历史窗口大小为 7 天,则仅当该术语在过去 7 天内出现的时间也在过去 5 分钟内时,该术语才会被视为新的。在您 设置规则的计划时,配置规则间隔和额外的回溯时间。

  4. (可选,需要白金或更高订阅)使用按以下项抑制警报来减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报
  5. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  6. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  7. 单击继续配置基本规则设置

创建 ES|QL 规则

编辑

使用 ES|QL 查询源事件并聚合事件数据。查询结果以表格形式返回,其中包含行和列。每一行都成为一个警报。

要创建 ES|QL 规则

  1. 在导航菜单中或使用全局搜索字段查找检测规则 (SIEM)
  2. 单击创建新规则
  3. 选择 ES|QL,然后编写查询。

    请参阅以下各节,了解有关 ES|QL 查询类型查询设计注意事项规则限制的更多信息。

    单击帮助图标 (单击 ES|QL 帮助图标) 以打开所有 ES|QL 命令和功能的内置产品参考文档。

  4. (可选,需要白金或更高订阅)使用按以下项抑制警报来减少规则创建的重复或重复警报的数量。有关详细信息,请参阅抑制检测警报
  5. (可选)创建规则需要运行的必需字段列表。此列表仅供参考,以帮助用户理解规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。您也可以开始键入字段的名称以更快地找到它,或键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  6. (可选)添加相关集成以将规则与一个或多个Elastic 集成关联。这表明规则对特定集成及其生成的数据的依赖性,并允许用户在查看规则时确认每个集成的安装状态

    1. 单击添加集成,然后从列表中选择一个集成。您也可以开始键入集成的名称以更快地找到它。
    2. 使用语义版本控制,输入要与规则关联的集成版本。对于版本范围,您必须使用波浪号或插入符号语法。例如,~1.2.3是从 1.2.3 到任何小于 1.3.0 的补丁版本,而 ^1.2.3 是从 1.2.3 到任何小于 2.0.0 的次要版本和补丁版本。
  7. 单击继续配置基本规则设置

ES|QL 查询类型

编辑

ES|QL 规则查询大致分为两种类型:聚合查询和非聚合查询。

聚合查询
编辑

聚合查询使用 STATS...BY 函数来聚合源事件数据。具有聚合查询的规则生成的警报仅包含 ES|QL 查询返回的字段以及查询创建的任何新字段。

新字段是指查询的源索引中不存在的字段,而是在规则运行时创建的字段。您可以在规则生成的任何警报的详细信息中访问新字段。例如,如果您使用 STATS...BY 函数创建具有聚合值的列,则该列会在规则运行时创建,并作为新字段添加到规则生成的任何警报中。

以下是聚合查询的示例

FROM logs-*
| STATS host_count = COUNT(host.name) BY host.name
| SORT host_count DESC
| WHERE host_count > 20
  • 此查询首先搜索与模式 logs-* 匹配的索引中的日志。
  • 然后,该查询按 host.name 聚合事件计数。
  • 接下来,它按 host_count 降序对结果进行排序。
  • 然后,它筛选 host_count 字段在指定的规则间隔内出现超过 20 次的事件。

使用聚合查询的规则可能会创建重复警报。当附加回溯时间中发生的事件在当前规则执行和之前的规则执行中都被聚合时,可能会发生这种情况。

非聚合查询
编辑

非聚合查询不使用 STATS...BY 函数,并且不聚合源事件数据。非聚合查询生成的警报包含查询返回的源事件字段、查询创建的新字段以及源事件文档中的所有其他字段。

新字段是指在查询的源索引中不存在的字段,而是在规则运行时创建的。你可以在规则生成的任何警报的详细信息中访问新字段。例如,如果你使用 EVAL 命令来附加带有计算值的新列,则这些列会在规则运行时创建,并作为新字段添加到规则生成的任何警报中。

以下是一个非聚合查询的示例

FROM logs-* METADATA _id, _index, _version
| WHERE event.category == "process"  AND event.id == "8a4f500d"
| LIMIT 10
  • 此查询首先从与模式 logs-* 匹配的索引中查询日志。METADATA _id, _index, _version 运算符允许 警报去重
  • 接下来,查询会筛选 event.category 为 process 且 event.id8a4f500d 的事件。
  • 然后,它将输出限制为前 10 个结果。
为使用非聚合查询的规则启用警报去重
编辑

要对警报进行去重,查询需要访问被查询的源事件文档的 _id_index_version 元数据字段。你可以通过在 FROM 源命令后添加 METADATA _id, _index, _version 运算符来实现此目的,例如

FROM logs-* METADATA _id, _index, _version
| WHERE event.category == "process"  AND event.id == "8a4f500d"
| LIMIT 10

当提供这些元数据字段时,将为查询生成的每个警报创建唯一的警报 ID。

在开发查询时,请确保你没有 DROP 或过滤掉 _id_index_version 元数据字段。

以下是一个无法对警报进行去重的查询示例。它使用 DROP 命令从结果表中省略 _id 属性

FROM logs-* METADATA _id, _index, _version
| WHERE event.category == "process"  AND event.id == "8a4f500d"
| DROP _id
| LIMIT 10

以下是另一个无效查询的示例,该查询使用 KEEP 命令仅返回结果表中的 event.* 字段

FROM logs-* METADATA _id, _index, _version
| WHERE event.category == "process"  AND event.id == "8a4f500d"
| KEEP event.*
| LIMIT 10

查询设计注意事项

编辑

在编写查询时,请考虑以下事项

  • LIMIT 命令指定 ES|QL 查询返回的最大行数和每次规则执行创建的最大警报数。类似地,检测规则的每次运行的最大警报数设置指定了每次运行时它可以创建的最大警报数。

    如果 LIMIT 值和 每次运行的最大警报数值不同,则规则使用较低的值来确定规则生成的最大警报数。

  • 在编写聚合查询时,请将 STATS...BY 命令与你希望在创建警报后搜索和筛选的字段一起使用。例如,将 host.nameuser.nameprocess.name 字段与 STATS...BY 命令的 BY 运算符一起使用,会在警报文档中返回这些字段,并允许你从“警报”表中搜索和筛选它们。
  • 在非聚合查询上配置警报抑制时,我们建议按升序 @timestamp 顺序对结果进行排序。这样做可以确保正确抑制警报,尤其是在生成的警报数量高于每次运行的最大警报数值时。

ES|QL 规则限制

编辑

如果你的 ES|QL 查询创建了不属于 ECS 架构的新字段,则这些字段不会映射到警报索引,因此你无法在“警报”表中搜索或筛选它们。作为一种解决方法,请创建运行时字段

突出显示 ES|QL 规则查询返回的字段

编辑

在配置 ES|QL 规则的 自定义突出显示字段时,你可以指定规则的聚合或非聚合查询返回的任何字段。这有助于确保在调查警报时,返回的字段在警报详细信息弹出窗口中可见。

配置基本规则设置

编辑
  1. 关于规则窗格中,填写以下字段

    1. 名称:规则的名称。
    2. 描述:对规则作用的描述。
    3. 默认严重性:选择规则创建的警报的严重性级别

      • :感兴趣但通常不被认为是安全事件的警报。有时,低严重性警报的组合可以指示可疑活动。
      • :需要调查的警报。
      • :需要立即调查的警报。
      • 严重:表明极有可能发生安全事件的警报。
    4. 严重性覆盖(可选):选择使用源事件值来覆盖生成的警报中的默认严重性。选择后,会显示一个 UI 组件,你可以在其中将源事件字段值映射到严重性级别。以下示例显示了如何将严重性级别映射到 host.name

      severity mapping ui

      对于阈值规则,并非所有源事件值都可以用于覆盖;只有被聚合的字段(Group by 字段)将包含数据。另请注意,事件关联规则不支持覆盖。

    5. 默认风险评分:介于 0 到 100 之间的数值,表示规则检测到的事件的风险。当你更改严重性级别时,此设置会更改为默认值,但你可以根据需要调整风险评分。一般准则如下

      • 0 - 21 表示低严重性。
      • 22 - 47 表示中等严重性。
      • 48 - 73 表示高严重性。
      • 74 - 100 表示严重严重性。
    6. 风险评分覆盖(可选):选择使用源事件值来覆盖生成的警报中的默认风险评分。选择后,会显示一个 UI 组件来选择用于风险评分的源字段。例如,如果你想在警报中使用源事件的风险评分

      risk source field ui

      对于阈值规则,并非所有源事件值都可以用于覆盖;只有被聚合的字段(Group by 字段)将包含数据。

    7. 标签(可选):用于对规则进行分类、筛选和搜索的单词和短语。
  2. 继续执行以下其中一项操作

配置高级规则设置(可选)

编辑
  1. 单击高级设置并填写以下字段(如果适用)

    1. 参考 URL(可选):与规则相关的信息的参考。例如,指向背景信息的链接。
    2. 误报示例(可选):可能产生误报警报的常见场景列表。
    3. MITRE ATT&CKTM 威胁(可选):添加相关的 MITRE 框架战术、技术和子技术。
    4. 自定义突出显示字段(可选):为独特的警报调查流程指定一个或多个突出显示字段。你可以选择规则数据源中选择的索引中可用的任何字段。

      创建规则后,你可以在规则详细信息页面的“关于”部分找到所有自定义突出显示字段。如果规则有警报,你可以在警报详细信息弹出窗口的 突出显示字段 部分找到自定义突出显示字段。

    5. 设置指南(可选):有关规则先决条件的说明,例如所需的集成、配置步骤以及规则正常工作所需的任何其他内容。
    6. 调查指南(可选):供分析师调查规则创建的警报的信息。你还可以添加操作按钮以使用警报数据运行 Osquery启动时间线调查
    7. 作者(可选):规则的作者。
    8. 许可证(可选):规则的许可证。
    9. Elastic Endpoint 例外(可选):将所有 Elastic Endpoint Security 规则例外添加到此规则(有关添加端点例外的详细信息,请参阅添加 Elastic Endpoint 例外)。

      如果选择此选项,你可以在“规则详细信息”页面上添加端点例外。此外,将来添加到 Endpoint Security 规则的所有例外也会影响此规则。

    10. 构建块(可选):选择创建构建块规则。默认情况下,构建块规则生成的警报不会显示在 UI 中。有关详细信息,请参阅 关于构建块规则
    11. 每次运行的最大警报数(可选):指定规则每次运行时可以创建的最大警报数。默认为 100。

      此设置可以被 Kibana 配置设置 xpack.alerting.rules.run.alerts.max 取代,该设置确定 Kibana 警报框架中任何规则生成的最大警报数。例如,如果 xpack.alerting.rules.run.alerts.max 设置为 1000,则即使 每次运行的最大警报数设置得更高,规则也只能生成不超过 1000 个警报。

    12. 指示符前缀覆盖:定义指示符数据在指示符文档结构中的位置。当指示符匹配规则执行时,它会查询指定的指示符索引并引用此设置以查找包含指示符数据的字段。此数据用于使用有关匹配的威胁指示符的元数据来丰富指示符匹配警报。此设置的默认值为 threat.indicator

      如果你的威胁指示符数据位于不同的位置,请相应地更新此设置,以确保仍然可以执行警报丰富。

    13. 规则名称覆盖(可选):选择一个源事件字段,用作 UI(警报表)中的规则名称。这对于一目了然地显示有关警报的更多信息非常有用。例如,如果规则从 Suricata 生成警报,则选择 event.action 可以让您直接在警报表中看到导致该事件的操作(Suricata 类别)。

      对于阈值规则,并非所有源事件值都可以用于覆盖;只有被聚合的字段(Group by 字段)将包含数据。

    14. 时间戳覆盖(可选):选择一个源事件时间戳字段。选择后,规则的查询将使用所选字段,而不是默认的 @timestamp 字段来搜索警报。这有助于减少因网络或服务器中断而导致的警报丢失。具体而言,如果您的摄取管道在事件发送到 Elasticsearch 时添加时间戳,则可以避免因摄取延迟而导致警报丢失。但是,如果您知道数据源的 @timestamp 值不准确,则建议您选择 不使用 @timestamp 作为回退时间戳字段 选项以完全忽略 @timestamp 字段。

      MicrosoftGoogle Workspace Filebeat 模块有一个 event.ingested 时间戳字段,可以代替默认的 @timestamp 字段使用。

  2. 单击 继续。将显示 计划规则 窗格。

    schedule rule
  3. 继续设置规则的计划

设置规则的计划

编辑
  1. 选择规则的运行频率。
  2. (可选)向规则添加 额外回溯时间。定义后,规则将使用额外的时间搜索索引。

    例如,如果您将规则设置为每 5 分钟运行一次,并且额外回溯时间为 1 分钟,则规则每 5 分钟运行一次,但会分析最近 6 分钟添加到索引中的文档。

    建议将 额外回溯时间 设置为至少 1 分钟。这可确保在规则未在其计划时间准确运行时不会遗漏任何警报。

    Elastic Security 会阻止重复项。在 额外回溯时间 内发现的任何重复警报都将被创建。

  3. 单击 继续。将显示 规则操作 窗格。
  4. 执行以下任一操作

设置规则操作(可选)

编辑

使用 Kibana 操作来设置在生成警报时通过其他系统发送的通知。

要使用 Kibana 操作进行警报通知,您需要适当的许可证,并且您的角色需要对 操作和连接器 功能具有 全部 特权。有关详细信息,请参阅案例要求

  1. 选择连接器类型以确定通知的发送方式。例如,如果选择 Jira 连接器,则通知将发送到您的 Jira 系统。

    每种操作类型都需要一个连接器。连接器存储从外部系统发送通知所需的信息。您可以在创建规则时或在 堆栈管理连接器 中配置连接器。有关详细信息,请参阅操作和连接器类型

    某些执行操作的连接器需要的配置较少。例如,您无需为 案例连接器设置操作频率或变量。

  2. 选择连接器后,设置其操作频率以定义何时发送通知

    • 警报摘要:选择此选项可获取总结生成的警报的报告,您可以方便地查看该报告。警报摘要将按指定的时间间隔发送。

      设置自定义通知频率时,请勿选择短于规则执行计划的时间。

    • 对于每个警报:选择此选项可确保每次生成新警报时都会发送通知。
  3. (可选)指定需要满足的其他条件才能发送通知。单击切换开关以启用设置,然后添加所需详细信息

    • 如果警报匹配查询:输入 KQL 查询,以定义必须满足才能发送通知的字段值对或查询条件。该查询仅搜索规则指定的索引中的警报文档。
    • 如果警报在时间范围内生成:设置时间范围详细信息。仅当警报在您定义的时间范围内生成时,才会发送通知。
  4. 填写所需的连接器类型字段。以下是 Jira 的示例

    selected action type
  5. 使用默认的通知消息或自定义通知消息。您可以通过单击消息文本框上方的图标并从可用警报通知变量列表中选择来向消息添加更多上下文。
  6. 创建规则(激活或不激活)。

    当您激活规则时,它会排队,其计划由其初始运行时间确定。例如,如果您激活了一个每 5 分钟运行一次的规则,该规则在 14:03 运行,但直到 14:04 才运行,那么它将在 14:09 再次运行。

激活规则后,您可以使用“规则”页面上的“监视”选项卡检查其是否按预期运行。如果您在 差距 列中看到值,则可以排除丢失警报故障

当规则无法运行时,Elastic Security 应用会尝试在下一个计划的运行时间重新运行它。

警报通知占位符

编辑

您可以使用 mustache 语法向通知消息添加变量。您选择的操作频率决定了您可以从中选择的变量。

以下变量可以传递给所有规则

请参阅操作频率:警报摘要,以了解如果规则的操作频率为 警报摘要,则可以传递的其他变量。

  • {{context.alerts}}:检测到的警报数组
  • {{{context.results_link}}}:Kibana 中警报的 URL
  • {{context.rule.anomaly_threshold}}:生成警报的异常阈值分数(仅限机器学习规则)
  • {{context.rule.description}}:规则描述
  • {{context.rule.false_positives}}:规则误报
  • {{context.rule.filters}}:规则筛选器(仅限查询规则)
  • {{context.rule.id}}:创建规则后返回的唯一规则 ID
  • {{context.rule.index}}:规则在其上运行的索引(仅限查询规则)
  • {{context.rule.language}}:规则查询语言(仅限查询规则)
  • {{context.rule.machine_learning_job_id}}:关联的机器学习作业的 ID(仅限机器学习规则)
  • {{context.rule.max_signals}}:每次规则执行允许的最大警报数
  • {{context.rule.name}}:规则名称
  • {{context.rule.query}}:规则查询(仅限查询规则)
  • {{context.rule.references}}:规则引用
  • {{context.rule.risk_score}}:默认规则风险评分

    即使使用 风险评分覆盖 选项,此占位符也包含规则的默认值。

  • {{context.rule.rule_id}}:生成或用户定义的规则 ID,可用作跨系统的标识符
  • {{context.rule.saved_id}}:已保存的搜索 ID
  • {{context.rule.severity}}:默认规则严重性

    即使使用 严重性覆盖 选项,此占位符也包含规则的默认值。

  • {{context.rule.threat}}:规则威胁框架
  • {{context.rule.threshold}}:规则阈值(仅限阈值规则)
  • {{context.rule.timeline_id}}:关联的 Timeline ID
  • {{context.rule.timeline_title}}:关联的 Timeline 名称
  • {{context.rule.type}}:规则类型
  • {{context.rule.version}}:规则版本
  • {{date}}`:规则计划操作的日期
  • {{kibanaBaseUrl}}:配置的 server.publicBaseUrl 值,如果未配置,则为空字符串
  • {{rule.id}}:规则的 ID
  • {{rule.name}}:规则的名称
  • {{rule.spaceId}}:规则的空间 ID
  • {{rule.tags}}:规则的标签
  • {{rule.type}}:规则类型
  • {{state.signals_count}}:检测到的警报数

仅当规则的操作频率为每个警报时,才能传递以下变量

  • {{alert.actionGroup}}:为规则计划操作的警报的操作组
  • {{alert.actionGroupName}}:为规则计划操作的警报的操作组的人类可读名称
  • {{alert.actionSubgroup}}:为规则计划操作的警报的操作子组
  • {{alert.id}}:为规则计划操作的警报的 ID
  • {{alert.flapping}}:警报上的一个标志,指示警报状态是否正在重复更改
警报占位符示例
编辑

要了解要解析的字段,请参阅Detections API以查看规则的 JSON 表示形式。

使用 {{context.rule.filters}} 输出过滤器列表的示例

{{#context.rule.filters}}
{{^meta.disabled}}{{meta.key}} {{#meta.negate}}NOT {{/meta.negate}}{{meta.type}} {{^exists}}{{meta.value}}{{meta.params.query}}{{/exists}}{{/meta.disabled}}
{{/context.rule.filters}}

使用 {{context.alerts}} 作为数组的示例,其中包含自上次执行操作以来生成的每个警报

{{#context.alerts}}
Detection alert for user: {{user.name}}
{{/context.alerts}}

使用 Mustache “当前元素” 表示法 {{.}} 输出 signal.rule.references 数组中的所有规则引用示例

{{#signal.rule.references}} {{.}} {{/signal.rule.references}}

设置响应操作(可选)

编辑

使用响应操作来设置规则执行时将运行的其他功能

  • Osquery:包含带有自定义查询规则的实时 Osquery 查询。生成警报时,Osquery 会自动收集与警报相关的系统数据。请参阅添加 Osquery 响应操作以了解更多信息。
  • Elastic Defend:在满足规则条件时自动在端点上运行响应操作。例如,当在主机上检测到特定活动或事件时,您可以自动隔离主机或终止进程。请参阅自动化响应操作以了解更多信息。

主机隔离涉及将主机与网络隔离,以防止威胁进一步蔓延并限制潜在损害。请注意,自动主机隔离可能会导致意外后果,例如中断合法的用户活动或阻止关键业务流程。

预览您的规则(可选)

编辑

您可以预览任何自定义或预构建的规则,以了解其噪声程度。对于自定义规则,您可以调整规则的查询或其他设置。

要预览规则,您需要 .preview.alerts-security.alerts-<space-id>.internal.preview.alerts-security.alerts-<space-id>-* 索引的 read 权限,以及安全功能的 All 权限。有关更多信息,请参阅检测要求

在创建或编辑规则时,单击规则预览按钮。预览会在侧面板中打开,其中显示直方图和表格,其中包含您可以预期的警报,这些警报基于定义的规则设置和索引中的过去事件。

Rule preview

预览还包括规则例外和覆盖字段的效果。在直方图中,警报按 event.category(或机器学习规则的 host.name)堆叠,具有多个值的警报会多次计数。

与规则预览进行交互

  • 使用日期和时间选择器定义预览的时间范围。

    避免使用短规则间隔设置较长的时间范围,否则规则预览可能会超时。

  • 单击刷新以更新预览。

    • 当您编辑规则的设置或预览的时间范围时,按钮会从蓝色(蓝色圆形刷新图标)变为绿色(绿色向右箭头刷新图标),以指示自上次预览以来规则已被编辑。
    • 对于相对时间范围(例如 过去 1 小时),请刷新预览以检查最新结果。(预览不会随着新的传入数据自动刷新。)
  • 单击警报表格中的查看详情图标(查看详情图标)以查看特定警报的详细信息。
  • 要调整预览大小,请在规则设置和预览之间悬停,然后单击并拖动边框。您也可以单击边框,然后单击折叠图标(折叠图标)来折叠和展开预览。
  • 要关闭预览,请再次单击规则预览按钮。

查看规则的 Elasticsearch 查询(可选)

编辑

此选项仅适用于 ES|QL 和事件关联规则。

预览规则时,您还可以了解其 Elasticsearch 查询,这些查询在规则运行时提交。此信息可以帮助您识别和解决潜在的规则问题。您还可以使用它来确认您的规则正在检索预期的数据。

要了解有关规则的 Elasticsearch 查询的更多信息,请预览其结果并执行以下操作

  1. 在预览的日期和时间选择器下方,选择显示规则执行期间运行的 Elasticsearch 请求选项。预览已记录的结果部分显示在直方图和警报表格下方。
  2. 单击预览已记录的结果部分以展开它。在该部分中,每个规则执行都显示在单独的行上。
  3. 展开每一行以了解有关规则每次执行时提交的 Elasticsearch 查询的更多信息。提供了以下详细信息

    • 规则执行开始的时间以及完成所需的时间
    • 关于 Elasticsearch 查询的功能的简要说明
    • 规则提交到包含在规则执行期间使用的事件的索引的实际 Elasticsearch 查询

      Console 中运行查询,以确定您的规则是否正在检索预期的数据。例如,要测试规则的例外,请运行规则的 Elasticsearch 查询,其中还将包含添加到规则的例外。如果规则的例外按预期工作,则查询将不会返回应忽略的事件。