面向安卓应用的描述与权限保真度测量软件的设计与实现
孙孟奇+王爽+段育凯+高珊
摘要:在智能手机不断兴起的今天,对于智能手机的系统平台的关注度也越来越大。Android 是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android 是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发。Android平台的开放性等特点既能促进技术(包括平台本身)的创新,又有助于降低开发成本,还可以是运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜力。
关键词:安卓应用;智能手机;描述与权限保真度测量
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)12-0139-04
在智能手机功能越来越多样化的大环境下,用户越来越多的个人资料存储在手机中,随着近些年一些隐私信息泄露的问题的出现,智能手机安全问题也得到了越来越多的关注,手机的安全,尤其是手机的信息的安全也成了人们在使用手机时最为关注的问题之一。
打开手机,就必须要使用手机中的应用程序,尽管许多应用能给人们的日常生活带来诸多便利,增添不少的乐趣,但某些恶意应用给人们带来的负面影响也是不容小觑的,手机中的应用也许会在我们不知情时泄露一些我们的信息。
在手机应用商店中,用户可以直接获取关于某个应用的自然语言描述,这些描述可以让人直观地感受到该应用所包含的与安全有关的信息。为了更好地使用户信服,应用程序的描述必须真实地反映它所请求的权限,这被称为应用描述与权限的保真度。在该文中,笔者提出了一种基于学习的描述与权限算法模型,通过Stanford Parser和Explicit semantic analysis(ESA)对应用的描述和已经公开的应用权限集进行训练,得到与权限相关联的语义模式对,将需要分析的应用信息与训练结果对比得出结论。在算法研究的基础上,该文提出了在安卓平台上的软件实现,在Android客户端上实现了应用管理模块,反馈模块,帮助模块和安装检测模块;在服务器上实现了描述与权限算法模型,数据库模块和客户端请求处理功能。
1 绪论
1.1 研究背景
在智能手机飞速发展的今天,对手机应用安全性的检测是十分重要的。对于同一款应用,不同种类的安全检查有可能会出现不同的安全系数。传统上对恶意手机应用的检测一般通过二进制文档的静态/动态分析。但是这种分析对于评价应用所需权限是否超出了用户期望还是有所匮乏的。帮助用户分析、判断可疑应用,不仅能给用户带来更好的体验,还能够促进安卓市场的发展。
本文针对应用商店中的手机应用进行研究,以Google Play为例,Google Play为用户提供了多种应用元数据,比如:应用的名称,描述,画面截图,评分,评论等等。用户可以直接获取关于某个应用的自然语言描述,这些描述可以让人直观地感受到该应用所包含的与安全有关的信息。 Google Play同时也展示了应用程序请求访问手机中与隐私安全有关API相对应的权限,用户可以使用这样的一个列表来评估使用这些应用程序的风险。在应用程序权限的描述上,应用程序的描述必须真实地反映它所请求的权限,这被称为应用描述与权限的保真度。对于权限的保真度的研究,正是本文的研究内容。
1.2 研究现状
最近几年,Android 手机的普及十分迅速。Android 手机不仅满足人们的沟通需求,还可被用于办公、网上购物等日常活动。Android 手机内通常存储着一些有关用户信息的隐私数据,如短信、通讯录、地理信息等。如果这些信息被泄露,可能会给用户带来严重的经济、精神损失。Media Research 发布的数据指出,2014 上半年 Android 手机占有 89.9%中国智能手机市场份额。Strategy Analytics 发布的数据指出,2014年第三季度,Android 手机占有 83.6%全球智能手机市场份额。DCCI 互联网数据中心联合 360 手机安全中心发布的《2014 年上半年 Android 手机隐私安全报告》中显示,92.8%的 Android 手机用户把隐私存放在手机中,并且 53.6%的 Android 手机用户表示手机是存储隐私最多的设备。腾讯移动安全实验室 2014 年第三季度手机安全报告显示,在 2014 年第三季度,腾讯手机管家截获了 224,516 个病毒包,隐私窃取类病毒占 28.25%的比例,位居第二。众多的数据指出,安卓手机在安全方面依旧存在很大缺陷,尤其是手机信息方面的安全问题更是令人堪忧。
在手机应用权限方面,也有着混乱复杂的现状。据Bit9公司对Google Play中的应用进行的统计分析的结果表明:42%的程序会收集用户的GPS位置信息,这些程序涉及壁纸类,游戏类和工具类程序;31%的程序会收集用户的通话记录或者电话号码;26%的程序会收集诸如联系人和邮件等用户个人信息;9%的程序会强制获取用户的消费许可。这些对于手机权限的随意申请及获取,正是安卓权限系统管理不完善的表现,也正因如此,才给了恶意者可乘之机,因此,对安卓应用的权限保真度研究迫在眉睫,这也正是本文要研究的问题。
2 算法研究
2.1 自然语言处理模块
自然语言处理模块(NLP)的主要任务是识别描述中的一些特殊结构,如动词短语和名词短语,并了解他们之间的关系。这种设计能弥补基于关键词分析所带来的不足。自然语言处理模块由两部分组成,句子边界消歧和语法结构分析。
1)句子边界消歧(SBD)
所有的描述将会被拆分成句子,以便之后在语法结构分析中使用。特征符号“.”,“:”,“-”和其他点句开始之前的符号如“*”,“?”,“?”等将被作为句子的分隔符,本文使用正则表达式来匹配电子邮件地址,URL,IP地址,电话号码,缩写和省略号等,否则的话他们中间包含的分隔符会对SBD造成干扰。
2)语法结构分析
首先用Stanford Parser输出句子的语义层次,即句子的不同部分如何相互依赖。依赖关系中包含关系名,动词和依赖者。词性标记额外为每个词增加了一个词性标签,如动词,名词,形容词等。结果被送入Stanford Parser,从而将句子拆分成名词短语,动词短语,或者其他种类的短语。最后得到了每个句子的分层的短语和标记的词汇。
2.2 描述语义模块
描述语义模块(DS)的目的是得到自然语言描述的真正意思,即怎样将词表中不同的单词和词组联系在一起。在这个模块中本文使用了Explicit semantic analysis(ESA),一种计算自然语言语义相关度的方法。它既用与描述语义模块的分析,也用于计算描述与权限关联度的学习。
ESA是一个衡量两个文本片段的关联性的一种算法。它利用大语料库文件来构建文本(单个单词或者整个文档)的向量表示。它是将文本的意思在一个高维的空间中表示,而这个概念空间就是wiki。wiki上面的每个文章看成一个概念,那么采用机器学习的方法就能够将任何文本显式的表示成wiki概念的带有权值的向量。每当输入一个文章,ESA将会计算输入文本域每个概念的相关度,即通过一系列相关度高的词汇将文章放入一个概念空间。在自然语言分析和信息检索中,ESA常通过两个投影向量之间的余弦距离来计算两篇文章的相似度。
2.3 描述与权限相关度模块
描述与权限相关度模块(DPR)是提高软件测量准确度的一个决定性因素。这一模块通过分析大量应用中的描述和权限设计了一个基于学习的算法来测量一个名词模式对与某一个权限的相关度。
3 软件实现
基于安卓应用描述与权限保真度测量软件可以根据描述与权限的对应关系自动判断一个应用程序声明的权限和它的描述是否一致对应。
在设计中,主要的工作是在基于学习的描述与权限算法模型的基础上,实现一款Android应用描述与权限保真度测量软件。软件在客户端分为四个模块:应用管理模块,反馈模块,帮助模块和安装检测模块。主要用来查看应用的权限信息与对安装应用的动态检测。软件在服务器端分为三个模块:描述与权限算法模块,数据库模块和客户端请求处理模块。主要用来动态分析应用商店中的应用和响应客户端的消息。同时,还需要设计一个介绍网页来使用户对该软件有一个深层的了解。
3.1 软件系统功能描述
客户端应该具备以下功能:
1)当一个应用被安装时,如果该应用有可疑权限,通知用户。
2)列出所有已安装的用户应用,用户可以选择一款应用,查看它的详细信息(包括包名,没有被描述说明的权限,哪句描述说明了什么权限)。
3)将应用的包名传到远程服务器,并接收服务器的应答。
4)能够让用户进行反馈。
5)实现一个帮助页面,帮助用户更好地了解应用。
服务器端应该具备以下功能:
1)接收客户端发来的请求,做出应答。
2)利用Stanford Parser和ESA,对应用商店中的应用进行分析。
3)利用相应的算法计算描述与权限的相关度。
4)将分析的结果与用户的反馈存入数据库。
3.2 软件可行性的研究
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
Android安全框架中的权限系统管理着三方应用对隐私和安全相关API的访问。在Android系统上,正常应用程序之所以能够访问超出其正常功能的用户个人隐私信息,大部分是通过在其安装时声明多余的权限(Permission)来实现的。因为在Android系统上,每个应用程序在其安装时,需要在自身配置文件(AndroidManifest.xml)中声明该应用程序所需要的所有权限,只有用户在应用程序安装时同意其使用这些资源,应用程序在安装之后才能访问这些权限所涉及的系统资源。因此,在客户端方面,是可以实现的。
在服务器方面,使用了Django搭建的Web框架。它有着一流的URL设计与设计者友好的模板语言。它采用了MVC的软件设计模式,重用性和可维护性都比较高。而多线程处理使得服务器能够有条不紊地处理从各地发来的请求。
综合上述原因,开发这款描述与权限保真度测量软件是可行的。
3.3 软件效率分析
在数据库完备的情况下,大部分的手机应用结果都能在数据库中找到,在网络流畅的环境下,从客户端查看某个应用的信息只需要1到2秒的时间。因此,效率方面是可行的。
3.4 软件系统总体设计
该系统的设计划分为客户端,服务器和介绍网页三部分。
3.5 手机客户端部分实现
手机客户端为本项目主体部分,即为最与用户直接相关的部分。其中安装检测模块、应用管理模块、反馈与帮助模块皆在此处实现。
3.5.1 安装检测模块实现
首先在客户端启动时,安装检测服务模块随之启动。该模块对手机中所安装的程序进行扫描,进而分析权限、判断是否有应向用户反馈的不符合描述的权限信息。
实现上,自定义接收message方法handleMessage(),来接受新安装的程序的程序说明等相关信息;重写BroadcastReceiver类的方法onReceive(),便可在有新程序安装后发送广播通知用户该软件可能存在的相关不符合描述的权限信息。
3.5.2 应用管理模块实现
应用管理模块即客户端的核心部分。该模块将应用的权限信息进行提取、加工处理,同时与服务器交互,查找、获取相关描述信息与权限,并与所标注的权限相比对。
实现上,在主界面选择应用管理模块时,客户端软件将初始化手机上所有程序的描述信息,并通过列表来展示给用户,此时通过问号、对号的形式来直观地给用户一个初步的信息,用户可以选择其中某程序来查看其详细权限问题。当该应用存在描述信息时,就在弹出框中显示其权限信息,且此时用户可选择对该应用进行反馈;当该应用不存在描述信息时,便让用户选择是否从应用商店上查询此应用的信息,同意情况下,服务器端从应用商店搜索并抓取该应用的权限信息并分析,返回结果给客户端,此时客户端课将此信息作出展示。其中,代码实现上有如下几个重点:
1)程序活动入口方法onCreate()
2)应用名称排序方法sort(),调用来对应用程序按照字母排序。
3)进入页面提示方法createDialog(),用来显示进入模块之后的提示信息,用户可以选择下次不再提示。
4)检查是否有网络连接方法isOpenNetwork(),初始化时,该方法被调用来检查当前手机的网络状态。
5)修改字体颜色方法modify_color(),将应用信息中没有被描述说明的权限,以及哪几句描述说明了那些权限标为不同的颜色。
6)显示应用信息方法showDialog(),用来显示用户应用的权限信息。
7)为每个应用item填充内容方法fillData(),实时刷新ListView,并在初始化中为每个item赋值。
3.5.3 反馈模块实现
该模块即是用来让用户参与、提供相应有关保真度的相关反馈的模块。日后可以通过对用户的反馈内容进行处理,来加强服务器后端对各软件的保真度的评测。
实现上,在用户进入应用列表页面后,点击其中某一软件所弹出的对话框中便可进行反馈。用户可以针对某一权限描述来进行反馈,最终数据会被提交到服务器。其中,代码关键部分有以下几点:
1)对每个描述的句子点击的处理方法dealWithClickId(),记录下每个句子被点击与否的状态。
2)反馈对话框实现方法show_feedbackDialog(),用户可以选择任何一个句子来进行反馈。
3)权限选择对话框实现方法show_checkDialog(),用户可以从本文提供的权限中选择与句子语义相关的权限。
4)提交确认反馈信息对话框实现方法show_submitDialog(),显示用户所做的修改,并由用户选择是否提交反馈信息。
3.5.4 帮助模块实现
帮助模块作为一个辅助用户理解程序使用的模块,虽然只由一些说明组成,但对软件整体也有很大的作用。
实现上,即数个标签与文本框相连,这里不赘述。
3.6 服务器后端部分实现
服务器后端部分主要是描述与权限算法模块的实现、数据库实现以及数据库请求处理模型的实现。
1)描述与权限算法模块的实现
本文使用python中的NLTK库和正则表达式一起实现了SBD。NLTK也用来除去一些不能提供太多语义的词。Stanford Named Entity Recognizer用来除去命名实体。Stanford Parser将结果分层输出在XML格式的文件中,最后用标准python库对其解析。
2)数据库实现
本项目使用了Sqlite数据库。此处的功能即将由算法得到的json文件中提取每个应用的Questionable Permissions和Description,并存入数据库,以及对于数据库内已有资料的更新与维护。
4 结束语
如今,智能手机中存在的隐私安全问题越来越被人们所关注,手机应用的谨慎使用往往能够更好地保护用户的个人隐私。本篇论文没有从传统意义上的方法对Android手机应用的安全性进行分析,而是提出了Android手机应用描述与权限的保真度这一概念,让一款应用能够更好地使用户信服。
本篇论文主要研究了Android应用描述与应用申请权限之间的关系,分析并实现了一款描述与权限保真度测量软件。论文首先提出了应用描述与权限模型,模型中将与权限有关的名词模式对分为了三类,利用Stanford Parser对应用描述语义进行解析,并利用ESA对与权限相关的名词短语进行归类,通过对大量应用中存在的描述语义权限信息进行学习训练得到一系列的与权限相关的名词模式对列表。最终设置比较的阈值,就能够自动得出是否某句描述说明了某个权限。论文在从对Android应用权限研究以及对语义分析研究的基础上,对客户端,服务器和介绍页面这三个方面进行了设计与实现,并在最后对它们做了测试。
客户端是软件的主体部分,它是一款使用Java编写的Android应用。主要实现了对手机中用户应用描述与权限保真度的查看、动态检测,并且能够搜集用户的反馈。在客户端的设计与实现中充分利用了Android四大组件的功能,相辅相成。其中,使用BroadcastReceive接收广播信息,并将处理后的消息发送给Service,而Activity中较好的UI设计增加了用户体验。
服务器端设在Linux系统上,主要实现了对Android应用描述的语义分析与对客户端信息的响应与处理。服务器端的设计与实现利用了Django框架,操作简便,利于维护。其中包含了算法的主体部分,能够动态地从Google Play上获取应用的描述信息,使用权限,并通过文章中提出的描述与权限模型算法得到应用是否有没有被描述说明的权限。
介绍网页则是让该软件内容透明化,使用户有一个更深层的了解。介绍网页使用Django框架与JavaScript实现,其中包括了数据搜索功能,数据的列表显示与隐藏功能,翻页功能等。
参考文献:
[1] Peter Hornyack, Seungyeop Han, Jaeyeon Jung,et al. These arent the droids youre looking for: retrofitting android to protect data from imperious applications[C]. In Proceedings of the 18th ACM conference on Computer and communications security, ACM, 2011: 639-652.
[2] 冯伟. 安卓应用权限详解防恶意软件方法汇总[EB/OL]. http://pad .it168 .com/a2013/0315/1462/000001462690.shtml.
[3] 彭鑫. 安卓应用系统的功能与权限相关性研究[EB/OL]. http://d.g.wanfangdata.com.cn/Periodical_jsjyyyrj201410008.aspx.
[4] 周裕娟. 基于Android权限信息的恶意软件检测[EB/OL].http://d.g.wanfangdata.com.cn/Periodical_jsjyyyj201510036.aspx.
[5] 鲁亚峰. Android系统上基于权限组合的用户隐私保护[D]. 南京: 南京大学, 2013.
[6] Michael H. State of the Platform: Android, January 2014[EB/OL]. http://www. honearena.com/news/State-of-the-Platform-Android-January-2014_id51788.
[7] 中国青年报. 专家称过度授权应用令安卓用户隐私状况堪忧[EB/OL].http://tech.163.com/12/0913/04/8B8M6I8700094M OK.html.
[8] 百度百科.django[EB/OL].http://baike.baidu.com/subview/962167/9372788.htm?fr=aladdin.