您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>通讯/手机编程>

基于mediaserver探讨Android加固

大小:0.4 MB 人气: 2017-10-10 需要积分:1
为了提升Android系统的安全系数,我们一直欢迎并奖励任何发现漏洞的研究者。比如,2015年,mediaserver的libstagefright中被发现了一系列漏洞,我们在同年8月和9月的安全公告(Security Bulletin)中对此进行了更新。
  除了每月解决这些问题,我们还在开发新的安全功能来强化现有安全模式,并提供额外的深度防护措施。防护措施主要有两个目标:
  防护:防止漏洞;
  遏制:通过降低优先等级及隔离不信任内容相关组件来保护系统。
  防护(Prevention)
  libstagefright中大部分漏洞都是无符号整数溢出(integer overflows)导致的堆栈溢出。且libstagefright的多个整数溢出让攻击者可以分配不为输入数据提供足够空间的缓冲区,导致堆栈中出现缓冲区溢出。
  无符号整数溢出的后果已有清晰定义,但接下来的操作可能产生无法预料的风险。相比之下,有符号整数溢出在C/C++语言中未被定义,意味着不能保证溢出产生的结果,而编译者可能选择典型最快最简单的操作。我们已经调整了编译器,为有符号和无符号整数溢出均提供更加安全的预设值。
  UndefinedBehaviorSanitizer(UBSan)是检测非定义或错误操作的LLVM/Clang编译器工具链。UBSan可以检查有符号和无符号整数溢出等多种非定义和不安全操作,在此过程中会在执行时间为产生的可执行的整数溢出条件测试添加新代码。比如图1显示的是:研究者提供的原始补丁应用之后,libstagefright中的MPEG4Extractor组件的parseChunk源代码。底下黑框里的修改内容是为了防止整数溢出。
  基于mediaserver探讨Android加固
  图1 源代码中难以察觉的无符号整数溢出
  可惜SIZE_MAX和size为32位,而chunk_size是64位的,有可能出现检查不彻底,存在整数溢出的情况。红框里的size + chunk_size可能导致整数溢出,以及产生比size elements更小的缓冲区。因为size + chunk_size可能比蓝框标注出来的size更小,所以接下来memcpy可能导致内存崩溃。关于该漏洞潜在exploit vector的更多信息请参考Project Zero。
  图2将以上代码片段产生的集合与第二个带有整数净化的编译版本进行比较。红框里的是引发整数溢出的添加操作。在未净化版本中,size (r6)和chunk_size (r7)是一起添加的,可能导致r0溢出,且小于size。然后缓冲区分配到规定的r0 size,size字节被复制上去。如果r0小于r6,就会出现内存崩溃。

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!