强 杰,潘 清,王 飞
(1.装备学院 信息装备系,北京 101416;2.装备学院 研究生管理大队,北京 101416)
Android系统信息泄露检测研究综述
强 杰1,2,潘 清1,王 飞1
(1.装备学院 信息装备系,北京 101416;2.装备学院 研究生管理大队,北京 101416)
随着智能手机的广泛应用,Android系统的得到了大规模的普及,随之而来的就是Android系统信息泄露的问题。本文从检测泄露的机制出发,从静态检测,动态检测以及Android本身的安全保护机制出发,详细介绍了实现方式,最后对未来的Android系统检测做出了展望。
手机安全;静态检测;动态检测;动态污点跟踪;访问控制
近些年,Android 手机的普及十分迅速。iiMedia Research发布的数据[]指出,2014上半年 Android手机占有 89.9%中国智能手机市场份额。Strategy Analytics发布的数据[2]指出,2014年第四季度,Android手机占有 83.6%全球智能手机市场份额。Android 手机不仅满足人们的沟通需求,还可被用于理财、网上购物等日常活动。并且手机内通常存储着一些有关用户信息的隐私数据,如短信、通讯录、地理信息、照片等。如果这些信息泄露,会给用户带来严重的经济、精神损失。腾讯移动安全实验室 2015年第一季度手机安全报告[3]显示,2015年第一季度Android手机病毒包新增1829188个,相对去年同期,同比增长1200%。即2015年第一季度新增Android病毒包是2014年第一季度的13倍,是 2014年全年新增手机病毒包的1.82倍,其中隐私窃取类病毒占 2.5%的比例,虽然其相比 2014年总体病毒类型大盘中所占比例正在缩小,但该类病毒的“质量”与智能化程度正在提升,正在演变成窃取用户验证码或者窃取用户短信中的个人隐私的高危病毒,而且还能随意转发用户短信,耗费用户的话费,甚至还可能造成支付验证码被转发、资金被盗刷等严重风险。因此,Android手机隐私数据泄露是一个必须得到关注的问题。
本文针对Android 手机隐私泄露问题进行了研究。首先介绍了Android 手机中的隐私数据源类型,然后介绍了现阶段检测隐私泄露技术以及现有的Android系统现有的保护机制及其缺陷。
Android 手机上存储着和用户相关的数据,用于不同的功能。本节主要介绍两种存在的用户隐私数据类型,隐私数据,也称为个人识别信息 PII(Personally identifiable information),即应用产生的数据和设备相关的信息,可以用来区分、联系或定位个人或与他人进行区分的信息:
应用产生的数据:短信,通讯录,电话通话状态,通话记录,日历,浏览器浏览记录,应用缓存,最近访问记录,已安装的应用信息,登陆凭证(用户名、密码),认证令牌,音频,视频,图片等。
设备相关的信息:用户手机号码,SIM 卡串号(ICC-ID),国际移动用户识别码(IMSI),国际移动设备身份码(IMEI),传感器数据(如 GPS、加速度传感器),手机型号,系统版本等。
2.1 静态检测
静态检测是在不执行程序的条件下,通过数据流分析和控制流分析等技术对程序代码进行扫描,检测程序是否存在隐私泄露的可能性。
目前 Android应用程序的静态分析的对象分为两种情况,一种是将Android应用程序还原为 java源码进行分析,一种是将 Android应用程序还原为伪代码。
Android应用隐私泄露的静态检测方法分为三个阶段:预处理、控制流与数据流分析、分析检测。流程如图1所示:
图1 Android应用隐私泄露静态检测流程[4]Fig.1 The static detection process of Android application privacy leak[4]
待检测应用程序首先通过预处理 Dedexer反编译转化成为可以进行分析符号表和数据结构。然后通过控制流、数据流分析,得出被检测应用程序的控制流图以及函数调用图。最后对控制流、数据流分析的结果进行处理和筛选,并和预先定义的规则进行比较,确定是否存在隐私泄露,并生成检测报告。
预处理:目前大部分 Android应用程序检测隐私泄露的 App,如 LeakMiner,将应用程序反编译为 Java代码进行分析,但是受限于技术原因没有100%完全还原为 Java代码,故会造成程序信息缺失,对最终分析结果产生影响。另有一部分Android应用程序检测泄露的App采用伪代码进行分析,相比还原为Java代码的优势为信息保留更完整,分析结果比前者也更加完善。
控制流与数据流分析:控制流和数据流分析是通过静态分析将 Android应用程序的代码转化为可进行后续分析的数据信息。其中控制流分析包括生成 Android应用程序的过程间控制流图以及函数调用图。通过控制流分析,可以得到程序的运行特性,如程序代码的执行路径等。数据流分析是对Android应用程序中的数据如何在程序中传递进行分析,包括类型推导、常量分析、类层次分析、定义使用链构建、反射分析、别名分析等。由于数据流分析结果可能会对控制流分析的结果造成影响,例如通过数据流分析,有些程序点的控制流信息可能会得到更新。对于这些被更新的程序点需要重新进行控制流分析,并在新的控制流分析的结果上再次进行数据流分析。迭代直到控制流分析和数据流分析的结果达到稳定,没有新的信息被更新,才认为控制流和数据流分析结束,进行下一个检测步骤。
分析检测:污染分析是用于分析确认 Android应用程序中是否存在隐私泄露的操作。污染分析把Android应用程序中获取隐私相关信息的程序点作为污染分析的“源点”,把 Android应用程序的信息泄露点作为污染分析的“锚点”,如果在 Android应用程序的某个程序点,信息的传递会得到用户的确认并中断,那么认为此程序点为污染分析的“清除点”。依据这些定义信息,对控制流分析和数据流分析的结果进行分析匹配。如果通过分析,存在有某个“锚点”所泄露的信息依赖于某个“源点”所获取到的隐私信息,且在依赖路径上没有任何“清除点”,则认为该“锚点”泄露的信息被“污染”,即存在隐私泄露的可能性。污染分析一般从“锚点”或“源点”开始进行分析。以“锚点”开始进行分析为例,依据数据流分析中的定义使用链的结果,去查找“锚点”所泄露的数据会被那些程序点的数据影响。之后再查找这些程序点的数据又会被那些程序点的数据影响。如此递归分析,直到找到这些数据的初始化或常量定义。之后对这整个“搜索树”进行扫描,看是否包含有“源点”。如果存在“源点”,则这个“搜索树”上“源点”到“锚点”的路径就是隐私泄露的可能传播路径。之后再确定此传播路径是否可行,例如是否包含有“清除点”。
2.2 动态检测
动态检测技术有传统的沙箱技术以及动态污点跟踪技术。
沙箱技术是程序隔离运行机制,广泛的应用于软件测试、病毒检测等领域。沙箱技术在进行隐私泄露的检测时,需要检测系统中读取敏感信息、网络通信等重要接口。当程序通过这些端口时,给予及时的记录。通过这种办法,可以检测到程序是否读取了用户敏感信息和是否通过网络向外部发送数据。但由于系统检测的不连续性,检测到数据缺乏必然的逻辑关系和上下文关联性,因此存在检测判定程序是否泄露用户数据的不准确性。
动态污点跟踪技术则是连续跟踪数据流向,弥补了沙箱技术的不连续性的缺陷。主要应用于漏洞挖掘等方面。动态污点跟踪检测隐私数据泄露时,把隐私数据作为污点数据,随后跟踪其传播,当检测到这些污点数据通过网络、蓝牙或者后台短信等方式发送出去的时,即可判定使用该数据的程序存在隐私泄露。
FlowDroid[5]基于污点跟踪静态分析应用中的一个组件内的数据流动。TaintDroid[6]基于污点跟踪在应用程序执行时跟踪敏感数据流动,当数据通过网络接口离开本机时提醒用户,以此用户可以保护数据隐私安全。除此之外,还有IccTA[7], TaintChaser, DidFail等不基于不同形式的污点跟踪检测。
如上图2所示,程序A,B中的曲线分别代表程序内运行的进程,实线代表该进程中没有污点数据,虚线代表存在污点数据,不同虚线表示不同的污点数据。当检测到程序在读取用户隐私信息时,将读取到的隐私数据标记污点。而当程序对带有污点的用户敏感数据进行操作时,能够对该操作进行相应处理,保证污点能够跟随隐私数据传播下去。当2个程序之间进行通信时,污点也能跟随数据正常跟踪下去。例如,图中程序A中的一个进程(点虚线)将带有污点的数据发送给程序B中的一个线程后,污点在该线程中能继续跟踪着数据传播下去。当程序把带有污点的数据通过隐私泄露点发送到外面时, 则实时地记录该行为。最后分析得到的日志,来判断程序是否存在隐私泄露。如果该日志中存在程序将污点数据发送出去的记录,则判定 程序存在隐私泄露的问题。
图2 动态污点跟踪技术原理Fig.2 The principle of dynamic stain tracking technology
Android操作系统作为一款基于Linux内核设计的源移动终端操作系统,在安全性设计方面,主要沿用了传统Linux中的访问控制(Access Control)机制,同时对其进行了增强,创建了一套权限授予机制,对系统资源进行了更细粒度的权限保护。Android将系统资源进行分类,每类资源对应相应的用户组。同时,Android操作系统制定了许多权限规则,规定何种权限归属于何种用户组,从而形成了一个权限-用户组-系统资源的映射关系[8-10]。因此只有在拥有特定权限的用户组中的用户才能访问相应的系统资源。例如只有INET用户组和SYSTEM用户组中的用户才拥有创建Socket通信的权限。此外,Android系统在运行时为每个应用程序分配一个独立的用户ID,依靠 Linux中的 UID机制以达到隔离效果。Android安全模型是基于沙箱环境下的程序隔离机制,每个程序在自己的进程空间运行,不能影响或修改其它程序的执行序列,该隔离机制通常在Linux内核层实现,其具体的实现方式包括数据的隔离和内存空间的隔离。Android的沙箱隔离机制为程序的执行提供了一个安全的环境,但同时也降低了系统功能性[11-13]。因此为在安全的前提下尽量提升系统功能性,Android引入了共享ID和权限机制。两个程序可以通过共享ID和声明权限,共享数据和应用程序组件。共享ID允许程序共享数据和程序组件。多个程序要共享 ID,必须使用相同的数字证书签名。在实际开发中,开发者可以通过使用相同的私钥签名实现共享ID,从而绕过隔离机制的限制,然而由于没有统一的证书管理机构,开发者只能自行保管私钥,因此带来了很大的安全隐患。权限机制的使用非常广泛,其使用方式包括定义和声明两种。其中每个程序在编写时能定义一组权限,这组权限表示在其它程序获得授权的情况下,该程序对外提供的部分功能;另外,每个程序还可以声明一组权限,以获取访问其它程序或系统提供的接口的资格。声明的权限在程序安装时获取,若用户不同意授权,则程序无法成功安装,并且权限一旦获取就无法更改。
结合静态检测方法和动态检测方法的优缺点,以及现有的 Android保护机制,设计出一种新的检测方法。该方法结合了目前的静态和动态检测方法,并且加入了现有实施的 Android保护机制。其流程图见图3:
图3 检测流程图Fig.3 Dection Flow chart
通过该流程图可以清楚地知道该检测方法是如何进行检测信息泄露的。首先获得应用程序,将其反编译成为Java文件,然后从中得到Mainfest.xml配置文件,根据 Android现有的安全机制,过滤出超出安装时权限的信息,如果不存在超出,则进入下一步进行静态分析检测,存在超出则反馈该程序存在信息泄露。
下一步进行静态分析测试,步骤和之前的叙述的一样,在次不做赘述,静态分析结束后生成静态报告。对包含疑似泄露路径的进行动态分析检测。进行动态分析检测步骤和之前叙述一样,在此不做赘述,最终生成动态分析报告,根据分析报告来判定该程序是否存在信息泄露。
但是,此方法存在的问题是资源占用太大,手机系统资源是非常宝贵的,占用太大的资源会影响用户的体验。如果放在本地进行测试,动态验证就不易实现。所以目前这种解决办法小范围的应用在国内的一些 Android商城中,并且还加入了人工验证的办法,提高安全性和检测准确度。因此如何将该方法嵌入到手机 Android系统中,并且尽量少的占用资源,是一个值得今后进行研究的问题。
[1]2014半年中国智能手机市场监测报告[OL].[2014-08-19].http: //www.iimedi a.cn/37560.html.The report of China's smartphone market monitoring in half a 2014[OL].[2014-08-19].http: //www.iimedi a.cn/37560.html.
[2]Android Captures 84% Share of Global Smartphone Shipments in Q3 2014[OL].2014-10-31].http: //blogs.strategyanalytics.com/WSS/?tag=/android.
[3]腾讯移动实验室2015年第一季度手机安全报告[OL].[2015-5-12].http: //scan.qq.com/security_lab/news_detail_ 310.html.
Tencent mobile laboratory mobile phone security report in the first quarter of 2015 [OL].[2015-5-12].http://scan.qq.com/security_lab/news_detail_310.html.
[4]刘涛, 唐祝寿, 沈备军.Android应用隐私泄露的自动化检测[J].计算机应用与软件, 2015, (3): 297-301.DOI: 10.3969/ j.issn.1000-386x.2015.03.070.
Liu Tao, Tang Zhushou , Shen BeiJun.The application of automatic detection of privacy l-eaks [J].Computer Applications and Software, 2015, (3): 297~301, 316.DOI: 10.3969/ j.issn.1000-386x.2015.03.070.
[5]Arzt S, Rasthofer S, Fritz C, et al.FlowDroid: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps[J].Acm Sigplan Notices, 2014, 49(181): 187-195.
[6]Enck W, Gilbert P, Chun B G, et al.TaintDroid: an information-flow tracking system for realtime privacy monitoring on smartphones[C]// Proceedings of the 9th USENIX conference on Operating systems design and implementation.USENIX Association, 2010: 1-6.
[7]LI L, BARTELA, KLEIN J, et al.I know what leaked in your pocket: uncovering privacy leaks on Android Apps with Static TaintAnalysis[R].Luxembourg: TR-SNT-2014-9_978-2-87971-129-4, 2014.
[8]曾立鹍, 唐泉彬, 牛斗, Android 系统应用程序组件安全性分析[J].软件, 2014, 35(3): 147-151.
[9]黄文雄.面向Android 应用的用户行为分析方法[J].软件, 2014, 35(12): 83-87.
[10]吴文焕.Android 应用程序数字签名机制研究[J].软件, 2014, 35(2): 109-110.
[11]荣艳冬.Android 软件权限系统的设计与实现[J].软件, 2014, 35(2): 50-51.
[12]李淑民.Android 手机隐私泄露研究[J].软件, 2015, 36(2): 69-72.
[13]邢晓燕, 金洪颖, 田敏.Android 系统 Root 权限获取与检测[J].软件, 2013, 34(12): 208-210.
Android System Information Leak Detection
QIANG Jie1,2, PAN Qing1, WANG Fei1
(1.Department of Information Equipment, Equipment Academy, BeiJing 2, 101416, P.R.China; 2.Company of Postgraduate Management, Equipment Academy, BeiJing 1,101416, P.R.China)
With the widespread use of smart phones, Android system has been a large-scale popularity, however followed by the problem of information leak.This paper is based on the mechanism of detecting leaks; it introduces the implementation methods from static detection, dynamic detection and security protection mechanism of Android system.Finally, we made a prospection on the Android system detection in the future.
Mobile security; Static detection; Dynamic detection; Dynamic stain tracking; Access control
TP309.2
A
10.3969/j.issn.1003-6970.2017.03.030
强杰(1992-),男,硕士研究生,主要研究方向信息安全;潘清(1964-),男,装备学院教授,主要研究方向信息安全;王飞(1979-),男,装备学院讲师,主要研究方向可信计算。
本文著录格式:强杰,潘清,王飞.Android系统信息泄露检测研究综述[J].软件,2017,38(3):143-146