此技术是一种通过秘密修改帐户以授予管理权限而不将其添加到本地管理员组来建立本地持久性的方法。我们将探讨如何执行此攻击,以及它在 Sysmon 和 Windows 事件日志中的样子。
介绍
本地持久性是红队成员和威胁行为者常用的一种策略,用于在重新启动后保持对受感染系统的访问。这种策略确保他们可以将被感染系统用作灵活的跳转箱,从而促进从 1 级感染转移到更深层次的 2 级感染。
在我们开始概念验证之前,让我们了解什么是 SID 和 RID 以及它在 Windows 系统中如何发挥作用。
了解相对标识符 (RID) 和安全标识符 (SID)
在 Windows 中,相对标识符 (RID) 是安全标识符 (SID) 的一部分,它唯一地区分域中的每个用户和组。管理员帐户的 RID 值为“500”,普通用户的 RID 值从“1000”开始。
安全标识符 (SID) 是 Windows 为每个用户、组或其他安全主体分配的唯一字符串。每个 SID 都是在建立帐户或组时创建的,用于控制对资源的访问并跟踪活动以达到安全目的。
如需进一步了解,请参阅Microsoft 官方页面的文档。
以下是普通用户的 SID 和 RID 的示例:
在 Windows 中实现 RID 的主要目的是高效管理用户和组标识,确保每个实体在网络上都能被明确识别。这对于拥有众多用户和组的大型组织尤其重要,因为在这些组织中,准确且安全地管理权限和访问控制至关重要。
现在,让我们来谈谈这项技术的工作原理。
RID 劫持:操纵帐户权限
在我们开始这项技术的概念验证之前,让我们首先了解红队成员或威胁行为者必须获得什么以及做什么才能发动这次攻击。
以下是执行此攻击所需的一些步骤:
第 1 级立足点- 攻击者必须完全破坏网络上的第 1 级机器或初始被破坏的机器,该机器将充当网络中其他机器的跳转箱。
系统权限- 此攻击需要系统级别权限才能更改 SAM 注册表配置单元。
恶意软件- 通过信标或恶意软件从远程主机控制受感染的系统。
随着讨论的深入,您将看到这些步骤如何应对这种类型的攻击。
RID劫持如何发挥作用?
此方法涉及一种本地持久性,攻击者可以修改用户的 SAM 配置单元条目的安全描述符 (SD)。相关 SAM 注册表项位于:
' HKLMSAMSAMDomainsAccountUsers '
SAM 注册表的此部分存储了关键值,一旦更改,系统便会欺骗用户授予普通用户管理员权限。此部分包含每个用户的十六进制格式的相对标识符 (RID)。例如,RID 为“ 500 ”的管理员显示为“ 01F4 ”。
“ F ”值特别重要,因为它包含 RID、时间戳和其他与用户相关的数据。一个关键点是 RID 位于 0x30 位置,如下图所示。由于小端格式,这是反转的。
因此,如果攻击者已经攻陷了计算机并获得了 SYSTEM 级权限,他们可以轻松修改数据并将管理员 (01F4) 的 RID 赋予他们想要提升权限的用户,而无需将其添加到本地管理员组。不错的技巧,对吧?
现在我们已经知道这项技术的工作原理,让我们开始实际操作以找出答案。
案例研究:RID 劫持概念验证攻击和检测
为了使这个主题更容易理解,我们将其分为以下阶段:
- 通过“网络用户”创建账户
- 通过“ wmic ”进行帐户枚举
- 通过“reg query”进行注册表查询
- 通过 ' reg add '添加注册表
- 现在,我们开始吧!
RID劫持:帐户创建
为了了解这种技术的工作原理,我创建了一个名为“ support01 ”的普通用户帐户,该帐户模仿技术支持帐户,以避免引起怀疑。
注意:我使用类似 RAT 的设置来执行此攻击,这意味着我有一个 C2 或远程服务器在监听并执行对受感染机器的命令。
如您所见,我已成功从远程 C2 服务器创建了一个帐户。
现在,为了检测这个用户创建阶段,我们将调查 Windows 事件日志 (WEL) 和 Sysmon 日志。
在 WEL 中,它会生成以下日志:
- 4656 - 已访问对象句柄(在本例中为 SAM)。
- 4690 - 尝试复制对象的句柄。
- 4658-对象句柄已关闭。
- 4663 - 尝试访问一个对象。
在 Sysmon 中,已生成以下日志:
1(进程创建)——此条目包含我从远程服务器执行的用户帐户创建命令,包括我们例子中的 SYSTEM 用户。
我们可以看到,Windows 事件日志可帮助我们识别与 SAM 注册表访问和 Sysmon 日志相关的日志模式,以找出计算机上执行了什么命令以及哪个用户执行了该命令。
RID 劫持:REG QUERY
现在,我已经创建了帐户,下一步是查询 SAM 注册表的值。
我使用 C2 与受感染的机器进行通信并执行查询命令。它如下所示:
“ 03EB ”是我最近创建的“support01”用户,如果将其转换为十六进制,则该值将是“1003”。
为了检测 REG QUERY,让我们检查此操作生成了什么日志。
在 WEL 中,它会生成以下与注册表相关的事件日志:
- 4690 - 尝试复制对象的句柄。
- 4658-对象句柄已关闭。
- 4656 – 已访问对象句柄。
- 4663 - 尝试访问一个对象。
当您仔细查看事件 ID 4656 时,它会告诉您哪个进程负责以及它执行了什么类型的操作。
令人惊讶的是,Windows 事件日志确实告诉了您有关该操作的一些信息。
但是,在 Sysmon 日志中它仅生成一个事件 ID:
- 1(进程创建)
不过,Sysmon 对该操作提供了简短而明确的解释,特别是命令行中的值。
RID劫持:数据修补实际应用
在前面的讨论中,我们已经执行了用户创建和注册表查询。
在此阶段,我们将用管理员的 RID(0x01F4)替换普通用户的 0x30 字节(support01、0x03EB)。不过,我们将从远程 C2 服务器执行攻击。
为了让您了解此执行在 C2 服务器中的样子,下面是执行的命令的片段。我们已成功使用管理员的 RID 修补了“F”的 0x30 字节。
在被感染的盒子中,我们可以通过检查普通用户的 SAM' 来查看实际修补的数据。
检查它是否继承了管理员的 RID,我们运行一个简单的“whoami /user”命令。
如您所见,它现在具有 RID 500(管理员)并且也添加到本地管理员组。
让我们看看 Windows 事件日志如何检测这一点。
在 WEL 中,该操作会生成相同的注册表日志模式:
- 4690 - 尝试复制对象的句柄。
- 4658-对象句柄已关闭。
- 4656 – 已访问对象句柄。
- 4663 - 尝试访问一个对象。
但请注意QUERY和ADD的访问请求信息部分之间的区别。
在 REG QUERY 中,它包含‘查询键值’和‘枚举子键’。
在 REG ADD 中,它包含以下内容:
然而,在 Sysmon 中它只生成了一个进程 ID 1。
这个日志最酷的地方是命令行值可以帮助我们检测数据修补。
检测:ELK 和 Splunk 查询
了解攻击是成功的一半,另一半是“如何”在我们的环境中检测到这种攻击。在本部分中,我们将列出分析师可以运行以检测此类攻击的可能的 ELK 和 Splunk 查询。同样,我们将根据上面执行的攻击阶段进行安排。
请注意,以下示例中使用的过滤器将根据您组织的威胁搜寻能力的成熟度而有所不同,因为它不同于并利用指示 SIEM 内所有字段的数据字典。
什么是数据字典?数据字典创建了一种统一的方法来对数据进行分类和标记,从而有效地开展威胁搜寻活动。它将数据源链接到组织中使用的分析。通过实施标准数据字典,团队可以提高检测环境中的对手的可见性,而不管其来源操作系统是什么。这些字典包含有关各种安全事件的详细信息(以事件日志表示),目的是为来自不同来源的数据建立标准化术语。
帐户创建:SAM 访问
ELK:
event_id: "4656" AND process_name: "C:\Windows\System32\lsass.exe" AND (accesses: "ReadPasswordParameters" OR accesses: "CreateUser" OR accesses: "LookupIDs")
Splunk:
index=* EventCode=4656 Process_Name="C:\Windows\System32\lsass.exe" (Accesses="ReadPasswordParameters" OR Accesses="CreateUser" OR Accesses="LookupIDs") | table _time, host, user, Process_Name, Accesses
注册查询
ELK:
event_id: "4656" AND object_name: "REGISTRY\MACHINE\SAM\SAM\Domains\Account\Users" AND process_name: "C:\Windows\System32\reg.exe"
Splunk:
index=* EventCode=4656 Object_Name="REGISTRY\MACHINE\SAM\SAM\Domains\Account\Users" Process_Name="C:\Windows\System32\reg.exe" | table _time, host, user, Object_Name, Accesses, Process_Name
REG 添加:数据修补
ELK:
event_id: "4656" AND object_name: "REGISTRY\MACHINE\SAM\SAM\Domains\Account\Users" AND process_name: "C:\Windows\System32\reg.exe"
Splunk:
index=* EventCode=4656 Object_Name="REGISTRY\MACHINE\SAM\SAM\Domains\Account\Users" Process_Name="C:\Windows\System32\reg.exe" | table _time, host, user, Object_Name, Accesses, Process_Name
检测:Sigma 规则
Sigma 规则是用于威胁检测和响应的强大工具。这些规则提供了一种标准化的方式来定义各种安全事件的搜索模式,从而更容易检测和响应不同 SIEM(安全信息和事件管理)系统中的威胁。通过利用 Sigma 规则,组织可以提高其检测能力,识别可疑活动(例如 RID 劫持),并实施一致的安全监控实践。
我们为执行 RID 劫持所需的步骤创建了 Sigma 规则。为了使本博客简洁,我们将仅包含数据修补部分。如果您对与帐户创建和注册表查询相关的 Sigma 规则感兴趣,您可以在以下位置找到资源:
https://github.com/SecurityBlueTeam/sigma-rules
这是检测 RID 劫持的 sigma 规则的一个示例,特别是数据修补部分。
title: Detect Data Patching in RID Hijacking
id: 56789012-5678-9012-5678-901256789012
description: Detects attempts to patch data in the registry for RID values indicating potential RID hijacking.
status: experimental
author: SBT RENMARC
date: 2024/06/11
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 1
Image: "C:\Windows\System32\reg.exe"
CommandLine|contains|all:
- "HKLM\SAM\SAM\Domains\Account\Users\*"
- " /v F"
- " /t REG_BINARY"
condition: selection
fields:
- EventID
- Image
- CommandLine
falsepositives:
- Administrative scripts
level: high
tags:
- attack.persistence
- attack.t1078.002
RID 劫持的影响和防御措施
RID 劫持可让攻击者提升权限并保持对系统的持久访问权限,从而带来重大安全风险。这种技术会损害系统完整性,因为未经授权的用户可以获得管理控制权,并且如果没有适当的查询或警报,他们就不会被发现。
为了检测和防止 RID 劫持,请实施最佳实践,例如定期审核帐户权限和监控事件日志以查找异常活动。使用 Sysmon 等工具进行高级日志记录,并使用组策略设置来实施严格的访问控制。系统强化策略包括禁用不必要的服务、应用最小权限原则以及定期更新安全补丁以减少漏洞。
原文始发于微信公众号(Ots安全):救命!有人偷了我的 RID:探索 RID 劫持 TTP
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论