在 Elastic 中使用 JOIN 进行威胁狩猎!

2025年5月16日   |   by mebius

作者:来自 ElasticPaul Ewing, Jonhnathan Ribeiro

%title插图%num

Elastic 的管道查询语言 ES | QL 为查询带来了 join 功能。

威胁狩猎者欢呼吧!你是否一直在寻找一种通过 Elastic 的速度和强大功能来连接数据的方法?好消息!Elastic 现在可以通过管道查询语言 ES|QL(Elasticsearch 查询语言)中的新功能来连接数据源。这将使得从高级行为检测到警报筛查,再到威胁狩猎的强大搜索成为可能。

为什么 JOIN 在安全中至关重要:这全关乎上下文

Elastic 一直提供全面的搜索功能,帮助用户调查安全事件、分析日志以及大规模地探索数据。其中一个关键功能在推动检测和调查中发挥着重要作用:JOIN,因为上下文至关重要。

JOIN 允许分析人员、检测工程师和威胁狩猎者在基于条件的查询上构建更具上下文感知的逻辑。考虑以下问题:这个人在哪个部门工作,他们的工作需要他们运行 PowerShell 吗?这个恶意软件事件是否涉及一个关键用户,比如域管理员?这个钓鱼攻击活动是否针对特定的角色或业务部门?

所有这些问题都依赖于警报之外的数据。而 JOIN 就是让从业人员将这些上下文信息引入查询的方式 —— 通过跨数据源连接线索,从而在狩猎、调查和响应过程中做出更智能、更快速的决策。

JOIN 的进化:ES|QL 中的 LOOKUP

Elastic 现有的丰富策略已经支持类似 JOIN 的工作流,但维护丰富作业和管理更新增加了摩擦,比如每次更新后都需要重新执行丰富策略。现在,随着 ES|QL 中引入 LOOKUP JOIN 函数,一切变得更加轻松。这一新功能为分析人员提供了更快速、更直观的方式来将外部数据引入查询。不需要预处理或外部步骤 —— 只需在搜索工作流中按需 JOIN 所需数据。

在每一步帮助安全分析师

安全从业人员专注于保护组织数据的许多方面。让我们来看看在传统的端到端工作流中,JOIN 如何提供帮助:(1)发现新的可疑活动,(2)筛查检测警报,以及(3)进行事件响应。

1. 发现威胁:假设、搜索、关联

威胁狩猎者和检测工程师通过发现可疑行为来保护他们的系统。威胁狩猎工作流侧重于一个科学模型来发现恶意活动。首先,建立假设,查看你的结果,并判断是否发生了事件。

威胁狩猎可以包括机器学习和简单的搜索,但通常数据堆栈分析是其中的一部分。Elasticsearch 查询语言(ES|QL)已将聚合功能引入查询,并提供了转换数据的能力 —— 现在还可以将来自不同数据存储的结果添加到查询结果中。这就是 JOIN 如此关键的原因。分析师和威胁狩猎者经常需要处理多个数据源,并需要关联这些数据。通常会有一个共享的参数,如主机、用户、文件、进程等。那么,如何在身份验证日志和进程执行之间寻找横向移动呢?如何在网络流量数据和文件创建之间寻找数据外泄?JOIN 使得威胁狩猎者能够跨多个数据源找到异常行为。

2. 筛选警报:关注重要的部分

接下来,安全分析师正在审查威胁狩猎者和检测工程师提供的警报输出。警报筛查(alert triage)是另一个使用 JOIN 的场景。分析师因警报过多而遭遇警报疲劳这一问题已经广为人知。是的,Elastic 通过生成性 AI 和 Attack Discovery 以及上下文丰富的用户体验来解决这个问题,但有时仍需要从外部或额外的数据源中进行优先级排序。JOIN 在这里也发挥着作用。现在,用户可以将警报元数据与威胁情报数据源进行对比,优先处理那些具有已知恶意指标的警报。或者,如何处理来自特定资产清单的警报?现在,分析师可以优先考虑那些处理大部分外部通信并且是钓鱼攻击目标的业务元素。

3. 响应事件:快速行动,掌握全貌

事件响应通常是填补空白的过程。在调查初期,响应者通常只处理附带活动案件的部分信息。这时,JOIN 就变得至关重要。在事件响应过程中,团队需要跨系统连接信息 —— 身份验证日志、端点遥测、网络数据、威胁情报、资产清单 —— 并实时关联它们。没有 JOIN,响应者只能手动将信息拼凑在一起或在不同工具之间跳转。使用 LOOKUP JOIN,事件响应者可以:

  • 使用资产所有权或敏感性级别丰富警报

  • 将端点活动与已知恶意软件指标进行关联

  • 通过单个查询追踪用户在多个系统中的活动

这是一条更快速的路径,帮助理解根本原因并协调后续步骤。

ES|QL 中的 LOOKUP JOIN 语法

在深入了解一些安全查询示例之前,让我们首先回顾一下如何使用这个新的 ES|QL 函数。ES|QL 是一种管道语言,允许用户在单个搜索中构建一系列操作,同时过滤、转换和聚合数据。JOIN 本身以前是通过丰富策略或使用 ENRICH 命令与 ES|QL 来解决的。尽管这些方法解决了一些 JOIN 的用例,但我们的用户需要一种更简单的方法来连接数据,而不需要配置丰富的设置。

新的 JOIN 功能是在使用 LOOKUP JOIN 函数时实现的。在这里,你可以建立一个查找索引,根据连接键将数据添加到你的搜索结果中。当你使用 ES|QL 管道编写查询时,可以简单地建立查找并将结果添加到当前查询中,有效地将两个数据源进行连接。有关更多信息,请查阅我们的文档或其他内容,JOINs 已经到来

这是一个简单的安全用例,使用 LOOKUP JOIN。让我们寻找包含已知威胁情报指标的 Elastic Security 警报。在这个场景中,我们的威胁情报数据存储将被命名为 “threat-match”。

FROM *.alerts-security*
| EVAL indicator.id = file.name
| LOOKUP JOIN threat-match on indicator.id

结果将包含你期望的所有警报元数据,包括:

  • 规则内容:名称、描述、严重性等

  • 原始事件、主机信息、用户信息、进程信息、文件信息和网络信息

  • 现在,来自查找的威胁情报信息:指标名称、指标值、指标类型、指标描述等

让我们试试看!

为了真正展示 ES|QL 和 LOOKUP JOIN 的强大功能,让我们重新审视一些安全场景,在这些场景中,连接数据将发挥最大的作用。

使用 AI 助手来引导 首先,使用 AI 助手总是有帮助的。我们可以请求助手首先解释更多关于 ES|QL LOOKUP JOIN 的内容,然后请求帮助为警报添加当前用户的风险评分。让我们来看看!

使用 AI 助手来引导进行 Alerts 丰富

注意:请使用最新版本的 Elastic Security,以获得最新的 AI 助手安全体验。

警报分类示例

让我们继续使用警报分类的场景。在查看安全警报时,分析师总是在寻找优先排序的方法,为什么不关注那些拥有特权访问的用户呢?我们将查看 Windows 系统上的警报,然后在 Entity Analytics Active Directory 集成中查找结果,查看特权组成员。

%title插图%num

其他示例可以专注于使用 MITRE ATT&CK™。我们将利用 Elastic 实体风险评分来优先排序生成跨多个 MITRE ATT&CK 战术(初始访问、持久性、防御规避等)警报的关键主机。

%title插图%num

威胁狩猎查询

现在,假设我们没有警报,需要使用 LOOKUP JOIN 来进行狩猎。回想一下,Elastic 的核心理念是开放性。我们通过以下仓库提供了我们的检测规则,Elastic Security Labs 团队甚至扩展了这一点,加入了威胁狩猎内容。欲了解更多信息,请阅读如何提升你的威胁狩猎

让我们从一个威胁狩猎查询开始,比如通过 Run Keys 实现的 Windows 持久性(Windows Persistence via Run Keys)。如果我们通过与资产信息的连接来丰富这些查询呢?在这种情况下,我们将从预构建的威胁狩猎查询开始,然后通过扩展日期范围和查看所有持久性示例来进行微调。接着,通过添加实体查找,我们可以找到主机的资产位置。

Threat hunting qtgcodeueries

如果你想进一步简化这个示例,我们可以将查询减少到查看所有启动过程,并执行 LOOKUP JOIN,如之前那样,我们可以看到资产位置。

%title插图%num

利用本地工具技术

许多威胁狩猎者搜索 “本地工具执行”(living off the land)进程执行,这代表了系统上可用的本地工具,这些工具可以执行任意代码。尽管管理员可能出于良性原因使用这些工具,但攻击者可以利用这些进程来规避检测。现在,通过 LOOKUP JOINS,我们可以为我们的威胁狩猎创建这些文件的列表。这个工作流允许我们不断将新进程添加到我们新创建的 LOOKUP 索引中,同时保留查询的逻辑。

1. 首先创建 LOOKUP 索引。这里是一个示例:

PUT /lolbins-lookup
{
 "mappings": {
   "properties": {
     "process.name": {"type": "keyword"},
     "lolbin": {"type": "boolean"}
   }
 },
 "settings": {"index.mode": "lookup"}
}

2. 然后,我们可以通过批量上传将数据添加到索引中

POST /_bulk
{ "index" : { "_index" : "lolbins-lookup" }}
{ "process.name" : "powertgcodeshell.exe", "lolbin": true }
{ "index" : { "_index" : "lolbins-lookup" }}
{ "process.name" : "cmd.exe", "lolbin": true }
...

3. 现在,我们可以通过 LOOKUP JOINS 在网络中搜索 “living off the land processes” 的进程!

这意味着我们可以使用 LOOKUP 来与指标列表进行匹配。请记住,LOOKUP 索引可以更新,因此当你发现更多的 “living off the land processes” 技术时,只需将其添加到索引中,便无需更改查询或执行加值策略即tgcode可看到新的结果。

%title插图%num

总结

LOOKUP JOIN 在许多安全工作流中已经证明了其极大的实用性,但这只是开始。如 Elasticsearch 博客中所述,这种类型的连接最接近于 SQL 风格的 LEFT OUTER JOIN,除了改善整体用户体验外,我们还计划扩展连接功能(例如 INNER 连接)。此外,这项功能还使其他搜索语言的语法转换成为可能。请阅读我们最近的博客,了解更多有关自动迁移的信息!

总结一下,这种新的连接功能是安全分析师工具箱中的另一个工具,Elastic 搜索 AI 技术提供了许多先进的技术来保护您的数据免受攻击。这包括生成式 AI、机器学习、聚合、加值、基于序列的关联等等。继续关注更多更新和信息!体验 Elastic Security 最快、最简单的方式是在 Elastic Cloud Serverless 上。立即试用

本博客中描述的任何功能或功能的发布和时机由 Elastic 单独决定。任何当前不可用的功能或功能可能无法按时或根本不交付。

在本文中,我们可能使用或引用了第三方生成式 AI 工具,这些工具由各自的所有者拥有和运营。Elastic 对这些第三方工具没有控制权,也不对其内容、操作或使用负责,也不对因使用这些工具而产生的任何损失或损害承担责任。在使用 AI 工具处理个人、敏感或机密信息时,请务必谨慎。您提交的任何数据可能会用于 AI 训练或其他用途。我们无法保证您提供的信息会保持安全或机密。使用任何生成式 AI 工具之前,您应了解其隐私政策和使用条款。

Elastic、Elasticsearch 和相关标志是 Elasticsearch N.V. 在美国及其他国家的商标、标识或注册商标。所有其他公司和产品名称是各自所有者的商标、标识或注册商标。

原文:Threat hunting in Elastic with JOINs! | Elastic Blog

文章来源于互联网:在 Elastic 中使用 JOIN 进行威胁狩猎!