知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

CVE-2013-3918漏洞分析及分析流程翻译

发布时间:2014-07-15 11:50:28作者:知识屋

CVE-2013-3918是由于Internet Explorer 7, 8, 9, 10的ActiveX控件中存在内存访问错误,攻击者可利用此漏洞在当前登录用户上下文中执行任意代码。
漏洞来源细节:
样本来源:
漏洞细节:
利用样本:
漏洞相关环境:
操作系统:
Windows XP Service Pack 3Windows XP Professional x64 Edition Service Pack 2Windows Server 2003 Service Pack 2Windows Server 2003 x64 Edition Service Pack 2Windows Server 2003 with SP2 for Itanium-based SystemsWindows Vista Service Pack 2Windows Vista x64 Edition Service Pack 2Windows Server 2008 for 32-bit Systems Service Pack 2Windows Server 2008 for x64-based Systems Service Pack 2Windows Server 2008 for Itanium-based Systems Service Pack 2Windows 7 for 32-bit Systems Service Pack 1Windows 7 for x64-based Systems Service Pack 1Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2008 R2 for Itanium-based Systems Service Pack 1

浏览器:
IE 7, 8, 9, and 10.
分析工具准备:
动态调试工具:OllyICE静态分析工具:IdaPro互联网浏览器:Internet Explorer8
寻找错误线索:

当打开该样本的时候,会出现崩溃情况,现在的任务是寻找为什么会出现崩溃;根据源代码中的<clsid:19916E01-B44E-4E31-94A4-4696DF46157B>,寻找相应操作clsid的API,如下:
StringFromGUID2ProgIDFromCLSIDStringFromGUID2CLSIDFromString
当错误发生的时候,可以在OllyICE中定位到如下地点,该位置位于ieframe.dll模块里边,用IDA打开该模块:
00D307E7    6A 27           push    2700D307E9    8D45 AC         lea     eax, dword ptr [ebp-54]00D307EC    50              push    eax
00D307ED    56              push    esi                                                                 ; <clsid:19916E01-B44E-4E31-94A4-4696DF46157B>00D307EE    FF15 141CC400   call    dword ptr [<&ole32.StringFromGUID2>]                                ; ole32.StringFromGUID200D307F4    85C0            test    eax, eax
00D307F6    7C 1D           jl      short 00D30815

根据此函数特征可以在IDA中定位到如下位置:
.text:004F07B8 ; int __stdcall CExtensionRecorder__GetAdditionalInfo(GUID *rguid).text:004F07B8 ?GetAdditionalInfo@CExtensionRecorder@@IAEJPAU_EXTENSION_RECORD@@@Z proc near
此处省略一些代码。。。。。。.text:004F07E7                 push    27h             ; cchMax
.text:004F07E9                 lea     eax, [ebp+sz].text:004F07EC                 push    eax             ; lpsz
.text:004F07ED                 push    esi             ; rguid
.text:004F07EE                 call    ds:__imp__StringFromGUID2@12 ; StringFromGUID2(x,x,x)

该API原型如下:
int __stdcall StringFromGUID2(const GUID *const rguid, LPOLESTR lpsz, int cchMax);
参数一的数据是一个GUID结构体来表示clsid,该数据如下:01 6E 91 19 4E B4 31 4E 94 A4 46 96 DF 46 15 7B,这个数据恰好对应到源代码中的clsid
定位错误位置:
现在有了以上的线索,我们下一步需要找出错误发生的原因,根据断点定位、推断理论以及堆栈信息,可以得出当崩溃发生时中断到了iertutil.dll模块的如下位置,当没有加载脚本时,该函数一直处于等待状态,当加载脚本之后,该函数立即发生中断.
5DDFF493    6A FF           push    -15DDFF495    6A 00           push    05DDFF497    FFB5 00F0FFFF   push    dword ptr [ebp-1000]5DDFF49D    57              push    edi
5DDFF49E    FF15 BC11CA5D   call    dword ptr [<&KERNEL32.WaitForMultipleObjects>]                      ; kernel32.WaitForMultipleObjects5DDFF4A4    85C0            test    eax, eax
5DDFF4A6    0F86 28390100   jbe     5DE12DD45DDFF4AC    3BC7            cmp     eax, edi
5DDFF4AE    0F83 71390100   jnb     5DE12E25

分析到这里之后就卡住了,胡乱调试一番无果后开始寻找漏洞的细节,就找到了上面最开始处【漏洞来源细节:[漏洞细节]】的URL,根据洞细节的URL上的线索,可以知道这是一个远程代码执行漏洞,注意下面的注册表项:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility{19916e01-b44e-4e31-94a4-4696df46157b}]
"Compatibility Flags"=dword:04000400

当该项不存在的时候,就说明计算机能够被利用;分析到这里之后,既然是远程代码执行漏洞,就应该想办法看看如何利用;接下来,我们就编写一个Exploit出来测试一下该漏洞.
编写利用样本:
根据已有的分析和自己的研究,并编写出Exploit,由于我的机器上该样本不能正确执行,所有只有自己研究如何利用.注意:该样本与为同一个样本.现在我们要做的就是查找该样本不能正确执行的原因.注意样本源代码中的这个数据地址:var kkkkk="u0433u77c2(在下面的图能看到这个地址),该地址位于msvcrt.dll模块的_remove,在我的机器上该地址是0x77BF0433,这就是不能正确执行样本的原因,注意:这个RO链地址不是固定的.
.text:77BF0430                 or      eax, 0FFFFFFFFh.text:77BF0433                 pop     ebp
.text:77BF0434                 retn
Exploit在这里就不编写了,大概利用过程和整个流程已经了解、熟悉了就行了.注意大家在分析样本的时候如果定位不到ShellCode,就搜索我Dump出来的数据:
0575A004  33 04 C2 77 D5 5E C1 77 FA 40 C2 77 92 9F C3 77  3聎誢羨鶣聎挓脀0575A014  92 9F C3 77 92 9F C3 77 92 9F C3 77 92 9F C3 77  挓脀挓脀挓脀挓脀0575A024  92 9F C3 77 92 9F C3 77 92 9F C3 77 92 9F C3 77  挓脀挓脀挓脀挓脀

另外发一段样本的ShellCode出来给欣赏一下:
056F1A24   /EB 10           jmp     short 056F1A36                   ; ShellCode开始056F1A26   |5B              pop     ebx
056F1A27   |4B              dec     ebx
056F1A28   |33C9            xor     ecx, ecx
056F1A2A   |66:B9 8C01      mov     cx, 18C056F1A2E   |80340B 9F       xor     byte ptr [ebx+ecx], 9F           ; 循环解密056F1A32  ^|E2 FA           loopd   short 056F1A2E056F1A34   |EB 05           jmp     short 056F1A3B056F1A36   E8 EBFFFFFF     call    056F1A26056F1A3B    56              push    esi
056F1A3C    57              push    edi
056F1A3D    52              push    edx
056F1A3E    33C9            xor     ecx, ecx
056F1A40    64:8B71 30      mov     esi, dword ptr fs:[ecx+30]056F1A44    8B76 0C         mov     esi, dword ptr [esi+C]056F1A47    8B76 1C         mov     esi, dword ptr [esi+1C]056F1A4A    8B5E 08         mov     ebx, dword ptr [esi+8]056F1A4D    8B7E 20         mov     edi, dword ptr [esi+20]056F1A50    8B36            mov     esi, dword ptr [esi]056F1A52    817F 0C 3300320>cmp     dword ptr [edi+C], 320033056F1A59  ^ 75 EF           jnz     short 056F1A4A                   ; 搜索kernel32.dll

 
翻译cve-2013-3918分析
URL:
1,攻击流程:
    
攻击者传播特制的web页面—->用户访问有害web页面—->攻击者特制的web页面—->触发InformationCardSigninHelper Class ActiveX control—->执行ShellCode代码—->攻击者获得受害用户计算机的控制权
2,攻击过程:
    攻击者使用特制的html代码文件来触发InformationCardSigninHelper Class ActiveX control(CVE-2013-3918)漏洞,特制的html包含了一段ShellCode代码(如下图),当这段代码被触发之后会行rundll32.exe并向它注入恶意线程.
    
该漏洞存在于ActiveX control控件,漏洞原因是当web页面调用ActiveX control控件后,当web页面尝试用一个无效索引去访问一个数组对象的时候,Internet Explorer会发生崩溃,如下图:

该漏洞允许攻击者转移控制权到ShellCode,它采用ROP链来定位到msrt.dll,如下图:

ROP链使用“VirtualProtect ()”来改变被拷贝的ShellCode内存区域标志,由原标志可读可写(RW (READ/WRITE))改成可读可写可执行(RWX (READ/WRITE/EXECUTE)),下图是设置新内存区域保护标志为0×40:
    
ShellCode使用多个Xor Key进行解密出多段真实代码,完成后并初始化解密KEY到0x9F,它循环解密出ShellCode将要使用的API名称,这些名称是:LoadLibraryA, WinExec,CreateThread, OpenProcess, CreateProcessA, VirtualAllocEx, WriteProcessMemory and CreateRemoteThread. 如下图:

之后运行rundll32.exe,并使用以上API进行注入,如下图:


最后,当控制权完全被rundll32.exe获得的时候,它再使用KEY(0×01、0x6A)进行解密,当解密完成之后,控制权被转移,并进行最后有效的解密.
漏洞修复方案:
请建立一个Patch.reg文件,并且把以下数据复制到文件内,双击运行它,添加到注册表.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility{19916e01-b44e-4e31-94a4-4696df46157b}]
"Compatibility Flags"=dword:04000400

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftInternet ExplorerActiveX Compatibility{19916e01-b44e-4e31-94a4-4696df46157b}]
"Compatibility Flags"=dword:04000400

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility{c2c4f00a-720e-4389-aeb9-e9c4b0d93c6f}]
"Compatibility Flags"=dword:04000400

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftInternet ExplorerActiveX Compatibility{c2c4f00a-720e-4389-aeb9-e9c4b0d93c6f}]
"Compatibility Flags"=dword:04000400

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility{53001f3a-f5e1-4b90-9c9f-00e09b53c5f1}]
"Compatibility Flags"=dword:04000400

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftInternet ExplorerActiveX Compatibility{53001f3a-f5e1-4b90-9c9f-00e09b53c5f1}]
"Compatibility Flags"=dword:04000400
 

 

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜