Windows协议

NTLM协议

NTLM协议是微软用于Windows身份验证的主要协议之一。NTLM协议既可用于工作组中的机器身份验证,又可用于域环境身份验证,还可为SMB、HTTP、LDAP、SMTP等上层微软应用提供身份验证

SSPI和SSP的概念

SSPI(Security Support Provider Interface),即 安全服务提供接口,这是 Windows 定义的一套接口,该接口定义了与安全有关的功能函数

SSP(Security Service Provider),即 安全服务提供,它是 SSPI 的实现者,是对 SSPI 相关功能函数的具体实现。

LM Hash加密算法

LM是微软推出的一个身份认证协议,使用的加密算法是LM Hash。LM Hash本质是DES加密。尽管LM Hash较容易破解,为了保证兼容性,Windows只是禁用了LM Hash,Windows从Windows VistaWindows server 2008开始,Windows默认禁用使用LM Hash。

LM Hash的密码限定为14位。

如果LM Hash的值为aad3b435b51404eeaad3b435b51404ee,说明LM Hash为空值或者被禁用了。

NTLM Hash加密算法

NTLM Hash算法是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法,它是基于MD4加密算法进行加密的。

  1. NTLM Hash的加密流程

    1. 将用户密码转换为十六进制格式

    2. 将ASCII编码的十六进制格式的字符转为Unicode编码

    3. 对Unicode编码的十六进制字符串进行标准的MD4单向Hash加密

  2. Windows系统存储的NTLM Hash

    用户的密码经过NTLM Hash加密后存储在C:\\Windows\\system32\\config\\SAM文件中

    系统将用户输入的密码转换为NTLM Hash,然后与SAM数据库中的NTLM Hash进行比较,如果相同,则说明密码正确,反之则密码错误。

    用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登录界面,也就是输入框,接收输入后,将密码交给lsass.exe进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,与SAM数据库比较和认证。

NTLM协议认证

  • NTLM协议是一种基于Challenge/Response(质询/响应)的验证机制,由三种类型消息组成:

  • NTLM v1和NTLM v2的不同:

工作组下的NTLM认证

response信息为NTLM Hash对Challenge值进行加密后得到

域环境下的NTLM认证

response信息为NTLM Hash对Challenge值进行加密后得到

LmCompatibilityLevel

LmCompatibilityLevel值用来确定网络登陆使用的质询/响应身份验证协议。此选项会影响客户端使用的身份验证协议的等级、协商的会话安全的等级以及服务器接受的身份验证的等级。

NTLM协议的安全问题

Pass The Hash(哈希传递攻击)

在Type 3消息中是使用用户密码hash进行计算,因此,在没有拿到用户密码的明文而只拿到hash的情况下,可以进行PTH攻击,也就是常说的哈希传递攻击。

Pass the hash攻击是内网横向移动的一种方式。由于NTLM认证过程中使用的是用户密码的NTLM Hash进行加密,因此只要获取到了用户密码的NTLM Hash而没有解出明文时,可以利用NTLM Hash进行哈希传递攻击,对内网其他机器进行Hash碰撞,碰撞到使用相同密码的机器。然后通过135或445端口横向移动到使用该密码的其他机器。

NTLM Relay(NTLM中继攻击)

在Type3消息中,存在Net-NTLM Hash,当获取到了Net-NTLM Hash后,可以进行中间人攻击,重放Net-NTLM Hash。

Net-NTLM v1 Hash破解

由于NTLM v1协议加密过程存在天然缺陷,因此可以对Net-NTLM v1 Hash进行破解,得到NTLM Hash后即可进行横向移动。

具体查看P24页

Kerberos协议

是一种在开放的非安全网络中认证并识别用身份信息的方法。它旨在使用密钥加密技术为客户端/服务端应用程序提供强身份验证。

kerberos基础

三个角色

在kerberos协议中,主要有以下三个角色:

  1. 访问服务的客户端

    kerberos客户端代表需要访问资源的用户进行操作的应用程序,每个kerberos客户端在访问资源前都会请求身份验证

  2. 提供服务的服务端

    域内提供服务的服务端,服务端都有唯一的SPN(服务主体名称)

  3. 提供认证服务的KDC

    Key Distribution Center,密钥分发中心。KDC是一种网络服务,他向活动目录域内的用户和计算机提供会话票据和临时会话密钥,其服务账户为krbtgt。KDC作为活动目录域服务的一部分运行在每一个域控上。

    krbtgt账户存在于域控中,是创建活动目录时系统自动创建的一个账户,其作用是KDC(密钥分发中心)的服务账户,其密码时随机生成,无法登陆

认证流程

kerberos是一种基于票据的认证方式,客户端想要访问服务端的某个服务,首先需要购买服务端认可的ST(服务票据),但是在其之前需要请求一张TGT(认购凭证)。TGT和ST均是由KDC发放。

Kerberos使用TCP/UDP**88端口进行认证,使用TCP/UDP464**端口进行密码重设。

认证基本流程如下:

PAC

特权属性证书。PAC是由微软设计的,在域中不同权限的用户能够访问的资源不同的,而在标准的kerberos认证过程中并没有此项功能,为了解决权限问题,微软设计PAC用来辨别用户身份和权限。

在一个正常的kerberos认证流程中,KDC返回的TGT和ST中都是带有PAC的。

下面具体对认证流程进行分析

AS-REQ&AS-REP

AS-REQ中:

authenticator:是使用用户密码hash进行加密的时间戳。

cname:请求的用户名,这个用户名存在与否,返回的包是有差异的,可以用于域内用户名枚举。当用户名存在时,密码正确与否也会影响返回包,可以进行密码喷洒。

AS-REP中:

TGT中enc-part加密部分:是使用krbtgt的密码hash加密的。我们拥有其密码,就可以伪造TGT,称为黄金票据。

TGS-REQ&TGS-REP

TGS-REP中: ST中的enc-part:其使用服务hash进行加密。如果可以拿到ST,就可以破解ST,得到服务的hash。如果我们知道服务的hash,就可以伪造ST,实现白银票据。

S4u2Self&S4u2Proxy协议

为了在kerberos协议层面对约束性委派进行支持,微软对Kerberos协议扩展了两个自协议:s4u2self和s4u2proxy。

s4u2self可以代表任意用户请求针对自身的服务票据;s4u2proxy可以用上一步获得的ST以用户的名义请求针对其他指定服务的ST。

kerberos协议的安全问题

在 AS - REQ 阶段,使用的是用户密码 Hash 或 AES Key 加密的时间戳。当只获得了用户密码 Hash 时,发起 AS - REQ 会造成** PTH 攻击**;当只获得用户密码的 AES Key 时,发起 AS - REQ 会造成 PTK 攻击

AS - REQ 包中 cname 字段的值代表用户名,这个值存在和不存在,返回的包不一样,所以可以用于枚举域内用户名,这种攻击方式被称为域内用户枚举攻击(当未获取到有效域用户权限时,可以使用这个方法枚举域内用户)。当用户名存在,密码正确和错误时,返回的包也不一样,所以可以进行用户名密码爆破

在实战中,渗透测试人员通常会使用一种被称为密码喷洒( Password Spraying )的攻击方式来进行测试攻击。对密码进行喷洒式的攻击,这个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码喷洒通常是为了避免账户被锁定,因为针对同一个用户的连续密码猜测会导致账户被锁定,所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,从而避免账户被锁定。普通的爆破就是用户名固定,爆破密码,但是密码喷酒是用固定的密码去爆破所有的用户名。 在 AS - REP 阶段,由于返回的 TGT 是由 krbtgt 用户的密码 Hash 加密的,因此如果我们拥有 krbtgt 的密码 Hash 就可以自己制作一个 TGT ,这个票据也被称为黄金票据,这种攻击方式被称为黄金票据传递攻击。同样,在 TGS - REP 阶段, TGS REP 中的 ST 是使用服务的 Hash 进行加密的,如果我们拥有服务的 Hash 就可以签发任意用户的 ST ,这个票据也被称为白银票据,这种攻击方式被称为白银票据传递攻击。相较于黄金票据传递攻击,白银票据传递攻击使用的是要访问服务的 Hash ,而不是 krbtgt 的 Hash 。 在 AS - REP 阶段, Logon Session Key 是用用户密码 Hash 加密的。对于城用户,如果设置了" Do not require Kerberos preauthentication "(不需要预认证)选项,攻击者会向域控的88端口发送 AS _ REQ ,此时域控不会做任何验证就将 TGT 和该用户 Hash 加密的 Logon Session Key 返回。这样,攻击者就可以对获取到的用户 Hash 加密的 Logon Session Key 进行离线破解,如果破解成功,就能得到该用户的密码明文,这种攻击方式被称为** AS - REP Roasting **攻击。 在 TGS - REP 阶段,由于 ST 是用服务 Hash 加密的,因此,如果我们能获取到 ST ,就可以对该 ST 进行破解,得到服务的 Hash ,造成 Kerberoasting 攻击。这种攻击方式存在的另外一个原因是用户向 KDC 发起 TGS _ REQ 请求时,不管用户对服务有没有访问权限,只要 TGT 正确, KDC 都会返回 ST 。其实 AS _ REQ 中的服务就是 krbtgt ,也就是说这种攻击方式同样可以用于爆破 AS _ REP 中的 TGT ,但之所以没见到这种攻击方式是因为 krbtgt 的密码是随机生成的,爆破不出来。

LDAP

轻型目录访问协议

最后更新于

这有帮助吗?