论文DroidFuzzer: Fuzzing the Android Apps with Intent-Filter Tag阅读笔记
DroidFuzzer: Fuzzing the Android Apps with Intent-Filter Tag
In Proceedings of International Conference on Advances in Mobile Computing & Multimedia (pp. 68-74).文章提出了一种借助Intent-filter的fuzz安卓应用的框架,主要面向接收外来MIME数据的Activity,也即注册了相应的intent-filter的Activity。
1 相关框架介绍
Monkey:运行在模拟器或者设备上的压力测试工具,可以模拟用户事件(点击、滑动、按压)和一些系统级事件。
MonkeyRunner:提供API,可以通过编写脚本控制设备和测试过程,常用于功能测试和回归测试,但是也只能模拟用户事件。
DroidPilot:通过模拟器或者设备,可以获取UI对象,支持脚本化测试,支持同时在大量的设备上进行测试,常用于UI测试。
iTestin:可以记录在一台设备上的脚本测试,然后部署到其他的设备上,用于大规模的设备测试和回归测试。
Robotium:基于Android Instrumentation,该测试框架使得编写强大而鲁棒的自动化UI测试脚本更加容易。
上述框架都聚焦于UI测试
Dynodroid:通过生成相关的用户事件输入给App来进行fuzz,同时可以以一种轻量的方法监控App对输入用户事件的反应。
还有一些其他的fuzz切入点,例如SMS、NFC、binder。
2 DroidFuzzer设计
Android有四大组件:Activity、Broadcast Receiver、Service、Content Provider。
Activity自然是App与用户交互的主要接口,同时Intent又是Activity之间交互的主要方式,所以选择通过Fuzz Intent的手段来测试App。
按照作者的表述,Activity是App的“核心”,Intent是Activity接收的输入数据,那么Intent也就可以视作App的输入,于是就通过Fuzz Intent的方式来测试整个App。
DroidFuzzer是灰盒的,除了确定哪些Activity接收Intent之外,不再关心更为具体的内部信息。可以分为预处理、变异和动态检测三个模块,
2.1 预处理模块
在预处理阶段,需要确定哪些Activity会处理外来的输入数据,也即确定哪些Activity注册了监听事件。
这里通过解析AndroidManifest.xml文件来确定静态注册的intent-filter,包括action、category和data这三个字段。
因为主要是考虑接收外来MIME数据的Activity,所以对于data字段,包括了常见的video、audio、text、image、application等数据类型。
对于动态注册的intent-filter暂时没有考虑。
2.2 变异模块
在这个模块主要有三个问题需要解决:
- 如何提供不同种类的正常的数据作为输入
- 如何构造正常数据
- 如何生成异常数据
解决方法:
- 搜集各种严格遵循格式的MIME数据作为seed data
- 人工构造包含各种MIME格式文件的数据库,用于指导MIME数据的生成
- 如何设计变异功能,需要建立在对MIME数据格式的理解之上。
文章首先总结了MIME格式的大致结构:一般来说,MIME数据流会被分成多个chunk,每个chunk内部会包含一些field来完成一些描述,这些field长度一般为若干byte,存储着不同类型的数据。
因此,变异策略聚焦于这些field来进行。
文章考虑了4中主要的field类型,包括Integer,Flag,String,ByteArray,并制订了对应的变异方案(但是都比较基础)。
2.3 动态检测模块
Android App的运行可以分为Java和Native两个层面。
对于Java层,DroidFuzzer通过覆写ActivityController来进行crash检测。
对于Native层,通过监控tombstone文件来进行crash检测(tombstone文件会包含已crash进程的相关信息)。
3 评估
文章对Bug的定义:
- 造成crash或者exit
- 造成ANR(Application Not Responding)
- 造成无限制的资源占用
完成了两类文件的测试,分析了一些具体的crash原因。
特别提出的是,文章声称DroidFuzzer以App的形式进行工作,非常方便展开测试。
3.1 视频测试
测试对象:MX Player,QQ Player,Mobo Player。
测试格式:AVI PM4 RM
QQ Player的鲁棒性要差一些;MP4因为格式最为复杂,所以造成的bug多一些。
3.2 音频测试
测试对象:TTPod BaiduMusic
测试格式:WMA MP3
4 一些问题
性能问题没有提及:没有进行源码分析,没有说明硬件参数,App本身的运行速度就不高,而且DroidFuzzer也以App形式存在,令人很难相信DroidFuzzer在测试方面具有较好的性能。
变异策略:不具有很强的针对性,效率问题值得讨论,当然,这也属于黑盒或者灰盒分析的自身的问题。
没有开源