基于Windows Active Directory(AD)数据库与NTDS.dit文件内存内提取(DIT File In-Memory Extraction)与域控凭据无文件窃取及防护
字数 3531
更新时间 2026-02-24 18:33:23

基于Windows Active Directory(AD)数据库与NTDS.dit文件内存内提取(DIT File In-Memory Extraction)与域控凭据无文件窃取及防护

好的,我们开始讲解这个在域环境中极具威胁性的无文件攻击技术。

在Windows域环境中,Active Directory(AD) 是所有用户和计算机身份验证与授权的核心数据库。这个数据库物理上就存储在域控制器(Domain Controller, DC)上的一个文件中,即 NTDS.dit (New Technology Directory Services Directory Information Tree)。这个文件包含了域中所有的信息,其中最重要的就是用户的密码哈希值。

传统上,攻击者需要想办法把这个文件复制下来,带离域控制器,然后用工具(如John the Ripper)离线破解。但这会在硬盘上留下文件操作的痕迹。而“内存内提取”技术,则实现了真正的“无文件”化。

第一步:理解核心目标——NTDS.dit与密码哈希

首先,我们要明白攻击者想要什么。在域环境中,攻击者的终极目标往往是获取域管理员权限。一旦控制了一台域控制器,他们就能访问整个域。

  • NTDS.dit:这就像一个域的总数据库,包含用户对象、计算机对象、组策略等所有信息。
  • 密码哈希:为了验证用户登录,域控制器必须能在内存中处理用户的密码。Windows使用一种称为“哈希”的单向加密形式存储密码。当你登录时,系统会把你输入的密码进行哈希运算,然后与存储的哈希进行比对。NTDS.dit 文件里就存储着这些哈希。在域控制器运行时,为了处理身份验证请求,这些哈希信息(以及解密这些哈希所需的密钥)会被加载到 LSASS.exe 进程的内存中。

第二步:攻击原理——从“复制文件”到“读取内存”

传统的攻击是去硬盘上复制 NTDS.dit 文件。但这有几个问题:

  1. 文件被系统独占锁定,无法直接复制。
  2. 即使复制下来,文件是加密的,还需要同样存储在域控制器上的 SYSTEM 注册表项中的密钥才能解密。
  3. 操作文件会留下明显的痕迹。

“内存内提取”攻击巧妙地避开了这些问题。因为域控制器要工作,它必须把解密后的数据库结构和密码哈希(至少是可验证的形式)放在内存里。所以,攻击者的思路从“复制文件”转变为**“读取运行中的LSASS进程内存”**。

这个过程就像这样:

  1. 获得高权限:攻击者首先需要通过某种方式(例如,利用漏洞、窃取管理员凭证)在域控制器上获得系统权限(SYSTEM) 或至少是管理员权限。这是最关键的一步。
  2. 定位LSASS进程:LSASS(本地安全认证子系统服务)是存储凭证的核心进程。
  3. 提取内存数据:攻击者使用特殊工具,直接读取LSASS进程的内存空间。这些工具知道NTDS.dit的数据结构在内存中是如何排列的,因此可以精准地“捞出”用户列表和密码哈希。
  4. 无需文件落地:整个过程,攻击者只是读取了运行中的进程内存,没有在硬盘上写入任何文件。即使工具本身需要上传,也可以通过“无文件”的方式(如PowerShell脚本在内存中运行)完成。

第三步:深入技术细节——如何从内存中“捞出”哈希

这个过程远比简单的内存转储复杂。LSASS内存中的数据是动态、碎片化的。攻击者常用的技术有两种:

  1. 直接内存读取与解析

    • 像知名的 Mimikatz 工具,其 lsadump::dcsync 功能虽然名义上是利用目录复制服务(DRS)协议从另一个域控制器同步数据,但也有一些模块可以直接解析LSASS内存中的Active Directory数据库结构。
    • 更底层的工具,如 ntdsxtract 或一些自定义脚本,会先使用 procdump 等工具将LSASS进程的内存转储成一个文件(lsass.dmp)。然后,在攻击者的机器上离线分析这个内存转储文件,提取出NTDS.dit的片段和哈希。虽然“转储”这一步可能产生一个文件,但高明的攻击者会将转储数据通过网络直接发送出去,或在内存中直接分析,避免文件写入。
  2. 利用卷影副本(Volume Shadow Copy)的“无文件”变种

    • 这是一种混合技术。攻击者可以在不接触硬盘文件的情况下,通过WMI(Windows Management Instrumentation)或PowerShell创建一个系统卷的卷影副本。这个副本本质上是硬盘上某个时间点的“快照”,但它以虚拟形式存在。
    • 然后,攻击者可以直接从这个“虚拟”的卷影副本中读取 NTDS.dit 文件。虽然读取的是文件,但因为没有操作“活跃”的文件系统,且卷影副本可能被迅速删除,整个过程在硬盘上留下的直接痕迹很少。这被视为一种准“无文件”或“低文件”攻击。

第四步:攻击的完整杀伤链

让我们把整个攻击流程串起来:

  1. 初始入侵:攻击者通过钓鱼邮件、漏洞利用等方式,在域内的一台普通工作站上获得立足点。
  2. 权限提升与横向移动:攻击者在内网中进行侦查,利用各种手段(如Pass-the-Hash、Mimikatz抓取本地管理员密码)逐步提升权限,并横向移动到更多机器,最终获得一台域控制器的管理员权限。
  3. 关闭或绕过安全软件(可选):为了顺利执行,攻击者可能会尝试暂停或绕过域控制器上的EDR(终端检测与响应)或AV(防病毒)软件。
  4. 执行内存内提取:攻击者在域控制器上,以SYSTEM权限运行Mimikatz或类似工具,直接从LSASS进程内存中提取出域内所有用户的密码哈希。
  5. 凭据利用与后门植入:得到域管理员哈希后,攻击者就可以随时以合法身份登录任何域内机器。他们可能会创建一个隐藏的域管理员账户,或修改现有账户的权限,以实现持久化控制。
  6. 痕迹清理:攻击者清除日志,退出系统。整个过程,除了可能留下的网络连接日志,在域控制器的硬盘上找不到任何被攻击者写入的恶意文件。

第五步:如何检测与防护

面对这种高级威胁,防护需要多层次、立体化。

  1. 最小权限原则

    • 关键点:严格限制能够登录到域控制器的管理员数量。大多数日常管理任务不应直接在域控制器上完成。使用特权访问工作站(PAW)进行高权限操作。
  2. 开启高级安全审计与日志

    • 关键点:重点监控 事件ID 4663(尝试访问对象)。配置对LSASS进程(lsass.exe)的访问进行审计,任何非标准进程(如procdump.exetaskmgr.exe)尝试打开LSASS进程句柄的行为都应触发告警。
    • 监控PowerShell的 脚本块日志(Script Block Logging)模块日志(Module Logging),以发现潜在的恶意脚本活动。
  3. 启用受保护进程(Protected Process Light, PPL)

    • 关键点:Windows 8.1/Server 2012 R2及以后版本支持将LSASS配置为PPL。启用后,即使是SYSTEM权限的进程,也无法随意读取或注入LSASS的内存,除非它拥有合适的数字签名。这能有效阻止大部分Mimikatz等工具的直接内存读取。可以通过以下命令启用:
      reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "RunAsPPL" /t REG_DWORD /d 1 /f
      
    • 注意:这需要硬件和驱动程序的支持,部署前需要进行兼容性测试。
  4. 部署终端检测与响应(EDR)解决方案

    • 关键点:现代EDR产品能通过行为分析检测异常。例如,它能够识别出procdumplsass.exe的非法访问,或Mimikatz等工具在内存中的特征码和行为模式。
  5. Credential Guard

    • 关键点:Credential Guard利用基于虚拟化的安全(VBS)来隔离LSASS中存储的密钥和凭证。即使攻击者攻破了操作系统内核,也无法直接访问由虚拟化安全隔离的凭证数据。这能从根本上保护域控的密钥材料,防止哈希被轻易提取。
  6. 网络隔离与微隔离

    • 关键点:将域控制器置于一个高度隔离的网络段,严格控制对它的访问。即使用户工作站被攻破,攻击者也无法通过网络轻易连接到域控制器进行攻击。

总结一下,基于Windows Active Directory数据库与NTDS.dit文件内存内提取 的攻击,是“无文件攻击”在域环境下的终极体现。它直接针对运行时内存中的数据,使得传统的基于文件的检测方式失效。因此,防护必须转向基于行为、权限和系统加固的主动防御策略,特别是启用 LSASS 作为受保护进程(PPL)Credential Guard 是关键性的加固措施。

相似文章
相似文章
 全屏