APP下载

基于移动应用UI和权限的产品安全性分析

2023-11-24

吉林大学学报(理学版) 2023年6期
关键词:组件聚类向量

何 锴 琦

(吉林大学 大数据和网络管理中心,长春 130012)

随着移动应用(app)的快速发展,人们已经习惯通过手指的简单操作完成各种事务.不仅包括简单的网上交流和游戏,也包括一些安全敏感性的活动,如电子银行和商务处理等.在这种应用环境下,用户不再只关注于移动app功能方面的体验,而是越来越重视自己的隐私信息安全.

移动应用需要使用智能手机上的敏感信息以实现产品功能,在使用这些敏感信息前,移动应用需要向用户申请相应的权限才能访问敏感数据.考虑到具有类似功能的产品应该使用相似的敏感权限[1-3],并且移动应用的功能信息与权限信息可通过挖掘其UI(user interface)和代码有效地获取,因此本文提出一种分析移动应用安全性的方法.首先,通过分析产品的UI挖掘移动应用具有的功能信息;然后,通过分析代码中使用的API确定移动应用实际使用的敏感权限;最后,将具有类似功能的产品聚类到一起,使用孤立森林算法识别每个簇中异常使用了敏感权限的应用,进而完成安全性分析.

1 方法设计

为支持后续app产品的安全分析工作,首先需要了解每个app具有的功能.受UI测试工具的启发[4],本文开发一个UI探索工具完成挖掘app功能的任务.

用户是通过各种动作与app产品进行交互的(如点击、滑动和编辑等).本文UI探索工具基于该原理分析app的apk文件,进而获取其具有的功能.将apk文件作为输入,UI探索工具首先以app产品的一个UI页面为起始点,尝试识别当前UI页面的可进行交互的UI组件,并且通过分析这些组件的属性推测它们具有的交互功能.然后,该工具模拟人类动作触发相应的UI事件,从而自动化地探索app产品的不同部分.在该过程中,工具可以收集app产品的UI截图.以图1为例,本文工具从UI-1出发,通过模拟动作滑动和两次点击依次跳转到UI-2,UI-3和UI-4,从而收集到该app产品的4个UI截图.

图1 UI探索工具探索app产品的UI截图实例Fig.1 UI explorer tool explores UI screenshot instances of app products

在探索过程中,使用UI Automator导出每个页面对应的xml文件.UI Automator是安卓平台提供的界面测试框架,UI Automator中提供了dump功能,该功能可用于导出移动应用当前的UI运行时前端代码,该代码以xml文件格式展示.该前端代码对应的xml文件的形式可参考图2中的示例,图2的左侧展示了一个UI截图,右侧是其对应的xml文件.

图2 一个UI截图及其对应的xml文件Fig.2 A UI screenshot and its corresponding xml file

由图2可见,xml由很多节点(node)按层次结构进行组织.每个节点都有一系列属性,例如: text属性代表该节点的文本标签;class属性反应了该节点的类型;clickable节点反应了该节点是否是可点击的.这些node有ViewGroup类型的(如FrameLayout),也有View类型的(如ImageView,TextView).通过分析该文件,可以获取UI页面中具有的组件、组件的属性以及这些组件的层次结构.

基于这些xml文件,可以分析UI截图上提供的功能.通过实际观察app产品,绝大多数提供功能的UI组件都是通过点击方式进行的(在本文观察的与功能相关组件中,97%的UI组件激发动作是点击).相应地,在分析xml文件时,也仅分析可点击属性为true的UI组件.为了解某个可点击组件实现的功能,本文制定4条分析规则用于对可点击组件进行分析,规则如下.

规则1) 若可点击UI组件的text属性不为空,则text属性的值为该组件的功能.Text属性用于设置显示在UI组件上的文字,通过组件上的文字,用户能了解与该组件实现的功能.如图3(A)所示,蓝框圈出的按钮用于实现Send功能,该按钮的text属性值为Send.

规则2) 若可点击UI组件为ViewGroup类型的组件,则使用其子节点的text值作为该组件的功能.ViewGroup类型的组件是用于存放其他UI组件的布局容器.当这类组件的clickable属性为true时,其子节点的text属性值可用于说明点击该ViewGroup组件所实现的功能.如图3(B)所示,蓝框圈出的ViewGroup组件具有两个子节点,由第二个子节点的text属性可知该组件实现的功能是Translate.

规则3) 若可点击UI组件为图片组件(ImageView,ImageButton),则使用其相邻节点的text属性作为组件的功能.当可点击组件为图片组件时,图片旁边的相邻节点通常会给出描述性文字用于对图片对应的功能进行说明.如图3(C)所示,通过分析相邻节点可知,蓝框部分圈出的ImageView组件的功能是Camera.

规则4) 若通过以上规则无法获取有效的功能信息,则对UI组件的id属性进行分析,从而获得组件的功能.为保证开发时的代码便于阅读和理解,开发者通常会使用能表现组件功能的文本作为组件的id值.因此,通过对组件的id值进行分析可获得组件代表的功能.如图3(A)所示,通过对组件id进行分析,可知红框圈出的组件功能为choose stickers.

图3 UI组件及其对应的页面UI代码Fig.3 UI component and its corresponding page UI code

对于一个app,先使用UI探索工具遍历获得它具有的页面及对应的xml文件后,再根据以上4条规则对每个页面的xml文件进行分析.这样就能获得一个app所具有的功能.

由于同一个功能在不同的app中会有不同的表述方式,因此需要对提取出的功能进行聚类.首先,将功能转换成向量: 给定一个功能,使用BERT[5]将功能中的单词依次转换成词向量,取所有单词词向量的平均值作为该功能的向量表示.BERT是基于Transformer架构的用于自然语言处理的预训练技术.与基于word embedding的word2vec[6]相比,BERT在为单词生成词向量时,会考虑单词出现的上下文.例如,词“苹果”的word2vec词向量在“我爱吃苹果”和“我买了一部苹果手机”中相同.而BERT则会根据上下文的不同含义提供不同的词向量.完成功能的向量化后,使用Mean shift算法[7]对功能向量进行聚类.Mean shift算法是一种基于聚类中心的聚类算法,与传统的k-means[8]聚类算法相比,Mean shift算法不需要提前设置聚类的类别个数k,能较好处理聚类个数未知的情形.对于给定d维空间d中的n个样本点xi(i=1,2,…,n),对于x点,其Mean shift的向量形式为

(1)

其中:

(2)

G(x)是一个单位的核函数;H是一个正定的对称d×d矩阵,称为带宽矩阵,是一个对角矩阵;w(xi)≥0是每个样本的权重.对角矩阵H的形式为

(3)

完成app的功能分析后,先基于app的功能进行风险app检测工作,过程如图4所示.

图4 风险app检测过程Fig.4 Detection prosess of risk app

首先,根据app具有的功能为其建立一个功能向量,并使用Mean shift算法对app进行聚类.App的功能向量建立过程如图4(A)所示,app功能向量的维数与集合中的功能簇数量一致,向量中的每个元素与集合中的每个功能簇具有对应关系.将app中具有的功能与集合中的功能簇依次进行比较,若app拥有簇中的某个功能,则将该簇对应维的值设为1,否则设为0.基于Mean shift算法完成聚类工作后,可得到一个app的簇集合,属于同一个簇的app具有相似功能.

其次,利用孤立森林(isolation forest,iForest)算法[9]对每个簇进行分析,以识别出可能异常使用了敏感权限的风险app产品.iForest是一种无监督异常检测算法,广泛应用于数据的异常检测中,如网络安全中的攻击检测、金融交易欺诈检测、疾病侦测和噪声数据过滤等.孤立森林算法的理论基础有两点: 1) 异常数据占总样本量的比例很小;2) 异常点的特征值与正常点的差异很大.基于上述理论基础,查找异常点的策略如下: 假设用一个随机超平面切割数据空间,切一次可以生成两个子空间.然后再继续用一个随机超平面切割每个子空间,循环进行,直到每个子空间中只有一个数据点为止.那些密度很高的簇被切割很多次才能停止,即每个点都单独存在于一个子空间内.但那些密度很低的点会很早停止切割.如何对数据空间进行切割是孤立森林设计的核心思想.iForest由t个孤立树(isolation tree,iTree)组成,每个iTree是一个二叉树结构.iTree的训练算法如下.

算法1iTree(X′)算法.

输入:X′;

输出: iTree;

步骤1) ifX′不能被分割 then

步骤2) return exNode{Size←|X′|};

步骤3) end

步骤4) else

步骤5) 设Q为X′中属性的列表;

步骤6) 随机选择一个属性q∈Q;

步骤7) 在X′中的属性q的最大值和最小值之间随机选择一个分割点p;

步骤8)Xl←filter(X′,q

步骤9)Xr←filter(X′,q≥p);

步骤10) return inNode{Left←iTree(Xl),right←iTree(Xr)},SplitAtt←q,SplitValue←p};

步骤11) end.

1) 从训练数据中随机选择Ψ个样本点作为子样本,放入树的根节点;

2) 随机指定一个维度,在当前节点数据中随机产生一个切割点p(切割点产生于当前节点数据中指定维度的最大值和最小值之间);

3) 以此切割点生成一个超平面,然后将当前节点数据空间划分为两个子空间: 把指定维度中小于p的数据放在当前节点的左边,把大于等于p的数据放在当前节点的右边;

4) 在子节点中递归步骤2)和3),不断构造新的子节点,直到子节点中只有一个数据(无法再继续切割)或子节点已到达限定高度.

同一个簇的app具有相似的功能,相应地,这些产品也应该使用类似的敏感权限.安卓官方文档将28个权限定义为敏感权限,这些权限涉及到用户的隐私及安全问题,例如短信权限、位置权限等.获得app使用权限的一种方式是从apk的manifest文件中的权限声明部分直接获取.但研究表明30%的app声明权限会比实际使用的权限更多[10].为避免这种分析方法带来的误差,本文通过分析app中实际调用的API进一步获得其使用权限.本文使用安卓静态分析工具androguard(https://github.com/androguard/androguard)对apk文件进行反编译,并获取程序中调用的API.论文PScout[11]为安卓应用的API与权限之间建立了映射关系,从而为根据调用API获得其使用权限提供了基础: 若app调用了与某个权限有映射关系的API,则该app使用了此权限.根据app对这28个敏感权限的使用情况,为每个app生成一个28维的权限向量,向量中每个元素代表该app是否使用了相应的敏感权限: 1表示使用了相应的权限;0表示未使用.完成上述工作后,再使用孤立森林算法对获取的向量进行处理,以识别出其中的异常点,进而判断app是否异常使用了敏感权限.孤立森林算法会为每个app生成一个位于[0,1]内的异常得分,异常得分越接近于1,说明该app的权限使用情况越异常.本文将异常得分高于0.5的app识别为风险app.

2 实验及验证

下面通过实验对上述方法进行验证.本文从Google play应用商店中选取4个类别的app作为研究对象,这4个类别分别为Social,Photograph,Music&Audio,Navigation.分别从这4个类别中随机选取1 000个app,组成一个共包含4 000个app的集合.按照本文方法对该集合中的app进行分析,从而识别出其中的风险app.对于每个类别,从中随机选取20个被本文方法识别为风险的app和20个被识别为安全的app作为实验的测试集.

建立完实验测试集后,由3个具有安卓应用开发经验的开发者对测试集中app的安全性进行评估.首先,为开发者提供app的描述文本信息,通过分析API得到的app使用的权限列表以及app的apk安装包,开发者阅读描述文本和权限列表后,将apk安装到手机上进行实际操作和使用.然后,开发者判断该app是否异常使用了敏感权限,若使用了则标记为风险app,否则标记为安全app.若3名开发者对同一个app的标记情况不一致,则3人进行讨论并得到最终标记结果.将本文方法得到的识别结果与实验人员的标记结果进行比较以评估本文方法的有效性.

表1列出了风险app识别方法的评估结果.实验结果表明,本文方法能完成app的安全分析工作: 利用本文方法得到的80个风险app中,超过半数的app(65.00%)被开发者标记为风险app;利用本文方法获得的80个安全app中,有72个被开发者标记为安全应用程序.有28个安全app被本文方法错误地识别为风险app,对这些app进行分析并总结了分析错误的主要原因: 某些app使用了大量的图标用于表示产品中的功能,这些图标周围并未给出对图标功能的说明性文本,从而导致本文方法无法准确地获取app具有的功能,最后导致分析结果的错误.

表1 风险app识别方法的评估结果

综上所述,针对移动应用隐私信息的安全性问题,本文提出了一种移动应用安全性分析方法,它通过挖掘UI与代码中的信息识别出产品具有的功能与实际使用的敏感权限,并且基于具有相似功能的应用应该使用相似敏感权限的思想分析移动应用是否具有风险.实验结果表明,该方法能有效完成移动应用的安全分析.

猜你喜欢

组件聚类向量
无人机智能巡检在光伏电站组件诊断中的应用
向量的分解
聚焦“向量与三角”创新题
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
基于DBSACN聚类算法的XML文档聚类
基于高斯混合聚类的阵列干涉SAR三维成像
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线
风起新一代光伏组件膜层:SSG纳米自清洁膜层