正在阅读:微软视频控件漏洞 导致木马爆发攻击电脑微软视频控件漏洞 导致木马爆发攻击电脑

2009-07-07 16:38 出处:PConline原创 作者:瑞星 责任编辑:zhuomingchuang

  7月7日,瑞星公司发布本年度第一次橙色安全警报,微软视频控件(Microsoft Video ActiveX Control)漏洞导致的挂马网站攻击大幅增加,7月5日凌晨瑞星“云安全”系统首次监控到利用该漏洞的攻击代码出现,随后的5日6日短短两天内,监测到130万用户遭到利用该漏洞的攻击。

瑞星系列软件新版本下载:
瑞星杀毒软件2009太平洋免费专版(免费3个月) 点击本地下载
瑞星全功能安全软件2009 点击本地下载

  目前微软已经通报了该漏洞,但是还没有提供漏洞补丁。瑞星安全专家建议用户立刻下载使用免费的瑞星安全软件。“瑞星杀毒软件2009”和“瑞星全功能安全软件2009”中独有“网页防挂马”模块,采用“网页脚本行为分析技术”,无需微软补丁即可有效拦截利用该漏洞的挂马网站。

瑞星
图1 瑞星2009成功拦截利用该漏洞的挂马网站

  瑞星安全专家表示,利用该漏洞的新木马病毒来势凶猛,预计7月7日被攻击的电脑数量还会大幅度增加,目前利用该漏洞的挂马网站已有1万多个。用户访问这些网站后就会中毒,被植入木马下载器、盗号木马等恶意程序。

瑞星
图2 瑞星恶意网站监测网的数据mwm.rising.com.cn

  据瑞星安全专家介绍,该漏洞主要影响Windows XP、Windows 2003系统。由于Vista、Win 7系统采用了不同的安全机制,受到的影响比较小。瑞星公司作为微软MAPP项目的合作伙伴,已经将漏洞信息和利用代码提供给微软。微软已于昨日凌晨(北京时间)确认该漏洞,并向所有MAPP伙伴做出通报。该漏洞补丁正在紧张开发,但目前尚没有可用的微软官方补丁。

  瑞星安全专家分析,产生漏洞的原因是用户系统中的msvidctl.dll组件不正确读取持久化的字节数组,攻击者可随意覆盖SEH或者RET,将EIP设置成任意数值,结合javascript堆喷射方式可远程执行任意代码,黑客不必让用户运行被恶意修改的视频文件就可以进行挂马攻击。

  用户一旦访问被挂马的网站后,就会自动触发MPEG-2视频组件的msvidctl.dll组件,然后运行黑客植入的网页木马,最终下载大量盗号木马病毒,导致用户电脑系统异常甚至蓝屏,并盗取用户网游账号密码等个人信息。

  瑞星2009产品的“木马入侵拦截-网站拦截”模块,采用了完善的“智能网页脚本行为分析”技术,能有效拦截利用该漏洞的挂马网站。针对此次漏洞,瑞星2009用户将无需升级,就可以把这些挂马网站所传播的木马病毒阻止在电脑之外。不仅如此,在今年5月份被曝的DirectShow视频开发包漏洞,“木马入侵拦截-网站拦截”功能也提前具有防御能力。

  小贴士:

  什么是瑞星橙色(二级)安全警报?

  答:自从2004年起,针对全国性的新病毒疫情,瑞星推出安全预警系统,分为红色(一级)橙色(二级)、黄色(三级)和绿色(正常)四个级别,其中红色(一级)是指国内互联网受到大规模的病毒攻击,威胁范围和程度达到最高。

  本次警报为2009年第二次警报,第一次警报为红色安全警报,针对IE7漏洞发出,2月19日,有高达866万人次网民被挂马网站攻击,所以发出红色警报。

  下页附:MPEG2 0DAY漏洞分析报告

  MPEG2 0DAY漏洞分析报告

  该漏洞表现在在MSVidCtl.dll(xpsp2:6.5.2600.2180,vista:6.5.6000.16386)中,MSVidCtl.dll为系统标准组件。产生漏洞的原因是不正确读取持久化的字节数组(VT_UI1|VT_ARRAY),攻击者可以通过构造特殊的文件触发该漏洞,最终导致以当前进程权限执行任意代码。

  以下是存在漏洞代码的分析:

  以6.5.2600.2180版本的MSVidCtl.dll为例:

  .text:59F0D5E3                 push    edi

  .text:59F0D5E4                 mov     edi, [ebp+arg_3C]

  .text:59F0D5E7                 mov     eax, [edi]

  .text:59F0D5E9                 push    ebx

  .text:59F0D5EA                 push    2

  .text:59F0D5EC                 lea     ecx, [ebp+vt]

  .text:59F0D5EF                 push    ecx

  .text:59F0D5F0                 push    edi

  .text:59F0D5F1                 call    dword ptr [eax+0Ch]

  .text:59F0D5F4                 cmp     eax, 1

  .text:59F0D5F7                 jnz     short loc_59F0D5FE

  .text:59F0D5F9                 mov     eax, 80004005h

  在0x59F0D5F1处,读取了2字节,以确定被读取的VARIANT的类型(VARTYPE)。

  .text:59F0D67F                 cmp     eax, 2011h

  .text:59F0D684                 jnz     loc_59F0D70E

  .text:59F0D68A                 mov     eax, [edi]

  .text:59F0D68C                 push    ebx

  .text:59F0D68D                 push    8

  .text:59F0D68F                 lea     ecx, [ebp+cElmts]

  .text:59F0D692                 push    ecx

  .text:59F0D693                 push    edi

  .text:59F0D694                 call    dword ptr [eax+0Ch]

  .text:59F0D697                 cmp     eax, ebx

  .text:59F0D699                 jl      loc_59F0D760

  .text:59F0D69F                 cmp     eax, 1

  接着,从0x59F0D68A处开始进入VARTYPE为2011h,即VT_UI1|VT_ARRAY的处理流程:在0x59F0D694处读取了8个字节,但只使用低32位来确定该字节数组的大小。

  .text:59F0D6AE                 mov     eax, [ebp+cElmts]

  .text:59F0D6B1                 mov     [ebp-20h], eax

  .text:59F0D6B4                 lea     eax, [ebp-20h]

  .text:59F0D6B7                 push    eax             ; rgsabound

  .text:59F0D6B8                 push    1               ; cDims

  .text:59F0D6BA                 push    11h             ; vt

  .text:59F0D6BC                 mov     [ebp+rgsabound.lLbound], ebx

  .text:59F0D6BF                 call    ds:SafeArrayCreate

  .text:59F0D6C5                 mov     ebx, eax

  .text:59F0D6C7                 test    ebx, ebx

  .text:59F0D6C9                 jnz     short loc_59F0D6D5

  接着,在0x59F0D6B1处构造SAFEARRAYBOUND结构(将之前读取的个数存入该结构),并调用SafeArrayCreate创建出SAFEARRAY结构。

  .text:59F0D6D5                 lea     eax, [ebp+pvData]

  .text:59F0D6D8                 push    eax             ; ppvData

  .text:59F0D6D9                 push    ebx             ; psa

  .text:59F0D6DA                 call    ds:SafeArrayAccessData

  .text:59F0D6E0                 test    eax, eax

  .text:59F0D6E2                 jl      short loc_59F0D760

  .text:59F0D6E4                 mov     eax, [edi]

  .text:59F0D6E6                 push    0

  .text:59F0D6E8                 push    [ebp+cElmts]

  .text:59F0D6EB                 lea     ecx, [ebp+ pvData]

  .text:59F0D6EE                 push    ecx

  .text:59F0D6EF                 push    edi

  .text:59F0D6F0                 call    dword ptr [eax+0Ch]

  .text:59F0D6F3                 push    ebx             ; psa

  .text:59F0D6F4                 mov     [ebp+var_18], eax

  .text:59F0D6F7                 call    ds:SafeArrayUnaccessData

  .text:59F0D6FD                 mov     eax, [ebp+var_18]

  .text:59F0D700                 test    eax, eax

  .text:59F0D702                 jl      short loc_59F0D760

  .text:59F0D704                 cmp     eax, 1

  .text:59F0D707                 jz      short loc_59F0D6A4

  .text:59F0D709                 mov     [esi+8], ebx

  .text:59F0D70C                 xor     ebx, ebx

  接下来,使用SafeArrayAccessData获得SAFEARRAY的数据区域,并将该指针保存到局部变量pvData(ebp+8)中。

  在0x59F0D6EB处,代码错误地将pvData的地址作为IStream::Read (0x59F0D6F0)的参数,而不是pvData的值,而该值指向的内存才是真正用于存放从流中读取数据的缓冲区。

  这样就导致了以下情况:试图将任意长度的数据放入原本4字节长度的内存中,导致了缓冲区溢出。

  攻击者可随意覆盖SEH或者RET,将EIP设置成任意数值。结合JS堆喷射,“挂马”利用成功率将相当高,风险很大。

  注:

  在6.5.6000.16386版本的MSVidCtl.dll中,也存在类似代码:

  .text:37D46DFF                 push    ebx

  .text:37D46E00                 push    8

  .text:37D46E02                 lea     ecx, [ebp-20h]; 数组大小

  .text:37D46E05                 push    ecx

  .text:37D46E06                 push    edi

  .text:37D46E07                 call    dword ptr [eax+0Ch]

  …

  …

  .text:37D46E42                 lea     eax, [ebp+0Ch]

  .text:37D46E45                 push    eax             ; ppvData

  .text:37D46E46                 push    ebx             ; psa

  .text:37D46E47                 call    ds:SafeArrayAccessData

  .text:37D46E4D                 test    eax, eax

  .text:37D46E4F                 jl      loc_37D46ED5

  .text:37D46E55                 mov     eax, [edi]

  .text:37D46E57                 push    0

  .text:37D46E59                 push    dword ptr [ebp-20h]; 数组大小

  .text:37D46E5C                 lea     ecx, [ebp+0Ch]

  .text:37D46E5F                 push    ecx ; 读取缓冲区指向参数

  .text:37D46E60                 push    edi

  .text:37D46E61                 call    dword ptr [eax+0Ch]

  .text:37D46E64                 push    ebx             ; psa

  但是在VISTA+IE7环境下,该漏洞并不会触发,因为导致漏洞的代码不会被调用到。

关注我们

302 Found

302 Found


Powered by Tengine
tengine
最新资讯离线随时看 聊天吐槽赢奖品