本文将探讨如何利用Windows的一个特性 来规避用户组策略的限制。请注意,绕过用户组策略并非总是最佳实践,它确实存在一定的安全风险 。具体而言,这种行为可能对系统的安全环境产生深远影响,具体取决于用户组策略的配置。我在Windows 7和Windows 10 Enterprise x64(版本10.18363,更新1909)上对此技术进行了详细测试,并发现整个过程无需管理员权限即可完成。此技术主要涉及到Windows登录过程中用户账户注册表的加载机制,因此,要理解如何利用这一技术,我们首先需要深入探究用户登录Windows账户的具体流程。
02用户登录过程
在登录Windows账户时,系统会启动一系列操作来加载与该账户相关的用户设置。这些设置主要来源于用户的"Registry Hive"(注册表配置单元),即我们在打开注册表(regedit)时所看到的HKEY_CURRENT_USER子项。这个子项包含了众多与用户相关的设置,不仅涉及操作系统的核心功能,还包括已安装的各种应用程序的配置信息。值得注意的是,Registry Hive实际上是一个以.dat为扩展名的文件,其具体路径位于%USERPROFILE%目录下,名为ntuser.dat。
在用户登录的过程中,ProfSvc(用户配置文件服务)会负责定位这个文件,并调用NtLoadKeyEx来加载Registry Hive。如果用户在登录会话期间尝试修改注册表键值,系统会通过调用相应的Microsoft API来进行权限检查,确保用户具备相应的修改权限。

03绕过用户组策略
组策略(Group Policy)是Windows操作系统提供的一种强大功能,它允许域管理员在主机级别或用户级别进行精细的配置。当用户登录时,这些组策略设置会被推送到用户的账户中,并保存在%USERPROFILE%tuser.dat文件中。然而,这些用户策略对域用户而言是只读的,从而确保了策略的稳定性,防止了任意的篡改。尽管如此,我们仍然可以通过某些技术手段来尝试"绕过"这些用户策略的限制。
通过一个全新的Hive,我们可以成功地绕过或修改那些被保护的强制型用户组策略。具体的操作步骤如下:
-
创建一个名为ntuser.man的用户Registry Hive;
-
在Hive中删除或修改我们想要保存的策略键值;
-
将修改后的文件放置到目标主机的%USERPROFILE%文件夹内;
-
注销当前用户并重新登录,以使更改生效。

了解用户组策略的用户都知道,系统会在用户登录时及之后的定期间隔内重新同步 并应用组策略,这可能导致我们修改过的策略被覆盖。为了应对这一问题,我深入研究了GpSvc内部对ACL的处理逻辑,发现当GpSvc遇到我们的"策略"子键时,它会调用ForceRegCreateKeyEx函数。通过移除新创建的子键权限,可以阻止SYSTEM获得相应的写入权限。

04其他潜在影响
除了用于绕过用户组策略之外,这种方法还可能引发其他潜在影响。例如,不当操作可能导致系统安全性降低,或者引发其他不可预见的后果。因此,在使用这种方法时,必须谨慎权衡利弊,确保仅在合适的场合下进行操作。
-
单个文件代码执行。攻击者可能利用某些Windows系统的漏洞,以非管理员权限将文件上传至系统。若漏洞利用程序成功上传了%USERPROFILE%tuser.man文件,并配合自启动注册表键值,便能远程执行SMB共享中的文件。
-
避开反病毒/EDR的监控。某些反病毒/EDR解决方案可能仅通过拦截注册表API或内核回调函数来监测注册表变动。我们可以采用替换整个注册表Hive的方法来进行修改,以此绕过这些监控和检测机制。
-
拒绝服务攻击。通过在%userprofile%目录下释放一个空白的ntuser.man文件,我们可以阻止ProfSvc加载注册表,从而使用户无法正常登录。