基于机器学习的Android混合应用代码注入攻击漏洞检测

2023-10-11 08:11王旭阳秦玉海任思远
信息安全研究 2023年10期
关键词:漏洞代码机器

王旭阳 秦玉海 任思远

(中国刑事警察学院公安信息技术与情报学院 沈阳 110854)

Android是一款开源操作系统,目前全球Android用户数已达20亿[1],基于Android系统的应用层出不穷,其中就包括一种基于标准Web技术的Android混合应用.Android混合应用是原生应用和Web应用的结合体.与原生应用相比,Android混合应用兼容多个平台,能够有效提高用户的使用体验.但是Android混合应用中的第三方插件框架和Web网页进行数据通信时,可能存在代码注入攻击漏洞,从而导致用户隐私数据泄露、账号密码被盗取等安全问题.本文创新性地引入机器学习技术对Android混合应用代码注入攻击漏洞进行检测[2].

1 Android混合应用架构

1.1 Android混合应用概念

Android混合应用是近年来流行的一种新型Android应用,它是以Web应用为基础,用原生的Android应用容器对网站进行打包,从而生成的一种混合型应用.

1.2 Android混合应用架构

Android混合应用框架能够让应用程序开发者使用标准Web技术完成软件的用户界面和业务逻辑功能,同时也能够像本地APP一样,灵活地调用设备资源和系统进行交互.Android混合应用的架构主要有2部分:第1部分是由HTML,CSS和Java-Script等标准Web技术组成的WebView组件,主要作用是使用WebKit引擎将数据和内容呈现在Web页面上,并且能够使用JavsScript引擎处理JS代码;第2部分是由Android本地代码实现的软件架构,主要作用是实现相机、短信、联系人等系统功能.WebView内部的JavaScript可以通过中间插件调用外部的本地代码来访问相应的系统资源.

2 Android混合应用代码注入攻击漏洞

2.1 Android混合应用代码注入攻击

基于Web技术的Android混合应用可以跨移动平台开发,但Web技术有一个危险的特性:当Web技术处理包含数据和代码的字符串时,可以识别代码并将其发送到JavaScript引擎执行.这一特性导致的后果是如果这种混合的数据和代码来自不可信的地方,恶意代码就可能会被注入并在受害应用程序中执行.这正是XSS漏洞攻击的产生原理.

基于Web技术的Android混合应用继承了这种XSS漏洞,同时在Android混合应用中,数据可以通过二维码、WiFi、文件、通信录等方式传输到应用中,因此基于Web技术的Android混合应用比原生Web应用具有更广泛的攻击途径.在Android混合应用中,注入的代码可以通过框架提供的数据交互通道访问设备本地资源,在受到XSS攻击时设备会面临信息泄露等巨大风险.Android混合应用代码注入攻击流程如图1所示:

图1 Android混合应用代码注入攻击流程

2.2 Android混合应用代码注入通道

Android混合应用发生代码注入的通道即是其获取数据的交互通道,可分为内部通道和外部通道.

Android混合应用的外部通道是与外界用户或环境进行交互的通道,外部通道主要包括移动设备特有的数据通道、元数据信息通道和ID数据通道.

除了与外部交互,Android混合应用还和同设备的其他应用进行交互,与这些内部应用进行交互的通道称为内部通道,内部通道通常由3部分组成,分别是Content Provider组件、Intent组件和文件系统.

这些通道就是恶意代码注入数据从而攻击应用的主要途径.

2.3 Android混合应用代码注入攻击漏洞

Android混合应用可以从外部或内部通道获取混入恶意代码的数据[3],但是这些代码还没有被执行,还不构成Android混合应用代码注入攻击漏洞.在传统的XSS攻击中,由于服务器没有识别出数据中包含的代码片段,所以当这些数据放入Web页面中进行展示时,JavaScript引擎就会执行这些代码[4].同理,在Android混合应用中,当程序要将这些数据放入HTML页面中进行展示时也会触发代码的执行[5].因此,当用户使用不安全的API时就会触发数据中嵌入的恶意代码,导致Android混合应用代码注入攻击漏洞的产生.

通过上述分析,Android混合应用代码注入攻击漏洞产生的条件有2个:第一是应用需要使用通道从外部(如应用程序外部或设备外部)获取数据;第二是来自外部的数据通过不安全的API在Web页面内显示.

3 基于机器学习的Android混合应用代码注入攻击漏洞检测方案

3.1 检测方案原理

本文方案综合使用Android混合应用中AndroidManifest.xml文件申请的权限和WebView组件中调用的API作为检测的主要依据[6].

AndroidManifest.xml文件是Android应用的入口文件,包含应用程序申请的权限[7].当Android混合应用要实现二维码扫描、蓝牙、短信等功能时,就需要在AndroidManifest.xml文件中声明这些对应的权限.

与此同时,当在AndroidManifest.xml文件中申请这些权限并且得到系统和用户的授权后,混合应用的WebView组件的所有HTML页面和JavaScript代码就具备了这些权限,能够直接调用相关的设备资源,引发代码注入攻击漏洞的出现.因此,Android混合应用是否具备申请权限是检测Android混合应用是否具有代码注入攻击漏洞的重要依据[8].

通过静态分析可以获得Android混合应用申请权限的情况,本文研究一共统计了600个正常Android混合应用和300个具有代码注入攻击漏洞的Android混合应用.Android混合应用申请权限使用情况如图2所示:

图2 Android混合应用申请权限函数统计

从图2可以发现,Android混合应用都使用了正常的网络访问权限INTERNET和ACCESS_NETWORK_STATE,但是其他权限的使用就可能存在由代码注入攻击造成的隐私数据泄露、地理位置暴露、数据丢失等风险.如CAMERA和READ_CONTACTS权限的使用可能造成用户在扫描二维码时被攻击者获取到通信录数据;READ_PHONE_STATE和GET_ACCOUNTS权限的使用可能泄露用户的设备IMEI唯一识别码和账户数据等.因此,可以将Android混合应用申请权限信息作为检测Android混合应用代码注入攻击漏洞的一个重要依据[9].

仅仅使用Android混合应用使用权限的特征作为判别依据存在较大的缺陷,因为应用在AndroidManifest.xml文件中申请的所有权限并不能证明WebView组件在运行过程中确实调用了相应的功能[10].因此,还需要提取Android混合应用的HTML和JavaScript代码所调用的API作为检测Android混合应用代码注入攻击漏洞的另一个依据.

本文统计分析了HTML和JavaScript代码所调用的存在代码注入漏洞的API,如图3所示:

图3 存在代码注入漏洞的API

机器学习在恶意软件分类领域的应用十分广泛,因此,本文将Android混合应用代码注入攻击漏洞检测转换为Android混合应用是否具有注入攻击漏洞检测的二分类问题,引用机器学习算法对Android混合应用进行分类预测,将复杂的检测问题转换为简单的二分类问题,大大提高了检测效率.

3.2 检测方案流程

第1步,通过反编译Android混合应用,得到其中的AndroidManifest.xml文件、HTML文件和JavaScript的代码文件,然后使用字符串匹配的方法从AndroidManifest.xml文件提取出Android混合应用申请的权限.

第2步,设计一种分片方法,将存在代码注入漏洞的API从HTML文件和JavaScript代码中分离出来,然后再进行处理.

第3步,由于机器学习是对特征向量进行操作,因此将上述提取出的字符串形式的数据转换成离散的数值形式,对每个Android混合应用构造1个特征向量进行描述.

第4步,本文将选择不同的机器学习算法进行分类预测模型构建、训练以及分类预测的对比实验.检测方案的流程如图4所示:

图4 检测方案流程

3.3 检测方案实现

3.3.1 数据预处理

首先,使用apktool工具对Android混合应用的apk包进行反编译,得到应用的smali代码和配置文件.文件结构如图5所示.

图5 Android混合应用文件结构

然后,从AndroidManifest.xml文件中提取具有〈users-permissions/〉标签的权限数据,同时从源代码文件中分离出程序的HTML文件和JavaScript代码.

本文设计了一种从HTML文件和其引用的相关JS文件中将存在代码注入漏洞的API进行提取和分片的算法,步骤为:首先,输入一个HTML文件和其引用的相关JS文件,将这个HTML文件中的所有API放到一个集合E中,找到通过通道调用外部数据的API保存在集合C中;其次,分别遍历C中的每个API,找到存在代码注入漏洞的API赋值给fb,同时将这个API写入结果R中;再次,找到每个函数调用的JS中通过通道调用外部数据的API,将这个API放入临时字符串中;接着,查找方法主体或参数里面有没有调用存在代码注入漏洞的API,将这些API依次压入栈中;最后,将存在代码注入漏洞的所有API进行整合输出.

3.3.2 生成特征向量

Android系统共规定了151种权限,所以为其设定了一个151维的二进制特征向量P.依次以这151种权限为目标字符串在AndroidManifest.xml文件提取的权限信息进行特征匹配,如果权限库中的第i个字符串匹配成功,则将Pi置为1,否则将Pi置为0.

以同样的方法对API进行特征匹配,设定10维的二进制特征向量F,依次以图4中HTML和JavaScript代码调用的存在代码注入漏洞的API为目标字符串和分片后得到的API进行特征匹配,如果权限库中的第i个字符串匹配成功,则将Fi置为1,否则将Fi置为0.

将权限特征和API特征进行拼接,得到新的组合特征C,C特征就是本文方案最终采用的静态特征向量(161维).

㉞㊵㊺ ㊽《魏 书》卷 五 五《刘 芳 传》,中 华 书 局 1974 年 版,第1219、1220、1220 ~1233、1220 ~1221 页。

3.3.3 机器学习分类算法

本文选用支持向量机SVM、序列最小优化算法SMO、朴素贝叶斯Naive Bayes、决策树J48、随机森林Random Forest等几种常见的机器学习分类算法进行模型构建、训练以及分类预测实验.下面简单介绍这几种分类算法:

支持向量机SVM是一种基于统计学习原理的机器学习算法,可形式化为一个求解凸二次规划的问题.

序列最小优化算法SMO是一种对SVM的高效的优化算法,特别针对线性SVM和数据稀疏时性能更优.

朴素贝叶斯算法Naive Bayes是基于贝叶斯定理与特征条件独立假设的机器学习算法.

决策树算法J48是一种通过信息增益率来选择属性并且能够对不完整的数据进行处理的算法[11].

随机森林算法Random Forest通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能.

4 实 验

4.1 数据集

为了验证本文方法的有效性,实验共从互联网收集了来自1406个正常的Android混合应用和589个具有代码注入攻击漏洞的Android混合应用,利用人为标注获取对应标签.将数据集的80%作为训练集、20%作为测试集.

4.2 实验环境

在实验中,操作系统为Windows 10 64b,处理器为AMD5500X、显卡为Nvidia GeForce RTX2060,数据处理软件选用Pycharm,Anaconda3等.

4.3 评价指标

为了检测评估基于机器学习的Android混合应用代码注入攻击漏洞分类预测模型的准确率,本文引入混淆矩阵来描述不同分类预测模型在测试数据上的分类效果,混淆矩阵如表1所示,样本按照真实值和预测值可以得到4个一级指标:

表1 混淆矩阵一级指标

TP(true positive):真阳性,样本预测值为真,真实值也为真.

FP(false positive):假阳性,样本预测值为真,真实值为假.

FN(false negative):假阴性,样本预测值为假,真实值为真.

TN(true negative):真阴性,样本预测值为假,真实值也为假.

本文实验采用TPR(召回率)、FPR(误报率)、Precision(精确率)、Acc(准确率)作为性能评估指标[12],公式为

4.4 实验结果

本文根据Android混合应用的C特征静态分析提取161维特征向量对特征进行精简,使用向量机SVM、序列最小优化算法SMO、朴素贝叶斯Naive Bayes、决策树J48、随机森林Random Forest等多种机器学习构建分类预测模型;使用训练集训练模型和测试集测试模型及混淆矩阵中的TPR,FPR,Precision,Acc这4个指标来评估模型的分类预测结果[13].

表2是使用贝叶斯算法、支持向量机、SMO、决策树、随机森林机器学习算法对提取的特征向量进行模型构建和模型训练,再进行预测得到的结果.通过结果可以看出,随机森林分类模型对于Android混合应用的准确率最高,达到98.1%.

表2 不同机器学习模型分类预测结果

4.5 对比分析

将本文的实验结果与其他类似研究成果进行对比,对比结果如图6所示.方法1是Jin等人[14]提出的静态检测方法,精确率为97.7%;方法2是李剑等人[15]提出的检测方法,仅采用权限作为唯一特征,精确率达到97%,;方法3是Xiao等人[16]提出的使用机器学习检测方法,在特征的提取过程中没有对元数据进行处理,而且提取的特征也不够完全,精确率为95.3%;方法4是本文提出的基于随机森林模型的检测方法,检测准确率达到98.1%,单个应用平均检测时间为2.54s.

图6 准确率检测结果对比

通过前面的对比分析,由于本文采用较好的特征选取方法和合适的机器学习模型,所以不仅在准确率上有所提高,在时间性能上也有很大的提升.

5 结 语

随着互联网技术的发展和移动终端的普及,基于Web技术的Android混合应用越来越受欢迎.但是Android混合应用框架中使用的WebView组件能够通过内部或外部通道调用资源,容易引发代码注入攻击漏洞,从而导致用户隐私数据泄露、账号密码被盗取等安全问题.针对这个问题,本文提出一种基于机器学习的Android混合应用代码注入攻击漏洞检测方案.未来,将继续优化特征提取,选取更多维的特征,进一步提高Android混合应用代码注入攻击漏洞检测的准确率[17].

猜你喜欢
漏洞代码机器
漏洞
机器狗
机器狗
创世代码
创世代码
创世代码
创世代码
未来机器城
三明:“两票制”堵住加价漏洞
漏洞在哪儿