LDAP 枚举在 2025 年红队行动中仍然可行

admin 2025年5月30日00:56:57评论11 views字数 7158阅读23分51秒阅读模式

【翻译】LDAP Enumeration in 2025 – still viable for Red Teaming 

LDAP 枚举在 2025 年红队行动中仍然可行

目前有多种通过 LDAP 进行数据枚举的技术。在红队行动中 – 操作安全(OPSEC)对于避免被蓝队检测至关重要 – 近年来,由于监控和检测能力的提升,直接从 PowerShell 控制台运行 LDAP 查询变得越来越不切实际。

尽管如此,在这些限制条件下,仍然存在可行的 LDAP 枚举方法。其中一种方法在 Sabajete Elezaj 和 Daniel Bohannon 于 2024 年 8 月发表的 LDAP 混淆研究中有所概述 [1]。他们的工作展示了如何使用各种技术来混淆 LDAP 查询以规避检测。然而,即使进行了混淆,在 C2(Command and Control)信标中执行 PowerShell 命令仍可能带来重大的 OPSEC 风险。

多年来,社区在这个主题上发表了大量内容。我推荐的一篇博客是 MDSec 的 @domchell 于 2024 年 2 月发表的《红队 Active Directory 枚举》[2]。对于任何希望深入了解隐蔽 AD 枚举策略的人来说,这篇文章都值得一读。

在 2025 年春季,我使用多种 LDAP 枚举技术进行了测试,以评估哪些操作会触发 Microsoft Defender for Identity (MDI) 和 Microsoft Defender for Endpoint (MDE) 的警报。其中一些测试直接在客户端机器的 PowerShell 控制台上运行,而另一些则通过 Cobalt Strike 信标使用 TrustedSec 的 Situational Awareness 工具包中的 ldapsearch Beacon Object File (BOF) 执行 [3]。

当使用 ldapsearch BOF 时,可以从 Cobalt Strike 的日志文件中检索输出,并使用 BOFHound [4] 进行解析,该工具将结果转换为适合导入 BloodHound 进行后期利用分析的 JSON 格式。BOFHound 仓库还链接了包含所有技术细节的博客文章,以便复制此工作流程。

作为第三种方法,为了增加本文的多样性,我还探索了使用 Microsoft Excel 的 OleDB 提供程序直接执行 LDAP 查询 – 这是一种不太传统但有趣的隐蔽枚举向量。

用于这些测试的受害者客户端是一台完全打补丁的 Windows 11 客户端,启用了 MDE P2 许可证。MDI 阈值级别配置设置为所有设置的最低值:

LDAP 枚举在 2025 年红队行动中仍然可行

MDI 阈值设置

在下面的测试结果中,每个条目都包括执行的 LDAP 查询命令,以及来自 Microsoft Defender for Identity (MDI) 的相应检测结果。对于每个测试,我评估了两个关键方面:

  1. MDI 是否因查询而触发警报?
  2. 查询是否记录在 MDI 的 IdentityQueryEvents 表中,可通过 Microsoft Defender 门户中的高级搜索部分访问 [5]?

大多数查询都使用了各种 LDAP 混淆技术,旨在降低被 MDI 检测或记录的可能性。

使用原生 PowerShell 进行 LDAP 枚举

初始测试使用原生 ADSI PowerShell 查询进行,结合了基本的 LDAP 查询混淆技术。这些查询直接在 Windows 客户端的 PowerShell 控制台上执行,没有连接到任何命令与控制(C2)框架。

列出域管理员组

以下查询通过使用模糊名称解析、十六进制编码以及 ComparisonOperator 混淆来列出 Domain Admins 内置组(不包括其成员):

([adsisearcher]'(&(aNR=646F6D61696E Admi*asdfasdfasdf)(samaccounttype>=268435455)(samaccounttype<=268435457)(!(samaccounttype=268435455))(!(samaccounttype=268435457)))').FindAll()

注意:字符串 646F6D61696E Admi*asdfasdfasdf 转换为 Domain Admi*,其中十六进制值代表 ASCII 字符。在通配符后附加了随机字符串。正如 Daniel Bohannon 和 Sabajete Elezaj 在 2024 年的研究中强调的那样,在 LDAP 查询中使用模糊名称解析(Ambiguous Name Resolution, ANR)时,通配符(*)后的任何字符在查询执行时都会被忽略。这种行为可以用来混淆搜索词,同时仍然获取有效结果。

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

Domain Admins 组查询的 IdentityQueryEvents 记录

列出所有服务主体名称(Service Principal Names, SPN)

以下查询列出了所有配置了 ServicePrincipalNames 的账户,并使用了 ComparisonOperator 混淆技术:

([adsisearcher]'(&(&(samaccounttype>=805306367)(samaccounttype<=805306369)(!(samaccounttype=805306367))(!(samaccounttype=805306369)))(serviceprincipalname<=zzz))').FindAll()

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

列出用户

以下查询获取在特定日期之后创建的所有用户账户,并使用了带前导零的 OID 表示法:

([adsisearcher]'(&(1.2.840.113556.1.2.2>=20240101000000.0Z)(oId.001.02.000840.00113556.000001.04.302=805306368))').FindAll()

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

使用 ldapsearch BOF 进行枚举

接下来,我们通过 Windows 11 系统上的 C2 beacon 进行了一些 LDAP 枚举操作。如前所述,该系统已启用 MDE(Microsoft Defender for Endpoint)并具有 P2 许可证。

获取特定用户信息

以下查询通过给定的 samaccountname 列出用户详细信息:

ldapsearch "(&(objectCategory=person)(objectClass=user)(samaccountname=jdoe))"

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

列出所有启用用户

以下查询列出所有启用用户:

ldapsearch "(&(samAccountType=805306368)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

列出所有启用用户的 IdentityQueryEvents 记录

查询所有启用用户(使用基本 LDAP 混淆技术)

以下查询列出了所有启用用户,并使用了 ComparisonOperator 混淆技术:

ldapsearch "(&(&(samaccounttype>=805306367)(samaccounttype<=805306369)(!(samaccounttype=805306367))(!(samaccounttype=805306369)))(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

查询域对象

以下查询列出域对象:

ldapsearch (objectclass=domain) *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

列出域对象的 IdentityQueryEvents 记录

查询域对象(使用基本混淆技术)

以下查询列出域对象,并使用了逻辑 AND 和 NOT 运算符:

ldapsearch "(&(objectClass=domain)(!(objectClass=notdomain)))" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

列出所有计算机(使用 OID)

以下查询列出所有计算机,并使用 OID 编号代替对象名称:

ldapsearch "(2.5.4.0=computer)" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

列出所有计算机查询的 IdentityQueryEvents 记录

列出所有计算机(使用基本混淆技术)

以下查询列出所有计算机,并使用 HEX 编码和 OR 运算符进行基本混淆:

ldapsearch "(|(objectClass=636f6d7075746572)(objectClass=636f6d7075746572))" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

列出所有计算机查询的 IdentityQueryEvents 记录

列出所有计算机(使用更多混淆技术)

以下查询列出所有计算机,并组合使用 HEX 编码、AND、OR 和 NOT 运算符、OID 和 ComparisonOperator 进行混淆:

ldapsearch "(&(name<=zzzz)(!(UserAccountControl:1.2.840.113556.1.4.803:=2))(!(objectCategory=contact))(|(2.5.4.0=636f6d7075746572)(2.5.4.0=636f6d7075746572)))" *,ntsecuritydescriptor

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

通过 Excel OleDB 枚举 LDAP

在 Microsoft Excel 中,您可以使用 OleDB 提供程序连接到 LDAP 并直接从 Active Directory 查询数据。要进行设置,请打开一个新的 Excel 工作簿并导航到数据选项卡。从那里选择:

获取数据 → 从其他源 → 空白查询

这将打开 Power Query 编辑器,您可以在其中使用 OleDB 连接字符串定义和运行 LDAP 查询。

列出所有用户

以下查询列出所有用户:

OleDb.DataSource("provider=ADsDSOObject;Data Source=ldap://testlab.local;mode=Read", [Query="SELECT name,samaccountname,useraccountcontrol From 'LDAP://DC=testlab,DC=local' WHERE   #(lf)objectClass='user' AND objectCategory='Person'"  ])

Excel 中的结果列表:

LDAP 枚举在 2025 年红队行动中仍然可行

包含所有 AD 用户列表的 Excel 文件

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

LDAP 枚举在 2025 年红队行动中仍然可行

OleDB 查询列出用户的 IdentityQueryEvents 记录

列出所有组(使用基本混淆技术)

以下查询列出所有组,并使用 HEX 编码进行基本混淆:

OleDb.DataSource("provider=ADsDSOObject;Data Source=ldap://testlab.local;mode=Read", [Query="SELECT name, samAccountName, distinguishedName FROM 'LDAP://DC=testlab,DC=local' WHERE objectClass='g726f7570'"  ])

MDI 警报触发:否IdentityQueryEvents 中记录数据:是

列出域管理员(使用基本混淆技术)

以下查询列出 Domain Admins 组成员,并使用 HEX 编码进行基本混淆:

OleDb.DataSource("provider=ADsDSOObject;Data Source=ldap://testlab.local;mode=Read", [Query="SELECT name, samAccountName FROM 'LDAP://DC=testlab,DC=local' WHERE objectClass='user' AND objectCategory='Person' AND memberOf='CN=446F6D61696E2041646D696E73,CN=Users,DC=testlab,DC=local'"  ])

MDI 警报触发:否IdentityQueryEvents 中记录数据:否

限制查询结果

在大型环境中,通常建议限制 LDAP 查询返回的数据量,以避免生成过多或可疑的遥测数据,从而触发检测机制。

这可以通过某些工具的分页功能(如果支持)来实现。或者,您可以通过构建更具体的 LDAP 过滤器来手动控制查询范围。例如,使用 ComparisonOperator 可以应用条件来缩小结果范围 - 例如仅查询在特定日期之后修改的对象,或根据特定属性值进行过滤。

示例 1

实现此目的的一种方法是获取所有 samAccountName 以字母 A 开头的用户:

(&(samAccountName>=A)(samAccountName<=Azzzzzzz)(samaccounttype=805306368))

您可以使用 >= 和 <= 运算符在 LDAP 过滤器中定义范围。由于字母 "z" 在 ASCII 排序中位于末尾,在上限后附加多个 "z" 字符(例如 zzzzzz)有助于确保包含类似 "Azz..." 的条目。

示例 2

您还可以使用 whenCreated 属性来限制结果范围,例如查询在 2020 年 1 月 1 日至 2020 年 2 月 1 日期间创建的账户:

(&(whenCreated>=20200101000000.0Z)(whenCreated<=20200201000000.0Z)(samaccounttype=805306368))

添加自定义检测规则(Defender for Identity)

在 Microsoft Defender 门户的 Advanced Hunting(高级搜索)部分分析 MDI 相关表时,可以创建自定义检测规则来覆盖未触发内置 MDI 警报的 LDAP 查询。

为了确定 MDI 是否记录了特定 LDAP 查询的证据,我通常使用以下 Kusto 查询语言(KQL)查询:

IdentityQueryEvents| where Timestamp > ago(24h)| project Timestamp,QueryType,Query,DeviceName,DestinationDeviceName,AdditionalFields| sort by Timestamp desc

The Advanced Hunting interface also includes a convenient “Create detection rule” button, which allows you to directly convert your KQL query into a custom detection rule.

使用 Defender for Endpoint 检测 LDAP 枚举

Microsoft Defender for Endpoint (MDE) can also be leveraged to create custom detections based on LDAP activity. For example, the following KQL query retrieves all LDAP queries executed within the last 12 hours:

DeviceEvents whereingestion_time() >= ago(12h) where ActionType =~ "LdapSearch" | extend AdditionalFields=parse_json(AdditionalFields) | extend SearchFilter=tostring(AdditionalFields.SearchFilter) | project-reorder DeviceName, InitiatingProcessCommandLine, SearchFilter

参考文献:

  • [1] – https://github.com/MaLDAPtive/Invoke-Maldaptive
  • [2] – https://www.mdsec.co.uk/2024/02/active-directory-enumeration-for-red-teams/
  • [3] – https://github.com/trustedsec/CS-Situational-Awareness-BOF
  • [4] – https://github.com/coffeegist/bofhound
  • [5] – https://learn.microsoft.com/en-us/defender-xdr/advanced-hunting-identityqueryevents-table

原文始发于微信公众号(securitainment):LDAP 枚举在 2025 年红队行动中仍然可行

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月30日00:56:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LDAP 枚举在 2025 年红队行动中仍然可行https://cn-sec.com/archives/4113754.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息