在拥有本地服务器权限情况下的组策略安全研究

xiaohui Web安全 2019年2月11日发布
Favorite收藏

导语:组策略(Group Policy)是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。

组策略介绍

组策略(Group Policy)是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。

在安全性方面组策略设置是由目标应用程序自愿实施的。在许多情况下,这只是禁止访问特定功能的用户接口。另外,恶意用户可以修改或干扰应用程序,使其不能成功读取组策略设置,从而实行更低或者默认的安全设置。

对此,微软发布了一个称之为“高级组策略管理”(Advanced Group Policy Management,AGPM)的工具来更改组策略。此工具可供任何微软桌面优化包授权的组织使用。此高级工具允许服务器检查/签出组策略对象的更改,跟踪组策略对象的变更,以及对组策略对象的更改实施审核工作流。

AGPM工具由两个部分组成——服务器和客户端。服务器是一个Windows服务,它在同一台计算机或网络共享上的存档位置存储其组策略对象。客户端是组策略管理控制台的一个插件,并连接到AGPM服务器。客户端可通过组策略配置。

不过Windows 8引入了被称为“组策略更新”的一个新功能。此功能允许服务器强制在特定组织单位的所有计算机帐户上更新一个组策略。这会在计算机上创建一个计划任务,在10分钟内运行GPUPDATE命令,具体开始时间随机调整,以免域控制器过载。

但根据我的经验,对客户端进行管理访问的措施可能非常糟糕。对此你可能会不信,因为我知道目前有许多IT组织完全信任组策略,但让每个人都了解组策略和服务器访问权限的漏洞,则是很重要的。

组策略的其中一个版本名为本地组策略(缩写“LGPO”或“LocalGPO”),这可以在独立且非域的计算机上管理组策略对象。

组策略对象会按照以下顺序处理:

1.本地:任何在本地计算机的设置。在Windows Vista之前,每台计算机只能有一份本地组策略。在Windows Vista和之后的Windows版本中,允许每个用户帐户分别拥有组策略。

2.站点:任何与计算机所在的活动目录站点关联的组策略。(活动目录站点是旨在管理促进物理上接近的计算机的一种逻辑分组)。如果多个策略已链接到一个站点,将按照服务器设置的顺序处理。

3.域:任何与计算机所在Windows域关联的组策略。如果多个策略已链接到一个域,将按照服务器设置的顺序处理。

4.组织单元:任何与计算机或用户所在的活动目录组织单元(OU)关联的组策略。(OU是帮助组织和管理一组用户、计算机或其他活动目录对象的逻辑单元)。如果多个策略已链接到一个OU,将按照服务器设置的顺序处理。

应用到指定计算机或用户的组策略设置结果被称为策略结果集(RSoP)。可以使用gpresult命令显示计算机和用户的RSoP信息。

但是,情况可能并非如此,特别是如果你允许在客户端或服务器上使用本地服务器。

所有组策略设置都必须在重新启动后或90分钟后重新应用

首先大家要明白,组策略是不会自动重新应用的,之所以大家会有自动重新应用的误解,原因是每次组策略刷新或重新启动后,计算机都会运行“gpupdate / Force”。但默认情况下,组策略不是这样运行的。计算机会每90分钟检查一次组策略,随机间隔不超过30分钟。在检查期间,计算机会验证应用的组策略自上次应用以来是否已更改。如果中央组策略没有任何更改,它将不会执行任何操作,并且它将假定已经应用的组策略符合设置要求。下面,让我们详细地了解组策略设置的工作原理。

首先,我们会创建了一个名为“一些重要设置”的新组策略,并将其链接到包含我的计算机帐户的组织单元(OU)。

om1.png

如果我们对它进行标记,组策略管理器的右侧部分将显示更多信息。如果单击“详细信息”选项卡,则可以看到组策略的唯一ID。

om2.png

创建组策略的同时,也会创建\\ domain.name \ sysvol \ domain.name \ Policies下的文件夹,且该文件夹以唯一ID命名。

om3-768x452.png

在该文件夹中有两个子文件夹,计算机和用户,除此之外,还有一个名为GPT.ini的文件。

每当你将设置添加到组策略的计算机部分或用户部分时,这些设置都会被添加到正确的文件夹下,这可以是策略、安全信息(Secedit)或首选项。如果我们打开GPT.ini文件,我们可以看到它是空的。

om4-768x241.png

每当对组策略进行更改时,都会更新此文件并添加新版本号。例如,如果我们只是设置一个计算机策略设置并重新访问GPT.INI,它将如下所示。

om5-768x223.png

正如你所看到的那样,版本号增加了一个。

如果我们现在进入客户端,并等待下一次组策略刷新、启动或运行“gpupdate”,它将应用此策略并创建位于此处的组策略的本地副本:

C:\Windows\System32\GroupPolicy\DataStore\0\sysvol\oddvar.moe\Policies\{51799E88-A6DC-471A-9F0A-D213E5C3FCC3}

以上就是我们刚刚创建的中央组策略的精确副本。要完成一组计算机的中央管理目标,计算机应该接收和执行组策略对象。驻留在单台计算机上的组策略对象仅适用该台计算机。要应用一个组策略对象到一个计算机组,组策略依赖于活动目录(或第三方产品,例如ZENworks Desktop Management)进行分发。活动目录可以分发组策略对象到一个Windows域中的计算机。如果我们现在更改中央组策略,则版本号将增加一。这意味着我们现在有一个集中在版本2和客户端版本1上的组策略。这样在下一个组策略进行刷新或重启中,组策略客户端(Windows客户端上负责应用组策略设置的组件)将发现版本号已经更改,此时,必须应用新策略并覆盖现有策略,这就是组策略的应用方式。

当你使用/ Force运行“gpupdate”时,你就是在告诉组策略客户端忽略版本号并获取所有组策略的新副本并应用它们。

但是,如果你将用户和计算机设置组合在一个组策略中,则版本号将显著增加,这是有原因的。例如,在下图中,我们刚刚添加了一个随机用户设置,就触发了其中一个用户设置的版本。

om6-768x586.png

在组策略管理中,这些数字是正确的,但在GPT.ini文件中,我们可以看到它已增加到65538. 上面的16位是用户版本,下面的16位是计算机版本。为了让它更容易理解,我们可以转换它。

首先,我们将十进制值转换为十六进制,这可以通过Windows中的计算器完成,如下所示。

om7-768x519.png

如上所示,这个值转换为十六进制时是0x10002。此时,Windows计算器将删除前面的0,所以正确的值是0x00010002。四个十六进制字符总共是16位,在得到这些数值后,我们可以把它分成两个16位的值——00010002。

前四位数字是用户设置的版本,后四位数字是计算机设置的版本号。这些都是很低的数,所以很明显是1和2。如果它是一个更高的十六进制数,你可以截取每一部分的值,在计算器中输入截取的十六进制值,并查看对应的十进制的值以获得版本号。

了解组策略设置的工作原理后,就可以很方便地接下来,了解其中存在的弱点。

大多数组策略设置最终会在以下注册表项下的注册表中结束:

· HKEY_LOCAL_MACHINE\SOFTWARE\Policies

· HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies

· HKEY_CURRENT_USER\Software\Policies

· HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies

其中存在的问题是,如果你是手动更改在注册表中应用的设置,它将不会更改回中央组策略中原先设置的值,除非你集中更改组策略并增加版本号,或者如果你在客户端上运行“gpupdate / Force”。

示例说明

假设你为IT服务器定义了一个组策略,该组策略支持设置“在流程创建事件中包含命令行”。则此设置使日志信息更加丰富,因此你可以看到进程命令行选项(顺便说一下,每个人都应该打开这个选项)。组策略客户端在客户端的注册表中使用一个名为“ProcessCreationIncludeCmdLine_Enabled”的DWORD对其进行设置,该DWORD位于以下注册表项中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit
Value of 1 = Enabled, Value of 0 = Disabled

om8.png

假设攻击者借用服务器管理员的身份来攻击一个盒子(要更改HKLM中的内容,就需要本地服务器访问权限),并趁此删除此设置以便将日志信息量减少。则攻击者可以删除该密钥或将其设置为0。攻击者完成此操作后,客户端将不再在事件日志中显示进程命令行。

om9-768x613.png

假设现在运行的是“gpupdate”,则现在就是等待下一个组策略刷新周期,或者启动计算机以获取设置。正如本文前面解释的那样,这是行不通的。

这就是组策略的弱点之一,但是,这种行为可以而且应该作为你将发现的安全基准的一个示例进行更改。将此行为的设置名更改为“即使组策略对象没有更改,也要进行处理”,并且可以针对组策略的所有不同部分(脚本、安全性、注册表、无线、首选项等)进行调整。启用此选项后,组策略客户端将不再查看版本号,并始终应用这些设置。在我们的示例中,我们希望为注册表策略处理启用此功能。

om10-768x396.png

在组策略中完成此设置后,我们会尝试将注册表项更改为零并执行“gpupdate”或启动计算机,它将更改为1。现在,组策略就可以按预期运行了。但是,如果攻击者通过服务器身份也可以绕过这些设置。由于设置本身存储在注册表中,这意味着我们可以使用服务器来更改组策略行为。

该设置名为“NoGPOListChanges”,以DWORD的形式存储在下面的注册表项中:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}

如果将值从0更改为1,则组策略行为将返回以前的更改,此时你需要集中更改组策略以增加版本号,或者执行“gpupdate / force”以重新获取它。

总结

通过本文,我们看到了管理访问和组策略的许多问题之一,所以应尽可能在组织内尽量减少管理访问。如果你的服务器登录到你的计算机或服务器上,那么你无法确保这些设置与你在组策略中设置的设置是一致的。由于我主要使用Microsoft技术,因此我知道System Center Configuration Manager提供此功能。如果你必须使用组策略,建议你记录组策略,以便确保它健康并按需运行,你可以在此找到组策略的事件ID列表。

未来,Windows管理可能会使用开放移动联盟统一资源标识符(OWA-URI),许多移动设备制造商使用它来控制设备上的功能、应用设置。

本文翻译自:https://www.trustedsec.com/2019/01/local-admin-access-and-group-policy-dont-mix/如若转载,请注明原文地址: http://www.4hou.com/web/15980.html
点赞 7
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论