关于bypassuac的探究
字数 1954 2025-08-09 13:33:40

Bypass UAC 技术探究与实现

1. UAC 基础知识

1.1 UAC 概述

用户帐户控制 (User Account Control) 是 Windows Vista 及更高版本操作系统中的核心安全功能,主要作用:

  • 阻止恶意程序损坏系统
  • 帮助组织部署更易管理的平台
  • 应用程序和任务默认在非管理员帐户的安全上下文中运行
  • 阻止未经授权应用程序的自动安装
  • 防止无意中对系统设置进行更改

1.2 UAC 授权等级

通过组策略编辑器 (gpedit.msc) 可以配置 UAC 行为:

  1. 计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项
  2. 找到"用户帐户控制: 管理员批准模式中管理员的提升权限提示的行为"

可配置选项:

  • 不提示直接提升:关闭 UAC
  • 在安全桌面上提示凭据
  • 在安全桌面上同意提示
  • 提示凭据
  • 同意提示
  • 非 Windows 二进制文件的同意提示(默认设置)

1.3 权限提升机制

  • 程序只能在运行前要求提权
  • 已运行的进程无法再申请提权
  • 权限提升仅对此次进程有效
  • 提升权限的两种方式:
    • 自动提权请求(程序启动时申请)
    • 手动提权请求("以管理员身份运行")

2. 程序提权配置

2.1 程序清单文件 (manifest)

在 Visual Studio 中,通过 manifest 文件配置应用程序权限级别:

<requestedExecutionLevel 
    level="asInvoker" 
    uiAccess="false"/>

可选权限级别:

  • asInvoker:默认权限
  • highestAvailable:最高权限
  • requireAdministrator:必须是管理员权限

2.2 白名单程序

系统中有一些程序具有 autoElevate 属性为 True,会静默提升权限:

特征:

  1. manifest 中 autoElevate 属性为 true
  2. 运行时不弹出 UAC 弹窗
  3. 从注册表查询 Shell\Open\command 键值对

3. 寻找可用的 UAC 白名单程序

3.1 自动筛选脚本

使用 Python 脚本扫描 system32 目录下的可执行文件:

import os
from subprocess import *

path = 'c:\windows\system32'
files = os.listdir(path)

def GetFileList(path, fileList):
    newDir = path
    if os.path.isfile(path):
        if path[-4:] == '.exe':
            fileList.append(path)
    elif os.path.isdir(path):
        try:
            for s in os.listdir(path):
                newDir=os.path.join(path,s)
                GetFileList(newDir, fileList)
        except Exception as e:
            pass
    return fileList

files = GetFileList(path, [])

for eachFile in files:
    if eachFile[-4:] == '.exe':
        command = r'.\sigcheck64.exe -m {} | findstr auto'.format(eachFile)
        p1 = Popen(command, shell=True, stdin=PIPE, stdout=PIPE)
        if '<autoElevate>true</autoElevate>' in p1.stdout.read().decode('gb2312'):
            copy_command = r'copy {} .\success'.format(eachFile)
            Popen(copy_command, shell=True, stdin=PIPE, stdout=PIPE)
            print('[+] {}'.format(eachFile))
            with open('success.txt', 'at') as f:
                f.writelines('{}\n'.format(eachFile))

3.2 筛选结果

筛选出的白名单程序(部分):

  • ComputerDefaults.exe
  • fodhelper.exe
  • eventvwr.exe
  • slui.exe
  • msconfig.exe
  • Taskmgr.exe
  • wusa.exe
  • 等40多个系统程序

4. UAC 绕过技术实现

4.1 技术原理

利用 ComputerDefaults.exe 的自动提权特性:

  1. ComputerDefaults.exe 运行时查询注册表:

    • HKCU\Software\Classes\ms-settings\Shell\Open\command
    • HKCU\Software\Classes\ms-settings\Shell\Open\command\DelegateExecute
  2. 如果这两个键存在,则执行 command 指向的程序

  3. 由于 ComputerDefaults.exe 具有自动提权特性,其启动的程序也会继承高权限

4.2 关键注册表操作

  1. 创建注册表项

    RegCreateKeyExA(
        HKEY hKey,
        LPCSTR lpSubKey,
        DWORD Reserved,
        LPSTR lpClass,
        DWORD dwOptions,
        REGSAM samDesired,
        const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        PHKEY phkResult,
        LPDWORD lpdwDisposition
    );
    
  2. 设置注册表值

    RegSetValueExA(
        HKEY hKey,
        LPCSTR lpValueName,
        DWORD Reserved,
        DWORD dwType,
        const BYTE *lpData,
        DWORD cbData
    );
    
  3. 删除注册表项(用于清理痕迹):

    RegDeleteTreeA(
        HKEY hKey,
        LPCSTR lpSubKey
    );
    

4.3 实现步骤

  1. 创建注册表路径:

    HKCU\Software\Classes\ms-settings\Shell\Open\command
    
  2. 设置 DelegateExecute 键值

  3. 设置 command 默认值为恶意程序路径

  4. 启动 ComputerDefaults.exe

  5. 恶意程序以高权限运行

  6. 删除创建的注册表项

5. 防御检测与绕过

5.1 杀软检测情况

  1. Windows Defender

    • 直接修改注册表的操作通常不会被拦截
    • 可以正常绕过 UAC
  2. 360安全卫士

    • 直接执行免杀后的程序可以绕过
    • 注入 shellcode 到其他程序的方式无法绕过

5.2 注意事项

  1. 注入 shellcode 的方式无法绕过 UAC,因为注册表指向的是被注入的程序

  2. 直接修改注册表的方式较为敏感,但多数杀软不会拦截

  3. 建议使用免杀技术处理最终执行的 payload

6. 扩展思考

  1. 其他白名单程序

    • 除 ComputerDefaults.exe 外,还有多个系统程序可用
    • 每个程序的注册表查询路径可能不同
  2. 防御措施

    • 监控敏感注册表位置的修改
    • 限制高权限程序的子进程创建
    • 启用增强的 UAC 设置
  3. 检测方法

    • 检查不常见的程序启动高权限进程
    • 监控注册表中 ms-settings 等关键路径的修改

7. 总结

Bypass UAC 技术利用了 Windows 系统设计中的特性,通过合法的自动提权程序间接获取高权限。这种技术具有较高的隐蔽性,因为:

  1. 使用的是系统自带的白名单程序
  2. 注册表修改操作本身是合法的
  3. 最终的执行看起来像是系统行为

防御方需要从多个层面进行防护,包括但不限于注册表监控、进程行为分析和权限使用审计。

Bypass UAC 技术探究与实现 1. UAC 基础知识 1.1 UAC 概述 用户帐户控制 (User Account Control) 是 Windows Vista 及更高版本操作系统中的核心安全功能,主要作用: 阻止恶意程序损坏系统 帮助组织部署更易管理的平台 应用程序和任务默认在非管理员帐户的安全上下文中运行 阻止未经授权应用程序的自动安装 防止无意中对系统设置进行更改 1.2 UAC 授权等级 通过组策略编辑器 (gpedit.msc) 可以配置 UAC 行为: 计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项 找到"用户帐户控制: 管理员批准模式中管理员的提升权限提示的行为" 可配置选项: 不提示直接提升:关闭 UAC 在安全桌面上提示凭据 在安全桌面上同意提示 提示凭据 同意提示 非 Windows 二进制文件的同意提示(默认设置) 1.3 权限提升机制 程序只能在运行前要求提权 已运行的进程无法再申请提权 权限提升仅对此次进程有效 提升权限的两种方式: 自动提权请求(程序启动时申请) 手动提权请求("以管理员身份运行") 2. 程序提权配置 2.1 程序清单文件 (manifest) 在 Visual Studio 中,通过 manifest 文件配置应用程序权限级别: 可选权限级别: asInvoker:默认权限 highestAvailable:最高权限 requireAdministrator:必须是管理员权限 2.2 白名单程序 系统中有一些程序具有 autoElevate 属性为 True,会静默提升权限: 特征: manifest 中 autoElevate 属性为 true 运行时不弹出 UAC 弹窗 从注册表查询 Shell\Open\command 键值对 3. 寻找可用的 UAC 白名单程序 3.1 自动筛选脚本 使用 Python 脚本扫描 system32 目录下的可执行文件: 3.2 筛选结果 筛选出的白名单程序(部分): ComputerDefaults.exe fodhelper.exe eventvwr.exe slui.exe msconfig.exe Taskmgr.exe wusa.exe 等40多个系统程序 4. UAC 绕过技术实现 4.1 技术原理 利用 ComputerDefaults.exe 的自动提权特性: ComputerDefaults.exe 运行时查询注册表: HKCU\Software\Classes\ms-settings\Shell\Open\command HKCU\Software\Classes\ms-settings\Shell\Open\command\DelegateExecute 如果这两个键存在,则执行 command 指向的程序 由于 ComputerDefaults.exe 具有自动提权特性,其启动的程序也会继承高权限 4.2 关键注册表操作 创建注册表项 : 设置注册表值 : 删除注册表项 (用于清理痕迹): 4.3 实现步骤 创建注册表路径: 设置 DelegateExecute 键值 设置 command 默认值为恶意程序路径 启动 ComputerDefaults.exe 恶意程序以高权限运行 删除创建的注册表项 5. 防御检测与绕过 5.1 杀软检测情况 Windows Defender : 直接修改注册表的操作通常不会被拦截 可以正常绕过 UAC 360安全卫士 : 直接执行免杀后的程序可以绕过 注入 shellcode 到其他程序的方式无法绕过 5.2 注意事项 注入 shellcode 的方式无法绕过 UAC,因为注册表指向的是被注入的程序 直接修改注册表的方式较为敏感,但多数杀软不会拦截 建议使用免杀技术处理最终执行的 payload 6. 扩展思考 其他白名单程序 : 除 ComputerDefaults.exe 外,还有多个系统程序可用 每个程序的注册表查询路径可能不同 防御措施 : 监控敏感注册表位置的修改 限制高权限程序的子进程创建 启用增强的 UAC 设置 检测方法 : 检查不常见的程序启动高权限进程 监控注册表中 ms-settings 等关键路径的修改 7. 总结 Bypass UAC 技术利用了 Windows 系统设计中的特性,通过合法的自动提权程序间接获取高权限。这种技术具有较高的隐蔽性,因为: 使用的是系统自带的白名单程序 注册表修改操作本身是合法的 最终的执行看起来像是系统行为 防御方需要从多个层面进行防护,包括但不限于注册表监控、进程行为分析和权限使用审计。