点击蓝字,关注我们
本文部分节选于《域渗透攻防指南》,购买请长按如下图片扫码。
组策略是Windows环境下用户管理对象的一种手段,其允许管理员通过组策略设置和组策略首选项为用户和计算机指定受管理配置的基础结构。
组策略分为本地组策略和域环境中的组策略:
本地组策略适合于管理独立未加入域的工作组的机器,其仅能影响当前环境下正在使用的计算机;
而域环境中的组策略则是用于管理域环境中的各种对象,其可以影响所关联的站点(site)、域(domain)、组织单位(OU);
本文主要讲解域环境中的组策略。域环境中通过配置组策略可以对域中的用户、用户组、计算机等对象进行不同维度的管理:如安全配置、软件安装配置、注册表配置、开关机与登入登出管理等。配置的组策略对象通过关联到站点(site)、域(domain)、组织单位(OU)上来在不同层级应用不同的组策略配置。
在企业中,域管理员通过组策略管理控制台(GPMC,Group Policy Managment Console)进行组策略的编辑和应用,以此利用组策略管理整个域。可以简单的把GPMC当成企业管理的神经中枢,而其中的每一条组策略则是神经中枢的每一条神经,正是通过每一条组策略才使得整个企业域环境井井有条的运行着。
组策略内包含 计算机配置 和 用户配置 两部分:
· 计算机配置:其位于“组策略管理编辑器”中的“计算机配置”下,当计算机开机时,系统会根据计算机配置的组策略内容来设置计算机的环境。无论哪个用户登录到计算机,该计算机都会应用组策略的计算机配置。例如在域中配置了组策略,则这个组策略中的计算机设置就会被应用到这个域内的所有计算机上。
· 用户配置:其位于“组策略管理编辑器”中的“用户配置”下,当用户登录时,系统会根据用户配置的组策略内容来设置用户的工作环境。无论该用户登录到哪一台计算机,都会应用组策略的该用户配置。例如在组织单位OU技术部配置了组策略,则这个组策略中的用户配置就会被应用到这个技术部组织单位OU内的所有用户的工作环境机器上。
如图所示,在组策略管理编辑器可以看到计算机配置和用户配置。
组策略的功能
企业域管理员通过组策略管理整个企业域环境,可想而知,组策略是多么的强大。以下是组策略的部分功能:
· 账户策略的设置:例如设置用户账户的密码长度、密码使用期限、账户锁定策略等。
· 本地策略的设置:例如审核策略的设置、用户权限的分配、安全性的设置等。
· 脚本的设置:例如登录与注销、启动与关机脚本的设置。
· 用户工作环境的设置:例如隐藏用户桌面上所有的图标,删除开始菜单中的运行、搜索、关机等选项、在开始菜单中添加注销选项、删除浏览器的部分选项、强制通过指定的代理服务器上网等。
· 软件的安装与删除:用户登录或计算机启动时,自动为用户安装应用软件、自动修复应用软件或自动删除应用软件。
· 限制软件的执行:通过各种不同的软件限制策略来限制域用户只能运行指定的软件。
· 文件夹的重定向:例如改变文件、开始菜单等文件夹的存储位置。
· 限制访问可移动存储设备:例如限制将文件写入U盘、以免企业内机密文件被拷走。
·其它的系统设置:例如让所有的计算机都自动信任指定的CA(Certificate Authority)、限制安装设备驱动程序(device driver)等。
· .......
如图所示,是组策略的部分功能。
组策略对象GPO
组策略是通过GPO(Group Policy Object,组策略对象)来设置的,而你只需要将GPO链接到指定的站点(site)、域(domain)、组织单位(OU),此GPO内的设置值就会影响到该站点(site)、域(domain)、组织单位(OU)内的所有用户和计算机。组策略对象GPO由 组策略容器(GPC,Group Policy Containers) 与 组策略模板(GPT,Group Policy Templet) 两部分组成,它们分别存储在不同的位置。
如图所示,可以看到组策略、组策略对象、组策略容器和组策略模板之间的关系。
1.组策略容器GPC
GPC(Group Policy Containers,组策略容器)是组织组策略模板的一种容器,可以将其视为组织管理具体配置的容器,GPC存储在活动目录数据库内,它记载着此GPO的属性、版本、策略名称、组策略GUID、组策略链接到的层级等信息。域成员计算机可以通过GPC的属性来得知GPT的存储位置,而域控制器可利用版本来判断其所拥有的GPO是否为最新版本,以便作为是否需要从其它域控制器复制最新GPO的依据。
如图所示,我们可以使用ADExplorer连接活动目录数据库进行查看GPC,组策略容器GPC完整DN为“CN=Policies,CN=System,DC=xie,DC=com”。
该节点下是以GUID命名的各个组策略对象,如图是默认的两个组策略对象Default Domain Policy{31B2F340-016D-11D2-945F-00C04FB984F9}和Default Domain Contoller Policy{6AC1786C-016F-11D2-945F-00C04fB984F9}。
我们可以从组策略容器GPC的属性中获得关于该组策略的一些信息,如:
· cn和name:组策略的GUID
· displayname:组策略的名称,下图是Default Domain Contoller Policy。
·distinguishedName:组策略的完整DN路径
· gPCFileSysPath:组策略模板GPT所在的具体路径,即客户端查找具体配置信息的路径,位于域控的sysvol共享中;
如图所示,是Default Domain Controllers Policy组策略对象的属性。
当某个对象应用了组策略时,该对象的 gPLink 属性将包含指向该组策略容器的完整DN,gPLink属性值形式如下:
如图所示,Domain Controllers组织单元应用了Default Domain Contoller Policy组策略,所以该组织单元的gPLink属性指向了该组策略对象的DN。
2.组策略模板GPT
GPT(Group Policy Templet,组策略模板)是具体的配置模板,其包含实际的配置文件。它是一个文件夹,其通常被建立在域控制器的 %systemroot%\sysvol\sysvol\域名\Policies 文件夹内,系统利用GPO组策略对象的GUID来当做GPT的文件夹名称,任何用户都可以访问。
如图所示,是组策略模板的目录。
每个组策略对象配置目录包含以下内容:
· Macheine目录:包含针对计算机的具体配置信息;
· User目录:包含针对用户的具体配置信息;
· GPT.ini文件:该组策略对象的一些配置信息(如版本信息、策略名称);
如图所示,是默认域控策略Default Domain Contoller Policy的目录。
3.默认GPO
当ADDS活动目录域服务部署完成后,默认会创建两个组策略对象,分别是:
· 默认域策略Default Domain Policy:如图所示,此GPO组策略对象默认已经被链接到域,该GPO的GUID为{31B2F340-016D-11D2-945F-00C04FB984F9}。该策略默认启用,因此其设置会被应用到整个域内的所有用户与计算机。
· 默认域控策略Default Domain Contoller Policy:如图所示, 此GPO组策略对象默认已经被链接到组织单位Domain Controllers,该GPO的GUID为{6AC1786C-016F-11D2-945F-00C04fB984F9}。该策略默认启用,因此其设置值会被应用到Domain Controllers内的所有用户与计算机。
注:任何情况下,不建议对Default Domain Policy和Default Domain Contoller Policy策略进行修改.
策略设置与首选项设置
域环境下的组策略的设置可分为 策略 与 首选项 两种(本地组策略无首选项设置)。
· 策略设置是强制性的,客户端应用这些设置后将无法更改(某些设置值虽然客户端可以自行变更,但是下次应用策略时,仍然会被修改为策略内的设置值);
· 而首选项设置是非强制性的,也就是可选的。客户端可以自行更改设置值。因此首选项设置可以作为默认值;要应用首选项设置的客户端需要安装支持首选项设置的Client-Side Extension(CSE),Windows7及其以后的系统默认已包含CSE,其他系统的系统需要手动去微软官网下载CSE组件并安装,更新编号为“KB943729”。
因此,当策略和首选项设置相同的设置时,策略设置的优先级会高于首选项设置。
如图所示,可以看到计算机配置和用户配置下均有策略和首选项。
针对组策略的过滤筛选,策略和首选项也是不同的:
· 如果要过滤策略设置的话,必须针对整个GPO来过滤。例如某个GPO已经被应用到技术部,但是我们可以通过过滤设置来让其不要应用到技术部的李四,也就是整个GPO内的所有设置项目都不会被应用到李四。
· 而首选项设置可以针对单一设置项目来过滤。
组策略的应用时机
当创建或修改了组策略对象后,这些设置值并不是立刻就对其中的用户和计算机有效,而是必须等GPO组策略对象设置值被应用到用户或计算机后才生效。GPO组策略对象设置值内的计算机配置与用户配置的应用时机并不相同。并且从Windows Server 2012开始,组策略支持在域控上强制推送组策略到目标计算机和目标用户。
1.计算机配置的应用时机
计算机会在下面场景中应用GPO组策略对象的计算机配置值:
\1) 计算机开机时会自动应用。
\2) 若计算机已经开机,则会每隔一段时间自动应用:
· 域控:默认是每隔5分钟自动应用一次。这个我们可以在组策略管理——>Default Domain Policy——>计算机配置——>策略——>管理模板——>系统——>组策略——>设置域控制器的组策略刷新间隔选项来查看和修改域控制器组策略默认刷新时间间隔,如图所示。
普通域主机:默认是每隔90分钟到120分钟自动应用一次。这个我们可以在组策略管理——>Default Domain Policy——>计算机配置——>策略——>管理模板——>系统——>组策略——>设置计算机的组策略刷新间隔来查看和修改普通计算机组策略默认刷新时间间隔,如图所示。
\3) 不论策略设置是否发生变化,计算机都会每隔16小时自动应用一次安全设置策略。
\4) 手动应用:到主机上命令执行框执行:gpupdate /target:computer /force ,该命令只会影响组策略的计算机配置。
2. 用户配置的应用时机
域用户会在下面场景中应用GPO的用户配置值:
\1) 用户登录时会自动应用。
\2) 若用户已经登录的话,则默认会每隔90到120分钟自动应用一次。这个我们可以在组策略管理——>Default Domain Policy——>用户配置——>策略——>管理模板——>系统——>组策略——>设置用户的组策略刷新间隔 选项来查看和修改用户默认刷新时间间隔,如图所示。
\3) 不论策略设置值是否发生变化,都会每隔16小时自动应用一次安全设置策略。
\4) 手动应用:到主机上命令执行框执行:gpupdate /target:user /force ,该命令只会影响组策略的用户配置。
注:
·执行 gpupdate /force 会同时应用组策略的计算机和用户的配置。
· 部分策略设置需要计算机重新启动或用户登录才有效,例如软件安装策略与文件夹重定向策略。
3. 强制更新组策略
从Windows Server2012开始,除了可以在客户端机器上强制刷新组策略,我们也可以在域控上通过组策略的强制更新,来推送给目标机器和目标用户组策略,并且该组策略能在10分钟内在目标计算机或目标用户上生效。
强制更新组策略操作如下:
首先选中要强制更新组策略的OU。如图所示,我们选中的OU是Domain Controllers,然后右键——>组策略更新(U),点击即可。
然后点击是,如图所示:
如图所示,在接下来的10分钟内,指定OU和所有子容器内的所有计算机将会强制执行组策略更新。
组策略应用规则
组策略不是对组进行设置,而且对其关联的站点(site)、域(domain)、组织单位(OU)进行设置。组策略被应用的最小单元是OU,即不能直接将一个组策略应用到某个用户或某个计算机上,而应该将这些计算机或用户加入一个OU中,然后将组策略链接到该OU上,OU可以具有层级关系的嵌套(即OU中又包含子OU)。
组策略的默认应用规则如下:
· 组策略支持继承性和累加性:组策略被应用到某个层级上时,会有继承关系存在,除非显式的“阻止继承”,否则默认情况下链接到高层级的组策略配置同样会应用到该层级以下的OU(和多级子OU中)。因此,某个OU下的对象所应用的组策略配置除了链接到自身OU的组策略对象外还包括从上层继承而来的组策略配置。也就是说组织单位OU继承域的组策略,域的组策略继承站点的组策略。如果同时给站点(site)、域(domain)、组织单位(OU)部署组策略,在组策略不冲突的前提下组织单位会同时应用域和站点的组策略。但是给父域部署的子策略不能继承到子域上,域和域之间的组策略也不支持继承。
· 组策略的优先级:如果组策略冲突的话,会优先应用组织单位的组策略,然后应用域的组策略,最后才是站点的组策略。也就是说,组策略优先级:组织单位(OU)>域(domain)>站点(site)。
· 如果有多条组策略,则应用策略是自从而下应用。
· 对于计算机配置和用户配置,机器先应用计算机配置策略,然后应用用户配置策略。如果两者之间有冲突,则优先处理计算机配置策略。也就是说,组策略优先级:计算机配置策略 > 用户配置策略。
1. 阻止继承
默认情况下,组策略是支持继承的,组策略默认设置为自动继承父容器的策略。但是,域管理员也可以手动阻止子容器继承来自父容器的组策略。
如图所示,选中Domain Controllers,右键——>阻止继承(B)。
2. 强制继承
默认情况下,组策略是支持继承的,组策略默认设置为自动继承父容器的策略。但是,如果子容器的策略和父容器的策略发生冲突的话,则不会应用父容器的策略。如果需要应用父容器的策略,需要域管理员手动进行强制继承。即使已经部署了阻止继承,点击了强制继承后,子容器也会强制应用父容器的策略。
如图所示,选中Default Domain Controllers Policy组策略,右键——>强制(N)。
组策略的管理
域管理员通过组策略管理控制台(GPMC,Group Policy Managment Console)进行组策略的新建、查看、编辑、删除等操作。
如图所示,运行gpmc.msc命令打开组策略管理控制台。
如图所示,即可看到组策略管理页面。
1. 新建组策略对象
有两种方法创建组策略对象:
\1) 一种是先创建组策略对象,然后将其应用到部署组策略的站点(site)、域(domain)或组织单位(OU)。
如图所示,右键组策略对象——>新建(N),建立一个组策略对象。
然后在需要部署组策略的站点(site)、域(domain)或组织单位(OU)右键——>链接现有GPO(L),然后选择需要链接的GPO即可。如图所示 :
\2) 另一种方法是直接右键需要部署组策略的站点(site)、域(domain)或组织单位(OU),然后点击在这个域中创建GPO并在此处链接(C)即可。如图所示:
注:建议使用第二种方法创建GPO组策略对象
我们现在使用第二种方法在技术部OU组织单位下新建一个名为test的组策略对象。
如图所示,打开组策略管理控制台,找到技术部OU。然后右键——>在这个域中创建GPO并在此处链接(C)。
名称我们填test,然后确定即可。如图所示:
然后我们可以看到组策略对象下多了一个名为test的组策略对象。并且在技术部OU下也多了一个名为test的组策略对象的快捷方式。如图所示:
2. 查看组策略对象
我们选中组策略对象,可以在右边看到该组策略对象的一些信息。
如图所示,查看test组策略对象的作用域,可以看到该组策略对象的作用位置是xie.com/技术部。安全筛选区域,显示的是Authenticated Users组,意思是只要经过身份验证的用户都可以应用组策略。WMI筛选区域,则是设置组策略的过滤条件。利用WMI筛选,可以指定让某些符合条件的计算机或用户应用组策略,而不符合条件的不应用组策略。
如图所示,查看test组策略对象的详细信息,可以查看到该组策略对象的所有者以及组策略对象的GUID、组策略对象的状态等信息。
如图所示,查看test组策略对象的设置,可以以图形化方式查看该组策略的一些设置。
如图所示,我们也可以直接选中组策略,右键——>保存报告(S),将组策略的设置导出成htm文件。
然后用浏览器打开该htm文件即可查看该组策略的信息,如图所示:
如图所示,查看test组策略对象的委派,可以看到哪些用户和组对此组策略具有权限。
3. 编辑组策略对象
如果我们要编辑某个组策略对象的设置值,选中该组策略,右键——>编辑(E)即可。
如图所示,对test组策略对象进行编辑。
然后就打开组策略管理编辑器编辑test组策略了,在这里可以针对计算机和用户的组策略进行编辑设置。如图所示:
4. 删除组策略对象
如果要删除组策略对象的话,我们到组策略对象下面去删除。
如图所示,选中该组策略,右键——>删除(D)即可。
如图所示,点击是即可删除该组策略对象。删除该组策略对象后,会删除该组策略对象链接的所有层级。
组策略的安全问题
组策略拥有这么强大的功能,因此在使用过程中,如果使用不当或被攻击者恶意滥用,会存在严重的安全问题。
1. 组策略首选项GPP提权
前面我们讲到了组策略模板GPT的存储位置位于域控制器的 %systemroot%\sysvol\sysvol\域名\Policies 文件夹内,任何用户都可以访问该文件夹。
在企业域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便对所有机器进行操作,域管理员通常会使用组策略进行统一的配置和管理。大多数企业在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些企业的域管理员往往会通过组策略修改本地管理员密码。域管理员通过组策略统一修改后的密码虽然强度有所提高,但该修改后的密码会使用AES-256加密算法保存在SYSVOL共享目录中的XML文件内。本来AES-256加密算法安全性是较高的,但是2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码可以被解密。任何有效域用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该密码的计算机。
(1) 组策略首选项GPP提权复现
首先,我们针对域xie.com新建一个名为Gpp_test的组策略。如图所示:
然后对该组策略进行编辑,如图所示,点击计算机配置——>首选项——>控制面板设置——>本地用户和组。
然后右键本地用户和组——>新建——>本地用户,我们将域中每个计算机的本地administrator用户更名为 admin,并且设置新的密码 root@123456。如图所示:
等待组策略应用完成即可。然后我们可以在如下目录下找到Groups.xml文件。
如图所示,找到Groups.xml文件。
查看Groups.xml文件内容,如图所示,可以看到我们刚刚通过组策略设置的一些值。其中可以看到cpassword字段,该字段的值就是我们修改后的密码经过AES-256进行加密后的密文。由于微软在2012年公布了该密码的私钥,导致该字段的密文能被解密成明文。
我们可以以域普通用户身份登录域内任意一台机器,使用PowerSploit中的Get-GPPPassword.ps1脚本执行如下命令将组策略中的密文解密成明文。
如图所示,使用Get-GPPPassword.ps1脚本成功获得密码明文。
(2) 针对组策略首选项提权的防御措施
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年5月13日发布了针对GPP组策略首选项提权漏洞的更新补丁 KB2928120,补丁更新后使用的方法就是不再将密码保存在组策略首选项中。
2. 滥用组策略委派属性
我们在查看组策略委派属性的时候,可以看到哪些用户和组对其有权限编辑、删除和修改。如果攻击者在获得高权限的时候,将组策略对象的完整权限赋予给某个恶意用户的话,则该恶意用户后续可以修改该组策略对象的配置,以达到攻击受此组策略影响的计算机和用户的目的。因此,该攻击手法通常被攻击者用来后权限维持。
如图所示,赋予给了普通域用户hack编辑、删除、修改组策略test的权限。如果hack用户被攻击者掌握,则攻击者可以利用hack用户对该test组策略进行修改等操作。
(1) 滥用组策略委派属性检测
我们可以使用PowerSploit中的PowerView.ps1脚本执行如下命令通过指定DN检测可能存在风险的组策略权限配置。
如图所示,可以知道可能存在权限配置风险的组策略GUID为B08E4C8C-581C-4421-973C-47D01E455623。
然后再通过如下命令查询该组策略作用的OU,以及OU内的用户和计算机。就可以知道该可能存在风险的组策略影响了哪些用户和计算机。
如图所示,可以知道该可能存在风险的组策略影响了哪些用户和计算机。
3. 利用组策略创建定时任务
当攻击者拥有了修改组策略的权限后,攻击者可以利用组策略创建定时任务实现批量命令执行!这在攻防演练中是攻击者常用的技术。
(1) 组策略通过计划任务实现批量命令执行上线C2
假如攻击者获得了修改域内组策略的权限,他现在想利用组策略的定时任务功能让运维部的所有机器批量上线C2,可以如下操作:
如图所示,点击Windows管理工具——>组策略管理,找到域——>运维部——>右键——>在这个域中创建GPO并在此处链接(C)。
输入组策略名字,我这里取名Plan_tasks,点击确定即可。如图所示:
即可在OU组织单位运维部下看到创建的Plan_tasks组策略。如图所示:
然后找到我们刚刚创建的Plan_tasks组策略,右键——>编辑。如图所示:
这里会有计算机配置和用户配置两种,我们选择计算机配置即可。如图所示,点击计算机配置——>首选项——>控制面板设置——>计划任务,然后右键新建。
这里有四种计划任务:
· 计划任务
· 即时任务(Windows XP)
· 计划任务(至少是Windows7)
· 即时任务(至少是Windows7)
关于四种计划任务的区别:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc770904(v%3dws.11)
如图所示,我们选择 即时任务(至少是Windows7),该即时任务会在执行一次之后就删除。但是,目标主机只要每次刷新组策略,该即时任务就会再执行一次。
然后弹出框如图所示,我们填计划任务名称为test,使用administrator权限执行该计划任务,这里勾选不管用户是否登录都要运行(W),然后会弹出框需要输入administrator用户的密码,输入administrator的密码后,点击确定。
然后切换到操作选项卡,这里填写如下powershell上线语句,点击确定。
如图所示,填入powershell上线语句。
即可看到创建成功的test即时任务,如图所示:
等待目标机器组策略更新完成后,即可看到目标主机上线。
非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。
参考文章:https://www.freebuf.com/news/231037.html