免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 浅析 flash player 0day漏洞溢出

浅析 flash player 0day漏洞溢出

时间:2011-11-30 12:11来源:未知 整理:寂涯网络 点击:

      译者:这是一篇从 Secunia上翻译的文章,原作在http://secunia.com/blog/210
通过反编译分析swf文件对应的AS代码,来分析漏洞触发原因。令人新奇的是,漏洞的使用
者在AS汇编代码中使用了各种混淆方法(跳转、判断等等)来扰乱分析者,在编译出来的swf
文件中也改了若干字节来对抗swf反编译软件。且让我们看看老外是如何突破重重阻挠的)。
译者在翻译过程的关键地方进行了一些补充,并且提供了自己精简的反编译AS汇编代码。
    正文:正如我们在之前的博客和 Secunia  SA44119 公告中所提到的那样,一个新的
flash player 0-day 漏洞溢出正在以微软word(*.doc)文档的形式四处泛滥。尽管Adobe
规划明天、也就是4月15日星期五提供一个flash player的修复补丁,当前这个漏洞并没
有被堵住。而且对Adobe Reader/Acrobat的修复要推迟到6月 14日。
    这个 word 文档样本名为:“Disentangling Industrial Policy and Competition
Policy.doc”。在该文档 0x2E08偏移处嵌入了一个swf 文件,这个 swf文件流长为 0x2775
字节。如下所示:  

00002E00  66 55 66 55 75 27 00 00 46 57 53 0A 75 27 00 00 fUfUu'..FWS.u'..
00002E10  78 00 05 5F 00 00 0F A0 00 00 18 01 00 44 11 08 x.._.........D..
00002E20  00 00 00 43 02 FF FF FF BF 15 0B 00 00 00 01 00 ...C............
00002E30  53 63 65 6E 65 20 31 00 00 BF 14 1A 27 00 00 01 Scene 1.....'...

    嵌入的swf在执行时通过调用flash.display.Loader.loadBytes() (位于"t"属性标签)
加载了第二个swf。事实上是第二个swf 出发了漏洞(译者注:第一个swf采用actionscript
进行堆喷射) ,由于该文件使用了很多混淆代码来扰乱ActionScript反编译器,我们不能直
接来分析。这些混淆代码有些造成了崩溃,有些则过早的终止了反汇编。
    第一个明显故意的文件变更是对一组常量的大小进行了不正确的声明。即是:swf 文件
在偏移 0x3D 的数值0x15并不和实际常量的大小(0x14)对应,导致一些反编译器开始从一
个错误的偏移来解释接下来的代码。  
00000030  0E 12 9D 02 00 4C 04 9D 02 00 18 00 88 15 00 09 .....L..........
00000040  00 41 00 42 00 43 00 44 00 45 00 46 00 47 00 48 .A.B.C.D.E.F.G.H
00000050  00 49 00 A1 8E 11 00 64 65 66 61 75 6C 74 00 01 .I.....default..  、

    这个很容易通过在最后一个常量后面添加另外一个字符来修复。如下所示:
00000050  00 49 49 00 8E 11 00 64 65 66 61 75 6C 74 00 01 .II....default..
    由于在 DOACTION 标签中不正确的结构组织,反编译器仍然不能很好的显示反编译代
码。 DOACTION 标签的声明长度为 0x05A7,但是最后包含的标签却组织的很不正确,反编
译器会尝试去解释超出长度后面的数据。这个可以通过把 0x5B2 开始的所有字节设置为 0
来解决(直接解释成了结束动作标签)。
    现在虽然可以很好的反编译,但是我们会遇到其他的问题:代码中包含了一些不必要的
指令,这些指令会使整个代码变得难以阅读。其实这些指令可以被消除的。
    下面的代码块显示了其中的一个例子:(译者注:作者使用flasm软件来进行反编译,该
软件会将swf文件反编译成AS汇编.

push 1212792920, -1212792921
bitwiseAnd
branchIfTrue label2
label2:

    显而易见,无论何种情况,label2 标签下的代码都会执行到,上面的判断指令完全可
以清除掉。整个代码块中有很多相同的冗余代码,我们都可以通过相同的方法来清除。
    除此以外,代码中还通过使用来回跳转使文件的反编译代码看起来更加不清晰。
    其中一个例子如下:  

label2:
branch label7
label3:
new
push 191919126
dup
 ... multiple lines follow  后面有多行指令
label7:
push X_PROPERTY, UNDEF, X_PROPERTY, c:0
branch label3  

通过把label7的内容调整到label3前面,我们可以简简单单的清楚两个代码跳转分支指令。 
    获取一个组织清晰的代码流之后,接下来我们需要解码两个重要的加密字符串。这些字

本页地址 http://www.jybase.net/xitonganquan/20111130681.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com