Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Call Me Back! Attacks on System Server and System Apps in Android Through Synchronous Callback

论文下载

Abstract

文章通过静态分析的方法,找到了6个系统服务中一些与callback相关的漏洞,并利用这6个漏洞实现了攻击。

Hazard Situations

Inside the SS(System Server):

  • The callback is invoked in a synchronized code block of any service thread;

某些服务可能会处理一些全局变量,这时需要一些并发控制。例如synchronized{lock}{code}。在一个线程访问这部分代码时,通过锁来阻止其他线程来访问。这部分代码叫做synchronized code block。如果这部分代码中,会调用回调函数,就很危险。如下图(Vul#1):

Fig

ActivityManagerService提供的接口startInstrumentation()需要一个callback handle参数android.app.IInstrumentationWatcher watcher。这段代码在synchronized code block调用了watcher.instrumentationStatus()。而该方法是回调方法,由APP实现。如果在其中加入Thread.sleep(10601000);则会造成System Service Freeze。

  • The callback is invoked in an assistant thread without involving any synchronized block.

SS中的线程分两种primary和assistant。primary thread会将没有被代码捕捉的exception放在reply data中返回。但assistant thread遇到没有被代码捕捉的exception则会崩溃。如果在assistant thread中调用回调函数,就很危险。(Vul#4)

Fig

pi.sendIntent()调用时会调用pi.mTarget.send() 其中send()是回调函数。而这里只能处理SendIntentException,如果是其他Excepion会导致系统重启。

Inside a cooperator system app:

  • The callback is invoked in an activity component;(Vul#5)

Fig

Fig

  • The callback is invoked in a service component or a broadcast receiver component.(Vul#6)

Fig

这两种情况和之前类似,只不过是引起system app的崩溃。例如(Vul#5),让通过在回调函数加入无限等待,可以使系统弹窗没任何反应(卡死)。

分析工具

工具基于flowdroid,但是由于需要分析系统代码,因此会有所改动。只要需要解决四个问题:

  1. 系统类太多,都分析比较麻烦,这时需要定义哪些类有用,哪些类无用。这里用的很技巧,认为规定分析深度,超过一定深度就不再分析。因为他的目的是找到漏洞,不是找全漏洞。
  2. 生成图的时候,多线程转单线程。
  3. 生成图的时候,处理ICC/IPC。二三点解决方法就是细粒度,比如遇到什么函数,就怎么合并。没有统一方法
  4. 某些污点可能是长时间污染的。(全局变量,可能在上一次执行时就被污染了)这里认为作规定。

流程图如下:

Fig

结果分析

共找到6个漏洞,文章给出了细节及利用方法。前面已经举例说明,这里不再一一列举。结果分析算文章主体,前面的工具写的并不详细。

除了每个漏洞的单独利用,文章还设计了高级一点的利用:

  1. 进程防杀。多个进程互相监督,有一个被杀了,就利用漏洞使系统重启。
  2. 防杀毒软件。利用白名单,当杀毒软件扫描进程开始时,就利用漏洞使系统不再相应,看起来好像杀毒软件使系统变卡。最后还是会重启。
  3. 防APP更新。时刻监控有漏洞的APP。如果没了,马上重启。这样会导致新的还没来得及安装。这时更新进程会回滚。
  4. 放系统更新。原理同上。

最后文章还提出了防护手段。唯一的方法就是修复源码:1)尽量异步处理 2)多用try catch结构来捕捉异常。