NTLM协议

  1. NTLM协议
    1. SSPI和SSP的概念
    2. LM Hash算法
    3. NTLM Hash算法
    4. NTLM协议认证
    5. NTLM协议的安全问题
      1. 1.Pass The Hash
      2. 2.NTLM Relay
      3. 3.Net-NTLM v1 Hash破解
      4. Net-NTLMv1的利用思路

NTLM协议

相当于读书笔记吧,这下面都是我手打的,图也是我画的,手好痛。也确实有段时间没有更新博客了,主要是方向的转变,不过网安依旧是我的主要攻略目标好吧。

NTLM协议是微软用于Windows身份验证的主要协议之一。从早期的SMB到因为安全问题改成的LM再最后变成NTLM协议.NTML即可用于域环境身份验证,还可为SMB、HTTP、LDAP、SMTP等上层微软应用提供身份验证。

SSPI和SSP的概念

SSPI是Windows定义的一套接口,该接口定义了与安全有关的功能函数,包含但不限于,身份验证机制,为其他协议提供的Session Security机制。

但是SSPI只是定义了一套接口函数,并没有实现具体内容。

SSP是SSPI的实现者,微软自己实现了很多SSP,用于提供安全功能,下面介绍几个比较经典的。

NTLP SSP:windows NT 3.51中引入的,为windows2000以前的客户端服务器域和非域身份验证提供NTLM查询\响应身份验证。

Kerberos SSP:windows 2000中间引入,windows vista中更新为支持AES,为windows2000及更高版本中首选的客户端-服务器域提供相互身份验证。

Digest SSP:winows xp中引入,在windows系统与非windows系统间提供基于HTTP和SASL身份验证的质询/响应。

Negotiate SSP:windows2000中引入,默认选择Kerberos,如果不可用,则选择NTLM。

Cred SSP:windows vista中引入,为远程桌面连接提供单点登录和网络级身份验证。

Schannel SSP:windows 2000中引入,,后续更新为支持AES加密。

PKU2U SSP:windows 7中引入,在不隶属于域的系统之间提供数字证书的对等身份验证。

因为SSPI中定义了域Session security有关的API,所以上层应用题用任何SSP与远程的服务进行身份验证后,此SSP都会为本次连接生成一个随机的key,这个随机key被成为session key.在系统层面,SSP就是一个dll,用来实现身份验证.不同的SSP,实现的身份验证机制是不一样的,比如NTLM SSP,实现的是一种基于质询/响应的身份验证机制,而Kerberos SSP实现的是基于Ticket的身份验证机制。我们可以编写自己的SSP,然后注册到操作系统中,

image-20230113124624449

LM Hash算法

LM是微软退出的一个身份认证协议,使用的加密算法是LM HASH。虽然比较容易被破解,但是为了保证系统的兼容性,windows就知识将LM HASH禁用,(从Windows vista 和windows 2008开始就禁用了),LM HASH的明文密码被限定在14位以内,也就是说,如果要停止使用LM HASH,将用户的密码设置为14位以上就可以了。

LM HASH的加密流程如下

明文密码-全部改成大写-转为16进制-如果转换后的16进制字符串的长度不足14B(长度28),剩下的用0来补全。

随后,将14B分为两组,每组7B,然后转换为2进制数据,每组二进制数据的长度为56bit。

将每组二进制数据安7bit为一组,分为8组,每组末尾家0,在转换成十六进制。这样每组也就成了8B长度的十六进制数据了。

将上面生成的两组8B的十六进制数据,分别作为DES加密密钥,队字符串“KGS!@#$%”进行加密,然后将DES 加密后的两组密文进行拼接,得到最终的LM HASH。

NTLM Hash算法

从Windows vista和windows servers 2008开始,默认禁用了LM Hash的支持。也就是说,默认只存储了NTLM Hash的值。(用LM的基本只有三个 2000 XP server2002)

加密流程如下:
1.将用户密码转换为十六进制格式
2.将ASCII编码的十六进制格式的字符串转换为Unicode编码,
3.队Unicode编码的十六进制字符串进行标准MD4单向Hash加密。

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

在用户输入密码进行本地认证的过程中,所有操作都是本定进行的,系统将用户输入的密码转换成NTLM Hash在SAM文件中进行比较,如果相同就是密码正确.当用户注销,重启,锁屏后,操作系统会让winlogon.exe显示登录界面,也就是输入框。当winlogn.exe接收输入后,将密码交给lsass.exe进程,开始进行比较。lsass.exe进程中会存一份明文密码,我们使用的mimikatz就是从lsass.exe进程中抓去明文密码或者Hash密码。

NTLM协议认证

NTLM(NT LAN MANAGER)是一种网络认证协议,它是基于质询(Challenge)/响应(Response)认证机制的一种认证模式。

NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。

NTLM协议的认证过程分为三步:

1、协商:主要用于确认双方协议版本(NTLM v1/NTLM v2)

2、质询:就是挑战/响应认证机制起作用的范畴

3、验证:验证主要是在质询完成后,验证结果,是认证的最后一步

质询的完整过程:

1、客户端向服务端发送用户信息(用户名)请求

2、服务器接受到请求,判断本地账户列表是否有用户名,如果有,生成一个16位的随机数,被称之为“Challenge”,使用登陆用户名对应NTLM Hash加密Challenge(16位随机字符),生成Challenge1,生成一个Net-NTLM Hash存在内存中,同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端。

3、客户端接收到Challenge后,使用将要登陆的账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

4、验证,服务器接收到客户端的Response后,对比Challenge1与Response是否相等,若相等,则认证通过。

NTLM是底层的认证协议,必须嵌入上层应用协议中,消息都传输依赖于使用NTLM的上层协议,比如SMB,HTTP等。

这里本来是有一个抓包实验的,但是我这边才装的电脑就不弄了。

当应用SMB协议传输NTLM协议的时候,NTLM认证的数据包都是放在GSS-API中的。
什么是GSS-API呢?
通用安全服务应用程序接口(GSSAPI) 是为了让程序能够访问安全服务的一个应用程序接口。
使用 GSS-API,程序员在编写应用程序时,可以应用通用的安全机制。
开发者不必针对任何特定的平台、安全机制、保护类型或传输协议来定制安全实现。
使用 GSS-API,程序员可忽略保护网络数据方面的细节。
使用 GSS-API 编写的程序在网络安全方面具有更高的可移植性。
这种可移植性是通用安全服务 API 的一个特点。
一些小知识:
工作组环境下默认均不签名
域环境下的NTLM认证,服务端会把协议认证发送给域控,域控会把认证结果成功与否返回给服务端。

NTML和NTLM v2的区别:

v1和v2是NTLM身份认证协议,但是是不同版本,只是其中的chalenge值与加密算法不同而已。

下面介绍lmcompatibilityLevel

image-20230125131209709

我们可以手动修改本地安全策略进行lmcompatibilityLevel值的修改。在本地安全策略中的安全选项中的网络安全中进行设置。或者也可以通过修改注册表进行修改。

NTLM协议的安全问题

从上面的NTLM认证的流程中可以看到,在type3消息中是使用用户密码Hash进计算的。因此,当没有拿到用户的明文密码而只拿到Hash的情况下,可以进行Pass The Hash(PTH)攻击,也就是常说的哈希传递攻击。同样,还是在type3消息中,存在Net-NTLM hash,当获得了Net-NTLM hash之后,可以进行中年人攻击,重放Net-NTLM hash,这种手法也就是常说的NTLM Relay(NTLM中继)攻击。由于NTLM v1协议加密过程存在天然缺陷,因此可以队Net-NTLM v1 Hash进行破解,得到NTLM Hash之后即可横向移动。下面介绍一下三中基于NTLM的攻击手法

1.Pass The Hash

Pass The Hash攻击是内网横向移动的一种方式。由于NTLM认证过程中使用的是用户密码的NTLM hash来进行加密,因此当或渠道了用户密码的NTLMhash而没有解出明文密码的时候,就可以利用此NTLMhash来进行哈希传递攻击。对内网其他机器进行hash碰撞,碰撞到使用相同密码的机器。然后通过135或者445端口横向移动。这本书后面也会写详细的过程,我们后面再继续进行相关的介绍。

2.NTLM Relay

严格意义上这个名字并不正确,应该叫Net-NTLM Relay。他发生在NTLM认证的第三步,在response消息中存在Net-NTLM hash,或则Net-NTLM hash后,可以进行中间人攻击,重放Net-NTLM,同样,我们后续会进行介绍.

3.Net-NTLM v1 Hash破解

由于NTLM v1存在天然缺陷,只要获取到Net-NTLM v1 hash,就能破解为NTLM Hash,这与密码强度无关。在域环境中,这一点更为明显,因为在域环境中可以直接使用hash连接目标机器。如果域控允许发送NTLM v1响应,我们就可以通过与域控机器进行NTLM认证,然后抓去域控的Net-NTLMv1 hash,然后破解为NTLM hash,使用域控的机器账户和Hash即可到处域内所有用户Hash。

但是有一个缺点,自从windows vista开始,微软就默认使用NTLM v2身份认证,想要降级到v1,需要手动修改,并且需要目标主机的管理员权限。本地安全策略,安全设置,本地策略,安全选项,网络安全:LAN管理器身份验证级别将其修改成进发送NTLM响应。

或者也可以通过执行命令修改注册表来达到这个效果。

Net-NTLMv1的利用思路

由于Net-NTLMv1的脆弱性,在控制Challenge后可以在短时间内通过彩虹表还原出用户的ntlm hash,所以在利用上首选的是将Win7环境下的默认Net-NTLMv2降级到Net-NTLMv1,获取本机的通信数据,还原出ntlm hash。

实现工具: InternalMonologue

下载地址: https://github.com/eladshamir/Internal-Monologue

注意点:

1、自Windows Vista/Server2008开始起,微软默认使用Net-NTLMv2协议,想要降级到Net-NTLMv1,首先需要获得当前系统的管理员权限。

2、修改注册表需要管理员权限

修改注册表开启Net-NTLMv1:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 2 /f

为确保Net-NTLMv1开启成功,还需要修改两处注册表键值:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v RestrictSendingNTLMTraffic /t REG_DWORD /d 0 /f

Net-NTLMv1的格式为:username::hostname:LM response:NTLM response:challenge

Administrator::adexx-PC:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:1122334455667788

image-20230125140656764

使用hashcat进行字典破解,参数如下:

hashcat -m 5500 hash.txt password.txt

image-20230125140710636

优点:

1、这种方式不会对lsass.exe进程进行操作
2、同本地NTLM SSP进行交互,不会产生流量
3、没有进行NTLM认证,不会产生日志

补充:

Net-NTLMv2的格式username::domain:challenge:HMAC-MD5:blob

如果以普通用户权限执行InternalMonologue,同样能够获得当前用户的Net-NTLMv2数据包(注意是的Net-NTLMv2的数据包,不是Net-NTLMv1,因为没有权限去进行降级到Net-NTLMv1),通过hashcat进行破解,也能获得当前用户的明文口令

image-20230125140718486

如上图,获得Net-NTLMv2的数据包如下:

yuyonghu01::PENTEST:1122334455667788:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad

使用hashcat进行字典破解,参数如下:

hashcat -m 5600 hash.txt password.txt

image-20230125140727018

同时找资料的时候也发现了很多优秀的文章,大家复习的时候可以进行相关的借鉴。

Net-NTLMv1的利用-爱码网 (likecs.com)

NTLM认证相关攻击技巧(较全) - 先知社区 (aliyun.com)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。