目前,我们正在进行每月一次的内部安全测试,其中应包含对用户选择的真实密码强度的验证。出于这个原因,我想通过 LDAP 提取所有用户的密码哈希。我发现的一切都是这个technet 讨论告诉我,即使不是作为管理员,我也无法提取哈希值,我真的不能(不想)相信。
有没有办法从 Active Directory 服务器中提取密码哈希?
我们想要做的是提取哈希,尽管我们可以对它们进行音节攻击以验证密码是否真的或只是在技术上是好的。
目前,我们正在进行每月一次的内部安全测试,其中应包含对用户选择的真实密码强度的验证。出于这个原因,我想通过 LDAP 提取所有用户的密码哈希。我发现的一切都是这个technet 讨论告诉我,即使不是作为管理员,我也无法提取哈希值,我真的不能(不想)相信。
有没有办法从 Active Directory 服务器中提取密码哈希?
我们想要做的是提取哈希,尽管我们可以对它们进行音节攻击以验证密码是否真的或只是在技术上是好的。
您无需处理 DIT 文件即可从 AD 或 AD LDS 获取哈希,还有一些协议访问。
即使“userpassword”属性上的常规 LDAP 读取(就像您可以在其他目录产品上所做的那样)将始终在 AD 中完全被阻止,但还有另一种官方方法可以从 AD 或 AD LDS 读取哈希值,并且自至少 Server 2003。您需要使用特殊的 AD 访问权限(DS-Replication-Get-Changes-All)和正式记录的 Microsoft 协议(AD 复制协议)。这不是 Microsoft 内部机密,即使存在 3rd 方实现,例如:https : //www.dsinternals.com/en/retrieving-active-directory-passwords-remotely/(虽然这个链接有点过头了,声称这个成为黑客)-您不是用它来破解 AD 或 LDAP 协议,您是在事先手动授予默认情况下不存在的 AD 权限。
这种 DS-Replication-Get-Changes-All 权限的合法用途是 Microsoft Asure AD 密码同步 - 它通过传输哈希将您的公司 AD 密码与 Azure 云密码同步。您需要为此分配给 AD 帐户的特殊 LDAP 权限,称为“DS-Replication-Get-Changes-All” https://msdn.microsoft.com/en-us/library/windows/desktop/ms684355( v=vs.85).aspx
区别: DIRSYNC 控件也可以与另一个稍微不同的权限一起使用,称为“DS-Replication-Get-Changes”(最后没有“-All”)。最后没有“-All”的权限无法提取敏感密码哈希数据(有商业目录数据同步产品,如依赖该权限的 Microsoft MIIS/ILM/FIM/MIM。还有 READONLY 类型的域控制器用于 DMZ 使用没有“-All”的特权)
域控制器上的密码过滤器 DLL 或 PCNS 安装不使用这两个权限,也不授予对存储的 AD 哈希的访问权限。他们只允许将密码(在用户更改密码时)转发到某个外部处理目标,然后该目标将在公司内的第 3 方系统上设置相同的密码。
虽然密码过滤器 DLL/PCNS 只能在部署过滤器/PCNS 解决方案后同步用户更改的密码,但 Relication 与 DS-Replication-Get-Changes-All 还可以同步 AD 密码哈希在部署同步解决方案之前就已经存在。
这两种特权都不是邪恶的。如果使用不小心,它当然会产生很大的问题。但同样适用于您的 AD 中粗心的 ACL 更改,授予对您的 AD 的广泛远程访问权限,允许域和架构管理员对任何人等等......它是一扇敞开的门,如果你打开它。如果你不需要它,就不要打开那扇门。如果你确实打开了那扇门,然后适当地加固它,这样只有计划好的客人才能进入那扇门,触摸你珍贵的部分。
因此,这种从 AD 读取密码哈希机制的常规业务案例是将 AD 哈希同步到其他合法身份验证系统或将现有公司 AD 哈希迁移到其他第 3 方身份验证目录。(在这两种情况下,其他系统都必须能够理解哈希以进行身份验证)
您需要将NTDS.DIT
二进制文件从%SystemRoot%\ntds
.
您可以使用ntdsutil
创建 AD 数据库的快照,以便您可以复制NTDS.DIT
.
然后,您可以使用 Windows 密码恢复工具之类的工具来提取哈希值。
https://technet.microsoft.com/en-us/library/cc753343.aspx
https://technet.microsoft.com/en-us/library/cc753609(WS.10).aspx
所以,这整个推理有点疯狂。事后审核密码的正确性是个坏主意(因为您要么需要原始密码,要么需要可以有效地被彩虹表化的弱哈希),并且编写服务或工具来提取弱哈希容易出现严重错误或危险。不太重要的是,它是矫枉过正的,并且浪费了周期和资源。
更好的解决方案是只使用密码过滤器并验证密码更改是否满足最低要求,然后再允许用户实际进行更改。然后,如果您认真考虑保证复杂性,请使所有密码过期(尽管这可能会惹恼某些人)。
要远程提取密码,最好的解决方案是使用 DC SYNC (DRSUAPI) 技术。域控制器使用此协议来回同步其信息。如果您拥有域管理员凭据,则可以使用此协议从域控制器中获取所有哈希值。有两个简单的工具可以做到这一点:
对于 Windows:Mimikatz ( https://github.com/gentilkiwi/mimikatz )
有关如何使用它的说明和更多概述:https ://adsecurity.org/?p=1729
对于 Linux:Impacket,特别是 secretsdump.py 示例脚本 ( https://github.com/CoreSecurity/impacket )
使用说明:https ://room362.com/post/2015/using-domain-controller-account-passwords-to-hashdump-domains/
在这两种情况下,防病毒软件都会声明这些工具是恶意的,因为它们显然具有恶意的潜力,但这两种工具本质上都不是恶意的。