一、实验目的
1、了解Windows2000/XP/Server 2003系统密码的加密机制及其脆弱性;
2、学会使用Windows本地密码破解工具来破解密码跟审计密码的安全性;
3、了解设置健壮的Windows口令,以及配置强壮的密码策略的必要性。
二、实验环境
学生实验主机:WindowsXP。
实验目标服务器:无。
网络环境:局域网。
三、实验内容与实验要求
Windows系统在SAM中采用了两种密码的加密机制,所以,在sam文件中保存着两个口令字,一个是LanMan版本的散列值(LM),另一个是NT版本的散列值(NTLM)。
◆ LanMan 散列算法(LM)
LanMan散列算法处理用户口令的过程是:将用户口令分成两半,每一半都是7个字符(不足7个字符的以0x00补齐),然后分别对这另个口令进行加密,最后将加密后得到的散列值串连在一起,得到最终的LM散列值。
◆ NT散列算法(NTLM)
密码散列有两部分组成:一部分是通过变现DES算法,使用密码的大写OEM格式作为密钥(分成2个KEY,每个KEY7字节,用0补足14个字节),通过DESECB方式获得一个128位的密钥,加密特殊字符串"KGS!@#$%"获得一个16字节长度的值。另一部分则是使用MD4对密码的UNICODE形式进行加密获得的一个散列。
从上述LM算法流程来看,可以发现LM安全性上的几点不足:
1)LM算法将14个字节的密码分为两组分别进行加密,使得两组密文可以分别破解,并且明文空间从95^14减少到了95^7;
2)LM算法不区分密码的大小写字符,使得明文空间从95^7减少到69^7;
3)LM算法不像其他散列算法一样包含随机的初始向量IV,使得用空间换取时间的字典攻击(如彩虹表)等成为可能,2^43的明文空间使用彩虹表最多只需几个小时便能破解。
虽然LM非常不安全,但Windows为了保持前后兼容性,是许多以前支持LM认证的经典应用不至于突然不能使用,所以LM扔存在于相当Windows各种版本的操作系统中,不过Vista/7已经默认不使用LM存储账户密码散列。
NTLM散列的安全性较LM有所提升,因为其明文空间扩展到了95^128,采用暴力破解的时间复杂度大大增加。但是NTLM散列和LM散列一样,都没有在算法中包含随机数据(salt),所以仍然会受到字典攻击。但由于NTLM的明文空间较大,其字段占用的空间也会呈几何级数增长(NTLM的彩虹表大小为200G左右,而LM的彩虹表只需几百兆即可),破解时间自然也较LM要长很多。
打开 Windows 实验台,运行 WindowsXP 系统。
1. 首先查看本地主机的密码策略。
在"开始"菜单中打开"运行"对话框,输入"secpol.msc"打开"本地安全策略编辑器"。
1)禁用"密码必须符合复杂性要求"。
2)设置"密码长度最小值":8位以上。
然后访问"安全设置" -->"本地策略"-->"安全选项",然后再右侧找到"网络安全:不要在下次更改密码是存储LAN Manager的哈希值"的设置,确认或更改其为"禁用"(默认为“禁用”)。
2. 在本地计算机中新建一个用户。密码设置为8-14的随机纯数字组合,如用户名为“test”,密码为“13678954376”。
可打开一个命令提示符,输入如下命令直接添加用户。
net user test 13678954376 /add
当然,也可以通过控制面板中的用户账户组件来添加新用户并为其设置密码。
3. 打开一个命令提示符,进入实验工具目录中的“pwdump7”,运行Pwdump7.exe后即可直接显示本地计算机上所有用户及其密码散列值(包括LM散列值和NTLM散列值)。
上述输出的用户信息基本格式如下:
“用户名:安全相对表示符(RID):LM散列:NTLM散列”
接着,我们使用如下命令将上述用户散列信息存储到磁盘上的“C:\sam.txt”文件中去。pwdump7 > c:\sam.txt
4. 进入实验工具目录中的“SAMInside2.6.1”,双击运行SAMInside程序(SAMInside.exe),显示主界面如下所示。
5. 点击菜单项:“File”——>“Import From PWDUMP -file ……”。然后选择前面存储的本机用户密码散列文件“C:\sam.txt”,点击“打开”按钮返回主界面。
6. 在“User”栏中仅选择我们刚才添加的临时用户(“如“test”)。
7. 点击菜单项“Audit”,确认勾选“LM-Hash Attack”,确认勾选“Brute-force Attack”,即暴力破解方式。
8. 点击菜单项“Service”->“option”,在左侧选择“Brute-force Attack”,然后在右侧定制暴力破解的字符集。
为了保证实验的时间,因此我们在前面添加得的临时测试用户的密码为8-14位的随机纯数字组合,所以我们在这里仅选择[0...9]字符集,点击“oK”按钮后回到主界面。再点击“Audit”选择“Start attack”开始暴力破解。破解后显示的用户LM-password即为之前设置的用户密码。
四、实验过程与分析
打开 Windows 实验台,运行 WindowsXP 系统。
1. 首先查看本地主机的密码策略。
在"开始"菜单中打开"运行"对话框,输入"secpol.msc"打开"本地安全策略编辑器"。
1)禁用"密码必须符合复杂性要求"。
2)设置"密码长度最小值":8位以上。
然后访问"安全设置" -->"本地策略"-->"安全选项",然后再右侧找到"网络安全:不要在下次更改密码是存储LAN Manager的哈希值"的设置,确认或更改其为"禁用"(默认为“禁用”)。
2. 在本地计算机中新建一个用户。密码设置为8-14的随机纯数字组合,如用户名为“test”,密码为“13678954376”。
可打开一个命令提示符,输入如下命令直接添加用户。
net user test 13678954376 /add
3. 打开一个命令提示符,进入实验工具目录中的“pwdump7”,运行Pwdump7.exe后即可直接显示本地计算机上所有用户及其密码散列值(包括LM散列值和NTLM散列值)。
上述输出的用户信息基本格式如下:
“用户名:安全相对表示符(RID):LM散列:NTLM散列”
接着,我们使用如下命令将上述用户散列信息存储到磁盘上的“C:\sam.txt”文件中去。pwdump7 > c:\sam.txt
4. 进入实验工具目录中的“SAMInside2.6.1”,双击运行SAMInside程序(SAMInside.exe),显示主界面如下所示。
5. 点击菜单项:“File”——>“Import From PWDUMP -file ……”。然后选择前面存储的本机用户密码散列文件“C:\sam.txt”,点击“打开”按钮返回主界面。
6. 在“User”栏中仅选择我们刚才添加的临时用户(“如“test”)。
7. 点击菜单项“Audit”,确认勾选“LM-Hash Attack”,确认勾选“Brute-force Attack”,即暴力破解方式。
8. 点击菜单项“Service”->“option”,在左侧选择“Brute-force Attack”,然后在右侧定制暴力破解的字符集。
为了保证实验的时间,因此我们在前面添加得的临时测试用户的密码为8-14位的随机纯数字组合,所以我们在这里仅选择[0...9]字符集,点击“oK”按钮后回到主界面。再点击“Audit”选择“Start attack”开始暴力破解。破解后显示的用户LM-password即为之前设置的用户密码。
五、实验结果总结
通过实验我们学习到Windows系统在SAM中采用了两种密码的加密机制,以及LanMan 散列算法(LM)与NT散列算法(NTLM)的区别。了解到WindowsXP系统登录名和口令都保存在sam中,sam数据库含有账号信息和密码。使用cmd命令导出sam散列值,并且成功破解Window用户和密码。