APT攻击新武器CVE-2015-0016 - APT防御产品

APT攻击新武器CVE-2015-0016


补丁详情

漏洞在TSWbPrxy.exe模块中,TSWbPrxy.exe是一个ActiveX控件,是微软远程桌面服务网络代理的程序。
首先,我用IDA插件patchdiff2查看补丁所作的修改,修改的是函数CTSWebProxy::StartRemoteDestop

我用OleView加载了TSWbPrxy.exe,查看CTSWebProxy::StartRemoteDestop的定义。

StartRemoteDesktop的定义

我发现StartRemoteDesktop有两个参数,都和mstsc.exe有关,这个mstsc.exe就是远程桌面程序。

bstrMstsc: mstsc.exe的文件路径
bstrArguments: mstsc.exe的参数

StartRemoteDesktop函数创建进程启动mstsc.exe。我使用了IDA插件更加仔细地检查打过补丁版本和未打补丁的区别:

打过补丁版本和未打补丁的区别

左图是打过补丁的版本,右边是没有打过的。左图显示在调用CreateProcessW之前,首先会调用check_path函数(灰色部分),而未打补丁的版本没有调用这个函数。
那我们来仔细看看这个函数:

check_path代码

函数中有一个参数(lpApplicationName),函数执行过程如下:

    首先检查lpApplicationName的长度,如果大于0x104,返回错误0x80075007     lpApplicationName进行格式化,将字符‘/’转换为‘\’,将结果保存至var_formatApplicationName     调用CompareStringWSystemDirectory + mstsc.exe”与var_formatApplicationName进行比较,如果两者相同,check_path返回"0"     调用CompareStringWSystemWow64Directory + mstsc.exe”与var_formatApplicationName进行比较,如果两者相同,check_path返回"0",否则返回0x80075007错误。

    我们看一看出微软是如何修复漏洞的。程序会检查lpApplicationName的值是否与远程桌面程序在系统文件夹(对于32位版本的系统是C:\Windows\System32,对于64位是C:\Windows\SysWOW64)中的路径相同。如果二者相同,就会创建进程,否则会返回错误。

漏洞的原理很简单:StartRemoteDesktop函数的功能应该是启动远程桌面程序mstsc.exe,但执行这一程序时没有检查lpApplicationName参数,这就意味着攻击者可以通过修改lpApplicationName参数启动其他任意的进程。

下面是未打补丁版本的代码

未打补丁版本的代码

绕过IE的沙箱

为了绕过IE的沙箱,我们先得知道沙箱的提升策略是怎样的。提升策略决定进程怎么启动,以什么特权级别启动,这些都储存在注册表项中:

HKLM\Software\Microsoft\Internet Explorer\Low Rights\ElevationPolicy\{GUID}

注册表项中有如下几个值:

AppName: 程序执行名称 AppPath: 程序路径 Policy: 程序的特权级别

不同的特权级别

对于特权级别为3的进程,IE沙箱会以中等完整性级别(当前用户的权限)运行这个进程。
而TSWbPryx.exe的特权级别正是3。

TSWbPryx.exe的注册表项

攻击者可以利用另一个漏洞通过IE运行任意代码,但前面说过,由于IE的沙箱机制,代码可能被限制为在较低的完整性级别(权限非常有限)运行,攻击者随后可以利用此漏洞导致任意代码在中等完整性级别(当前用户的权限)运行。攻击者可以用TSWbPrxy ActiveX控件调用StartRemoteDesktop,攻击者就可以较高权限运行某些程序,如,它的父进程TSWbPrxy.exe。

我们可以将这个漏洞与CVE-2014-6332配合使用,这样就可以绕过IE沙箱,以中等完整性级别运行程序。

另外,我们也可以使用CVE-2014-6332绕过ActiveX的安全机制。也就是说IE不会显示像下图这样的窗口,而是直接运行这些控件。

最终结果就是攻击者可以以中等完整性级别运行某些程序,如下图所示

以中等完整性级别运行计算器


转载请注明出处 APT防御产品 » APT攻击新武器CVE-2015-0016

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址