Elastic 的检测工程既是一套可靠的原则(或方法),也是一套有效的工具。 在本系列中,我们将分享一些我们随着时间的推移发现的、用于提供弹性检测逻辑的基本概念。
在这篇博文中,我们将分享一个我们称为有状态检测的概念,并解释它对检测的重要性。
检测状态
最快的入门方式可能并不总是最好的,新的分析师倾向于直接进入利用后的细节,映射可用的数据源和逻辑片段。 很少有人考虑到某项技术的状态可能会影响可见性。 以下三个状态说明了一种以操作为中心的方法
- 创建状态:与配置或准备时检测可疑或关键活动有关(例如,创建或修改新的 Run 键注册表值以检测新的持久程序)
- 运行时状态:与执行时检测可疑或关键活动有关,这可能是自动化过程的结果(例如,在将程序添加到 HKLM RunOnce 键后,它将在系统启动时作为 RunOnce.exe 的子进程执行)
- 清理状态:一种特殊的运行时状态,与检测覆盖痕迹的主动和被动方法有关(文件、注册表删除和进程终止是所需的遥测示例;例如,删除启动项)
许多负责创建检测逻辑的组织都专注于给定的事件创建状态,但以下限制常常被忽视。
- 在执行时,对于已知的战术、技术和程序 (TTP) 会存在检测差距。 您很可能正在处理为这些 TTP 构建的创建状态检测逻辑,这意味着您只是在事后才发现这种行为。
- 对于那些勤于整理其存在的攻击者所使用的技术,也会存在检测差距,因为安全操作往往侧重于在入侵的早期阶段检测技术。
- 一种技术所需的遥测、数据和逻辑对于每种状态可能都不同,并且需要启用新的遥测或更改现有配置。
此概念的实际应用在检测专注于可预测结果的策略类别中的技术时最有效,例如持久性、防御规避(例如,用于代码注入的异常内存类型和保护)以及命令和控制(不寻常的进程网络流量)。
为了使这个概念更清楚,让我们探讨一个在持久性策略类别中使用T1015 - 辅助功能来设计检测逻辑的示例。 假设攻击者已在您实施针对它的检测逻辑的几个月或几周前,使用此技术(通过映像文件执行选项 - 调试器注册表值)启用了后门来执行。
图 1:映像文件执行选项调试器滥用的描述 (1)
映像文件执行选项 (IFEO) 用于调试合法的应用程序,并且可以被具有至少本地管理员权限的攻击者滥用,以通过调试器设置执行恶意程序(而不是合法程序)。 如图 2 所示,每次调用屏幕键盘 (osk.exe) 时都会执行 cmd.exe,从而为攻击者提供一个系统 shell 后门。
图 2:映像文件执行选项调试器滥用的描述 (2)
创建状态
在创建时,配置调试器值时,检测主要包括监视注册表的过滤子集,以查找对辅助功能的新引用(例如,屏幕键盘的 osk.exe)和注册表值名称 Debugger。 此技术对于图 3 中描述的其他辅助功能也有效。
图 3:辅助功能进程
EQL 是一种我们可以用来广泛描述任何技术的创建状态检测事件的语言。 图 4 描述了一个 EQL 规则,该规则演示了一个使用 IFEO 检测辅助功能的示例。
图 4:T1015 - IFEO 创建状态 EQL 示例
运行时状态
在创建时,这种 EQL 逻辑将有助于检测该技术,但是如果配置发生在几周或几个月前呢? 另一种 EQL 表达式更适合在运行时状态下检测该技术。 它从一点有重点的研究开始。
采用结构化方法来研究此状态可能会有所帮助
-
了解正常执行流程:手动执行每个辅助功能,记录正常的进程沿袭、属性和执行流程
-
记录一致的父进程、进程命令行参数、特权特征和进程沿袭
-
确定劫持机会
-
例如,虽然可以为 osk.exe 配置调试器,但是否可以为 osk.exe 的父级 utilman.exe 配置调试器?
-
搜寻独特的异常
-
确定 IFEO 调试器劫持的可观察特征,以区分合法和恶意使用此技术(例如,winlogon.exe 的异常子级可能是由代码注入引起的,与 T1015 无关)
-
创建运行时状态检测 EQL 规则,评估对任何创建状态检测 EQL 逻辑的潜在修复
让我们深入研究这些步骤中的每一步,以便您更好地了解如何调整此过程以与您自己的团队合作。
了解正常执行流程
对于 osk.exe、sethc.exe、magnify.exe 和 narrator.exe,预期的父进程是 utilman.exe。 图 5 描述了屏幕键盘辅助功能的正常进程树的可视化图。
图 5:正常屏幕键盘执行示例
对于可以通过按 SHIFT 键五次调用的 sethc.exe(粘滞键),预期的父进程是 ATBroker.exe、utilman.exe 和 winlogon.exe。 对于可以通过按 WIN 和 P 键调用的类似可调试的辅助功能 Displayswitch.exe,预期的父进程是 svchost.exe(DCOM 服务在 T1015 的上下文中无用)和 winlogon.exe。
当您开始探索不太期望的执行时,了解正常执行会有所帮助。 如果我们在分析正常行为之前直接跳转到MITRE ATT&CK®,然后尝试编写规则,我们将不会掌握一些必要的上下文,并且我们的逻辑效率会降低。
确定劫持可能性
当我们戴上仁慈的研究员帽子时,让我们考虑一下我们如何滥用这种正常的执行。 我们可以推断出至少几个选项
- 尝试通过配置调试器 IFEO 标志来滥用辅助应用程序的执行(例如,osk.exe、magnify.exe、narrator.exe)
- 尝试滥用预期的非系统关键父进程的执行(例如,utilman.exe、atbroker.exe),这有点像大海捞针
目前,这是一个范围相当狭窄的选项集;直接滥用辅助功能应用程序是简单明了的,也是一个很好的起点。
追踪独特的异常
我们需要为每个已知的辅助功能应用程序配置我们自己的 IFEO 调试器值,这有助于突出值得注意的工具痕迹。下表描述了当我们的良性 IFEO 调试器(设置为 cmd.exe)被触发时观察到的命令行参数和进程祖先。如图 6 所示,command_line 和 parent_process_path 值中存在一些明显的模式。
图 6:T1015 - IFEO 运行时状态异常 (1)
此模式可以转换为以下 运行时状态 检测,在图 7 中使用 EQL 进行描述。
图 7:T1015 - IFEO 运行时状态检测 EQL (1)
现在我们已经介绍了直接滥用,当我们尝试操作其中一个预期的父进程时会发生什么?图 8 包含一些尝试滥用辅助功能预期父进程的示例。
图 8:T1015 - IFEO 运行时状态异常 (2)
正如上图所示,相同的异常类型可以转换为图 9 中的 运行时状态 检测 EQL。
图 9:T1015 - IFEO 运行时状态检测 EQL (2)
提示: 在追踪查询中,对于过于宽泛的例外情况要小心。尽可能倾向于使用 PE 信息而不是进程元数据,并将其与签名状态结合起来,以获得唾手可得的结果。
图 10 描述了 运行时状态 警报的图形时间线,该警报可以检测到现有 T1015 后门的使用。
图 10:T1015 - IFEO 运行时状态警报示例
清理状态
此状态的检测逻辑通常与 创建状态 逻辑相反。下面是由 sysmon 记录的 osk.exe IFEO 密钥删除示例。
图 11:T1015 - IFEO 清理状态 sysmon 事件示例
我们应该从中吸取哪些重要的教训?
- 运行时状态 检测需要不同的数据(例如,在您的 sysmon 配置中为 utilman.exe 和 winlogon.exe 的子进程启用遥测,使用命令行值来区分异常子进程和 T1015 的独特工件)
- 清理状态 检测需要不同的数据(例如,注册表删除、进程终止)
- 通过添加 atbroker.exe 和 utilman.exe(也可以被滥用)来调整 创建状态 EQL 规则
超越基线
对于相同的技术,除了监视文件覆盖( 创建状态 )和伪装成辅助功能的进程( 运行时状态 )之外,我们还可以主动追踪和警报( 运行时状态 )任何不寻常的子进程(或可疑的非 Microsoft 映像加载,以检测 潜在的映像劫持),这些子进程属于辅助功能进程(osk.exe、narrator.exe、magnify.exe、sethc.exe 和 DisplaySwitch.exe)——其中大多数是 无子进程 的进程。
图 12:T1015 - 不寻常的辅助功能子进程
结论
在评估现有检测逻辑或设计新检测逻辑时,在将特定的攻击程序标记为已覆盖之前,请始终问自己一个特定的技术/过程如何在三种不同的状态下表现出来。这会影响您构建状态弹性检测所需的数据源类型和逻辑细节。
主动扫描现有匹配项以查找创建状态逻辑是一种选择(通常在入侵评估期间使用),但这不适用于近乎实时的检测。并非总是可以为特定状态创建检测(例如,高性能影响、难以获得正确的遥测数据)。通过在您的规则以及您的用例工程过程中形式化状态检测概念,您可以及时(未来和过去的匹配)增加检测覆盖范围。
想体验一下 Elastic Security 吗?立即免费试用,或在 Elastic Cloud 上的 Elasticsearch Service 上体验我们的最新版本。