系统服务是Android系统中的重要组件:它们将内核层的底层功能进行封装,并对上层的应用进程提供服务。这种服务是通过程序编写接口(Application Programming Interface,API)的形式给出的。当应用进程调用这些API的时候,实际上是在与系统服务所在进程开展进程间通信(Inter-Process Communication,IPC)。Android中,多数系统服务都运行在名为System Server的进程中。
在通常情况下,系统服务在处理完服务请求后会将结果返回给应用进程。而为了更加灵活地处理结果的通知,有些系统服务接口会接收回调句柄并用其进行结果通知。如果这些回调是以同步形式进行的,系统服务的代码中将有可能受到来自恶意回调方法的攻击,攻击方法有:
1.阻止回调方法的返回过程,以阻塞系统服务相应处理线程;
2.返回恶意挑选的Exception,以导致系统服务进程崩溃。
如图1所示,对于方法1,系统服务进行回调的代码处于线程间同步的代码块之中时十分有效。而图2中展示的则是利用方法2攻击Package MangerService。由于Package Manager Service无法有效地捕获Exception并进行处理,将导致整个进程的崩溃。
此外,有些系统服务会利用系统应用协助处理服务请求。有些情况下,回调句柄也会被交付与系统服务应用以进行灵活的结果通知。因此利用恶意回调方法的攻击对于某些系统应用同样适用。
针对此类新的安全漏洞,我们设计了一套静态污点分析工具以实现有效的漏洞挖掘。这套工具基于Soot实现,修改了著名的Android应用静态污点分析工具FlowDroid,实现了针对Android系统服务代码的漏洞挖掘。污点分析工具将系统服务接口接收的外来参数判定为污点源,将利用被污染的回调句柄进行同步回调的语句判定为污点陷入点,当发现从污点源到污点陷入点的污点传播路径时,即发出可能存在安全漏洞的警报。而后针对每一个警报进行了人工分析,设计并运行了漏洞验证代码,实现了漏洞的动态验证。
利用该工具分析了Android5.1.0上SystemServer进程提供的80个系统服务共1592个接口。静态污点分析工具共发出了11个警报,经动态测试发现其中2个为误报。因此,共发现了9个存在漏洞的系统服务接口。通过将这些漏洞进一步在Android2.3.7-6.0.1各个版本上进行了验证,结果见表1。可以看出,此类漏洞存在于我们所测试的Android各大版本之中。据统计,受影响版本占据了超过98%的Android设备。
由于系统服务在Android系统中的关键地位,当我们针对其中的漏洞进行攻击时将导致关键系统功能的无响应乃至整个系统的软重启。利用这一特性,设计、实现了阻碍系统更新、组织应用升级、对抗杀毒扫描等攻击场景,证明了此类漏洞所带来危害的严重性。
(作者单位为中国科学院大学)
王凯:中国科学院大学计算机与控制学院2012级硕博连读生。研究兴趣是发现系统安全漏洞,设计漏洞挖掘工具,研究漏洞利用技术及解决方案。目前有一篇论文被顶级安全会议CCS2016录用。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。