完整的安卓系统框架层调用图生成方法

2018-09-05 10:19代蕊蕊王雅哲
智能计算机与应用 2018年3期
关键词:调用安卓进程

代蕊蕊 王雅哲

文章编号: 2095-2163(2018)03-0015-06中图分类号: 文献标志码: A

摘要: 关键词: (1 Beijing Engineering Laboratory of the Internet Intelligent Device Sercurity, Institute of Information Engineering,

Chinese Academy of Sciences, Beijing 100195, China; 2 School of Cyber Security,

University of Chinese Academy of Sciences, Beijing 100049, China)

Abstract: At present, Android framework call graph static analysis is limited to the Java framework layer, ignoring the media services and sensor services in the C++ framework layer. The safety analysis of the Android system based on the call graph is also less complete. Based on the in-depth analysis of the Android system framework mechanism and source code, the paper presents a complete Android framework call graph generation method. It includes three parts, which are: the Java framework call graph, C++ framework call graph and JNI connection for complete call graph. After that, the paper analyzes in detail the call chain about remote process call, message handler and Java Native Interface.

Key words:

引言

当前,对安卓系统框架层的调用图静态分析局限在Java框架层,但是安卓系统框架层却还容纳有不可或缺的一部分,即C++框架层,该层可提供一些颇具代表性的媒体服务,包括CameraService、AudioFlinger、AudioPolicyService、MediaPlayerService、与用户敏感信息密切相关的传感器服务的主要功能也在该层运行实现,包括SensorService、GravitySensor、 LinearAccelerationSensor、 OrientationSensor等。本文研究旨在生成完整的安卓系统框架层调用图,从而增进现有安卓系统静态分析的完整性,更好地支持论证各类安卓系统框架层安全问题的分析。在对安卓系统框架层机制和源码深入探讨分析的基础上,该方法主要包含了Java框架层调用图、C++框架层调用图、JNI连接生成完整的框架层调用图三个部分。下面,將就这一内容展开设计论述。

1安卓系统概述及框架层分析存在的问题

1.1安卓系统架构

安卓系统不仅庞大,而且错综复杂,安卓系统架构[1]如图1所示。由图1可知,从Kernel层开始进入安卓系统,用于加载Binder Driver、Camera Driver、GPS Driver等;Native层中的init进程(pid=1)是Linux系统的用户进程,用于启动ServiceManager(Binder服务管家)等重要服务;C++ Framework层的Media Server进程由init进程衍生得来,用于启动和管理CemaraService、AudioFlinger等本地系统服务;Zygote进程由init进程孵化出来,Java Framework的System Server是Zygote进程孵化的第一个进程,用于启动和管理LocationManagerService、WifiService、BluetoothManagerService等Java系统服务;所有的APP进程都是由Zygote进程孵化的,通过Binder调用系统服务实现相应功能。

1.2现有安卓系统框架层分析方案

PScout[2]是基于soot[3]的一个开源项目,研究最终将提取安卓中API(documented API和undocumented API)和对应的权限的关系,对应关系的提取是通过权限提取和对安卓框架层调用图的可达性分析得到的,但是PScout仅针对Java框架层,无法生成C++框架层的调用图。

文献[4]主要研究分析安卓框架层源码中的安全体系,设计提出了一个静态分析工具来分析源码中的权限问题。其中,生成框架层调用图的工具是WALA,该工具同样只针对安卓Java框架层,无法生成C++框架层的调用图。

Kratos[5]的研发目的在于分析Android系统中权限不一致性问题,即针对同一资源在不同路径上的权限检查不同,其中生成框架层调用图的工具是Spark,该工具从一个入口点开始寻找一个方法调用到的方法,然后以调用到的方法为起点继续寻找下一级调用方法,同样,该工具无法生成C++框架层的调用图。

综上所述可知,安卓系统框架层包括C++框架层、Java框架层和连接两层的JNI,但是现有安卓系统框架层的分析方法仅针对Java框架层,却忽略了C++框架层中的Camera、Audio等重要系统服务。特别指出的是,加速仪、陀螺仪、重力感应仪、气压计、温度计、光度计、温度计、方位传感器、磁强计等与用户隐私高度相关的传感器[6]的优势功能也在C++框架层实现。所以,为了更趋完善地系统支持各类安卓系统框架层安全问题的分析,就需要研究构建一个完整的安卓系统框架层调用图,不仅可以展示Java函数的调用,而且可以提供C++函数的调用关系,以及两者之间的相互调用关系。

2完整的安卓系统框架层调用图生成方法设计

为了保证安卓系统框架层调用图的完整性,如图2所示,本文基于对安卓系统框架层源码的深入分析,结合PScout、Doxygen[7]和Graphviz[8]分别生成Java框架层调用图和C++框架层调用图,然后利用JNI中本地函数的注册和Java函数指针的注册将2部分调用图合成一个完整的安卓系统框架层调用图。研究内容可阐释分述如下。

2.1Java框架层调用图

Soot是开源的Java编译优化框架,可以用其来对Java字节码的程序流和控制流进行分析,首先利用soot提取每个方法调用到的N个方法,然后提取N个方法中每个方法调用到的M个方法,如此重复,从而可以对每个组件生成调用图。

对所有组件生成的调用图添加远程进程调用(Remote Process Call,RPC )相关的边。在安卓Java框架层通过接口文件处理Binder RPC 操作,如图3所示。图2完整调用图生成方法图3Java框架层Binder远程进程调用过程示例

Fig. 2Complete call graph generation method Fig. 3Java framework layer Binder RPC example

ILocationManager.aidl 是一个安卓接口定义文件,具体实现在LocationManagerService 服务中,ILocationManager$Stub是该服务的服务端代理;ILocationManager$Stub$Proxy 是该服务的客户端代理;当客户端LocationManager 需要从服务LocationManagerService 获取位置信息时,调用服务端的getLastLocation方法,客户端代理负责封装IPC 数据,服务端代理负责解析IPC数据,然后调用了LocationManagerService 服务中的getLastLocation方法后,位置信息数据作为返回值被返回给LocationManager 服务管理者。

以获取最后一次位置信息为例,添加RPC相关的边后的部分调用链可见表1。

最后,添加消息处理机制相关的边。在安卓中,消息发送使用通用的消息处理类,即Message Handler,消息发送者必须先获取该类才能发送消息。该类可以用来区分消息的发送方法和接收方法,以Location ManagerService.java 中的MSG_LOCATION_CHANGED 消息的发送为例,源码中的关键调用如图4所示,消息的发送方法是reportLocation,消息的处理实例为mLocationHandler,对应的类是LocationManagerService 的内部类LocationWorkerHandler,该类中有handleMessage方法。从该方法中可以看出,消息MSG_LOCATION_CHANGED对应的调用方法为handleLocationChanged。

添加消息处理机制相关的边后,位置信息上报对应的部分调用链可见表2。

为了生成完整的C++框架层调用图,设计过程可做如下解析:

(1)利用Doxygen和graphviz对整个安卓框架层的C++代码生成分散的函数调用图。

(2)处理分散的dot文件,通过文本分析识别所有dot文件中存在的边,例如,图5中的9条边需要加入调用图文件中,其它dot文件的处理方式相同。因为不同dot文件中可能存在相同的边,就要对最终的结果文件进行去重。

(3)添加RPC相关的边。如图6所示,以Camera为例,C++框架层的Binder通过接口文件实现,如ICameraService接口执行Binder RPC交互,重点处理来自客户端的连接请求(getNumberOfCameras, getCameraInfo, connect)。其中,BpCameraService为客户端代理,BnCameraService为服务端代理; ICamera接口将负责处理来自客户端的设置与控制请求(startPreview, takePicture等),ICameraClient接口定义的是回调函数,将负责处理来自服务端的事件(dataCallback, notifyCallback, dataCallbackTimestamp)。

图6中类与接口的继承关系可以通过头文件的分析获取,Camera继承自BnCameraClient;CameraService继承自BnCameraService;CameraClient继承自CameraService::Client,而CameraService::Client继承自BnCamera,所以CameraClient继承自BnCamera。接口中客户端与服务端函数的对应关系可以通过接口文件的分析获取,以CameraClient中的takePicture函数为例,如图7所示,Camera类中的takePicture调用ICamera中的takePicture,ICamera中的takePicture通过BnCamera可传递给其子类CameraClient,从而调用到了CameraClient中的takePicture。添加上RPC相关边后的调用链(部分),参见第3节中表3中的5~7行。

2.3JNI连接生成完整的框架层调用图

安卓中大量使用了JNI技術,JNI层的代码使用Native语言(C/C++)编写,使得Java程序中的函数可以调用Native语言写的函数,Native程序中的函数可以调用Java层的函数。如图6所示,在Camera架构中,android_hardware_Camera.cpp(JNI)位于Camera.java与Camera.cpp之间,目的就是将Camera.java中的连接、设置和控制类信息传递给Camera.cpp,同时将Camera.cpp中的数据回调信息上交给Camera.java。

為了进行如上功能研究,Java层需要向JNI注册函数,函数将定义在JNI中,如图7所示。Camera.java中的函数takePicture调用本地函数native_takePcture,而native_takePicture在android_hardware_Camera.cpp(JNI)则注册为android_hardware_Camera_takePicture,该函数中实现具体的功能,即调用Camera.cpp中的takePicture函数。这一调用链可参见第3节中表3中的2~4行。

对安卓框架层中其它JNI的处理原理也是如此,从而可以将Java框架层与C++框架层的调用图连接起来,生成完整的安卓框架层调用图。3结果

以拍照(takePicture)为例,一条从Java层经过JNI、跨过Binder RPC的调用链可见表3。起点为android.hardware.Camera.java中的takePicture函数,终点为CameraClient.cpp中的takePicure函数,该函数调用CameraHardwareInterface.h中的takePicture,本文将其视作偏硬件的操作,不计入调用链。

而且,研究中可以利用图形数据库neo4j[9]对两点之间的调用图进行可视化,Location中部分调用图如图8所示。图8中,每个节点代表一个函数,在neo4j中点击进行查看。

4结束语

为了更好地支持各类安卓系统框架层安全问题的分析,增进现有安卓系统静态分析的完备性,本文研究设计了一种完整的安卓系统框架层调用图生成方法。基于对安卓系统框架层源码的深入分析和现有相关开源项目的透彻理解,该方法主要包含Java框架层调用图、C++框架层调用图、JNI连接生成完整的框架层调用图共3个部分。最终生成的完整调用图可以支持安卓系统研究者的分析工作,例如,安卓权限机制的安全性分析、安卓安全访问管控系统中钩子代码的添加[10-11]。

参考文献

[1] 卿斯汉. Android安全研究进展[J]. 软件学报,2016, 27(1): 45-71.

[2] AU K W Y, ZHOU Yifan, HUANG Zhen, et al. PScout: Analyzing the Android permission specification[C]// Proceedings of the 2012 ACM conference on computer and communications security. Raleigh, North Carolina, USA:ACM, 2012:217-228.

[3] VALLERAI R, CO P, GAGNON E, et al. Soot-a Java bytecode optimization framework[C]//CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research. Mississauga, Ontario, Canada: ACM, 1999:1-11.

[4] BACKES M, BUGIEL S, DERR E, et al. On demystifying the Android application framework: Re-visiting Android permission specification analysis[C]// 25th USENIX Security Symposium. Austin, TX: USENIX Association, 2016:1-18.

[5] SHAO Yuru, OTT J, CHEN Q A, et al. Kratos: Discovering inconsistent security policy enforcement in the Android framework[C]// Network and Distributed System Security Symposium. San Diego, California, USA:Dblp,2016:1-15.

[6] NARAIN S, VOHUU T D, BLOCK K, et al. Inferring user routes and locations using zero-permission mobile sensors[C]// Security and Privacy. San Jose, CA, USA:IEEE, 2016:397-413.

[7] Doxygen. Downloads[EB/OL]. [2018-01-30]. http://www.stack.nl/~dimitri/doxygen/download.html.

[8] graphviz. Graph visulization software[EB/OL]. [2016-10-10]. http://www.graphviz.org/.

[9] Neo4j.inc. neo4j[EB/OL].[2017-07-11]. https://neo4j.com/.

[10]CHAKRABORTY S, SHEN Chenguang, RAGHAVAN K R, et al. ipShield: A framework for enforcing context-aware privacy[C]//Proceedings of the 11th USENIX Symposium on Networked Systems Design and Implementation(NSDI'14). Seattle, WA, USA: Usenix Association, 2014:143-156.

[11]PETRACCA G, SUN Yuqiong, JAEGER T, et al. AuDroid: Preventing attacks on audio channels in mobile devices[C]//Proceedings of the 31st Annual Computer Security Applications Conference. Los Angeles, CA, USA:ACM, 2015:181-190.(上接第14页)

[5] [ZK(#〗吴晓军,王红星,刘敏. 不同能见度下接收孔径对无线光通信误码率性能影响分析[J]. 光学学报,2013,33(10):1006003.

[6] 封双连,张志刚,强希文,等. 戈壁地区近地面大气折射率结构常数的统计分析[J]. 强激光与粒子束, 2012, 24(1):39-42.

[7] 葛琪,王可东,张弘,等. 长曝光大气湍流退化图像点扩散函数估计 [J]. 红外与激光工程,2014,43(4):1327-1331.

[8] 王先鹏. 大气激光通信系统误码特性的实验测量与分析 [D]. 西安:西安理工大学,2008.

[9] 于林韬,宋路,韩成,等. 空地激光通信链路功率与通信性能分析与仿真 [J]. 光子学报,2013,42(5):543-547.

[10]KAUR P, JAIN V K, KAR S. Performance analysis of FSO array receivers in presence of atmospheric turbulence[J]. IEEE Photonics Technology Letters, 2014, 26(12): 1165-1168.

[11]黄继鹏,王延杰,孙宏海,等. 激光光斑位置精确测量系统[J]. 光学精密工程, 2013, 21(4):841-848.

[12]王德飞,楚振锋,任正雷,等. 大气湍流对激光通信系统误码率影响的研究 [J]. 激光与红外,2011,41(4):390-393.

[13]ANDREWS L C, PHILLIPS R L, YOUNG C Y. Laser beam scintillation with applications [M]. Bellingham: SPIE Press, 2001.

[14]馬晓珊,朱文越,饶瑞中. 利用闪烁和漂移效应测量大气折射率结构常数的对比分析[J]. 强激光与粒子束,2007,19(4):538-542.

[15]LI H D, KALLERGI M, CLARKE L P, et al. Markov random field for tumor detection in digital Mammagraphy[J]. IEEE Trans. on Medical Imaging,1995,14(3):565-576.

猜你喜欢
调用安卓进程
让iPhone变安卓,这是真的野
文物表情包
Dalvik虚拟机进程模型研究
快速杀掉顽固进程
不留死角 全方位监控系统
基于Android Broadcast的短信安全监听系统的设计和实现
中外民主法制进程专题复习
学习安卓应用开发
安卓机器人
利用RFC技术实现SAP系统接口通信