黑客总是在用最简单的攻击方式来实现他们的目的,比如用已经存在了好多年的工具——Mimikatz(哈密瓜),它可以从系统内存中轻松获取到明文密码。
Windows 7和Windows Server 2008(老系统也受影响)。
最新的Windows 8 / 10 、Windows Server 2012 / 2016原本是不受影响的,但是高权限的黑客可以通过修改注册表来实现这样的攻击。
黑客拥有系统管理员权限,就能从内存中获取登录认证信息(明文/各种哈希格式)。
在Windows XP中,Microsoft增加了对“WDigest”协议的支持。该协议基于RFC 2617和2831。客户端用该协议向 HTTP和SASL应用发送明文凭证,Windows会将密码缓存在内存中,便于用户登录本地工作站。这也就是利用Mimikatz工具进行攻击的基础了。
我们在实验环境中设置了如下系统:
我们的域控服务器运行Windows 2012 R2系统。
我们用CrackMapExec( https://github.com/byt3bl33d3r/CrackMapExec )来模拟如何从这些系统中获取认证信息。 在服务器上通过powershell来执行Mimikatz,获取的认证信息如下。非常明了!是明文的:
Microsoft先前就发布了 KB 2871997 补丁,就是用于解决该问题,以及相关的另外几个问题的。有需要的可以点击下面的链接下载:
Windows 7 x86 https://download.microsoft.com/download/9/8/7/9870AA0C-BA2F-4FD0-8F1C-F469CCA2C3FD/Windows6.1-KB2871997-v2-x86.msu
Windows 7 x64 https://download.microsoft.com/download/C/7/7/C77BDB45-54E4-485E-82EB-2F424113AA12/Windows6.1-KB2871997-v2-x64.msu
Windows Server 2008 R2 x64 Edition https://download.microsoft.com/download/E/E/6/EE61BDFF-E2EA-41A9-AC03-CEBC88972337/Windows6.1-KB2871997-v2-x64.msu
上述补丁安装过后,我们还需要修改注册表,防止认证信息被缓存在内存中。用下面的命令就能完成修改:
reg add HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest /v UseLogonCredential /t REG_DWORD /d 0
值得一提的是,某些 IIS服务器可能会配置使用WDigest身份认证。我们建议先在实验环境中测试上述修复方案,如果没有问题再更新到生产环境中。
我们可以通过如下命令来测试修改是否生效:
reg query HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest /v UseLogonCredential
如果成功,系统应该会返回如下内容:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest UseLogonCredential REG_DWORD 0x0
很多用户更喜欢通过组策略(Group Policy)来修改注册表,按照微软给出的步骤操作即可( 点击这里 ):
打开组策略管理控制台(Group Policy Management Console),右键单击组策略对象(Group Policy objec),然后点击编辑(Edit)。
在控制台中,计算机配置(Computer Configuration)或者用户配置(User Configuration)下,打开预设(Preferences)文件夹,再打开窗口设置文件夹(Windows Settings),右键单击注册表(Registry),然后新建一个注册表,选择“注册项(Registry Item)”。
在新建注册表项对话框中,下拉菜单中选择“Creat(创建)”,输入如下数据:
设置好点击“确认 ”,新添加的项就会显示在右边的目录中。
在Windows 7和2008系统中执行下面这句命令(跳过组策略刷新间隔):
gpupdate
现在来验证一下修改是否完成,如下图说明我们在Windows 7中修改成功。
Windows Server 2008 R2系统中看起来是这样的:
现在我们重启两台电脑,然后使用先前的域登录凭证登录系统。修改注册表其实是不需要重启电脑的,但因为登录凭证是缓存在内存中的,所以还是需要重启清理一下。
最后我们再用CrackMapExec( https://github.com/byt3bl33d3r/CrackMapExec )工具尝试看看是不是能获取到登录凭证。
如你所见,我们已经不能从内存中获取到明文凭证了。
当然,还是可以看到NTLM hash。由此可见,强密码和双因子认证是防止认证密码被破解的重要手段。另外,我们也需要较好的策略来防止哈希传递攻击。相关这个问题Microsoft还有更多相关的资源可以提供查阅:
1、 https://www.microsoft.com/pth
2、 https://download.microsoft.com/download/7/7/A/77ABC5BD-8320-41AF-863C-6ECFB10CB4B9/Mitigating-Pass-the-Hash-Attacks-and-Other-Credential-Theft-Version-2.pdf
拥有系统权限的攻击者仍然能通过恢复注册表来实现攻击,所以仍要关注注册表的未授权更改情况。
译者注:
通过这样的手段,虽说不能完全阻止黑客,但是至少能给黑客制造无数的麻烦,非常提倡这么做。
* 参考来源: praetorian ,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)