本文中的图文内容均取自《域渗透攻防指南》,本人仅对感兴趣的内容做了汇总及附注。导航
注:NTLM Hash 和 NTLM 协议不是一个概念。NTLM Hash 是一种类似 MD5 的散列算法,而 NTLM 协议是一种类似 PAP 认证的认证协议。1.1、控制台
注:Windows 本地用户的密码在经过 NTLM Hash 处理之后均存储在 C:\Windows\ system32\config\SAM 文件中。当用户注销、重启、锁屏后,操纵体系会让 winlogon.exe 显示登录界面,也就是输入框。当 winlogon.exe 接收到输入后,会将密码交给 lsass.exe 历程,而 Isass.exe 历程会保存一份明文密码,然后将明文密码加密成 NTLM Hash 与 SAM 数据库进行比较和认证。
注: 使用 mimikatz 工具获得的用户 明文密码/NTML Hash 密码 就是在 lsass.exe 历程中抓取的。但现在微软已做了安全防护,lsass.exe 历程中已抓取不到明文密码,只能抓到 NTLM Hash 值。1.2、工作组环境
注:下面是以上身份验证流程普通化之后的表述。1.3、域环境
- 客户端向服务端发起一个认证哀求,此中包含用户名但无密码相关。
- 服务端返回给客户端一个响应,此中包含一个服务端随机生成的 Challenge 值。
- 客户端使用用户对应密码的 NTLM Hash 加密该 Challenge 值,得到加密值,然后将加密值发送给服务端。
- 服务端接收到加密值之后,也使用用户对应密码的 NTLM Hash 加密该 Challenge 值,然后和收到的加密值进行比对,相等则返回认证成功的响应,否则返回认证失败的响应。
注:下面是以上身份验证流程普通化之后的表述。1.4、NTLM 协议的安全问题
- 客户端向服务端发起一个认证哀求,此中包含用户名但无密码相关。
- 服务端返回给客户端一个响应,此中包含一个服务端随机生成的 Challenge 值。
- 客户端使用用户对应密码的 NTLM Hash 加密该 Challenge 值,得到加密值,然后将加密值发送给服务端。
- 服务端将接收到的加密值和挑衅值再发送给域控。
- 域控接收到加密值之后,也使用用户对应密码的 NTLM Hash 加密接收到的 Challenge 值,然后将结果与收到的加密值进行比对,相等则返回给服务端认证成功的响应,否则返回认证失败的响应。【注意:域控环境下,全部域用户的账户密码均保存在域控的 C:\Windows\NTDS\NTDS.dit 文件中。 】
- 服务端再将收到的响应返回给客户端。
注:Kerberos 基于票据的认证方式有点类似于生存中去景区买票逛景点的场景。TGT 票据相当于身份证,ST 票据相当于景区门票。在 Kerberos 协议中,紧张有以下三个角色。
Kerberos 是西方神话传说地狱保卫三头犬的名字,之所以叫这个名字,是因为它必要三方共同到场才能完成一次认证。而这三颗脑壳映射在服务和生存中分别对应的是:
- 第一颗脑壳:对应的是域控 KDC 中的 AS 服务(Authentication Service)。类似于生存中的乡镇派出所,我们必要拿着户口本才能办理身份证。
- 第二颗脑壳:对应的是域控 KDC 中的 TGS 服务(Ticket Granting Service)。类似于生存中的景区售票处,我们必要拿着身份证才能办理景区门票。
- 第三颗脑壳:对应的是提供服务的服务端。类似于生存中的景区检票口,我们必要拿着景区门票才能成功进入。
注:下面是以上身份验证流程普通化之后的表述。2.2、TGS-REQ & TGS-REP
- 客户端向域控 KDC AS 发起 AS-REQ 哀求,哀求中包含:用户名、用户密钥 NTLM Hash 加密的时间戳等信息。【注:因域控拥有用户的密钥,因此可以解密出该时间戳进而确认对方的身份。】
- 域控 KDC AS 服务向客户端返回 AS-REP 响应,响应中包含:用户密钥 NTLM Hash 加密的 Logon Session Key、TGT 票据(而该票据中又包含着由 krbtgt 密钥加密的 Logon Session Key)等信息。【注:(1)因客户端拥有用户密钥,因此能够解密得到下一个验证流程的会话加密密钥 Logon Session Key 。(2)TGT 中 krbtgt 加密的内容会被下个流程中的 KDC TGS 服务解密(因为 TGS 也在域控上,同样也拥有 krbtgt 的密钥),从而获得下个验证流程的会话加密密钥 Logon Session Key ,同时也可证明该 TGT 就是 KDC AS 授予的。】
注意:TGS-REP 中 KDC 并不会验证客户端是否有权限访问服务端。因此,不管用户有没有访问服务的权限,只要 TGT 精确,均会返回 ST。
注:下面是以上身份验证流程普通化之后的表述。2.3、AP-REQ & AP-REP 双向认证
- 客户端向域控 KDC TGS 发起 TGS-REQ 哀求,哀求中包含:TGT 票据、Logon Session Key 加密的时间戳等信息。【注:因域控 TGS 服务拥有 krbtgt 用户的密钥,因此可以解密 TGT 票据得到此中的 Logon Session Key ,进而通过该密钥解密出该时间戳从而确认对方的身份。】
- 域控 KDC TGS 服务向客户端返回 TGS-REP 响应,响应中包含:Logon Session Key 加密的 Service Session Key、ST 票据(而该票据中又包含着由 服务密钥加密的 Service Session Key)等信息。【注:(1)因客户端已拥有 Logon Session Key,因此其能够解密得到下一个验证流程的会话加密密钥 Service Session Key 。(2)ST 中通过服务密钥加密的内容会被下个验证流程中的服务端解密(因为服务密钥就是服务启动账户,服务端自然是知道的),从而获得下个验证流程的会话加密密钥 Service Session Key ,同时也可证明该 ST 就是 KDC TGS 授予的。】
注:下面是以上身份验证流程普通化之后的表述。2.4、Kerberos 协议的安全问题
- 客户端向服务端发起 AP-REQ 哀求,哀求中包含:ST 票据、Service Session Key 加密的时间戳等信息。【注:因服务端拥有服务启动账户的密钥,因此可以解密 ST 票据得到此中的 Service Session Key ,进而通过该密钥解密出该时间戳从而确认对方的身份。】
- 服务端如果向客户端返回 AP-REP 响应,那么响应中会包含:**Service Session Key 加密的时间戳 **等信息。【注:因客户端已拥有 Service Session Key,因此其可以通过该密钥解密出该时间戳从而确认对方的身份。】
注:以上安全问题被攻击的条件条件分别如下。
哈希通报攻击:需获得用户的 NTLM Hash。
域用户名枚举攻击:拥有用户名字典即可。
密码喷洒攻击:拥有用户名和密码字典即可。
黄金票据攻击:需获得 krbtgt 用户的 NTLM Hash。
白银票据攻击:需获得服务启动账户的 NTLM Hash。
AS-REP Roasting 攻击:首先必要有域用户已关闭预身份验证功能,然后才能获得由域用户的 NTLM Hash 加密的 Logon Session Key,最后才能爆破该加密内容,从而获得用户的明文密码。
Kerberoasting 攻击:需先获得一域用户的凭证,然后才能获得域中已注册服务的 ST 票据,然后才能爆破获得服务启动账户的明文密码。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |