NT管理员改变密码时会导致用户明文密码被泄露

/ns/ld/win/data/20010108023812.htm

当使用NTLMv1 (LmCompatibilibyLevel=0)时:NT管理员用USRMGR.EXE 或者 SRVMGR.EXE 增加新用户,新组或者改变用户密码.它采用的加密机制是半加密的。基本上,这种加密的运算规则是把一个"user Session Key"作为RC4 key来加密516字节的块,其中大部分是随机数据。
NT管理员的user session key是 MD4(Administrator's NT#)
假如现在你在监听网络数据,当管理员正在向域增加一个工作组时,你捕获到一对516个字节的数据包,用XOR运算比较这两个包,比较结果中的最后几个字节对于解码是非常有用的。
如果XOR结果中最后4个字节为0,那么两个密码长度是一样的。
如果XOR结果中最后4个字节不为0,那么两个密码长度是不一样的。
要记住这些密码都是用UNICODE存储的,因此要想猜某个密码的长度,你只要计算XOR结果最后"0"字节的数目。我们知道当使用SRVMGR.exe增加工作组时,系统就赋给这个工作组一个初始密码。在NT域中使用LMcompatibilityLevel=0x0,此时管理员发送的是明文密码。

解 决 方 法:

1)使用交换式网络。

2)建议网络管理员使用安全机制来增加新用户,新组。

3)对于每次改变或者创建新用户,建议同时改变管理员的密码。当然,如果你远程修改了管理员密码,那么你就要改变管理员密码两次了。

----使用NTLMv2 (LmCompatibilibyLevel=0x5)

在NTLMv2中,它使用3次HMAC_MD5,使得至少要48次才能暴力破解。从MS-chap取出的随机信息产生"User session Key",这个"User Session Key"是基于每一条连接的。这就意味着,要确保管理员密码的安全性,不能象NTLmv1那样,而只能断开每一个使用USRMGR.EXE 或者SRVMGR.EXE的远程用户的连接。
  要做到这一点:首先停止USRMGR.EXE/SRVMGR.EXE,进入DOS prompt,输入:
  net use
这样,如果有一个\\mypdc\ipc$连接显示的话,运行:
net use \\mypdc\ipc$ /del
  如果显示在使用中,所有你留下的其它的远程程序就能执行,比如:哄骗SamrCreateUser() ,创建新用户。当然你如果使用交换式网络/使用SMB签字,就不存在这个问题。