渗透测试人员对Pass-the-Hash(PtH)攻击都很熟悉。我们常在渗透测试中用到它。如果你的职责包括网络入侵防御,你至少应该了解其攻击方法。不管你有多少经验,你对问题了解得可能不深,或许还不知道它是怎么解决的,注意是“解决”而不是“修复”。
攻击者通过一定办法获取了Windows计算机的本地管理员权限,可以在内存中寻找其它本地或域内账户登录后的hash,因为电脑正在运行。这些hash可以“传递”(不需要破解)给其它的计算机或者服务,作为一种认证方法。
这意味着,一开始只攻破一个看起来不重要的服务器或工作站,由于域管理员账户为了执行一些支持任务,登录了这个机器,就可以在更高的水平攻破整个域。
考虑下面比较常见的场景:
一个主机被攻陷(没重要价值)。
但是本地administrator账户和其它所有主机的密码相同。
攻击者从内存中获取了所有的hash,域管理员账户并不在里面。攻击者获取了所有的本地hash,包括administrator账号的。
攻击者使用获取的本地administrator的hash,利用PtH登录了其它的主机,然后重复这个过程(也被称为hash喷射攻击)。在这个过程中,会得到一个本地和域用户的hash列表。
最终,一个主机会在内存中包含一个有权限的域账户,可以用于访问数据库,文件服务器,以及域控制器,然后再次使用PtH。
PtH并不是一个漏洞利用技术,它是Microsoft Windows提供的一个特性。因此,没有补丁。降低PtH攻击的风险是可以的,但是它需要对认证权限横向隔离。
降低PtH攻击的风险,实际上是给管理员账户赋予有限的安全边界的问题。或者可以这样理解,最小化所有支持和管理账户的访问范围。
要遵守的策略是,尽量减少黑客获取域内账户之后攻破其它服务器或主机的数量。比如,攻破一个开发主机之后,不应该泄漏开发服务器(或者产品服务器,或者其它主机,或者域控制器)上的管理员账户。
下面是需要遵守的几个降低PtH攻击风险的步骤:
确保所有的服务器、主机、笔记本或者其它开放网络端口的设备都安全加固了,确保禁用LM hash。
确保设置了非常强的密码策略。
请不要在任何地方重用密码,包括服务器或administrator账号。不要为服务账号设置简单的密码。
确保所有的本地administrator密码都是唯一的。
这将使攻击者在你的网络难以立足。没有hash就无法实施PtH攻击。
应该定义安全边界,比如HR主机,开发主机,财务笔记本,DMZ服务器,测试服务器等等。越多越好。每个安全边界都应该设置一个对这个组里的所有主机有管理员权限的域账户(绝不可以是administraotr)。这个用户应该配置成不能访问其它主机或服务,最重要的是它不能是网络中其它任何设备的管理员。
这样做的原理是,攻破一个安全边界里的机器,并不会泄漏其它的安全边界。这是因为,任何被攻陷的高权限账号都无法访问其它边界内的主机。
域administrator用户只能用于访问域控制器。每次使用这个账户都会留下一些痕迹,缓存的账号或者是LSA密钥等等。
如果攻击者想办法攻破了域控制器,那么游戏就结束了。所有的hash都可以提取,那时,PtH就变成了一个小问题。
服务账户应该一事一议来考虑,只分配服务正常工作需要的权限。这在PtH攻击方面很有风险,我们经常利用它。
hash注入是我们在渗透测试中常用的方法。它是网络渗透和扩展(可能也有提权)的一个有效办法。
正如前面讨论的,hash注入并不是一个漏洞,但是是微软提供的一个会被滥用的特性。因此,它无法修复,但是可以降低风险。这需要对域网络有一个合理的安全管理办法。
微软在2012年和2014年发表了两篇文章,名为《Mitigating Pass-the-Hash (PtH) Attacks and Other Credential Theft Techniques》和《Mitigating Pass the Hash Attacks and Other Credential Theft, version 2》,非常有趣也非常有用,链接如下:
Pass-the-Hash (PtH) – https://technet.microsoft.com/en-us/dn785092.aspx
最好使用网络访问控制,把访问管理服务(以及服务器)的权限限制在需要的主机上,这不是银弹但却有用。
*本文翻译自: technet.microsoft.com ,译者felix,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)