基于Windows UAC(用户账户控制)虚拟化文件与注册表重定向(UAC Virtualization File and Registry Redirection)滥用的无文件攻击与防护
字数 2623
更新时间 2026-01-30 13:42:45

基于Windows UAC(用户账户控制)虚拟化文件与注册表重定向(UAC Virtualization File and Registry Redirection)滥用的无文件攻击与防护

这个概念较为深入,我会将其拆解为几个递进的步骤,确保你能清晰地理解。

步骤 1: 理解核心基础 —— 什么是UAC虚拟化?
在Windows(尤其是Vista及之后版本)中,用户账户控制 的一个核心功能是保护系统完整性。当一个非管理员标准用户运行一个旧版应用程序(未声明其兼容性,或未嵌入清单文件请求管理员权限)时,系统会认为该程序“不知道”如何在UAC环境下安全运行。
为了保护关键的系统和程序文件(通常位于Program FilesWindows目录)和注册表(如HKEY_LOCAL_MACHINE),UAC会启动一种名为文件和注册表虚拟化的兼容性机制。简单来说,系统会将应用程序尝试写入受保护位置的操作,“重定向”到用户专属的、安全的位置

步骤 2: 虚拟化重定向的具体路径
这是理解攻击的关键。当一个未提权的进程试图写入受保护位置时,实际写入的路径会发生改变:

  • 文件虚拟化路径:被重定向到%LOCALAPPDATA%\VirtualStore\目录下。
    • 例如,程序尝试写入C:\Program Files\MyApp\config.ini,实际上会写入C:\Users\<用户名>\AppData\Local\VirtualStore\Program Files\MyApp\config.ini
  • 注册表虚拟化路径:被重定向到用户配置单元下的一个虚拟化区域。
    • 例如,程序尝试写入HKEY_LOCAL_MACHINE\Software\MyApp\Settings,实际上会写入HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\MyApp\Settings

这种机制让旧程序“以为”自己写入了系统位置,实则操作被隔离在用户沙盒内,防止了系统被污染。

步骤 3: 攻击者如何滥用此机制?—— 无文件攻击视角
攻击者并非利用此机制来运行旧程序,而是利用其重定向行为的确定性系统/其他程序可能从虚拟化位置读取数据的特性,进行无文件攻击:

  1. 侦察与布局:攻击者首先需要确定目标系统上某个高权限进程(如系统服务、管理员启动的程序)会从某个特定的系统文件或注册表键读取配置、脚本或DLL路径。这个目标通常是已知的,或通过侦察发现。

  2. 诱导写入虚拟化位置:攻击者以一个非管理员、标准用户权限运行一个受控的恶意进程(或利用一个已存在的、未提权的被入侵进程)。该进程被精心设计,使其触发UAC虚拟化。然后,它向那个被高权限进程读取的受保护路径(如C:\Windows\System32\下的某个文件或HKLM\Software\下的某个键值)写入恶意负载(如一个恶意DLL的路径、一个脚本或一个配置文件)。

  3. 利用重定向:由于进程权限不足,这次写入操作不会成功写入真正的系统位置,而是被UAC自动、透明地重定向到了对应的用户虚拟化位置VirtualStore)。此时,恶意负载被“种”在了这个虚拟的、属于当前用户的目录或注册表键中。

  4. 触发高权限进程执行:攻击者随后触发或等待那个高权限目标进程启动。关键来了:在某些特定场景下(尤其是一些设计不严谨的旧版或第三方应用程序/服务),这个高权限进程在尝试从受保护的系统路径读取时,可能会错误地遵循虚拟化重定向逻辑,或者其搜索顺序包含了虚拟化位置,从而读取并加载/执行了攻击者放置在虚拟化位置中的恶意负载。

步骤 4: 攻击的独特优势与“无文件”特性

  • 无磁盘文件残留(在某些变体中):攻击的核心是利用虚拟化位置的配置或路径指向。恶意负载本身可能是一个存储在虚拟化位置的脚本、或一个指向远程共享的UNC路径。恶意代码本身可能不在磁盘上,而是通过虚拟化位置被引用并直接在内存中加载执行。
  • 绕过传统文件监控:安全软件通常重点监控真实的系统目录。而用户AppData\Local\VirtualStore目录往往不被视为高危区域,恶意活动可能被忽略。
  • 权限提升的桥梁:攻击始于低权限用户,通过操纵高权限进程读取被污染的数据,最终实现代码在更高权限上下文中执行,达成权限提升或持久化。

步骤 5: 防御与检测措施

  1. 应用程序现代化:确保所有应用程序都具有正确的清单文件,声明其所需的权限级别(asInvoker, highestAvailable, requireAdministrator),从而避免触发UAC虚拟化,从根本上切断此攻击路径。
  2. 启用并强化UAC:将UAC设置为最高级别(始终通知),防止恶意程序在用户不知情下触发虚拟化操作。
  3. 安全策略配置:通过组策略可以禁用文件和注册表虚拟化(计算机配置 -> 管理模板 -> Windows组件 -> 应用程序兼容性 -> 关闭应用程序兼容性引擎中的相关设置),但这可能影响旧版应用的兼容性,需谨慎评估。
  4. 高级监控与检测
    • 监控对%LOCALAPPDATA%\VirtualStore\目录下,特别是Program FilesWindows子目录中的非典型写入操作
    • 监控对HKEY_CURRENT_USER\Software\Classes\VirtualStore\注册表路径下的写入操作
    • 使用进程监视工具,追踪高权限进程的文件与注册表读取操作,观察其是否意外地从虚拟化位置加载了资源。
    • 实施应用程序控制策略(如AppLocker、WDAC),限制未签名或不受信任的代码执行,即使它从虚拟化位置被加载。
  5. 代码审计与安全开发:对于自行开发的高权限服务或应用程序,确保其读取配置或依赖项时,使用明确的、完整限定的路径,并且不依赖于可能被虚拟化重定向的API行为。

通过以上步骤,你应该能够理解UAC虚拟化机制本身的设计初衷,以及攻击者如何将其扭曲为一种进行文件与注册表操作重定向、从而实施权限提升或持久化的无文件攻击载体。防护的核心在于控制虚拟化的触发、监控虚拟化位置的活动,以及确保高权限进程有安全的资源加载逻辑。

相似文章
相似文章
 全屏