基于HTTP 数据包分析的安卓隐私泄露检测机制

2021-02-04 06:53
软件导刊 2021年1期
关键词:键值安卓数据包

(南京航空航天大学计算机科学与技术学院,江苏南京 211106)

0 引言

安卓系统是目前最热门的移动终端系统。由于安卓系统的开源性,数量众多的安卓系统开发者不断提升系统性能及完善功能。安卓系统为用户提供大量简单且功能强大的应用,得益于这些特性,搭载安卓系统的移动设备尤其是安卓智能手机十分受欢迎。

安卓设备存储大量的用户隐私数据,隐私泄露成为很多用户十分担忧的问题。安卓系统的恶意应用可能会收集用户的敏感数据,如电话号码、位置、联系信息等,并在用户不知情的情况下发送给广告商或攻击者,以此获取非法利益。

造成安卓系统隐私泄露现象泛滥的原因有:①安卓开发的便捷性和第三方市场审核不严谨,导致应用可进行无限制权限申请,造成大量权限滥用;②安卓系统缺乏完善的隐私保护机制,仅依靠权限管理限制应用获取隐私信息;③大量出现的恶意应用对用户隐私安全造成威胁。

安卓隐私泄露检测问题一直是研究热点。有效的隐私泄露检测能帮助安全人员了解用户应用行为,为后续隐私保护、恶意应用识别工作打下坚实基础。隐私泄露检测研究主要分为静态分析和动态分析。静态分析通常使用构造函数调用图方法,通过可达性分析、污点分析或上下文检查进行隐私泄露检测,如Yang 等[1]提出的LeakMiner、Clint 等[2]提出的AndroidLeaks;动态分析方法则主要通过设置一个模拟器或沙盒运行可疑程序,将其运行中的行为信息记录并进行分析,如Conti 等[3]提出的Oasis、Zhou等[4]提出的AppCage、Sun 等[5]提出的NativeGuard 等。这两种分析方法都有一定局限性:静态分析检测准确率受Ja⁃va 反射、native 代码影响,且很多恶意应用会产生变体逃避检测;动态分析在代码覆盖率方面不如静态分析,需要执行足够多的次数,因此在资源受限的智能设备上执行动态分析具有挑战性。

大多数应用收集的隐私信息最后都通过网络传输泄露到外部服务器,这些应用使用最多的是HTTP 网络协议。基于这一点,本文提出一种基于HTTP 数据包分析的隐私泄露检测机制。首先使用检测终端运行安卓应用程序,并使用PC 端的网络流量分析工具捕获其发送的网络数据包;然后从数据包中提取URL 参数列表和body 中的文本信息,并使用正则表达式匹配方法检验数据包中是否包含隐私信息;最后将这些信息与对应权限规则进行匹配,确定是否发生隐私泄露。实验结果表明,本文提出的方法能有效检测应用的隐私泄露,具有较高的检测准确率。

1 相关研究工作

1.1 安卓隐私泄露研究

隐私泄露问题在主机时代就十分普遍,而安卓是基于Linux 内核开发的系统,因此在隐私泄露检测方法上和主机方法有一定类似之处,分为静态分析和动态分析,这两种传统方法大多针对应用层源代码进行分析。近几年,由于代码混淆、应用加固等技术的不断改进,只依靠传统静态和动态分析进行检测难以达到令人满意的效果。因此,很多研究对传统方法进行改进,在此基础上提出新的检测方法,如混合分析(静态与动态结合)方法[6]、机器学习方法[7-8]、动态污点分析方法[9-10]、native 层代码分析方法[11-12]等。

Wei 等[13]提出Amandroid 对FlowDroid 构建的传统静态CG 进行较大修改。Amandroid 可以构建高精准度的过程间控制流图(inter-procedural control flow graph,ICFG),可将安卓的组件间通信(inter-component communication,ICC)像普通函数调用一样包括在内,这样控制流和数据流可经过这些边进行传递。在ICFG 基础上,Amandroid 构建数据流图(data flow graph,DFG)和数据依赖图(data depen⁃dence graph,DDG),用于记录应用数据传递情况。结合ICFG、DFG 和DDG 中的信息,Amandroid 可进行各种类型的安全性分析,比如可以查询是否存在从source 到sink 的数据依赖链,使用DDG 查找是否有信息从敏感的source泄露到关键sink。由于在一些复杂应用中分析整个调用图既不高效(太多节点和边缘无法分析)也不有效(恶意部分被埋在大量应用程序代码中),Fan 等[14]提出DAPASA,通过敏感子图分析检测安卓重打包应用检测隐私泄露。DAPASA 使用TF-IDF 模型衡量每个安卓API 的敏感度,根据API 将函数调用图分为一组子图,然后选择具有最高敏感系数的子图作为敏感子图,以分析给定应用程序的可疑行为;叶延玲等[15]提出一种自动化的安卓应用定向行为测试方法,用静态分析得出到达目标API 调用位置的路径,然后在动态测试过程中排除无关组件和控件,使应用沿路径自动运行至目标API 调用的位置,触发特定行为。

以上研究在提高安卓系统安全性方面取得一定进展,但大部分研究仅停留在检测安卓应用数据集阶段,在真实场景下的应用程序检测准确率偏低。部分基于机器学习的检测方法缺乏鲁棒性,针对对抗性机器学习方法[16-18]生成的应用样本检测效果不佳。

1.2 HTTP 流量分析研究

HTTP 协议是安卓开发最常见的通信协议,很多正常应用与恶意应用都使用该协议与服务器进行通信。根据Wang 等[19]研究统计,安卓恶意应用占网络通信比例达96.2%。一些研究者从HTTP 报文中提取特征,通过机器学习算法训练分类器用于恶意应用识别效果良好。

Ren 等[20]提出基于网络流量跟踪方式的用户态隐私数据泄露实时监控系统(Recon)。该系统使用多个应用产生的7 万多条数据包作为训练样本,通过众包方式对所截取的隐私数据传输合理性进行标识,为用户有效管控隐私数据提供指导。在保证检测准确率条件下,Recon 采用C4.5 决策树方法进行分类,与一些集成学习(ensemble learning)方法(如AdaBoost、Bagging 和Blending)相比,提高了模型训练效率;Wu 等[21]对HTTP 流的相似度检测恶意重打包应用进行研究。HTTP 流相似度计算考虑请求方法、URL、请求参数列表的键与值等因素,实现一种基于平衡制高点树的多线程比较算法,极大提升了检测效率。同时,作者在检测出的重打包应用中发现广告及恶意流量;Shanshan Wang 等将应用程序生成的每个HTTP 流都视为一个文档,采用自然语言处理(natural language processing,NLP)方法进行处理,以提取文本级功能。对于每个HTTP文档提出一种基于卡方检验的自动特征选择算法,用来识别有意义特征。这些自动选择的特征会用于构建SVM 分类器以检测恶意软件。

目前,安卓应用HTTP 流量研究大多只关注恶意应用检测工作,能够指出恶意应用在运行中泄露的具体隐私信息很少。

与以上研究相比,本文创新点是对HTTP 流量进行键值对提取和正则表达式匹配,精确分析HTTP 数据包中包含的隐私信息。在此基础上与权限机制结合,对安卓应用的隐私泄露进行有效检测。

2 隐私泄露检测机制

本文隐私泄露检测架构如图1 所示。首先使用adb 将待测应用安装到检测终端并运行。通过配置检测终端网络代理,应用程序在运行中产生的网络流量被网络代理监控并记录到日志文件中。然后对应用程序网络流量信息进行文本分析,包括键值对提取和隐私信息匹配处理。

Fig.1 Privacy leak detection framework图1 隐私泄露检测架构

2.1 流量捕获与过滤

隐私泄露目标分为网络、短信、蓝牙等。其中,网络是恶意安卓应用程序进行隐私泄露最普遍的地方。大量恶意应用使用HTTP 协议和C&C 服务器进行通信和远程控制操作。为了解网络通信中发生了哪些隐私泄露,对安卓应用HTTP 数据包进行捕获,分析这些应用的隐私泄露情况。

使用Whistle 进行流量捕获。Whistle 是基于Node 实现的跨平台抓包调试代理工具。编写Whistle 插件andro⁃auto,对与隐私泄露检测无关的流量进行过滤。根据Wu等的研究可知SSDP、NBNS、LLMNR、DHCP、DNS 等协议流量通常与应用的隐私泄露行为无关,因此在预处理阶段过滤掉这些流量。使用小米3W 手机作为检测终端,手机中MIUI 系统运行的后台程序会经常和小米服务器进行网络通信,同步系统信息或更新一些系统组件。这些网络流量为待检测应用产生,要对其进行过滤。

对于加密的HTTPS 流量通过类似中间人攻击的手段进行解密。在检测终端中安装代理CA 证书,在HTTPS 交换密钥时将与代理交换密钥,通过代理HTTPS 使用代理私钥进行解密。

2.2 键值对提取

在HTTP 和HTTPS 请求传输格式中,表单(form)是最常用的信息传输格式。一个包括隐私信息的请求通常不会只传输一种隐私,因此表单格式请求表现为多组键值对连接形式(k1=v1k2=v2…kn=vn)的字符串。在GET 请求中,各键值通常出现在URL 参数列表中,在POST 请求中则出现在请求体body 中,也有少部分请求出现在URL 参数列表和body 同时包含参数的情况,因此在解析表单格式请求的同时解析URL 参数列表和body 内容。

解析步骤如下:①从捕获的数据包中获取一个ses⁃sion;②从session 中获取请求req 的url 和body;③从请求url 和body 中获取参数字符串,即“k1=v1k2=v2…kn=vn”格式的字符串;④以“&”分割每组键值对,以“=”分割每组的键和值;⑤对于每组键值对,若已解析的键值对中未包含键k,则将加入已解析的键值对。若已包含键k,则将v加入键k所对应的值的集合中;⑥用步骤②到步骤⑤循环处理每一个session。

对其它格式而言(JSON、XML 等)为每个请求分配唯一标识的键,然后将该字符串设为该键的值,即用普通的字符串处理。

2.3 隐私信息匹配

若一个请求中包含隐私信息,则键值对中的键和值包含特定字符串的可能性很高。这些字符串包括设备的IMEI、IMSI、ICCID、手机号、位置信息等,是进行隐私泄露目标数据提取研究的重点。使用正则表达式匹配的方法确定匹配键值对中是否包含以上隐私数据字符串。对于值确定的隐私数据,如设备ID、手机号、安卓系统版本号等直接使用隐私数据进行匹配。表1 列出隐私信息匹配过程中部分正则表达式。

Table 1 Part of the regular expression matching privacy information表1 匹配隐私信息部分正则表达式

确定报文传递的隐私信息后,将这些信息与对应的权限规则进行匹配以确定是否发生隐私泄露。主要关注以下权限:手机设备信息(READ_PHONE_STATE)、联系人(READ_CONTACTS)、短信(READ_SMS)和位置信息(AC⁃CESS_COURSE_LOCATIONS、ACCESS_FINE_LOCATIONS)。一些隐私信息如CPU 使用率、内存使用率、MAC 地址等,通过读取系统文件获取,无需权限申请。安卓系统用于文件监控的抽象类FileObserver 对对应的敏感文件(/proc/cpuinfo、/proc/meminfo、/sys/class/net/eth0/address)进行监控。若应用访问了这些文件且在数据包中发现这些隐私信息,则视其为隐私泄露行为。

3 实验与结果分析

3.1 实验环境与数据集

在戴尔OptiPlex-3046 PC 机上进行隐私泄露分析实验。实验环境:CPU 为Intel Core i5 6500,内存为8G,操作系统为64 位Windows 10。运行安卓应用的检测终端为小米3W,CPU 为高通骁龙800(8 274AB),内存为2G,操作系统为MIUI 9 开发版(基于安卓6.0.1)。

实验应用数据集包括正常应用和恶意应用两部分。正常应用包括Google Play、F-Droid 应用市场中的各500个应用,恶意应用包括VirusShare、Drebin[22]数据集中各500 个应用,判断隐私是否泄露的标准为该隐私所对应的权限是否被系统允许。

3.2 数据集检测实验

为验证本文提出的隐私泄露检测方法的有效性,采用FlowDroid[23]和罗亚玲等[24]的研究作为对比。考虑到一些正常应用也会收集隐私信息,因此使用恶意应用隐私泄露检测的准确率和正常应用隐私检测的误报率作为评判标准。实验结果如表2 所示。

Table 2 Data set application test results(test number/total)表2 数据集应用检测结果(检测数/总数)

从实验结果可以看出,与FlowDroid 相比,本文方法能够检测更多的恶意应用,同时在正常应用上的误报数量更少。经过分析发现,部分恶意应用采取反射、动态加载技术规避检测。由于FlowDroid 是静态分析方法,对这些恶意应用识别不力,因此检测率不如本文方法。

实验中发现Drebin 数据集部分应用存在闪退情况。由于FlowDroid 分析方法是基于源代码的静态污点分析,不受运行时闪退问题影响,因此在Drebin 数据集中,本文方法检测效果比VirusShare 差一些。排除闪退应用后,本文方法依然有较高的检测率。

在正常应用检测方面,从实验结果可以发现FlowDroid误报率较高。分析后发现,由于安卓系统的隐私保护机制,应用程序在调用API 时不一定获取真实的隐私信息,如WifiInfo.getMacAddress 方法在无WiFi 连接或应用无权限时会直接返回固定值02:00:00:00:00:00,而不是真正的MAC 地址。FlowDroid 无法识别这种情况,因此产生误报。

由于文献[24]的方法未给出源码,因此本文仅从方法上进行对比,如表3 所示。该方法通过对HTTP 内容和目的的距离进行层次聚类,从聚类结果生成特征签名并判断是否发生泄露。其中,聚类过程需要计算簇之间的距离,该步骤的时间复杂度为O(N2)而非文献中提到的O(N),N为HTTP 数据包个数,且在聚类之前需要对每条数据包进行人工分析。本文方法仅对每个HTTP 数据包进行一次键值对提取,处理时间复杂度为O(N),无需人工干预。文献[24]方法在Google Play 的检测率达到95.05%,与本文的检测结果有较大出入,经过分析发现Google Play 应用与是否允许获取隐私与权限相关。在隐私相关权限被禁用时就无法获取隐私信息,因此并非严格意义上的隐私泄露。文献[24]中的检测率应为隐私信息检测率而非隐私泄露检测率。

Table 3 Comparison between the proposed method and the method of literature[24]表3 本文方法与文献[24]方法对比

3.3 真实检测实验

从《100 款APP 个人信息收集与隐私政策测评报告》[25]中选择20 款评分较低的应用,这些应用存在权限滥用、过度收集用户隐私情况。在这20 款应用程序中发现2 款应用(橙子VR、天天P 图)的网络数据包含MAC 地址、CPU使用率、内存使用率等隐私信息,分析这2 款应用是通过直接读取系统敏感文件获取这些信息的。由于该方法不经过安卓API 调用,因此基于API 调用检测方法均无法有效检测。其余应用均是在权限允许的情况下进行隐私信息收集,不存在权限提升等恶意行为。使用安卓的权限管理工具拒绝相应权限时,该应用便无法获取权限,因此这些应用只能归类为权限滥用而非隐私泄露。

4 结语

本文提出一种基于HTTP 数据包分析的安卓隐私泄露检测机制,针对安卓应用的HTTP 数据包进行捕获、过滤、键值对提取和隐私数据匹配操作,然后通过对比隐私数据与相应权限,判断该应用是否泄露了隐私信息。使用多个数据集中的应用及真实应用进行检测实验,结果表明,与现有的静态污点分析方法相比,本文提出的检测方法具有较高的准确率和较低的误报率。

本文目前工作主要针对网络数据中非加密的隐私信息,未来将对加密的隐私数据进行研究。

猜你喜欢
键值安卓数据包
非请勿进 为注册表的重要键值上把“锁”
文物表情包
SmartSniff
一键直达 Windows 10注册表编辑高招
一种基于安卓系统的手机侧抓包分析方法
安卓L未至安卓M来了!安卓首泄漏M系统
视觉注意的数据包优先级排序策略研究
移动IPV6在改进数据包发送路径模型下性能分析
注册表值被删除导致文件夹选项成空白
“扫除”技巧之清除恶意程序