Android系统漏洞分析概述

本文描述了自己对Android系统漏洞分析的理解,同时也作为自己学习漏洞分析的大纲,逐步规范漏洞分析的方法和步骤,最终构成自己的漏洞分析体系。

1 概述

漏洞分析是指在代码中迅速定位漏洞产生的位置(简称溯源),理解攻击原理,并根据漏洞类型、漏洞利用技术以及目标平台的漏洞缓解技术,准确评估该漏洞的利用方式和风险等级的过程。

2 步骤

2.1 收集信息

通过漏洞公布平台手机漏洞的信息,信息包括:漏洞厂商、影响版本、漏洞描述、漏洞发现时间、漏洞公布的时间、漏洞的状态以及漏洞POC等。这些信息中比较重要的是漏洞的POC,但有时漏洞公布不全面可能不包括POC,只有通过漏洞描述展开分析。

漏洞信息描述
漏洞厂商
影响版本
漏洞描述
发现时间
公布时间
漏洞状态
漏洞POC

2.2 溯源

正确的判断漏洞产生的根源是漏洞分析中最重要的一步。是哪里出现的bug?为什么会产生bug?这正是漏洞分析工作要回答的,也是后续对漏洞优先级评估的重要依据。所以在溯源过程中要明确两个问题:

  1. 漏洞的类型。对于Android系统这样庞大的代码体系,任何位置都有可能产生bug,但漏洞的类型就固定几种,典型漏洞类型包括:栈溢出、堆溢出、整型溢出、格式化字符串、双重释放(Double free)、释放重用(UAF)等。

  2. 漏洞的逻辑。通过一些技巧可以精确的定位漏洞产生的位置,但要更好的理解漏洞产生的根源,还是需要理解漏洞是如何被触发的,这就需要去了解漏洞所在的系统模块及其运作原理。

2.2.1 方式

通常溯源展开方式依据我们能拿到的漏洞信息,可以分为三种情况:

  • 漏洞信息中提供了POC。此时需要部署实验环境,使用POC来重现漏洞攻击,并通过调试技术定位漏洞所在函数,进一步确定代码行数。

  • 漏洞已经发布补丁。此时只需对照patch前后代码即可定位漏洞存在的代码位置。

  • 只有漏洞描述。

POC(Proof of Concept),漏洞发现者在提交漏洞时,提供的一个可稳定重现漏洞的“代码”,该“代码”的形式很多,只要能够稳定触发漏洞即可,例如在stagefright漏洞中,POC就是一个mp4多媒体文件。

2.2.2 调试

扎实的调试技术是定位漏洞和利用漏洞的基础。

在定位漏洞时,通常触发漏洞后,看到的是系统崩溃或者是更加隐秘的程序逻辑错误,不管哪种都说明程序偏离了原本的执行流程,我们可以借助调试技术来观察系统崩溃状态重要的寄存器、内存的值和状态,并根据反汇编代码逐步回溯找到根源。同时也可以通过函数调用栈回溯函数调用过程,了解漏洞执行过程,各个函数的参数值,能够找到触发漏洞的异常输入,并通过分析异常输出和正常输入,这样可以为理解错误原因提供帮助。

在利用漏洞时,调试技术可以帮助我们调试利用代码,辅助适配各个机型等。

调试工具主要推荐:AOSP套件和IDA Pro。

  • AOSP套件配合google自己的手机,可以达到源码级调试。

  • IDA 远程调试设备可以结合IDA强大的静态分析产生的优质反汇编代码,对于拿不到源码的设备推存。同时可视化调试界面也很棒。

调试技巧:监视点和断点的断点。

  • 监视点。监视点是一个特殊的断点,可以指定内存发生某种操作时会被触发。用监视点来追踪特殊变量值的改变非常有用。

  • 断点的断点。但执行到断点位置后,创建一个新断点,被称为断点的断点也称为相互依赖的断点。它最终的作用是消除噪声。

评估

2.3.1 利用方式

同调试技术一样,扎实的漏洞利用技术也是进行漏洞分许的基础,通过最新的漏洞利用技术可以帮助我们正确的评估漏洞的危险等级,避免对漏洞严重性的误判。

纵观漏洞利用技术的发展史,最明显的特点是被动突防,即每当操作系统发布一种漏洞利用缓解技术后,黑客社区便会发明一个或多个bypass缓解技术的新型漏洞利用技术。下表列出了Android系统上常见的漏洞缓解技术和利用技术:

缓解技术利用技术
栈保护(GS)
只读GOTGOT复写
加固堆缓冲区
防止数据执行(NX)Ret2libc、ROP
地址空间布局随机化(ASLR)利用跳板覆盖返回地址、堆喷射技术(heap Spray)、信息泄露、Ret2user、Ret2dir
SELinux
PXNRet2user、Ret2dir、ROP

2.3.2 风险等级

根据漏洞是否可利用、可利用难度以及漏洞利用后产生的安全风险来评估该漏洞的风险等级。

3 漏洞利用

对于漏洞分析,开发或分析漏洞利用并不是必要的步骤。但还是有理由去这么做,通过开发漏洞利用可以验证漏洞分析的准确性,同时,分析现有的利用代码也可以学习到攻击者最新的利用技术,帮助更好的评估漏洞。

4 漏洞修复

分析官方的修复方案,给出自己的修改建议。

5 总结

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值