一次意外的0day之旅

2015-07-31 309335人围观 ,发现 32 个不明物体 终端安全

不知道大家留意没有,此前百度云安全X-TEAM撰写的文章《技术分析:关于安卓libStagefright系列漏洞分析》中,其实隐含着一个然并卵的0day。这个“0day”,算是我们在构造样本中的副产物。

先看看原始漏洞的情况:在处理mpeg tx3g tag时,chunk_size是64位uint,与size之和溢出,导致实际分配比size小的内存。而后面的memcpy会导致heap overflow,写入的data应该是来自文件内容可控的。

如下是代码:

platform/frameworks/av/+/android-5.1.1_r8/media/libstagefright/MPEG4Extractor.cpp


了解了原理后,我们构造了一个POC,简单地将某个mp4文件中的一个“顺眼的”tagtrak修改为tx3g,于是触发了内存异常。当时还要忙着继续分析就没细看。等到写好文章后发现,这个异常不对啊!怎么还没memcpy就异常了?

于是打开IDA调试一下,结果发现这里的错误实际是一个空指针错误,异常出现在下面text:00063558处,R0=0,读取[R0,#4]发生异常

具体在代码层看,在处理tx3g这个tag时,调用mLastTrack->meta->findData时,metaNULL

原因是meta初始化发生在trak这个tag处理过程中,所以将trak修改为tx3g,恰好就造成一个这个漏洞。

Libstagefright的代码质量有待加强啊。分析patch构造的POC也能变成一个新的0day!虽然看上去很难利用,但请参考下面的链接的猥琐思路:

http://blog.trendmicro.com/trendlabs-security-intelligence/trend-micro-discovers-vulnerability-that-renders-android-devices-silent/

我们也可以构造类似的网页,引入上述mp4,用户一旦访问下面的网页,锁屏后会发现手机几乎无响应,无法点亮屏幕:

而要构造原始的libstagefright的这个漏洞中实际分析的POC,可以按照下面的步骤:

首先要让size>0,否则不会进入后面的memcpy流程,这可以通过两个tx3g来构造。第一个tx3g得到size,第二个tx3g,就可以修改之前的sizeFFFFFF了。

如下图所示,有个trak,然后是两个tx3g,第一个tx3g前面的size正常,第二个tx3g前面的sizeFF FF FF F0,这就造成了溢出。

最终看到的这个异常如下:dlfree已经探测到heap被破坏。

最后给一个利用这个“0day”的视频,这个演示攻击网页还好,要是一个随着开机启动就启动的APP,想想就很开心了……

*本文作者:百度云安全,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

相关推荐

这些评论亮了

  • 北京大屌 回复
    说实话,撇开技术含量不谈,百度的paper写的真不如其他几家。在我心目中几家paper水平排名 360>安天>阿里(收购瀚海源后大幅提升)>腾讯>百度=金山
    )11( 亮了
发表评论

已有 32 条评论

取消
Loading...

文章目录

    特别推荐

    推荐关注

    官方公众号

    聚焦企业安全

    填写个人信息

    姓名
    电话
    邮箱
    公司
    行业
    职位
    css.php