首页
社区
课程
招聘
[翻译]Windows本地管理访问和组策略
2019-3-22 11:00 5676

[翻译]Windows本地管理访问和组策略

2019-3-22 11:00
5676

我花了很多时间研究组策略现在可能是对它进行总结的好时机了,我想写一些关于组策略的文章。 我特别想强调为什么对客户端开放管理访问是非常糟糕的。 尽管我知道许多IT组织完全信任组策略,但每个人都需要对组策略和管理员访问权限的缺点了然,这一点非常重要。人们通常认为配置是由组策略设置,因此能够对整个网络环境进行一致的推广(设置和清理)。 但是,情况可能并非如此,特别是如果您允许在客户端/服务器上开放本地管理员权限。 

打破一个神话:所有组策略设置都将在重启或90分钟后重新应用

组策略不会自动重新应用,尽管这是一个常见的误解,即机器在每次组策略刷新或重新启动后运行gpupdate /Force。默认情况下,这不是组策略的工作方式。机器每90分钟检查一次组策略,随机偏移最多30分钟。在检查期间,它将验证应用的组策略自上次启用以来是否发生了更改。如果中央组策略中没有任何更改,它将不执行任何操作,并假定启用的组策略是兼容的。这里有一个例外,那就是客户端处扩展an'quan'xin(security client side extensions),即使没有任何更改,这些设置也会每16小时重新处理一次。让我们更详细地研究一下它是如何工作的。 首先,我们创建了一个名为“一些重要设置”的新组策略,并将其链接到包含我的计算机帐户的OU:

如果标记它,组策略管理器的正确部分将显示更多信息。如果点击Details选项卡,可以看到Group Policy的唯一ID:
每当创建组策略时,也会创建\\domain.name\sysvol\domain.name策略下的文件夹。该文件夹以唯一ID命名:
Within that folder there are two sub-folders, 在该文件夹中有两个子文件夹,machine和user。还有一个名为gps.ini的文件。无论何时向组策略的机器部分或用户部分添加设置,设置都将添加到正确的文件夹下。这可以是策略、安全信息(Secedit)或首选项。如果打开GPT.ini文件,可以看到它是一个空文件:
每当对组策略进行更改时,都会更新该文件并添加一个新版本号。例如,如果我们只是设置一个机器策略设置,并重新访问GPT.INI,它将看起来像这样: 
可以看到,版本号增加了一。如果现在去客户端,就要么等到第二组策略更新,做一个引导或运行gpupdate,最后它将应用此策略,在这个位置创建一个组策略的本地副本:C:\Windows\System32\GroupPolicy\\sysvol\oddvarmoe\Policies\{51799E88-A6DC-471A-9F0A-D213E5C3FCC3}。
这是我们刚刚创建的中央组策略的精确副本。如果现在更改中央组策略,版本号将增加一。这意味着我们现在有了一个集中版本2和客户端版本1的组策略。在下一次组策略刷新或引导中,客户端组策略(负责应用组策略配置的Windows客户机组件)将看到版本号集中地发生了更改,现在则必须使用新策略并覆盖现有的策略。这就是组策略是如何被应用。当您使用/Force运行gpupdate时,您告诉组策略客户端忽略版本号,并获取所有组策略的新副本并应用它们。 
但是,如果在组策略中将用户和计算机设置组合恰里,则版本号会显著增加,这是有原因的。例如,这里我们刚刚添加了一个随机的用户设置,触发了其中一个版本的用户设置。看看这个数字:
在组策略管理中,这些数字是正确的,但是在GPT.ini文件中,我们可以看到它已经增加到了65538。前16位是用户版本,后16位是计算机版本。为了更容易理解,我们可以转换它。首先,将十进制转换为十六进制。这可以用计算器在Windows中完成 :
可以看到,这个值在十六进制中是0x10002。Windows计算器会删除前置零,因此真正的值是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管理员定义了一个组策略,该策略支持在流程创建事件中设置Include命令行。这个设置使日志信息更加丰富,因此您可以看到process命令行选项(顺便说一下,每个人都应该打开这个选项)。组策略客户端在客户端的注册表中使用一个名为processcreationinclude ecmdline_enabled的DWORD来设置它,该DWORD位于以下注册表项下:

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

让我们假设攻击者以管理员身份破坏了一个设置(我们将更改HKLM中的内容,这需要本地管理员访问),并希望删除该设置,以便日志信息更少。攻击者可以删除该密钥,也可以将其设置为0。攻击者这样做之后,客户端将不再在事件日志中显示进程命令行。 

现在一个典型的假设是:如果运行gpupdate,来等待下一个组策略刷新周期,或者引导机器获取设置。正如本文前面所解释的那样,这是行不通的。这是组策略的一个弱点,但是此行为可以且应该被更改来作为将展示的一个安全基准示例。更改此行为的设置被命名为Process,即使组策略对象没有更改,还是可以针对组策略的所有不同部分(脚本、安全性、注册表、无线、首选项等)进行调整。启用此功能后,组策略客户端将不再查看版本号,并始终启用设置。在示例中,我们希望为注册表策略操作启用此功能。

在组策略中设置此设置之后,尝试将注册表项更改为0,并执行gpupdate或引导计算机,它将更改回1。很好,就像预期的那样!
这是在环境中设置的一个很好的设置,这样所有的设置都可以应用。但是,如果攻击者以管理员的身份获得立足点,也可以绕过这种方法。设置本身存储在注册表中,这意味着我们作为管理员可以操作它来改变行为。
设置命名NoGPOListChanges并存储在以下关键字:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}

如果你改变的值从0到1,你将重新改变行为,这样的话你就需要修改组策略集中增加版本号或者执行gpupdate /force来重新更该行为。 

结论

这里我们看到了管理访问和组策略的许多问题之一,您可能已经知道,管理访问应该在组织内部尽可能地最小化。基本上,如果有管理员登录到您的计算机/服务器,您不能确保设置符合您在组策略中设置的内容。如果这是一个大问题,您应该考虑根据所需设置检查遵从性的其他产品。由于我主要使用Microsoft技术,所以我知道System Center Configuration Manager提供了这个(遵从性设置)。如果必须使用组策略,建议记录组策略,以确保它是健康的,并按预期运行。可以在这里找到组策略的事件id列表:

https://blogs.technet.microsoft.com/grouppolicy/2009/03/04/group-policy-troubleshooting-helpful-event-log-categories/

Windows管理的未来是现代管理模式。你可能会使用开放移动联盟统一资源标识符(Open Mobile Alliance Uniform Resource Identifier, OWA-URI),许多移动设备制造商使用它来控制设备上的特性、应用设置和衡量合规性。其安全性和潜在的缺陷我们可以在以后的另一篇文章中讨论。 

原文:https://www.trustedsec.com/2019/01/local-admin-access-and-group-policy-dont-mix/

翻译:wangrin

看雪翻译小组




[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-1-11 15:35 被BDomne编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回