Android应用威胁等级评估技术的设计与实现

2021-01-08 08:43吴润浦
信息安全研究 2021年1期
关键词:漏洞应用程序威胁

刘 林 刘 亮 张 磊 吴润浦

1(四川大学网络空间安全学院 成都 610065) 2(中国信息安全测评中心 北京 100085)

(withliulin@qq.com)

据最近的一份报告[1]显示,仅在2019年Android移动端新增恶意程序样本约180.9万个,从漏洞数量看,Android系统以414个漏洞位居产品漏洞数量榜首,已对移动终端安全造成极大威胁,针对Android恶意软件的研究已成为热门.

在针对Android恶意应用程序的评估和检测方面,采用静态分析为主的有:McLaughlin等人[2]提出了基于对反汇编程序的原始操作码序列的静态分析来执行恶意应用程序分类,从而实现无需手动设计恶意应用程序的功能;高杨晨等人[3]提取Android应用的DEX文件,然后将其转换成灰度图像并放入CNN中进行训练分类,具有较高的分类准确率和泛化性能;Sanz等人[4]提出了利用静态分析检测的方法,通过确定Android应用程序是否有被过度授权以判断应用程序的恶意与否;Fang等人[5]提出了采用基于多核学习的特征融合算法分类的方法,将Android应用程序的DEX文件转换为图像和纯文本,再从中提取特征加强分类效果;Sarma等人[6]则采用的是观察关键权限的申请特征来对Android恶意应用程序进行检测评估;Liang等人[7]利用权限申请组合来识别恶意应用程序,以及Barrera等人[8]提出基于权限使用自组织映射进行实证分析恶意软件,进一步提升了静态分析识别的准确度.除了静态分析方法外,还有通过动态分析对恶意应用程序进行评估和检测:Enck等人[9]提出利用动态污点跟踪和分析恶意程序,最终实现同时跟踪多个敏感数据源;Kapratwar等人[10]提出了一种新的混合测试输入产生方法以提高代码覆盖率,从而在动态分析中发现更多的恶意行为;Singh等人[11]提出了利用数据分类技术,将应用程序的系统调用行为构造成特征向量,最后利用特征排序技术提高识别恶意应用程序的准确率;Zhou等人[12]利用恶意家族来对Android恶意应用程序进行系统化、特征化处理,提升了对变种恶意应用程序的检测率.

针对Android恶意应用程序检测分级,国内外的研究现状如下:Peng等人[13]提出了风险评估应该考虑到流行应用程序的高权限请求效率、社区评级、开发人员网站的可用性和开发人员发布的应用程序数量,但这种方法并不能直接从请求权限进行判断,效率并不高;李永锋[14]提出利用敏感API数据依赖特征,通过分析数据流以获得其中的依赖关系,利用机器学习来训练模型,最后实现对恶意程序的检测分类和描述,但针对应用程序的分析还停留在字节码阶段,没有深入分析到本地代码,处理方法并不全面;黄心依等人[15]提出利用权限、Intent Action和是否使用第三方代码以作为进行恶意应用程序的检测与判断的参考,并利用卡方检验算法和因子分析权数法来构建评估模型,但该文提出的安全等级评估模型的计算公式仅仅采用因子权数法确定安全值的权重.

针对上述问题,本文提出一种恶意应用程序威胁等级评估方法,主要的研究工作和贡献包括:

1) 设计实现一种静态分析技术,对APK文件进行反编译,提取应用程序的权限,利用漏洞特征信息和动态分析技术,获取应用程序的行为特征;

2) 设计实现一种基于信息增益筛选计算权限、行为特征的方法,得出更利于区分正常应用程序和恶意应用程序的特征,有利于后续的应用程序计算分数;

3) 提出一种基于朴素贝叶斯的Android恶意软件威胁等级划分模型,设计基于朴素贝叶斯的函数,对应用程序进行打分,根据分数来划分应用的威胁等级;

4) 基于上述方法,设计实现一种移动应用程序威胁等级的划分规则,依据特征集中特征的分类来进行,针对权限和行为特征,等级的评估通过设计函数计算应用程序所得分数,再根据分数来进行等级的评估,最后根据《信息安全技术安全漏洞等级划分指南》综合判断漏洞特征的等级.

1 相关技术背景

1.1 静态分析

静态分析[16]指的是在不运行应用程序的前提下,将应用程序通过逆向工具进行分析,掌握其实现的功能和其代码是如何运行的,研究恶意代码的第1步通常也是进行静态检测分析,它也是一个分析程序指令与结构来确定功能的过程.静态分析主要有两大类:特征码分析和源代码分析.特征码分析指的是针对应用程序的操作序列、二进制文件、函数的调用序列进行分析,然后再将获得的特征码与所建立的恶意代码库中的特征码进行比对匹配.源代码分析[17]则指的是利用逆向工具来处理APK文件,将其逆向得到可见源代码,然后通过分析文件的源代码的运行流程和所调用的API函数来判断其是否具备恶意性.

静态分析检测出来的结果可靠性较高,且不需要运行,这样也可以减少检测时间,但往往容易受到恶意代码加壳技术的限制.

1.2 动态分析

动态分析[18]指的是将目标文件放置在虚拟机或者沙盒中运行,然后对其表现出来的行为进行检测记录,动态分析分为状态对比和行为跟踪[19].状态对比指的是通过对比文件运行前后系统的文件结构来推测该文件是否有对系统作出修改以及哪些修改,再从这些操作中判断行为的恶意与否,这种方法缺点在于只是记录了系统文件结构的前后变化,鉴于系统文件结构变化还有可能是因为一些相互作用而导致的,所以误判率较高,不确定因素过大.行为跟踪则是直接对测试文件进行行为检测,通过诱导该文件,触发它作出其所有的行为,再记录该文件在沙盒或是模拟器中所表现出来的行为,然后再判断这些行为的恶意与否,这种方法具有实时性的优点[20],但在诱导文件作出它所有的行为具有一定的难度,尤其有一些文件可以检测虚拟机的功能时,这种方法就比较难实现.

1.3 朴素贝叶斯模型

朴素贝叶斯模型[21]是在假设各特征之间朴素独立的条件下,通过运用贝叶斯定理进行的简单概率生成模型.朴素贝叶斯模型的思想基础即是针对给出的需要进行分类的项,计算设计Android应用威胁等级评估规则的设计与实现得出在该项出现的条件下,其中每个类别出现的概率.朴素贝叶斯分类定义如下:

1) 设χ={α1,α2,…,αm}为1个需要分类处理的项,每个α为χ的1个特征属性.

2)C={μ1,μ2,…,μn}为类别集合.

3) 计算P(μ1|χ),P(μ2|χ),…,P(μn|χ).

4) 若P(μk|χ)=max{P(μ1|χ),P(μ2|χ),…,P(μn|χ)},则χ属于C中的μk类.

而在本文中,朴素贝叶斯模型应用于针对计算样本的得分,便于直观展示测试样本的威胁程度.

1.4 信息增益算法

信息增益的定义即指通过计算信息熵的有效减少量,来评估系统的有序化程度.在信息增益的计算过程中,是否选择该特征[22],其衡量标准是通过计算观察这个特征能给待检测的分类系统带来信息量的多与少,带来的信息量越多,该特征就越重要.在本系统中,对于待检测的特征A,分别计算系统包含它时的信息量(即信息熵)和不包含它时的信息量(即条件熵)各是多少,再取其差值,即得出特征A给系统带来的信息量.根据式(1)计算系统本身的信息熵:

(1)

再根据式(2)计算每个特征的信息增益,最后再将每个特征按照信息增益值的大小进行排序:

(2)

在本文中,信息增益主要用于在特征库选取特征,信息增益值可以用来展示哪些特征与恶意应用程序和正常应用程序关联度最高,并且在保证与恶意应用程序关联度高的同时,能与正常应用程序区分开来.

2 Android应用威胁等级评估方案设计

本文的Android应用威胁等级评估方案利用静态分析、动态分析、漏洞分析分别得出待筛选的权限、行为、漏洞特征;再通过信息增益计算筛选构建用于等级评估的特征库;最后,设计威胁等级评估规则,从多个维度进行评估.其实现框架如图1所示:

图1 评估技术框架图

2.1 建立特征库

特征提取从豌豆荚分别在:影音播放、系统工具、通信社交、手机美化、新闻阅读、摄影图像、考试学习、网上购物、金融理财、生活休闲、旅行出游、健康运动、办公商务、育儿亲子共14个类别里下载大量正常样本.

2.1.1 权限特征库建立

使用Spyder软件进行权限特征提取.正常样本和恶意样本的各特征出现频率统计结果分别如表1和表2所示.

在正常样本中,应用程序所申请的频率处于前列的分别是“android. permission. ACCESS_NETWORK_STATE”“android. permission. INTERNET”“android. permission. ACCESS_WIFI_STATE”,这些权限分别是用于检测手机的网络连接状态,进行网络连接,检测当前的WiFi情况.在恶意应用程序样本中,权限使用的频率与正常样本有所不同,从表2中可以看出,使用频率处于前列的分别是“android. permission.INTERNET”“android. permission. READ_PHONE_STATE”“android. permission. WRITE_EXTERNAL_STORAGE”,这些权限分别是用于手机进行网络连接、读取电话状态以及写入外部存储数据,可以明显看出正常样本申请的权限和恶意应用程序样本申请的权限是存在差别的.

得到初步结果后,分别计算其信息增益,并按照从大到小的顺序排列,如表3所示.

从表3可以看出有部分权限对系统的贡献,以及与恶意样本的关联度高的同时能保持与正常样本特征区分开来.由此选择带给系统信息增益量前12的权限特征作为最终选入特征库中的权限特征.

表1 正常应用程序样本权限统计

表2 恶意应用程序样本权限统计

续表2

表3 权限信息增益量

2.1.2 漏洞特征库建立

漏洞库是根据具体漏洞所对应的特征来建立的一个数据库.建立好漏洞特征库之后,可以通过反编译,将获取到的APK文件的源码与漏洞特征库里所记录的特征进行匹配分析,判断该APK是否存在相关漏洞.本文对漏洞的主要检测点有:敏感信息硬编码、证书校验缺陷、证书完整性、加密算法误用、Log敏感信息泄露、组件权限控制、自定义权限保护级别、文件扫描安全、AndroidMainifest.xml文件配置不当、组件权限控制等

在建立好漏洞特征库后,同权限特征的提取做法相似,也是利用静态分析,将APK文件进行逆向分析,获取到APK文件源代码后,通过Python脚本来对文件代码逐行读取搜索:定位漏洞代码所在行数,输出该行内容,最后可以得出文件是否有利用漏洞以及利用的是哪种漏洞的结果.

2.1.3 行为特征库建立

首先将下载的正常样本和恶意样本运行在Android模拟器中进行动态分析,本文的动态分析模块由控制端和模拟端2部分组成,控制端中搭建了Python2.7环境,利用Python脚本实现对模拟器端的控制以及控制样本的上传和样本数据的下载.为尽可能获得各类样本的行为特征,模拟器端利用了Android SDK中自带的AVD模拟器,AVD模拟器可以用来模拟手机运行环境,并且模拟器可以任意设置Android系统的各个版本、部分手机型号以及手机的配置信息.行为特征提取流程图如图2所示:

图2 行为特征提取流程图

在图2中,首先在控制端将样本传送到模拟器端进行安装,通过自动化运行让样本在模拟器中运行起来;其次在控制端植入Python脚本即可利用控制执行脚本来控制模拟器端里面的预置程序;然后获取APK文件动态特征;最后再执行脚本,将数据传送到控制端,记录该应用程序中调用了哪些涉及到敏感行为的函数,例如未经用户允许向别人拨打电话或发送短信以及发送用户的GPS信息.

这里,本文将提取到的行为特征分为以下15类,如表4所示:

表4 提取到的行为特征类别

续表4

每一类中再设置敏感API用以文件分析提取相关信息后比对.

2.2 威胁等级评估规则设计

2.2.1 权限特征评估规则

根据权限特征库的建立过程可知,参与评估应用程序的一共有12条权限,根据这些权限,本文的评估规则方案提出需要建立一个威胁评分函数,该函数具有单调性、典型性、直观性的特点:单调性即保证申请规则中的权限更多的应用程序得分一定会比申请规则中权限更少的应用程序高;典型性则指的是能保证众所周知的恶意应用程序通常应该具有高风险分数;直观性则期望该函数定义明确,简单易懂,让用户易于理解.

本文使用朴素贝叶斯模型进行威胁评分,首先设立一个具有12个属性值的一维向量υ=[λ1,λ2,…,λ12],将其所有属性值设置为初始值0,接着需要计算各权限请求频率θi:

(3)

得到请求频率θi后,根据式(4)计算得出该APK文件的概率分布:

(4)

最后根据式(5)计算得出该APK文件所得分数:

score=-lnP(χi).

(5)

2.2.2 漏洞特征评估规则

漏洞设置好检测点后,还需根据其影响系统的具体部署情况,结合《信息安全技术安全漏洞等级划分指南》中给出的漏洞危害等级综合判断漏洞的危害程度,来对漏洞的等级进行划分.漏洞的等级划分参考标准主要是3个方面:访问路径、利用复杂度和影响程度,其中访问路径又被分为本地、邻接和远程.通常将可以被远程控制进而利用的漏洞的威胁等级设置高于会被邻接利用的漏洞的威胁等级,会被邻接利用的漏洞的威胁等级又高于在本地会被利用的漏洞的威胁等级;利用复杂度中则是越简单的漏洞设置的威胁等级越高;最后在影响程度中的威胁等级划分则是按照影响程度越大威胁等级越高来进行划分的.

漏洞库收录的威胁等级为高、中、低的部分漏洞如表5~7所示:

表5 威胁等级为高的部分漏洞

表6 威胁等级为中的部分漏洞

表7 威胁等级为低的部分漏洞

2.2.3 行为特征评估规则

在行为特征提取部分,将提取到的行为特征分为16类.而根据行为特征来评估威胁等级则是根据该APK文件调用的敏感API次数来确定的,如表8所示,即记录有部分敏感API调用:

表8 部分敏感API表

之后的处理方法与权限特征评估规则类似,根据概率生成模型设计函数,最后计算得出该APK文件所得分数

3 实验结果分析

实验环境配置如表9所示:

表9 实验环境配置表

3.1 权限特征评估结果

根据特征库中的12个权限,首先需要计算各权限特征其对应的请求频率θi,再将特征向量12个属性值分别全置为0和1,然后根据算法公式计算该计算系统的最低分和最高分.

由计算结果可知,权限计算分数最大值约为18.210 4,最小值约为3.821 8,满足单调性的计算所得分数均处在这个分数区域内.利用Python脚本结合Matplotlib可以画出其对应的值,其中横坐标的值的二进制形式表示对应的特征向量,再根据分数进行高中低3个威胁等级的划分,结果如图3所示:

图3 权限特征向量值对应分数图

3.2 漏洞特征评估结果

根据漏洞特征评估规则以及识别方法,上传恶意样本后可以给出其是否有利用漏洞,以及利用的漏洞级别,上传样本文件后得到漏洞分析结果如图4所示:

图4 漏洞特征向量值对应分数图

在图4中,系统可以检测出样本文件所利用的漏洞名称和对应的危险等级及详细内容.

3.3 行为特征评估结果

行为特征威胁等级评估与权限特征威胁等级评估方法相同,通过统计大量样本文件调用的敏感API次数,计算得出其调用频率θi,再得出行为特征中API调用频率集合,再根据算法公式计算预估能得到的最低分和最高分,若满足单调性的计算所得分数将会均处在这个分数区域内.利用Python脚本结合Matplotlib可以画出其对应的值,其中横坐标的值的二进制形式表示对应的特征向量,同样再根据分数进行高中低3个威胁等级的划分,得到的结果如图5所示.

图5 行为特征向量值对应分数图

在图5中,特征向量值取0时取得最低分数,即16.297 1,而在特征向量值取最大时,对应也取得了最高的分数43.784 3,其余所有取得分数均在两者之间,从图5中也能明显直观地发现这一点,由此也验证了设计函数具有单调性的特点,设计实现也是较为成功的.

4 总 结

本文设计实现了一种Android应用威胁等级评估技术,主要分为2部分:特征库的构建和Android应用威胁等级的评估.在特征库构建中,采用的方法是对APK文件进行动静态分析后获取其权限特征、行为特征以及漏洞特征.在Android应用威胁等级评估部分,基于朴素贝叶斯模型设计函数,在满足单调性、典型性、直观性的前提下实现根据申请权限数目和调用敏感API的数目来对APK文件计算分数,以及构造分数与等级的对应关系,漏洞特征威胁等级评估则是根据给出的漏洞危害等级综合判断漏洞的危害程度,最终均能以更为直观的方式来表现评估的应用程序危险等级.

猜你喜欢
漏洞应用程序威胁
漏洞
人类的威胁
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
受到威胁的生命
面对孩子的“威胁”,我们要会说“不”
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
三星电子将开设应用程序下载商店