聚焦源代码安全,网罗国内外最新资讯!
编译:360代码卫士团队
Tenable 公司的研究员 David Wells最近发现,能够通过欺骗受信任目录中的文件执行路径绕过 Windows 的用户账户控制 (UAC)。
尽管微软并不认为 UAC 是一种安全边界,但该功能仍然会带来额外的安全好处。当程序试图以提升后的权限运行某个程序时,UAC 就会警告管理员群组中的用户,以便用户能确认该操作。
然而,UAC 的提示似乎并非针对 Windows 上所有的管理可执行文件,因为某些程序能够自动提升从而绕过 UAC。Windows 准备了一系列其它的安全检查以确保只有某些受信任的可执行文件能够自动提升权限。
攻击过程演示

即便如此,这种方法还是能被滥用于绕过 UAC。DavidWells 最近发现了一种新技术能够利用该功能,确保当恶意可执行文件运行时,不会显示 UAC 提示消息。
能够自动提升权限的可执行文件需要配置为自动提升(该文件会出现“autoElevate”密钥)进行正确地签名,并且从受信任目录中运行,如“C:\Windows\System32”。
研究人员发现,在所执行的能够确保可执行文件自动提升的某次检查中,Appinfo.dll (AIS) 调用了 RtlPrefixUnicodeString API 并验证目录可执行文件路径以“C:\Windows\System32\”开头。
他还使用 CreateDirectory API 创建了一个名为“C:\Windows \”(”Windows”后面有空格)的目录,并在目录名称后增加了“\\?\”(以绕过 Windows 中的命名过滤规则)并在其中创建了一个“System32”目录。
接着,他从真正的“C:\Windows\System32”中复制了一个签名的自动提升可权限的可执行文件,通过分析 Windows 处理执行的方式,他发现并未触发 UAC 提示信息。当执行“C:\Windows \System32\winSAT.exe”时,Appinfo.dll 将其传递给 GetLongPathNameW API,后者将其转换为 “C:\Windows\System32\winSAT.exe”,删除了 Windows 后面的多余空格。接着,对这个转换后的字符串执行受信任目录检查。
Wells 指出,“美丽之处在于,当针对转换后的路径字符串执行完受信任目录检查后,检查被释放,而其余的检查(以及最终的权限提升请求)针对的是原始的可执行文件路径名称(带有末尾的空格)。这就导致所有其它检查能够传递并导致 appinfo.dll 将 my winSAT.exe 大量生成为自动提升(它同时被正确地签名并为自动提升白名单化)。”
Wells 还表示他能够通过在受骗的 “C:\Windows\System32\” 目录中释放一个虚假的 WINMM.dll(由 winSAT.exe 导入),从而实施本地 dll 劫持。他还为这种 UAC 绕过技术发布了 PoC (https://github.com/tenable/poc/tree/master/UACBypass)。
推荐阅读
原文链接
https://www.securityweek.com/researcher-bypasses-windows-uac-spoofing-trusted-directory
本文由360代码卫士编译,不代表360观点,转载请注明 “转自360代码卫士www.codesafe.cn”。

