ActiveDirectory安全攻防(八)"

admin 2026-10-21 07:28:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Active Directory 安全攻防(八)

原创

寰宇秘阁
寰宇秘阁

寰宇密阁

2026年7月24日 10:00
安徽

在小说阅读器读本章

去阅读

一、dsamain

1.1 工具简介

dsamain 是随 Active Directory 域服务一同安装在域控制器上的内置命令行工具。它的核心功能是:将一个离线的 AD 数据库文件(ntds.dit)以只读 LDAP 接口的形式对外提供访问。

换句话说,dsamain 可以把一个静态的数据库快照\"复活\"为一个可查询的目录服务实例,管理员或攻击者可以使用标准的 AD 管理工具(如 Active Directory Users and Computers、LDP.exe、ADExplorer 等)连接到这个 LDAP 接口,像浏览正常运行的 AD 一样浏览数据库中的所有逻辑内容。

1.2 设计初衷与滥用场景

设计初衷:微软提供 dsamain 的目的是让管理员能够方便地查看 AD 数据库快照的历史状态,用于:

  • 比较不同时间点的 AD 对象变化
  • 在执行权威还原前确认需要恢复的对象
  • 审计历史配置

滥用场景:攻击者在通过 ntdsutil 快照或其他方式获取了 ntds.dit 文件后,可以使用 dsamain 将其挂载为 LDAP 服务,从而系统性地浏览数据库中的全部逻辑信息,包括:

  • 所有用户账户及其属性
  • 所有安全组及其成员关系
  • 组织单元(OU)结构
  • 计算机账户
  • 信任关系配置
  • GPO 链接信息

1.3 基本使用方法

dsamain 的典型启动命令如下:

dsamain -dbpath \"C:\\temp\
tds.dit\" -ldapPort 10389
参数 说明
-dbpath 指定离线 AD 数据库文件的路径
-ldapPort 指定 LDAP 监听端口(需避开已占用的 389 端口)

启动成功后,dsamain 会在指定端口上开启一个只读的 LDAP 服务。此时可以使用任何支持 LDAP 的工具连接到 localhost:10389 进行查询。

使用 AD 管理工具连接:

打开 Active Directory Users and Computers,右键点击根节点选择\"更改域控制器\",手动输入 localhost:10389,即可像浏览正常 AD 一样浏览快照中的内容。

使用 LDP.exe 连接:

连接 → 连接到服务器:localhost,端口:10389

1.4 只读特性

需要强调的是,dsamain 提供的是只读访问。通过这个接口无法修改数据库中的任何内容。但这并不意味着它对攻击者没有价值——恰恰相反,侦察(Reconnaissance) 是攻击链中至关重要的一环。


二、从 dsamain 中寻找高价值目标

通过 dsamain 浏览离线数据库,攻击者的核心目标是识别高价值账户和安全组,为后续的凭据提取和权限提升确定优先目标。

2.1 关键安全组

从管理员的角度来看,以下安全组是最需要保护的;从攻击者的角度来看,这些组的成员是最有价值的攻击目标:

安全组 风险说明
Administrators 域内置管理员组,对域控制器拥有完全控制权限
Domain Admins 域管理员组,对域内所有对象拥有广泛的管理权限
Enterprise Admins 企业管理员组,在整个林范围内拥有最高权限
Backup Operators 备份操作员组,成员可以备份和还原文件,包括 AD 数据库
域控制器计算机账户 DC 的机器账户本身拥有复制 AD 数据的权限

2.2 为什么 Backup Operators 特别值得关注

在上述安全组中,Backup Operators 往往被低估,但它实际上是一个极其危险的组。其成员拥有以下关键能力:

  • 备份文件的权限:可以读取系统上的任何文件,包括受 ACL 保护的文件(如 ntds.dit、SYSTEM 注册表 hive)
  • 还原文件的权限:可以将修改过的文件写回系统

这意味着 Backup Operators 的成员理论上可以:

  1. 备份(读取)AD 数据库文件
  2. 在离线环境中修改数据库内容(例如提升某个账户的权限)
  3. 将修改后的文件还原(写回)到域控制器

虽然在实际操作中,直接替换正在运行的 ntds.dit 文件会受到文件锁定的限制,但 Backup Operators 的备份权限本身就足以让攻击者获取数据库副本。

2.3 所有权接管能力

上述高权限组的成员还拥有一个关键能力:接管 AD 数据库中对象的所有权(Take Ownership)。

在 AD 的安全模型中,对象的所有者可以修改该对象的 ACL(访问控制列表),从而授予自己或其他账户任意权限。这意味着:

  • 即使某个对象的 ACL 明确拒绝了管理员的访问
  • 管理员仍然可以先接管所有权,再修改 ACL,最终获得完全控制权

这一机制在正常管理中是必要的安全保障,但在攻击场景中则成为了权限提升的重要手段。

2.4 侦察工作流

攻击者使用 dsamain 进行侦察的典型工作流如下:

1. 通过 ntdsutil 快照获取 ntds.dit
         ↓
2. 使用 dsamain 挂载为 LDAP 服务
         ↓
3. 枚举所有高权限安全组的成员
         ↓
4. 识别服务账户、特权账户
         ↓
5. 确定攻击优先级
         ↓
6. 使用专用工具提取目标账户的密码哈希

三、从离线数据库提取密码哈希

dsamain 提供的 LDAP 接口虽然可以浏览逻辑信息,但无法直接读取密码哈希(密码属性在 LDAP 查询中不可见)。要提取密码哈希,需要使用专门的离线数据库解析工具。

3.1 常用工具

以下是两个经典的开源工具,均可在 Kali Linux 等渗透测试平台上使用:

NTDSXtract

  • 项目地址:https://github.com/csababarta/ntdsxtract
  • 功能:从 AD 数据库中提取用户账户信息和密码哈希
  • 工作原理:直接解析 ESE 数据库格式,读取存储在 datatable 中的账户数据

LibEseDB

  • 项目地址:https://github.com/libyal/libesedb
  • 功能:通用的 ESE(Extensible Storage Engine)数据库解析库
  • 工作原理:提供底层的 ESE 数据库读取能力,可以导出数据库中的表和记录

3.2 典型提取流程

使用这些工具提取密码哈希的一般流程如下:

步骤 1:使用 libesedb 导出数据库表
    esedbexport ntds.dit

步骤 2:使用 NTDSXtract 解析导出的数据
    dsusers.py <datatable> <link_table> --syshive SYSTEM --passwordhashes --lmoutfile LM.out --ntoutfile NT.out

步骤 3:获得所有账户的 NTLM 哈希

3.3 其他主流工具

除了上述两个工具外,安全社区还开发了更多现代化的替代方案:

工具 说明
Impacket secretsdump.py Python 工具,可直接从 ntds.dit + SYSTEM 提取哈希,使用最为广泛
DSInternals PowerShell 模块,提供 Get-ADDBAccount 等 cmdlet,功能全面
mimikatz 支持 lsadump::dcshadow 等多种 AD 攻击模式

以 secretsdump.py 为例:

secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

该命令会输出所有账户的用户名和 NTLM 哈希,格式如下:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy:::

四、防御建议

4.1 监控 dsamain 的使用

dsamain.exe 在正常运维中使用频率极低。任何 dsamain 进程的启动都应该触发安全告警:

监控规则:
- 进程名称:dsamain.exe
- 关注参数:-dbpath、-ldapPort
- 告警级别:高

4.2 保护高权限组成员资格

  • 定期审计 Administrators、Domain Admins、Enterprise Admins、Backup Operators 的成员
  • 遵循最小权限原则,避免将不必要的账户加入高权限组
  • 特别关注 Backup Operators 组——许多组织忽视了这个组的风险

4.3 保护数据库文件和备份

防护层面 具体措施
磁盘加密 对域控制器启用 BitLocker
备份加密 确保 AD 备份文件本身经过加密存储
备份访问控制 严格限制谁可以访问备份存储位置
快照清理 定期检查并删除不必要的 VSS 快照

4.4 纵深防御思维

保护 AD 数据库需要多层防御:

第一层:防止攻击者获取域控制器的管理权限
第二层:即使获取了管理权限,通过监控检测异常操作
第三层:即使数据库被提取,通过强密码策略增加破解难度
第四层:即使哈希被提取,通过定期轮换密码缩短有效窗口

五、总结

dsamain 工具将离线的 AD 数据库文件转化为可通过标准 LDAP 工具浏览的只读目录服务,使攻击者能够系统性地识别高价值目标账户和安全组。结合 NTDSXtract、LibEseDB、secretsdump.py 等哈希提取工具,攻击者可以从离线数据库中获取所有域账户的密码哈希。

dsamain 和各类哈希提取工具的存在提醒我们,AD 数据库一旦落入攻击者手中,其中的所有信息——从组织结构到密码哈希——都将完全暴露。保护 AD 数据库文件本身,与保护 AD 的逻辑权限配置同等重要。


ActiveDirectory安全攻防(八)" 网络安全文章

ActiveDirectory安全攻防(八)"

本文详细介绍了dsamain工具将离线AD数据库挂载为LDAP服务进行侦察的方法,攻击者可借此识别高价值账户与安全组,并利用secretsdump.py等工具提取密码哈希。防御建议包括监控dsamain使用、保护高权限组成员资格、加密数据库文件及实施纵深防御策略。
重磅国家级APT预警|欧盟官方实锤Turla(蛇毒)间谍团伙!深耕22年专攻政企外交,P2P无特征后门全网潜伏" 网络安全文章

重磅国家级APT预警|欧盟官方实锤Turla(蛇毒)间谍团伙!深耕22年专攻政企外交,P2P无特征后门全网潜伏"

欧盟实锤Turla间谍APT长期渗透政企外交。其Kazuar工具采用P2P架构,仅单机外联,实现无文件内存驻留与隐蔽窃密,传统防护失效。文章拆解其全链路手法,提供流量审计、EDR监测及内网微分段等自查清单,建议政企升级内存检测与全域流量分析纵深防御体系。
Go里一个简单的goroutine资源池,到底解决了什么问题" 网络安全文章

Go里一个简单的goroutine资源池,到底解决了什么问题"

本文讨论了Go语言中goroutine数量激增导致数据库连接池超时的问题,并提出了一个简单的固定worker数量任务池解决方案。该方案通过固定worker数量、任务队列和非阻塞提交来限制并发,避免过载。文章强调了监控队列长度、拒绝次数和任务耗时的重要性,并提供了panic恢复机制。核心在于将过载变为可观察、可处理的结果,而非单纯复用goroutine。
评论:0   参与:  0