袁来如此的工作笔记
袁来如此的工作笔记
竹杖芒鞋轻胜马,谁怕? 一蓑烟雨任平生。

Windows用户帐户控制(UAC)的绕过与缓解方式

浏览量:1801

缓解措施


防止绕过 UAC的最好的方法是在用户的机器中不要给予他们本地管理员权限。在企业环境中的绝大多数用户帐户你都应该这么去做,以减少受攻击面。然而,这不适用于在默认情况下具有本地管理员权限的家庭用户。


在实际的绕过中,仅对 UAC设置中的中间那两个选项起作用。要查看你的设置你可以在控制面板——用户帐户——改变用户帐户控制设置 中查看。


仅当应用程序尝试更改我的计算机时通知我(默认)

仅当应用程序尝试更改我的计算机时通知我(不降低桌面亮度)


因此,我们需要设置为“总是通知”,但是这样做有点像Windows Vista一样会持续进行通知,所以这并不实用,并且到最后,用户可能会设置为“从不通知”,这样的话,看起来这并不是一个好主意。


Microsoft 提供了 10 个UAC策略,我们有必要在你的域环境中实施策略前花点时间来了解并测试这些策略。你可以在开始-运行中键入 secpol.msc 来打开本地计算机的本地安全策略并展开 本地策略,在安全选项里可以找到应用在本地计算机的用户帐户控制策略。可以使用 rsop.msc 查看在域中应用到本地的组策略。


在注册表中,UAC的默认设置如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]"ConsentPromptBehaviorAdmin"=dword:00000005"ConsentPromptBehaviorUser"=dword:00000003"EnableInstallerDetection"=dword:00000001"EnableLUA"=dword:00000001"EnableSecureUIAPaths"=dword:00000001"EnableUIADesktopToggle"=dword:00000000"EnableVirtualization"=dword:00000001"FilterAdministratorToken"=dword:00000000"PromptOnSecureDesktop"=dword:00000001"ValidateAdminCodeSignatures"=dword:00000000

把“用户帐户控制设置”设置为“总是通知”,相关的注册项的值改变如下:

"ConsentPromptBehaviorAdmin"=dword:00000002

把“用户帐户控制设置”设置为“仅当应用程序尝试更改我的计算机时通知我(不降低桌面亮度)” 相关的注册项的值改变如下:

"PromptOnSecureDesktop"=dword:00000000

当把“用户帐户控制设置”设置为“从不通知”时,相关的注册项的值改变如下:

"ConsentPromptBehaviorAdmin"=dword:00000000"EnableLUA"=dword:00000000"PromptOnSecureDesktop"=dword:00000000

我们注意到 "EnableLUA"的值为0 ,意味着UAC已被禁用。这是非常危险的,因此,强烈推荐您在组策略中设置此设置选项,这样可以在用户或者是被以前删除的恶意软件重置/改变了设置选项后,依旧可以应用策略,启用UAC。


用户帐户控制: 以管理员批准模式运行所有管理员


一旦禁用此策略将有不只一个恶意进程能够直接并无需任何绕过行为就能以高级别完整性运行而且 IE浏览器进程的完整性级别为中等。在IE浏览器提供的额外的安全性中,UAC 给用户提供了保护模式 (沙盒)。IE浏览器通常在低级别完整性的子进程中运行,因此会将IE 漏洞所带来的一些威胁最小化并且在低级别完整性中,可写入的位置很少。


上述这些改变在 Windows 7中有效,在Windows 8/8.1中 EnableLUA 不会被更改为禁用状态。因此,在将“用户帐户控制”设置为“从不通知”时,只产生了下列改变:

"ConsentPromptBehaviorAdmin"=dword:00000000"PromptOnSecureDesktop"=dword:00000000

这个时候,由于“EnableLUA”=dword:00000001的值没有发生改变,因此, UAC没有完全禁用,同时IE浏览器依旧运行在低级别完整性中。


然而,如果一个用户使用本地管理员帐户登录到计算机时,UAC的设置对于所有使用高级别完整性的进程是不起作用的。因此,在Windwos 7/8 和 8.1中,总是要确保用户没有使用本地管理员帐户登录计算机,如果将域帐户添加到本地管理员组中将会更好的请求本地管理员权限。


不管出于什么原因使用本地管理员帐户登录计算机,最好设置 UAC 策略为启用状态。


用户帐户控制: 对内置管理员帐户使用管理审批模式

“FilterAdministratorToken”=dword:00000001

另一个选项则是如果在系统上不是必须需要这些程序,你可以重命名或删除Mcx2Prov.exe、 sysprep.exe、 cliconfg.exe 和 pwcreator.exe 可执行文件,这样,在第二个步骤中利用 DLL 劫持就会失败。


最后,如果用户请求本地管理员权限并且值得他们修改计算机的UAC为“总是通知“,那么他们将会得到持续不断的通知。


用户帐户控制: 在管理审批模式下管理员的提升提示行为(在安全桌面上同意提示)


结论


这些绕过方式仅在满足所有的条件时才会起作用,只要有一个条件不满足,那么绕过 UAC就会失败。Office 文档进程的完整性级别为中等,因此,这将是一个理想的用于 UAC绕过的目标。由于可以毫不费力地实现 UAC 的绕过,真正唯一能做的就是将 UAC 设置为"始终通知"或删除该用户的本地管理权限。最后可以使用像微软的 EMET或 MalwareBytes 来更好的防御零日漏洞。


这是一些源代码和二进制文件,你可以自行测试。我测试了 Windows 企业版的 7/8/8.1 64 位系统。


打赏