G.O.S.S.I.P 学术论文推荐 2021-07-09

admin 2022年6月8日07:01:08评论61 views字数 2038阅读6分47秒阅读模式

今天给大家推荐的是ACM ARES 2020上发表的一篇研究Android IPC机制的fuzzing的论文。作者在文中提出了一种针对Android Inter Process Communication(IPC) 机制的基于模版的自动化fuzzing方法,并在1488个应用上进行了测试,发现了流行框架中的一些实现缺陷。相比与之前的相关工作,本文在crash检测的深度与广度上均有提升。

G.O.S.S.I.P 学术论文推荐 2021-07-09

本文的研究中,作者关注的是应用暴露给其他应用的接口的代码稳定性,具体来说就是研究导致应用crash的常见异常类型和设计缺陷,而非代码执行等安全问题。因此作者工作的重心在于自动化fuzz而非对crash的安全利用(后者需要逆向以获得相关的应用逻辑)。


与之前的工作相比,作者的创新点在于:在fuzz之前对应用的组件结构进行了分析,从而生成测试用例的模版并获取一些对提升代码覆盖率有关的条件的知识。


继续阅读前,首先简要介绍一下需要的基本概念:

  • Binder:Android binder的核心是它的kernel driver,用于处理不同进程间的所有通信。这种通信其实是在client和server端之间发送消息,称之为transaction。

  • Intents:应用中对于binder transaction的抽象。intent声明了通信的接受方和数据,用来调用其他应用的方法。因此fuzzing构造的测试用例就是intent。

  • Components:创造或处理intent的组件主要是activity(前台运行)、service(无用户界面,后台提供服务)和broadcast receiver(用于基于事件的操作)


G.O.S.S.I.P 学术论文推荐 2021-07-09

作者的fuzzer框架如图1所示,是比较简洁直观的。流程上来说:输入待测试的APK,通过静态分析得到其intent的模版以及一些条件相关的值,然后基于此进行mutation得到intent DB;进而通过drozer模块在设备上用intent与应用交互并获取日志,然后解析日志得到crash DB。不过文中似乎没有提及crash DB对Intent Engine的feedback作用。


具体来说,设计中比较重要的在于以下两点:

  • 静态分析与模版创造:

    • 静态分析始于manifest级别,旨在检测所有导出组件及相应的intent filter。intent filter描述了组件声明的action、data URL模式和类型,需要满足这些规则才能触发更深的执行路径。

    • 构建intent时,其中一些域是在manifest中给出提示的,而其他的域存储键值对映射的intent payload,这类域格式的正确性是探索crash的必备条件。作者的解决方法是,从每个导出组件的entry point开始搜索这种映射,并创建intent和期望域之间依赖关系。

    基于上面提到的两步,作者构建intent模版,从而生成针对每个导出组件的有效intent。

  • Fuzzing Engine:

    • 其中mutation engine是模块化构建的,可以用AFL等替换。作者测试的是基于 Android API 的 Random 类的简单实现,用于生成随机原始数据。基于这种随机性,在模版上进行数据填充。

    • 测试用例的执行是基于Drozer,依赖测试设备上的drozer代理应用来发送intent并与Android OS互动。在这个环节,重点在于消除每一轮fuzz之间的影响,保证以前的执行不会影响当前执行,这里需要处理的对象是activity。作者通过在intent中设置标志位来确保activity在新任务中启动,并在两个intent的执行之间添加一个时间间隔来确保当前intent的执行尽可能独立于先前的执行。


其他细节这里不具体展开,下面我们来看实验结果。


总体来说,在测试的1488个应用中,有921个应用至少有一个组件crash并抛出异常,有450个应用在测试中完全crash。作者进一步对其中对导出组件进行分析,共发现了635个易受攻击的导出组件,并能通过发送intent导致450个应用crash。并且,这些组件大多是为了与系统广播交互,且缺少安全机制来防止intent数据缺少或损坏。

G.O.S.S.I.P 学术论文推荐 2021-07-09

作者在图2列出了fuzzing中导致应用崩溃的所有异常,并对这五种异常进行了说明。此外,还将fuzzer与NCC Fuzzer、Fuzzinozer这两个同类型fuzzer进行了横向对比,比较了测试发现的vulnerable components与crashes的数量,可以看到作者的方法有非常大的优势。不过稍有不足的是这里的样本较少,欠缺了一些说服力。

G.O.S.S.I.P 学术论文推荐 2021-07-09

论文链接:https://faui1-files.cs.fau.de/public/publications/Template_based_Android_Inter_Process_Communication_Fuzzing.pdf



原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-07-09

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月8日07:01:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 学术论文推荐 2021-07-09http://cn-sec.com/archives/924304.html

发表评论

匿名网友 填写信息