利用同步回调机制攻击Android的系统服务和系统应用

作者:王凯 (中国科学院大学)

系统服务是Android系统中的重要组件:它们将内核层的底层功能进行封装,并对上层的应用进程提供服务。这种服务是通过程序编写接口(Application Programming Interface, API)的形式给出的。当应用进程调用这些API的时候,实际上是在与系统服务所在进程开展进程间通信(Inter-Process Communication, IPC)。Android中,多数系统服务都运行在名为System Server的进程中。

通常情况下,系统服务在处理完服务请求后会将结果返回给应用进程。而为了更加灵活的进行处理结果的通知,有些系统服务接口会接收回调句柄并用其进行结果通知。如果这些回调是以同步形式进行的,系统服务的代码中将有可能受到来自恶意回调方法的攻击,攻击方法有:

  1. 阻止回调方法的返回过程,以阻塞系统服务相应处理线程;
  2. 返回恶意挑选的Exception,以导致系统服务进程崩溃。

如图1所示,对于方法1,如果系统服务进行回调的代码处于线程间同步的代码块之中时十分有效。而图2中展示的则是利用方法2攻击PackageMangerService。由于PackageManagerService无法有效的捕获Exception并进行处理,将导致整个进程的崩溃。

%e5%9b%be%e7%89%871

图 1 恶意回调函数攻击ActivityManagerService

%e5%9b%be%e7%89%872

图 2 恶意回调方法攻击PackageManagerService

此外,有些系统服务会利用系统应用协助处理服务请求。有些情况下,回调句柄也会被交付与系统服务应用以进行灵活的结果通知。 因此利用恶意回调方法的攻击对于某些系统应用同样适用。

针对此类新的安全漏洞,我们设计了一套静态污点分析工具以实现有效的漏洞挖掘。这套工具基于Soot实现,修改了著名的Android应用静态污点分析工具FlowDroid,实现了针对Android系统服务代码的漏洞挖掘。[Tao – 能否对你们的分析工具做进一步的描述?简单表述一下其工作原理:

利用该工具我们分析了Android 5.1.0上System Server进程提供的80个系统服务共1592个接口,发现了9个系统服务或系统应用中的漏洞。我们将这些漏洞进一步在Android 2.3.7 – 6.0.1各个版本上进行了验证,结果如表1所示。可以看出,此类漏洞存在于我们所测试的Android各大版本之中。据统计,受影响版本占据了超过98%的Android设备。

表 1 最新发现漏洞列表

%e5%9b%be%e7%89%873

由于系统服务在Android系统中的关键地位,当我们针对其中的漏洞进行攻击时将导致关键系统功能的无响应乃至整个系统的软重启。利用这一特性,我们设计、实现了阻碍系统更新、组织应用升级、对抗杀毒扫描等攻击场景,证明了此类漏洞所带来危害的严重性。

更多细节请参看我们的论文:

Kai Wang, Yuqing Zhang, and Peng Liu. Call Me Back! Attacks on System Server and System Apps in Android through Synchronous Callback. ACM CCS 2016. http://dl.acm.org/citation.cfm?id=2978342&CFID=860988705&CFTOKEN=89881504

作者简介:

王凯,中国科学院大学计算机与控制学院2012级硕博连读生。研究兴趣是发现系统安全漏洞,设计漏洞挖掘工具,研究漏洞利用技术及解决方案。目前有一篇论文被顶级安全会议CCS 2016录用。

目前正在找工作,希望能在企业或科研团队中继续开展系统安全及漏洞挖掘方面的工作,目标工作地点为北京。如对他感兴趣,欢迎通过邮件联系hikamee@gmail.com.

 

Bookmark the permalink.

Comments are closed.