Persistence: Windows UAC bypass and attack methods
UAC简单介绍
UAC(User Account Control),作为Windows系统中的一种安全机制,其主要目的是为了保证应用程序和任务始终在非管理员账户的安全上下文中运行,除非系统做了管理员级别的访问权限(输入管理员账号密码或者手动授权),否则一般是不允许未经授权的应用程序自动进行安装。
主要登录过程:
- 如果资源拥有了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
有关更多介绍,请查看微软官方文档
主要提权思路
- DLL劫持(难度高,场景利用有限制)
- 系统白名单文件结合注册表
- COM劫持绕过
- 注入进程(特权 bypass UAC)
- 利用现成的洞
对现有的进程进行分析
使用ProcessExplorer https://download.sysinternals.com/files/ProcessExplorer.zip
这里需要介绍一个网站,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模块绕过
尝试getsystem
,发现失败,background
放到后台,使用exploit/windows/local/ask
模块进行攻击(实战情况下需要用户手动确认)
1 | [*] Backgrounding session 2... |
目标机子会返回
之后会重新建立一个绘画,然后就绕过成功了
bypassuac模块绕过
同样放到后台,然后使用exploit/windows/local/bypassuac
进行绕过,一样的配方,一样的操作。
其他
这仓库里 https://github.com/hfiref0x/UACME 有几十种bypassuac的方法,还有这个工具也可以方便我们快速bypass,https://github.com/Adminisme/ByPassUACTools
具体防御方法
在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。
在家庭网络环境中,建议使用非管理员权限进行日常办公与娱乐等活动。使用本地管理员权限登录的用户,将UAC设置为“始终通知”或者删除该用户的本地管理员权限。- from 铭说 | 浅析UAC原理及绕过提权
Reference
Persistence: Windows UAC bypass and attack methods
https://iloli.moe/2022/10/11/Persistence-Windows-UAC-bypass-and-attack-methods/