个人感觉国内几家桌面安全厂商更加重视传统的AV技术,我认为应该他们应该拓展一下防御纵深,应该开辟网络入侵检测这一战场。为什么呢?很多网上流传的攻击方法,比如我这里描述的它们的危害性都不可小觑。面对这样的威胁,我测试的几款主流产品它们选择了沉默,毫无反应。
大家都知道的windows密码破解利器mimikatz, WCE, creddump可以轻易获取windows登陆密码的hash值和明文。但是有前提的!前提是你能把这些工具都能上传并且在目标机器上执行,并且能逃脱AV。事实上即使逃过了静态AV,也很难逃过动态主防。显然想用这些的工具真正的做事是有困难的。还有其他方法吗? 有。抓取网络共享(SMB协议)登陆认证过程的hash值,通过RainbowTable破解还原windows密码明文。这个实验中使用的工具是Metasploit SMB Sniffer module, icrack_mt, netntlm.pl。当然最好下载一个Back Track。
首先描述一下Windows在访问远程共享时发生的那些事儿。Windows要使用当前登陆用户的user/psw进行认证,使用的是SMB协议。也有可能使用空密码认证,也就是所说的建立NULL session。不过不重要,认证过程都是一样的:
1. Client请求认证,并列举支持的认证协议;
2. Server选择认证协议,并返回随机的challenge值;
3. Client使用收到的challenge值对psw做hash计算,并发送认证协议包;
4. Server返回认证结果: 成功,失败;
使用Wireshark抓包,以上过程一目了然。
接着说实验思路,将这么一个元素
插入到网页中。任何访问这个网页的机器都会向10.1.1.3发送SMB认证请求。这个时候就可以再10.1.1.3上面收货hash了。
怎样收获hash呢?可以使用metasploit中auxiliary/server/capture/smb模拟一个SMB 共享服务器。此服务器在收到连接认证请求后,指定使用LMNT认证协议,并且返回固定(不是随机)的challenge值0x1122334455667788。等待收获,如图:
正如你看到的,总共收获了2组hash值。接下来的目标是破解第二组hash值。在Run SMB 之前请用set JOHNPWFILE /temp/john 命令将hash值保存一份在文件中,便于后面的破解。可以在这里了解更多的Metasploit的使用方法:http://www.offensive-security.com/metasploit-unleashed/Introduction
接下来就是怎样将hash值还原成明文密码了。为什么之前要使用固定的challenge?因为有人已经用这个值生成了彩虹表,我们可以直接拿来用。从这里下载需要彩虹表, 注意尽量全部下载,总共16.4G不算多。ftp://freerainbowtables.mirror.garr.it/mirrors/freerainbowtables/RTI2/halflmchall/
然后下载rcracki:http://sourceforge.net/projects/rcracki/
这里的hash是分段的,首选破解破解密码的前7字节。命令rcrack-mt.exe –h <彩虹表路径>
rcracki_mt.exe -h 3cf21b4522e336b0 G:\Rainbow
分分钟之内就能破解出来,如图。尝试过在我Intel Core(TM)2 E8500的CPU上破解包含字母,大小写,数字,特殊字符的9位密码,最长时间都不会超过10分钟。
当然而这一步只是破解了其中7位,而且字母的大小写还不对。
接下来最后一步,破解密码的第二部分,使用netntlm.pl。如果你用的是Back Track的话,这个工具是默认安装了的。命令:./netntlm.pl –seed “A3;34TE” –file /tmp/john_netntlm
破解完成,得到准确的密码A3;34teE$。
其实我实验的密码也不简单,破解起来尚且如此容易。若非很多域管理员强行执行密码策略,很多人设的密码更简单,破起来更容易。
最后说明:win7以后默认禁用了NTLM认证协议,测试不会成功。但可以再组策略中windows settings – Security Settings – Security Option中启用。