使用 Elastic 提升您的威胁狩猎能力

Elastic 正在发布一个威胁狩猎软件包,旨在帮助防御者进行主动检测查询,以识别与攻击者无关的入侵。

阅读时长 13 分钟安全运营
Elevate Your Threat Hunting with Elastic

我们很高兴地宣布 Elastic 检测规则存储库中的一项新资源:一个由各种 Elastic 查询语言支持的狩猎查询集合!

这些狩猎查询可以在 Hunting 包下找到。此举旨在为我们的社区提供跨多个平台的专业威胁狩猎查询和资源,以补充我们强大的 SIEM 和 EDR 规则集。这些查询的开发与我们在 Elastic 威胁狩猎指南中讨论的范例和方法一致。

为什么进行威胁狩猎?

威胁狩猎是一种主动的安全方法,它涉及搜索那些逃避传统检测解决方案的隐藏威胁,同时假设存在漏洞。在 Elastic,我们认识到威胁狩猎在加强安全防御方面的重要性,并致力于促进这项关键活动。

虽然我们投入大量时间和精力来构建弹性检测,但我们理解,对恶意行为发出警报只是有效整体策略的一部分。威胁狩猎将重心移向左侧,从而能够采取更积极主动的方法来了解和保护环境。

其理念是,规则和狩猎查询将在许多方面相互补充。大多数狩猎也可以作为触发警报后的绝佳枢轴点,作为一种强大的手段来确定相关细节并描绘完整的画面。它们在分流和主动狩猎方面同样有用。

此外,我们经常发现自己编写的弹性且强大的逻辑不符合规则的标准,无论是太吵还是不够具体。这将成为以查询的形式保留这些研究成果价值的另一种手段。

我们提供什么

新的 Hunting 包提供了一系列广泛的狩猎查询,目标与我们的规则相同的所有环境,甚至可能更多,包括

  • 端点(Windows、Linux、macOS)
  • 云(CSP、SaaS 提供商等)
  • 网络
  • 大型语言模型 (LLM)
  • 任何其他增加价值的 Elastic 集成或数据源

这些查询由我们的安全专家精心制作,旨在帮助您收集在狩猎期间测试假设所需的初始数据。这些查询还包括名称和描述,这些名称和描述可能是您进行狩猎工作的起点。所有这些有价值的信息都存储在索引文件(YAML 和 Markdown)中,以便进行管理、易于使用并集中管理我们的狩猎查询集合。

狩猎包

狩猎包也已成为检测规则中的独立模块,其中包含一些简单的命令,可在整个狩猎查询目录中轻松管理和搜索。我们的目标不是提供开箱即用的狩猎工具,而是为以编程方式管理并最终利用这些狩猎查询奠定基础。

现有命令

生成 Markdown - 加载 TOML 文件或选择的路径,并转换为各个位置的 Markdown 表示形式。

刷新索引 - 从查询集合(包括 YAML 和 Markdown)刷新索引。

搜索 - 基于 MITRE 战术、技术或子技术 ID 搜索狩猎查询。还包括按数据源搜索的功能。

运行查询 - 针对特定堆栈运行选择的查询以识别命中(需要预先授权)。生成一个搜索链接以便轻松进行枢轴分析。

查看狩猎 - 以 TOML 或 JSON 格式查看狩猎文件。

狩猎摘要- 基于集成、平台或语言的分解生成计数统计信息

这些狩猎查询的优势

每个狩猎查询都将保存在其各自的 TOML 文件中以供编程使用,但也会有一个复制的 Markdown 文件,作为手动任务或审查的快速参考。我们理解,虽然自动化对于狩猎成熟至关重要,但狩猎人员通常可能希望快速轻松地复制粘贴作业,以揭示感兴趣的事件。我们的狩猎查询集合和 CLI 选项为新手和经验丰富的威胁狩猎人员提供了多项优势。库中的每个查询都旨在成为检测隐藏威胁的强大工具,并在事件响应期间提供额外的调查层。

  • 编程和手动灵活性:每个查询都以标准化的 TOML 格式进行结构化以供编程使用,但也为喜欢手动交互的用户提供了 Markdown 版本。
  • 可扩展的查询:我们的狩猎查询在设计时考虑到了可扩展性,利用了 Elastic 多功能且最新的查询语言(如 ES|QL)的功能。这种可扩展性确保您可以随着组织基础设施的增长不断调整您的狩猎工作,从而保持高水平的可见性和安全性。
  • 与 Elastic 产品集成:这些查询与 Elastic Stack 集成,我们的自动化使您可以快速测试,从而使您可以通过 Elastic 的安全 UI 进行深入分析。
  • 可用的各种查询类型:我们的狩猎查询支持各种查询语言,包括 KQL、EQL、ES|QL、OsQuery 和 YARA,使其可以跨不同的数据源和环境进行调整。无论是跨端点、云环境还是特定的集成(如 Okta 或 LLM)进行狩猎,用户都可以利用适合其独特需求的语言。
  • 扩展 Elastic 预构建规则的覆盖范围:虽然 Elastic 的预构建检测规则提供了强大的覆盖范围,但在某些情况下,由于特定环境或威胁的性质,供应商检测逻辑可能无法完全满足运营需求。这些狩猎查询通过提供更广泛和细致的覆盖范围(尤其是对于那些几乎不适合基于规则的检测的行为)来帮助填补这些空白。
  • 狩猎初始化或枢轴分析的垫脚石:这些查询是启动调查或从初步发现进行枢轴分析的初步方法。无论是主动用于识别潜在威胁,还是被动用于扩展触发的警报,这些查询都可以根据威胁狩猎者的假设和工作流程提供额外的上下文和见解。
  • MITRE ATT&CK 对齐:每个狩猎查询都包含 MITRE ATT&CK 映射,以提供上下文见解,并帮助根据威胁行为确定威胁调查的优先级。
  • 社区和维护:此狩猎模块位于更广泛的 Elastic 检测规则存储库中,确保与我们的预构建规则一起持续更新。社区贡献还使我们的用户能够协作并扩展独特的狩猎方式。

由于我们了解狩猎的快节奏性质和自动化的需求,因此我们添加了搜索功能和运行选项,以便快速确定您是否在此库中任何狩猎查询中都有匹配的结果。

每个狩猎分析的详细信息

我们存储库中的每个狩猎搜索查询都包含以下详细信息,以最大限度地提高其有效性和易用性

  • 数据源或集成:狩猎中使用的数据的来源。
  • 名称:狩猎查询的描述性标题。
  • 假设:狩猎旨在调查的潜在假设或威胁场景。这表示为描述。
  • 查询:以多种格式之一提供,包括 ES|QL、EQL、KQL 或 OsQuery。
  • 注释:有关如何在数据中进行枢轴分析、要关注的关键指标和其他有价值的见解的附加信息。
  • 参考资料:指向支持狩猎的相关资源和文档的链接。
  • 映射到 MITRE ATT&CK:狩猎如何与 MITRE ATT&CK 框架中已知的策略、技术和程序相关联。

对于那些喜欢动手操作的人,我们也提供 TOML 文件供程序化使用。此外,我们还为喜欢手动复制粘贴狩猎到其系统的用户提供了一个简单的 Markdown 转换器。

狩猎查询创建示例

在下面的示例中,我们将探讨一个基本的狩猎周期,目的是创建一个新的狩猎查询,以便在以后的狩猎周期中使用。请注意,这是一个过于简化的狩猎周期,在实际应用中可能需要更多步骤。

假设:我们假设威胁攻击者 (TA) 正以身份提供商 (IdP)(特别是 Okta)为目标,通过识别 CI/CD 管道中使用客户端凭据进行 Okta API 身份验证的运行时实例来危害云帐户。他们的目标是识别不安全的凭据,获取这些凭据并获得一个访问令牌,该令牌的假定凭据与 Okta 管理员相关联。

证据:我们怀疑为了识别此证据,我们需要 Okta 系统日志,该日志报告 API 活动,特别是任何公共客户端应用程序发送访问令牌请求,其中提供的授权类型是客户端凭据。我们还怀疑,由于 TA 不了解此应用程序的映射 OAuth 范围,因此当发送访问令牌请求时,可能会因为显式发送了不正确的 OAuth 范围而失败。我们也知道,在身份验证工作流程中,我们的客户端应用程序不需要演示拥有权证明 (DPoP),因为这样做会中断操作,因此我们优先考虑可操作性而非安全性。

下面是用于模拟尝试使用被盗的客户端凭据获取访问令牌的 Python 代码,其中范围是 okta.trustedOrigins.manage,以便攻击者可以添加新的跨域 (CORS) 策略并通过他们自己的服务器路由客户端身份验证。

import requests

okta_domain = "TARGET_DOMAIN"
client_id = "STOLEN_CLIENT_ID"
client_secret = "STOLEN_CLIENT_CREDENTIALS"

# Prepare the request
auth_url = f"{okta_domain}/oauth2/default/v1/token"
auth_data = {
    "grant_type": "client_credentials",
    "scope": "okta.trustedOrigins.manage" 
}
auth_headers = {
    "Accept": "application/json",
    "Content-Type": "application/x-www-form-urlencoded",
    "Authorization": f"Basic {client_id}:{client_secret}"
}
# Make the request
response = requests.post(auth_url, headers=auth_headers, data=auth_data)

# Handle the response
if response.ok:
    token = response.json().get("access_token")
    print(f"Token: {token}")
else:
    print(f"Error: {response.text}")

在此行为之后,我们制定了一个如下的狩猎查询,其中我们过滤掉了一些已知的客户端应用程序,例如 DataDog 和 Elastic 的 Okta 集成。

from logs-okta.system*
| where @timestamp > NOW() - 7 day
| where
    event.dataset == "okta.system"

    // filter on failed access token grant requests where source is a public client app
    and event.action == "app.oauth2.as.token.grant"
    and okta.actor.type == "PublicClientApp"
    and okta.outcome.result == "FAILURE"

    // filter out known Elastic and Datadog actors
    and not (
        okta.actor.display_name LIKE "Elastic%"
        or okta.actor.display_name LIKE "Datadog%"
    )

    // filter for scopes that are not implicitly granted
    and okta.outcome.reason == "no_matching_scope"

如下所示,我们识别出匹配的结果,并开始深入研究并进行调查,最终涉及事件响应 (IR) 并适当升级。

在我们的事后报告 (AAR) 中,我们记下了帮助识别这些受损凭据的查询,并决定将其作为狩猎查询保留在我们分叉的检测规则存储库中。基于此查询的保真度和我们对与 Okta API 交互的自定义应用程序进行的持续开发工作,创建检测规则并不完全有意义,因此我们将其保留为狩猎查询。

hunting/okta/queries 包中创建一个新的狩猎查询 TOML 文件,我们添加以下信息

author = "EvilC0rp Defenders"
description = """Long Description of Hunt Intentions"""
integration = ["okta"]
uuid = "0b936024-71d9-11ef-a9be-f661ea17fbcc"
name = "Failed OAuth Access Token Retrieval via Public Client App"
language = ["ES|QL"]
license = "Apache License 2.0"
notes = [Array of useful notes from our investigation]
mitre = ['T1550.001']
query = [Our query as shown above]

保存文件后,我们运行 python -m hunting generate-markdown FILEPATH 以在 hunting/okta/docs/ 中生成其 Markdown 版本。

保存后,我们可以使用 view-rule 命令查看我们新的狩猎内容,或者通过运行 search 命令进行搜索,指定 Okta 作为数据源,并指定 T1550.001 作为我们要查找的子技术。

最后但并非最不重要的一点是,只要我们保存一个包含 Elasticsearch 身份验证详细信息的 .detection-rules-cfg-yaml 文件,我们就可以使用 run-query 命令检查查询是否成功运行,这将告诉我们是否有匹配的结果。

现在我们可以使用 refresh-index 命令刷新我们的狩猎索引,并确保已创建我们的 Markdown 文件。

我们的扩展计划

我们的目标是通过额外的查询不断增强狩猎包,涵盖更广泛的威胁场景。我们将根据以下内容更新此资源

  • 新兴威胁:随着新型网络威胁的出现,开发新的查询。
  • 社区反馈:采纳社区提出的建议和改进。
  • 填补传统警报失败的空白:虽然我们了解我们高级 SIEM 和 EDR 的强大功能,但我们也了解某些情况下狩猎更有利。
  • 长期性和维护:我们的狩猎包与我们为 Elastic SIEM 积极管理开箱即用 (OOTB) 预构建检测规则的存储库位于同一位置。因此,我们计划定期添加和更新我们的狩猎资源。
  • 新功能:开发新功能和命令,以帮助用户管理其狩猎工作的存储库。

我们的扩展如果没有与社区其他成员分享,以尽可能提供价值,就不算完整。采用这些资源,甚至采用围绕威胁场景的范例,是我们团队帮助狩猎工作的一项重要努力。

最后,我们感谢并赞赏我们的行业同行和社区已完成或正在进行中的狩猎工作。我们也承认,维护这样一个狩猎分析和/或查询包需要一致性和仔细的规划。因此,此包将获得持续的支持,并随着时间的推移添加更多的狩猎查询,这些查询通常与我们的检测研究工作或社区提交的内容保持一致!

参与其中

探索狩猎资源,利用查询和 Python 包,参与我们的社区讨论论坛,分享您的经验并为该资源的演变做出贡献。您的反馈对于我们改进和扩展我们的产品至关重要。

结论

随着这些狩猎资源的扩展,Elastic 重申了其致力于推进网络安全防御的承诺。此资源专为经验丰富的威胁猎人和该领域的新手而设计,提供了有效检测和缓解复杂网络威胁所需的工具。

请继续关注更多更新,祝您狩猎愉快!