正在加载

创建检测规则

Elastic Stack 无服务器安全

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

  1. 定义规则类型。此步骤的配置因规则类型而异。
  2. 配置基本规则设置。
  3. 配置高级规则设置(可选)。
  4. 设置规则的计划。
  5. 设置规则操作(可选)。
  6. 设置响应操作(可选)。
要求

要创建检测规则,您必须具备

  • 访问数据视图的权限,这需要 Elastic Stack 中的 Data View Management Kibana 权限或 Serverless 中相应的用户角色
  • 启用和查看检测、管理规则、管理警报和预览规则的权限。 这些权限取决于用户角色。 有关更多信息,请参阅 检测要求
提示
  • 在任何步骤,您都可以在保存之前预览规则,以查看可以期望获得什么样的结果。
  • 为确保规则在执行时不搜索冷数据和冻结数据,请配置 excludedDataTiersForRuleExecution 高级设置(这适用于空间中的所有规则),或将 Query DSL 过滤器添加到各个规则。 这些选项仅在您使用 Elastic Stack 时可用。
注意

对于使用跨集群搜索的检测规则,需要进行其他配置。 请参阅跨集群搜索和检测规则

  1. 在导航菜单中找到检测规则 (SIEM),或使用全局搜索字段,然后单击创建新规则

  2. 要基于 KQL 或 Lucene 查询创建规则,请在创建新规则页面上选择自定义查询,然后

    1. 定义规则搜索警报的 Elasticsearch 索引或数据视图。

    2. 使用筛选器和查询字段来创建用于检测警报的标准。

      以下示例(基于预构建规则 Volume Shadow Copy Deleted or Resized via 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-* 索引中搜索执行 vssadmin.exe 且带有 deleteshadow 参数的事件,这些参数用于删除卷的卷影副本。

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

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

      • 选择此选项以在每次规则运行时使用保存的查询。 这会将规则链接到保存的查询,并且您将无法修改规则的自定义查询字段或过滤器,因为规则将仅使用保存的查询中的设置。 要进行更改,请修改保存的查询本身。
      • 取消选择此选项可将保存的查询加载为填充规则的自定义查询字段和过滤器的一次性方法。 这会将设置从保存的查询复制到规则,因此您可以根据需要进一步调整规则的查询和过滤器。 如果稍后更改了保存的查询,则规则将不会继承这些更改。
  3. (可选)使用抑制警报依据以减少规则创建的重复或重复警报的数量。 有关更多信息,请参阅抑制检测警报

  4. (可选)创建一个规则需要运行的必需字段列表。 此列表仅供参考,以帮助用户理解该规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。 您也可以开始键入字段的名称以更快地找到它,或者键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  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. 要基于机器学习异常阈值创建规则,请在创建新规则页面上选择机器学习,然后选择

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

      注意

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

    2. 创建警报的异常得分阈值。

  3. (可选)使用抑制警报依据以减少规则创建的重复或重复警报的数量。 有关更多信息,请参阅抑制检测警报

    注意

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

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

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

  1. 在导航菜单中找到检测规则 (SIEM),或使用全局搜索字段,然后单击创建新规则

  2. 要基于源事件字段阈值创建规则,请选择阈值,然后

    1. 定义规则分析警报的 Elasticsearch 索引。

    2. 使用筛选器和查询字段来创建用于检测警报的标准。

      注意

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

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

      注意

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

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

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

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

      重要提示

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

  3. (可选) 选择 禁止告警 以减少规则创建的重复或重复告警的数量。有关更多信息,请参阅禁止检测告警

  4. (可选)创建一个规则需要运行的必需字段列表。 此列表仅供参考,以帮助用户理解该规则;它不会影响规则的实际运行方式。

    1. 单击添加必需字段,然后从您为规则指定的索引模式或数据视图中选择一个字段。 您也可以开始键入字段的名称以更快地找到它,或者键入一个全新的自定义字段。
    2. 输入字段的数据类型。
  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. 要使用 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 应用程序会生成单个告警。 要查看匹配的序列事件的更多详细信息,您可以在时间线中查看告警,并且如果所有事件都来自同一进程,则可以在“分析事件”视图中打开告警。

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

    • 事件类别字段:包含事件分类,例如 processfilenetwork。 此字段通常映射为 keyword 系列中的字段类型。 默认为 event.category ECS 字段。
    • 仲裁字段:如果事件具有相同的时间戳,则设置一个辅助字段以对事件进行排序(按升序字母顺序)。
    • 时间戳字段:包含用于对事件序列进行排序的事件时间戳。 这与时间戳覆盖高级设置不同,后者用于在一定范围内查询事件。 默认为 @timestamp ECS 字段。
  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. 单击继续配置基本规则设置

注意

Elastic Security 对指示器匹配规则提供有限的支持。 有关更多信息,请参阅对指示器匹配规则的有限支持

  1. 在导航菜单中找到检测规则 (SIEM),或使用全局搜索字段,然后单击创建新规则

  2. 要创建搜索事件的规则,该事件的指定字段值与指示器索引模式中指定的指示器字段值匹配,请选择 指示器匹配,然后填写以下字段

    1. :指定要搜索的数据的单个索引模式或数据视图。

    2. 自定义查询:用于从 Elastic Security 事件索引中检索所需结果的查询和过滤器。 例如,如果您只想匹配包含 destination.ip 地址字段的文档,请添加 destination.ip : *

      提示

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

      注意

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

    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
      提示

      在创建规则之前,请创建 时间线模板,以便您可以在 定义规则 部分的末尾在 时间线模板 下选择它们。 在时间线中调查由规则生成的告警时,时间线查询值将替换为其相应的告警字段值。

  3. (可选) 选择 禁止告警 以减少规则创建的重复或重复告警的数量。有关更多信息,请参阅禁止检测告警

  4. (可选)创建一个规则需要运行的必需字段列表。 此列表仅供参考,以帮助用户理解该规则;它不会影响规则的实际运行方式。

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

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

虽然您可以通过多种方式将数据添加到指示器索引中,但您可以使用值列表作为指示器匹配规则中的指示器匹配索引。 例如,采用以下场景

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

  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. 要创建搜索源文档中检测到的每个新术语的规则,请在 创建新规则 页面上选择 新术语,然后

    1. 通过输入单个 Elasticsearch 索引模式或选择现有数据视图来指定要搜索的数据。

    2. 使用筛选器和查询字段来创建用于检测警报的标准。

      注意

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

    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 组合。 一个包含 host.name 中 11 个值和 user.name 中 10 个值的文档有 110 个(11x10)唯一组合。 新术语规则仅评估每个文档 100 个唯一组合,因此选择具有大量值数组的字段可能会导致不正确的结果。

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

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

  3. (可选)使用抑制警报依据以减少规则创建的重复或重复警报的数量。 有关更多信息,请参阅抑制检测警报

  4. (可选)创建一个规则需要运行的必需字段列表。 此列表仅供参考,以帮助用户理解该规则;它不会影响规则的实际运行方式。

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

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

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

创建 ES|QL 规则:

  1. 在导航菜单中找到检测规则 (SIEM),或使用全局搜索字段,然后单击创建新规则

  2. 选择 ES|QL,然后编写查询。

    注意

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

    提示

    单击帮助图标(Click the ES|QL help icon)以打开产品内参考文档,其中包含所有 ES|QL 命令和函数。

  3. (可选)使用抑制警报依据以减少规则创建的重复或重复警报的数量。 有关更多信息,请参阅抑制检测警报

  4. (可选)创建一个规则需要运行的必需字段列表。 此列表仅供参考,以帮助用户理解该规则;它不会影响规则的实际运行方式。

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

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

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 是进程且 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 查询创建了不属于 ECS 模式的新字段,则它们不会映射到警报索引,因此您无法在“警报”表中搜索或筛选它们。作为一种解决方法,请创建运行时字段

在配置 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 异常 添加到此规则。

      注意

      如果选择此选项,您可以在“规则详细信息”页面上添加 Elastic Endpoint 异常。此外,添加到 Endpoint 保护规则 的所有未来异常也会影响此规则。

    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 值,我们建议选择 不要使用 @timestamp 作为回退时间戳字段 选项。这将确保规则查询完全忽略 @timestamp 字段。

      提示

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

  2. 单击 继续。将显示 安排规则 窗格。

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

  1. 选择规则的运行频率。

  2. (可选)向规则添加 额外回溯时间。定义后,规则将搜索具有额外时间的索引。

    例如,如果您将规则设置为每 5 分钟运行一次,并具有 1 分钟的额外回溯时间,则该规则每 5 分钟运行一次,但会分析在过去 6 分钟内添加到索引的文档。

    重要提示

    建议将 额外回溯时间 设置为至少 1 分钟。这可以确保当规则未在其计划时间内准确运行时,不会出现警报缺失。

    Elastic Security 可以防止重复。在 额外回溯时间 内发现的任何重复警报都不会创建。

  3. 单击 继续。将显示 规则操作 窗格。

  4. 执行以下操作之一

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

注意

要使用操作进行警报通知,您需要适当的许可证。有关更多信息,请参阅案例要求

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

    注意

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

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

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

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

      注意

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

    • 针对每个警报:选择此选项以确保每次生成新警报时都会发送通知。

  3. (可选)指定发送通知需要满足的其他条件。单击切换开关以启用设置,然后添加所需的详细信息

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

    selected action type
  5. 使用默认的通知消息或自定义它。您可以通过单击消息文本框上方的图标并从可用的警报通知变量列表中进行选择,向消息添加更多上下文。

  6. 创建规则(激活或不激活)。

    注意

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

重要提示

激活规则后,您可以使用规则页面上的 监控选项卡来检查它是否按预期运行。如果您在 Gap 列中看到值,您可以排查警报缺失问题。

当规则无法运行时,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}}:关联的时间线 ID

  • {{context.rule.timeline_title}}:关联的时间线名称

  • {{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}}:警报上的一个标志,指示警报状态是否在重复更改

要了解要解析的字段,请参阅 检测 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:当满足规则条件时,自动在端点上运行响应操作。例如,当在主机上检测到特定活动或事件时,您可以自动隔离主机或终止进程。请参阅自动化响应操作以了解更多信息。
重要提示

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

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

注意

要预览规则,您必须具有适当的用户角色。请参阅检测要求以获取更多信息。

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

Rule preview

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

与规则预览互动:

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

    提示

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

  • 单击刷新以更新预览。

    • 当您编辑规则的设置或预览的时间范围时,该按钮会从蓝色(蓝色圆形刷新图标)变为绿色(绿色右箭头刷新图标),表示自上次预览以来,规则已被编辑。
    • 对于相对时间范围(例如 Last 1 hour),刷新预览以检查最新的结果。(预览不会自动刷新新传入的数据。)
  • 单击警报表格中的查看详细信息图标(查看详细信息图标)以查看特定警报的详细信息。

  • 要调整预览大小,请将鼠标悬停在规则设置和预览之间,然后单击并拖动边框。您也可以单击边框,然后单击折叠图标(折叠图标)以折叠和展开预览。

  • 要关闭预览,请再次单击规则预览按钮。

注意

此选项适用于除指标匹配规则之外的所有规则类型。

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

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

  1. 选择预览的日期和时间选择器下方的显示规则执行期间运行的 Elasticsearch 请求选项。预览记录的结果部分显示在直方图和警报表下方。

  2. 单击预览记录的结果部分以展开它。在该部分中,每个规则执行都显示在单独的行上。

  3. 展开每一行以了解有关规则每次执行时提交的 Elasticsearch 查询的更多信息。提供以下详细信息:

    • 规则执行开始的时间以及完成所需的时间

    • Elasticsearch 查询作用的简要说明

    • 规则提交给包含在规则执行期间使用的事件的索引的前两个 Elasticsearch 查询

      提示

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

© . All rights reserved.