Android漏洞分析

概述

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

步骤

收集信息

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

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

溯源

正确的判断漏洞产生的根源是漏洞分析中最重要的一步,在溯源过程中要明确两个问题.

  • 漏洞的类型。对于Android系统这样庞大的代码体系,任何位置都有可能产生bug,但漏洞的类型就固定几种,典型漏洞类型包括:栈溢出、堆溢出、整型溢出、格式化字符串、双重释放(Double free)、释放重用(UAF)等。
  • 漏洞的逻辑。通过一些技巧可以精确的定位漏洞产生的位置,但要更好的理解漏洞产生的根源,还是需要理解漏洞是如何被触发的,这就需要去了解漏洞所在的系统模块及其运作原理。

    溯源方式

    通常溯源展开方式依据我们能拿到的漏洞信息,可以分为三种情况:
  • 漏洞信息中提供了POC。此时需要部署实验环境,使用POC来重现漏洞攻击,并通过调试技术定位漏洞所在函数,进一步确定代码行数。
  • 漏洞已经发布补丁。此时只需对照patch前后代码即可定位漏洞存在的代码位置。
  • 只有漏洞描述。

    调试方式

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

android系统包括应用层、框架层、Native层、内核层。调试也是按层展开。