什么是“内网漫游”(lateral movement)?

“千里之堤毁于蚁穴”的道理用在黑客攻击上同样成立。攻击者只要挖掉房子的一块砖,他就拥有了整个房子的所有权。虽然这种说法过分简化了黑客攻击的复杂过程,但是的确事实就是这样。下面我就介绍一下内网漫游的整个过程。

1.png

阻止哈希传递攻击

第1步:攻击用户

攻击的切入点是一个没有及时更新的Java插件(是不是不只一次地看到过很多文章、新闻报道都提醒你及时更新程序?你做到了吗?),祸不单行,偏偏这个用户身份是本地管理员。虽然这不是攻击者进行内网漫游的必要条件,但这个权限能够减少一些转储本地管理员用户密码哈希的步骤。

第2步:抓取本地管理员的密码哈希

“本地管理员的密码在同一域下的所有工作站通用”这个定律依然在很多情况下奏效。尽管对操作员来说,这样能够提高工作效率,但同时也给越来越多的攻击者打开了方便之门。由于Windows系统的设计问题,攻击者实际上并不需要通过明文密码在整个网络中“漫游”,而可以通过“哈希传递(PtH,Pass the Hash)”的技术实现。

第3步:找到已登录的域管理员

在这种情况下,管理员以其域管理员帐户的身份登录工作站进行更改活动。攻击者只要找到其中一台登录的设备就可以通过类似mimikatz这样的工具从RAM中转储密码(以明文形式)。有一点更有意思,所有已经登录账户的密码都以明文形式存储在RAM中,因此攻击人员只要通过本地管理账户完成了RAM的转储,他们就不需要再去破解这些hash值。到这一步,可以说整个网络都已经沦陷。接下来攻击人员就可以开始过滤所有数据。

如何预防内网漫游攻击?

纵观整个入侵过程,一开始被攻击者钻了空子的是一个遗漏的修复程序。虽然我们都知道要及时更新修复,但事已至此,目前最要紧的问题是如何规避本地管理员账户中的“哈希传递(PtH,Pass the Hash)”。这也正是微软本地管理员密码解决方案(带下载地址)的生存使命。这个工具功能多样,但是和PtH最相关的是在企业内部所有设备上实现本地管理员密码随机化的功能。这样一来,攻击者就无法通过一个本地管理员的密码哈希实现整个内网的漫游。

安装LAPS(本地管理员密码解决方案)

根据上述的下载地址下载程序后,可选择从管理员工作站执行安装程序。运行安装程序,并确保已经安装了所有管理工具。

2.png

接下来,以域管理员和架构管理员的身份打开PowerShell窗口(只需执行运行任务…)并运行以下命令:

Import-Module AdmPwd.PS Update-AdmPwdADSchema 

3.png

这两个命令为计算机添加了两个附加属性,一个用于密码存储,一个用于密码逾期后的更新。具体如下:

ms-Mcs-AdmPwd
ms-Mcs-AdmPwdExpirationTime

现在需要让计算机对这些属性作出实际的更新,而这项工作可以由OU(把对象组织成逻辑管理组的容器)来完成。So,开始添加包含所有用户工作站的OU吧。

Set-AdmPwdComputerSelfPermission -OrgUnit "UserWorkstations"

4.png

设置密码访问机制

主要设置的内容是谁有权查看和重置密码。首先,在活动目录(Active Directory)中创建LAPS管理员群组。添加到此组的任何用户帐户都能够管理指定OU中的密码。该群组具有用户工作站OU的管理权。

Set-AdmPwdReadPasswordPermission -OrgUnit "UserWorkstations" -AllowedPrincipals LAPSAdmins

5.png

现在,LAPS管理员群组中的所有人都可以查看或重置用户工作站OU中所有设备的本地管理员密码。

创建GPO

GPO:Group Policy Object,组策略对象,一种与域、地址或组织单元相联系的物理策略。

首先,将以下文件从你的管理工作站复制到域控制器的中央存储库中:

C:\Windows\PolicyDefinitions\AdmPwd.ADMX C:\Windows\PolicyDefinitions\en-US\AdmPwd.ADML

6.png

7.png

接着,打开组策略管理控制台(Group Policy Management Console)并创建一个名为LAPS的新GPO。然后从那里导航至“计算机配置(Computer Configuration)>管理模板(Administrative Templates)> LAPS”并根据你所在机构标准要求进行配置。策略配置包括密码复杂性、逾期时间、需管理的管理员账户名称等。另外还应确保启用本地管理员密码管理( Enable local admin password management)。

8.png

从这里将其链接到你认为合适的OU里。

检查访问权限

确定哪些群组具有相应计算机的密码访问权限很有必要。这一步可以通过下面这个命令实现(其中的<OU>用你的OU替换)

Find-AdmPwdExtendedRights -Identity "<OU>"

理想情况下,这一步的结果应该只有SYSTEM帐户和域管理员(Domain Admins)。

9.png

密码管理

还记得之前我们让LAPSAdmins(管理员)群组管理UserWorkstations(用户工作站)组中计算机的密码吗?现在要对这个功能进行测试。SAVAGE\kyle这个账户是LAPSAdmins(管理员)群组的成员,我们可以通过这个账户打开LAPS的界面并搜索一个计算机名称,例如Win10-1,检索本地管理员密码并查看或更改密码逾期时间。

10.png

总结

希望各位读者能够有所收获,并开始在自己的环境中部署LAPS。

从此与攻击者的内网漫游说再见……

*参考来源:savagesec,FB小编Carrie编译