如何在 Active Directory 环境中检测 Bloodhound 的 SharpHound 收集器和 LDAP 侦察活动完成的枚举。我们将通过创建一些诱饵帐户(或蜂蜜帐户)并将它们与真实帐户混合来使用欺骗来检测这一点。诱饵帐户是为欺骗目的而创建的帐户,也用于防御以检测恶意行为。MITRE在其工具和技术中涵盖了Bloodhound和域枚举。
Active Directory 是一个集中式数据库,用于描述公司的结构并包含有关不同对象(如用户、计算机、组和)的信息。以及它们在环境中的相互关系。在活动目录中,可以创建用户帐户、组帐户、服务帐户、计算机帐户等形式的诱饵帐户。可以添加相关详细信息,使系统、服务、组等看起来更逼真。并且在枚举 Active Directory 对象数据时,它还会枚举诱饵帐户,并可用于在发生侦察活动时发出警报。
Bloodhound 是一种通常被攻击者用来直观地映射组织的 Active Directory 结构并对其进行分析以发现其弱点的工具。能够分析 Active Directory 对于攻击者确定组织中哪些对象值得攻击非常有用。Active Directory 域中的任何用户都可以查询其组织在域控制器上运行的 Active Directory。
Bloodhound 使用称为 SharpHound 的收集器,通过运行大量 LDAP 查询来收集 Active Directory 中的信息来收集各种数据。
在上面的截图中,我们可以看到 Sharphound 已经枚举了 Active Directory 中的 222 个对象,并将结果保存在压缩文件中。一旦包含所有 Active Directory 对象、组、会话、信任等结果的压缩文件被收集并导入 Bloodhound,它就会使用图论进行数据可视化,在后端运行 Neo4j 图形数据库。将收集到的数据导入 Bloodhound 后的输出类似于以下屏幕截图中显示的数据。
现在,攻击者使用从 Active Directory(使用 SharpHound)收集的信息来理解 AD 数据并对其进行分析以了解目标组织的 AD 结构,并找出各种有趣的事实和快捷路径以访问域管理员和不同主机上的用户权限等。
在后端,Sharphound 使用 LDAP 查询从 Active Directory 收集数据,如您在代码中所见:
https://github.com/BloodHoundAD/SharpHound/blob/41516e778ea186e144e4494f2e070cdb9aa878b9/Sharphound2/Enumeration/LdapFilter.cs#L58
Sharphound 收集器查询所有 AD 对象的详细信息,包括所有启用的帐户、禁用的帐户、具有 SPN 的帐户、所有组织单位、组策略对象、AD 中的所有安全和非安全组、内置容器中的组等.
我们将查看它在后端运行的 LDAP 查询,并将尝试检测 Sharphound 枚举以及 LDAP 查询是否在没有 Sharphound 的情况下发送。
LDAP 查询
让我们看看 Sharphound 在后端运行的 LDAP 查询类型:
(|(|(samaccounttype=268435457)(samaccounttype=268435456)(samaccounttype=536870913)(samaccounttype=536870912)(primarygroupid=*))(&(sAMAccountType=80530!6369.150.16.Account.150.16.16.1530.530.530.150.5369.1530.530.1369.1530.1530.5369.1530.5369.15300610.5369) =2)))(|(samAccountType=805306368)(samAccountType=805306369)(samAccountType=268435456)(samAccountType=268435457)(samAccountType=536870913)(samAccountType=536870913)(samAccountType)(samAccountType)(samAccountType=805306369)(samAccountType=268435456)(samAccountType=536870913)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)(samAccountType)=(samAccountType)(samAccountType)=(samAccountType)(samAccountType)=(samAccountType)= flags=*))(objectcategory=organizationalUnit))(objectclass=domain)(|(samaccounttype=268435456)(samaccounttype=268435457)(samaccounttype=536870913)(samaccounttype=536870912)(samaccounttype)3(samaccounttype)306(samaccounttype)=268435456) =domain)(objectclass=organizationalUnit)(&(objectcategory=groupPolicyContainer)(flags=*)))(|(&(&(objectcategory=groupPolicyContainer)(flags=*))(name=*)(gpcfilesyspath=*))(objectClass=domain)(objectcategory=organizationalUnit))(&(serviceprincipalname=*)(samaccounttype=805306368)))
如果我们在没有 SharpHound 的情况下运行这些 LDAP 查询并使用 ADFind 之类的工具,它还会返回请求的数据:
在结果中,我们可以看到已经枚举了 222 个对象(与 Sharphound 相同),并且输出中包含所有详细信息:
配置 AD 环境
以下是我们将执行的任务:
- 创建一些 Active Directory 诱饵帐户
- 对这些帐户启用审计
- 运行 Bloodhound 的 Sharphound 工具
- 在活动目录环境中执行 LDAP 侦察活动
- 检测 Windows 事件日志中的活动。
创建诱饵来检测此类活动的原因是,当域枚举完成并枚举 Active Directory 对象数据时,它还包括诱饵帐户。创建诱饵帐户是为了确保我们仅在少数诱饵帐户上启用审计日志记录,而不是对所有对象启用审计日志记录,以最大限度地减少噪音。
首先,让我们确保正确配置 AD 环境并启用高级日志记录策略,这是完成此任务所需的。检测此枚举过程所需的唯一策略是目录服务访问审核策略。在域控制器上,它默认启用。如果它被禁用,我们可以使用 auditpol 命令在域控制器上启用它,如下所示:
以下是启用此所需的高级审计的命令:
代码语言:javascript复制auditpol /set /subcategory:”Directory Service Access” /Success:Enable
现在启用了所需的审计策略,我们现在将创建诱饵对象。让我们首先从诱饵用户对象开始。
创建诱饵用户对象
我们将从 Active Directory 用户和计算机 MMC(Microsoft 管理控制台)创建诱饵用户对象并为它们启用审核。为此,请执行以下步骤:
- 右键单击用户对象-属性-转到安全>高级>审核并添加新的审核条目
- 添加一个新的校长“每个人”
- 从“适用于”下拉菜单中,选择“仅此对象”
- 取消选中所有主要权限。
- 选择读取所有属性、读取权限。
- 单击确定以保存更改。
下面是如何使用 GUI 完成的图形表示:
这也可以使用 PowerShell 来完成:
代码语言:javascript复制New-ADUser -Name “Josh Austin” -GivenName “Josh” -Surname “Austin” -SamAccountName “Josh.Austin” -UserPrincipalName “Josh.Austin@threatlab.corp” -Path “OU=Managers,DC=threatlab,DC= corp” -AccountPassword(读取主机 -AsSecureString “请输入密码”)-启用 $true
注意: Read-Host 参数会要求您输入新密码。
创建诱饵计算机对象
我们将从 AD 用户和计算机 MMC 管理单元创建诱饵计算机对象。为此,以下是 AD 用户和计算机 MMC 的步骤:
- 右击计算机对象——属性——进入安全>高级>审计并添加一个新的审计条目
- 添加一个新的校长“每个人”
- 从“适用于”下拉菜单中,选择“仅此对象”
- 取消选中所有主要权限。选择读取所有属性、读取权限。
- 单击确定以保存更改。
下面是如何使用 GUI 完成的图形表示:
这也可以使用 PowerShell 来完成:
代码语言:javascript复制New-ADComputer -Name “THL-SRV2” -SamAccountName “THL-SRV2” -Path “OU=ApplicationServers,DC=THREATLAB,DC=CORP”
电脑账号创建完成后,可以使用Get-ADcomputer命令查看其属性,如下图:
创建诱饵组对象
我们还将从 AD 用户和计算机 MMC 创建诱饵组对象并为它们启用审核:
- 右键单击 IT Helpdesk — 属性 — 转到安全>高级>审核并添加新的审核条目
- 添加一个新的校长“每个人”
- 从“适用于”下拉菜单中,选择“仅此对象”
- 取消选中所有主要权限。
- 选择读取所有属性、读取权限。
- 单击确定以保存更改。
下面是如何使用 GUI 完成的图形表示:
这也可以使用 Powershell 来完成:
代码语言:javascript复制New-ADGroup -name “IT Helpdesk” -GroupScope Global
配置诱饵用户、组和计算机对象
模仿诱饵帐户以使其看起来与其他 Active Directory 对象一样逼真,这一点很重要。诱饵对象的命名约定应与正常的 Active Directory 帐户相匹配。我们还将在对象的公共属性中添加详细信息,如下所示:
- 在描述中添加详细信息,诱饵用户对象的组织属性
- 在计算机帐户的操作系统名称、版本和 DNS 名称属性中添加详细信息
- 如果是群组,请确保添加群组信息、添加成员并使其看起来合法。
运行 Bloodhound 的 Sharphound Collector
在配置环境并创建诱饵帐户后,我们现在将运行 SharpHound:
执行 LDAP 枚举
我们还将使用ADFind工具执行正常的 LDAP 枚举。AdFind 是一个免费的命令行查询工具,可用于执行 LDAP 枚举以从 Active Directory 收集信息。
检测(事件 4662)
任何与使用 Bloodhound 的 SharpHound 枚举 Active Directory 环境相关的活动以及由 ADFind 等工具为诱饵帐户执行的 LDAP 枚举都将记录在 Windows 安全事件中的事件 ID 4662下。
对诱饵组帐户的枚举尝试:
对诱饵计算机帐户的枚举尝试:
对诱饵用户帐户的枚举尝试:
注意:正如您在上面的屏幕截图中看到的,事件查看器显示了对象名称和对象类型的值,但是在转发事件时,Windows 不会转发日志中的对象名称值。相反,它转发对象名称和对象类型的对象 GUID 值,如下所示。
因此,在创建检测规则时,重要的是在用例中包含诱饵对象的对象 GUID 值,以便仅针对事件而不是环境中的其他 4662 事件发出警报。
示例 Spotter 查询:
代码语言:javascript复制resourcegroupname = “ms_windows-security” and baseeventid = 4662 and devicecustomstring1 = “Read Property” and filename = “%{afd7a537–221e-42bd-8063–29c751a32734}”
当对 GUID 为“%{afd7a537–221e-42bd-8063–29c751a32734}”的 AD 对象进行“读取属性”类型的访问尝试时,此类规则将导致事件,这意味着仅诱饵帐户。
结论
我们作为防御者的目标是破坏网络中的对手活动。并且使用欺骗,可以检测到对手的存在。可以添加更多欺骗内容以加强防御策略,例如诱饵网络共享等。
设计欺骗时的一些最佳实践是:
- 添加组名中带有 *Admin* 的诱饵组。因为攻击者通常在 LDAP 查询中搜索 *Admin* 以枚举高权限帐户
- 在重要的受保护以及域管理员中创建诱饵
- 创建诱饵网络共享并启用审计
- 将用户和计算机放在不同的 OU 中
- 创建计算机对象作为诱饵并分配不受约束的委派,因为对手希望这些帐户很有趣
- 总是为诱饵帐户创建又长又难的密码
- 如果在不同的地方有更多的诱饵账户,当侦察活动正在进行时,我们就会有更多的信息