找回失落的本本密码
2018-10-16刘景云
刘景云
对于本本用户来说,为了提高安全性,都会给本本设置尽可能复杂的密码,这样在登录系统时,没有密码是无法操作的。但是,对于一些比较马虎的用户,免不了碰到丢三落四的情况。比如,当本本用户更改了登录密码,并对一些文件进行了EFS加密处理后,如果忘记了密码,不仅无法登录系统,连加密的文件都找不回来。虽然可以使用WinPE U盘引导系统,利用其内置的工具清除密码,但是这会造成EFS加密的文件无法打开的问题。看来,最好的办法就是将正确的密码找回来,这样问题就会迎刃而解。
Windows的密码存储机制分析
要想找回遗忘的密码,就必须先了解Windows的密码管理機制。在所有的Windows版本中,每个用户都有唯一的账号和与之关联的登录密码,用户使用自己的账号密码才能进入系统。登录密码由字符、数字和各种符号组成。当用户设置或改变登录密码时,Windows并不单纯的存储这些字符串,Windows使用 DES、MD4等加密算法对密码字符串进行加密形成LM hash(LAN Manager hash)散列和NTLM hash(Windows NT hash)散列。其中LM hash散列相对于NTLM hash散列而言比较脆弱,主要用于与老版本的Windows兼容。现在新版本的Windows又提供了NTLMv2以及Kerberos密码验证技术。
Windows将这些Hash散列值存储在本地安全账户数据库中(security accounts manager database,SAM),对于Windows2003/2008等域控制器而言,密码Hash散列值保存在活动目录(active directory)中。对于NTLM hash散列来说是不可逆的,也就是说不可能根据散列值直接得到登录密码。但是,只要得到了LM hash散列或NTLM hash散列,利用穷举法或者利用字典法,测试所有可能的密码值,仍可能找回遗忘的密码。Windows的密码Hash在默认情况下通常由两部分组成,第一部分是LM-Hash,第二部分是NTLM-Hash。下面我们简单谈谈两种Hash的设生成机制。
禁用LM散列,提高密码安全性
说到这里,我们就会想到,如果能够阻止Windows存储LM-Hash密码散列,仅仅存储安全性很高的NTLM-Hash散列,不就可以有效提高密码的安全性了?具体实现方法是运行“gpedit.msc”程序,再组策略窗口左侧点击“计算机配置”→“Windows设置”→“安全设置”→“本地策略”→“安全选项”分支,在右侧窗口中双击“网络安全:不要在下次更改密码时存储LAN Manager的哈希值”项,在弹出的窗口中选择“已启动”项,保存后退出。之后双击“网络安全:LAN Manager身份验证级别”项,在弹出窗口(图1)中的列表中选择“仅发送NTLM响应”项。重启系统后,就实现了七述要求。此外,最简单的方法是设置长度最少为15位的密码,让系统自动存储无法用于验证用户身份的LM-Hash值,也可以实现异曲同工的目的。当然,为了防止破解者使用SAMinside这款工具来获取Hash值,最好禁用“Task Schduler”服务让破译者无功而返。
在老本本中找回密码
我们知道,Windows将密码加密后,存储到了系统路径下的“System32\Config”文件夹下的“SAM”文件中。只要得到了该文件,通过各种密码分析软件,就有可能让密码重见天日。虽然密码遗忘无法直接进入系统,但是我们可以通过WinPE U盘启动系统,在WinPE环境中将上述SAM文件复制出来,然后就可以深入解析密码了。这里为了讲解方便,我们先来介绍在Windows XP和Windows 2003中,如何使用各种工具软件找回密码。对于Windows XP等老本本来说,可以使用LOphtCrack v5、Cain等工具来找回密码。例如,使用LOphtCrack v5(简称LC5)这款工具软件,它不仅可以用来检测Windows、UNIX等系统中账户密码的安全性,而巨可以在您忘记密码的时候,快速高效地将其找回。在LC5主界面工具栏中点击第一个按钮,创建新的会话环境,之后点击菜单“会话”→“会话选项”项,在弹出窗口中的“字典破解”栏中勾选“使用”项,表示使用基于字典的破解方式,点击“字典列表”按钮,可以管理所需的字典,包括新建、编辑、删除字典等操作。所谓字典,就是包括很多密码的文本文件。LC5会从字典中逐个提取密码,将其变成散列后和获得的密码Hash进行比对,来找到实际的密码。
勾选“破解NTLM认证口令”项,可以检测NTLM-Hash类型的密码。为了实现全面破解,可以在“暴力破解”栏中勾选“使用”项,在“字符设置”列表中选择可能的密码字符组合样式,包括字母、字母加数字、字母+数字+普通符号、字母+数字+所有符号、自定义等。LC5会根据选定的密码字符组成样式,来穷举所有可能的密码散列,执行对比操作,来获得真实密码。点击菜单“会话”→“导入,项,在弹出窗口(图2)中选择“本地电脑”和“从SAM文件”项,点击“浏览”按钮,选择事先获得SAM文件,之后通过对该SAM文件的分析,LC5会读取其中所有的账户信息,并将其显示在“运行”面板中。之后点击F4键,执行密码分析破译操作。当破译完成后,会显示对应账户的密码。应该说,LC5的功能是非常强大的,只要有足够的时间和耐心,完全可以找回密码。
在Windows 7/8/10本本中找回密码
使用上述工具,对于找回Windows XP的密码没有问题。但是,对于之后的Vista、Windows?/8/2008等系统来说,就有些力不从心了。因为在这些新版本的Windows中,微软采用了更安全的密码存储机制。例如,在新版Windows中,不仅禁用了LM-Hash散列,而且不允许使用简单密码,这导致了SAMinside、LC5、Cain等工具,不是无法运行,就是面对复杂的密码无计可施。那么,如何才能从这些系统中找回遗忘的密码呢?这就需要使用Proactive Password Auditor(PPA)、ophcrack等更加高级的工具了。
例如,PPA这款软件提供了多种密码破泽机制。在其主窗口打开“Hashes”面板,可以看到其预设了DUMP file、Registry of local computer、Registry files(SAM,SYSTEM)、Memory of local computer、Memoryof remote computer等5种得到Windows密码Hash散列数据的方法。我们这里需要针对SAM文件进行破译。如果Windows系统没有使用活动目录的话,那么所有用户的账号以及密码信息都保存在注册表中。即使用户使用了Syskey命令对账号数据库进行了加密,PPA依然能够从注册表中分析账号及密码信息,从而得到密码的Hash散列值。
在Hashes面板中选择“Registry of localcomputer”项,点击Dump按钮,在弹出窗口中的“SAMRegistry”栏中点击“Browse”按钮,选择事先取得的Vista,Windows 7/8/2008等系统的SAM文件,勾选“File name of the SYSTEM Registry file”项,点击“Browse”按钮,选择事先取得的SYSTEM文件。点击“DUMP”按钮,PPA根据对SAM的分析,并尝试进行简单破解,然后将账号及密码的详细信息显示出来。同时,会显示所有账户的基本信息,例如名称、账户ID、散列类型等(图3)。
对于简单的密码,PPA能迅速破译,如果密码比较复杂,PPA还提供了穷举法、字典猜测法、Rainbow彩虹表算法等破解方法。以穷举法为例,首先在PPA的用户账号分析列表中选中一个账户名,根据其密码Hash散列的类型(例如LM+NTLM),在Attack面板中选中“Brute-force”,同時设定破解的类型(LM Attack或NTLM attack)。然后选中“Brute-forceAttack”面板,根据需要勾选“All Latin”(所有的字符)、“All Digits”(所有的数字)、“Special”(特殊符号),或者勾选“Custom charset”(自定义字符),点击“Define”按钮在自定义字符窗口中输入任意字符串即可。在Password中设置密码的最小和最大长度。设置完成后,点击菜单“Recovery”→“Start Recovery”项,PPA就可以进行密码分析操作了。PPA的效率很高,普通的密码很快就会被猜解出来。点击菜单“Recovery”→“Stop Recovery”停止破译。
为了提高破译的速度,可以借助于彩虹表进行操作。所谓彩虹表,其实就是体积庞大的、针对各种可能的密码组合预设的Hash值的集合。彩虹表针对各种加密算法,都提供对应的文件。对于简单的彩虹表来说,体积只有几十或MR几百MB。对于大型的彩虹表来说,体积可能高达100GB。有了彩虹表,PPA可以快速地进行Hash值比对,来找到真实的密码。对于不太复杂的密码,使用彩虹表可以瞬间破译,即使对于我们自己觉得很复杂的密码,在彩虹表面前,破译所花费的时间不过几卜秒而已。
在PPA主界面中的“Attack”栏中选择“Rainbow”项,在“Rainbow attack”面板中点击“Rainbow tables list”按钮,在彩虹表管理窗口中点击“Add”按钮,导入事先准备好的彩虹表文件,彩虹表文件的后缀一般为“.rc”。对于一般的密码破译来说,使用免费版的彩虹表足矣。添加好彩虹表文件后,在PPA中选择目标账户,点击菜单Recovery”→“Start Recovery”项,就可以决速找回失落的密码了。此外,使用LOphcrack这款解密软件,配之以彩虹表这一强大的密码字典,也可以决速找回丢失的Windows密码。