一种自动高效的高风险移动应用程序检测方法转让专利

申请号 : CN202110606530.0

文献号 : CN113343219B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李鹏霄王海洋项菲翟羽佳王红兵时磊佟玲玲赵媛隋明爽李真张旋李雪梅王丽萍徐健

申请人 : 烟台中科网络技术研究所国家计算机网络与信息安全管理中心

摘要 :

本发明公开了一种自动高效的高风险移动应用程序检测方法,包括S1、获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;计算待测App与已知的高风险App之间的相似度,判定为潜在风险App;S2、动态分析进一步判定是否为高风险App,若判定为“是”,将其标记为高风险App;S3、人工审核判定是否是高风险App,若“是”,添加至高风险App库,标记为高风险App。本发明采用以静态分析、动态分析为主,辅助以人工审核的方式,避免了人工审核存在的效率低、成本高、准确率低等问题,实现了高风险App得自动高效识别。

权利要求 :

1.一种自动高效的高风险移动应用程序检测方法,其特征在于,包括以下步骤:S1、潜在高风险App获取:获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;计算待测App的列表向量与高风险App库中的已知高风险App的列表向量的相似度,若大于设定的风险阈值,则判定为潜在风险App,否则执行步骤S3;

S2、动态分析进一步判定是否为高风险App,若判定为“是”,将其标记为高风险App,添加至高风险App库中,否则执行步骤S3;

S3、人工审核判定是否是高风险App,若“是”,标记为高风险App,添加至高风险App库中;

所述步骤S1中获取待测App的SDK列表是基于包结构逆推法和/或机器学习法;

所述基于包结构逆推法,是利用第三方SDK的包结构之间的差异性,根据APK中Java代码的包结构逆推出其使用的SDK列表;

所述基于机器学习法,是指通过对apk文件进行反编译获取Smali中间代码,获取Smali中间代码中的目录特征后进行one‑hot特征表示,并进行聚类,获取SDK列表;

步骤S2中所述动态分析,是将待测App放入模拟运行的环境中,通过模拟点击方式触发App功能的运行,通过网络抓包的方式获得该App运行中请求的网址域名,通过域名以及查询其对应的网站备案信息,对比待测App的请求域名与已知高风险App的请求域名之间的相似度。

2.根据权利要求1所述的一种自动高效的高风险移动应用程序检测方法,其特征在于:所述目录特征包括从静态反编译的源码中获取的权限关键词、受权限保护的系统API代码以及受权限保护的ContentProvider URL 字符串。

3.根据权利要求1所述的一种自动高效的高风险移动应用程序检测方法,其特征在于:所述步骤S1中获取权限列表是利用静态声明文件和/或动态声明;

所述利用静态声明文件获取权限列表,是对APK文件进行反编译处理,解析出其中包含的静态声明文件,获取其中包含的权限列表;

所述利用动态声明获得权限列表,是指通过对APK文件反编译后获得Java代码,获取Java代码中动态声明部分声明的权限。

4.根据权利要求1所述的一种自动高效的高风险移动应用程序检测方法,其特征在于:所述步骤S1中计算待测App的列表向量与高风险App库中已知高风险App的列表向量之间的相似度,具体步骤如下:S8‑1、将待测App表示为N+M维的列表向量,所述N+M维列表向量中元素的位置具有相应的权重;其中N表示所有App中存在的不同SDK的数量,M为所有App中存在的不同权限的数量;

S8‑2、将待测App的列表向量与已知高风险App的列表向量之间进行余弦相似度计算;

S8‑3、当相似度超过设定的风险阈值后,判定该待测App为潜在高风险App;

所述步骤S8‑1中,所述所有App,是指实际应用中待测App及已知高风险App的集合。

5.根据权利要求1所述的一种自动高效的高风险移动应用程序检测方法,其特征在于:权重的计算方法为:

特定SDK或者权限的权重= 词频(TF)×逆文档频率(IDF)词频(TF)=一款App中特定SDK或权限在该款App中出现的次数/该款App的维度;

逆文档频率(IDF)=log(所有App总数/(所有App中包含特定SDK或权限的App数+1))。

说明书 :

一种自动高效的高风险移动应用程序检测方法

技术领域

[0001] 本发明涉及信息安全领域,尤其涉及一种自动高效的高风险移动应用程序检测方法。

背景技术

[0002] 根据工信部发布的统计数据,截止到2020年6月末,我国国内市场上监测到的移动应用程序(以下称“App”)数量为359万款,通过手机获取信息是大多数人的选择。但在众多App中还存在着很多潜在的风险,比如App应用开发没有统一的标准,后台数据交互方式不一致,且开发人员水平不一,质量参差不齐,这些情况都容易出现安全隐患。在某些App中包含恶意代码,在用户无法察觉的情况下,执行特定的恶意行为。因此,对于高风险的App的检测和发现具有重要的意义。
[0003] 目前对于高风险的App的检测主要采用人工审核的方式,一方面在使用过程中发现该App是否存在高风险业务的情况,另一方面通过分析该App运行过程中请求的网址域名是否为已知的恶意网址域名来进行判断。人工审核的方式比较耗费时间,难以及时审核海量新出现的App,包括已有的App更新的新版本,而且很多App中恶意程序的隐蔽性很高;通过域名判断,依赖于对该App的使用是否完全以获取完备的请求域名,以及恶意网址域名库是否完备、更新是否及时等,容易漏检。两种审核方式存在耗时及准确率低的问题。

发明内容

[0004] 针对现有技术中存在的问题,本发明提供了一种自动高效的高风险移动应用程序检测方法。
[0005] 本发明解决现有技术问题的技术方案如下:
[0006] 一种自动高效的高风险移动应用程序检测方法,包括以下步骤:
[0007] S1、潜在高风险App获取:获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;计算待测App的列表向量与已知的高风险App的列表向量之间的相似度,若大于设定的风险阈值,则判定为潜在风险App,否则执行步骤S3;
[0008] S2、动态分析进一步判定是否为高风险App,若判定为“是”,将其标记为高风险App,添加至高风险App库中,否则执行步骤S3;
[0009] S3、人工审核判定是否是高风险App,若“是”,添加至高风险App库,标记为高风险App。
[0010] 在上述技术方案的基础上,本发明还可以做如下改进。
[0011] 进一步地,所述步骤S1中获取待测App的SDK列表包括两种方式:基于包结构逆推和基于机器学习;
[0012] 所述基于包结构逆推SDK列表,对SDK及其对应的包结构进行整理后,是利用第三方SDK的包结构之间的差异性,对APK文件的反编译结果进行比对,根据APK中Java代码的包结构逆推出其使用的SDK列表;对SDK及其对应的包结构进行整理包括删除无用的或者APK本身的包名;
[0013] 所述基于机器学习的SDK列表获取方法,是指反编译获取其Smali中间代码,获取Smali中间代码中的目录特征后进行one‑hot特征表示,并进行聚类,获取SDK列表;
[0014] 所述目录特征包括从静态反编译的源码中获取的权限关键词、受权限保护的系统API代码以及受权限保护的ContentProvider URL字符串。
[0015] 所述步骤S1中获取权限列表的方法包括两种方式:Manifest静态声明文件和动态声明;所述获取Manifest静态声明文件中的权限列表,是通过对APK文件反编译处理,解析出其中包含的Manifest文件,获取Manifest文件中包含的权限列表;所述动态声明是指通过对APK文件反编译,获得Java代码,查询Java代码中动态声明的权限;
[0016] 所述步骤S1中计算该App与已发现有风险的App之间的相似度,具体步骤如下:
[0017] S8‑1、将待测App表示为N+M维的列表向量,所述N+M维列表向量中元素的位置具有相应的权重;其中N表示所有App中存在的不同SDK的数量,M为所有App中存在的不同权限的数量;
[0018] S8‑2、将待测App的列表向量与已知高风险App的列表向量进行余弦相似度计算;
[0019] S8‑3、当相似度超过设定的风险阈值后,判定该待测App为潜在高风险App。
[0020] 所述风险阈值根据实际业务需求调整;
[0021] 优选地,所述的权重计算方法:采用TF‑IDF算法,权重的计算方法为:
[0022] 特定SDK或者权限的权重=词频(TF)×逆文档频率(IDF)
[0023] 词频(TF)=一款App中特定SDK或权限在该款App中出现的次数/该款App的维度;
[0024] 逆文档频率(IDF)=log(所有App总数/(所有App中包含特定SDK或权限的App数+1))。
[0025] 采用上述进一步方案的有益效果是对于手机App通过静态反编译的方法,获得其使用的SDK列表以及该App需求用户权限列表并进行特征构建和相似度计算确定潜在高风险App。
[0026] 进一步地,所述步骤S2中采用动态分析的方法,是将该待测App放入模拟运行的环境中,通过模拟点击方式触发App功能的运行,通过网络抓包的方式获得该待测App运行中请求的网址域名,通过域名以及查询其对应的网站备案信息,对比待测App的请求域名与已知风险App的请求域名之间的相似性。
[0027] 采用上述进一步方案的有益效果是:增加了预处理获取疑似高风险App步骤,提高了审核效率。
[0028] 本发明的有益效果如下:
[0029] 本发明采用以静态分析、动态分析为主,辅助以人工审核的方式,避免了人工审核存在的效率低、成本高、准确率低等问题,实现了高风险App得自动高效识别。
[0030] 本发明还公开了一种自动高效的高风险移动应用程序检测系统,包括静态筛选模块、动态分析模块和人工审核模块;
[0031] 所述静态筛选模块,通过反编译获得待测App的SDK列表和权限列表,对比待测App与已知高风险App的相似度,获取潜在高风险App;
[0032] 所述动态分析模块,根据潜在高风险App与已知风险App的请求域名之间同源的相似性,进一步判定潜在高风险App是否为高风险App,对于确定属于高风险的App,进行标识并并添加至高风险App库中;
[0033] 所述人工审核模块,人工审核判定潜在高风险App,标记高风险App并添加至高风险App库中。
[0034] 进一步地,所述静态筛选模块包括待测App的列表获取模块和潜在高风险App判定模块;
[0035] 所述待测App列表获取模块,获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;
[0036] 所述潜在高风险App判定模块,计算待测App的列表向量与高风险App库中的已知高风险App的列表向量的相似度,判定潜在高风险App。

附图说明

[0037] 图1为本发明的自动高效的高风险移动应用程序检测方法的流程示意图;
[0038] 图2为本发明的自动高效的高风险移动应用程序检测方法关键步骤关系图;
[0039] 图3为本发明的自动高效的高风险移动应用程序检测方法中静态声明文件示例;
[0040] 图4为本发明的自动高效的高风险移动应用程序检测方法中动态声明的权限示例。

具体实施方式

[0041] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非限定本发明的范围。
[0042] 如图1所示,是本发明一种自动高效的高风险移动应用程序检测方法的流程图。
[0043] 第一阶段中采用静态筛选的方法,获取潜在高风险App:获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;计算待测App与已知的高风险App之间的相似度,确定潜在风险App。
[0044] 高风险代码主要考虑SDK列表和权限列表。从SDK列表考虑,高风险App主要是调用了窃取用户隐私的SDK。从App权限列表考虑,高风险App主要包括恶意扣费风险、隐私泄漏风险、系统破坏风险等,其中恶意扣费风险调用的权限名称如SEND_SMS、CALL_PHONE、CHANGE_NETWORK_STATE等;隐私泄漏风险调用的权限名称如READ_CONTACTS、ACCESS_COARSE_LOCATION、READ_SMS等;系统破坏风险调用的权限名称如KILL_BACKGROUND_PROCESS、WRITE_SETTINGS、VIBATE等。
[0045] 所述SDK列表获取主要有两种方式:基于包结构逆推和基于机器学习。
[0046] 所述基于包结构逆推SDK列表,对SDK及其对应的包结构进行整理后,基于此对APK文件的反编译结果进行比对,根据APK中Java代码的包结构逆推出其使用的SDK列表;所述对SDK及其对应的包结构进行整理包括删除无用的或者APK本身的包名。
[0047] 所述基于机器学习的SDK列表获取,反编译获取其Smali中间代码,获取中间代码中的目录特征后进行one‑hot特征表示,并进行聚类,获取SDK列表;所述目录特征包括从静态反编译的源码中获取的权限关键词、受权限保护的系统API代码以及受权限保护的ContentProvider URL字符串。具体地,若SDK在使用时不被修改、聚类的数据集足够大、每个SDK会被很多App使用,那么使用同一个SDK的App会被聚到同一个簇中,对于每个簇中的App分析少量反编译中间代码,找其中相同目录即可获取第三方SDK。
[0048] 所述权限列表获取可分为两个部分:Manifest和动态声明。
[0049] 如图3所示,所述Manifest即指在安卓开发过程中,需要将使用到的权限在Manifest文件中声明,否则无法正常使用该权限对应的功能。获取Manifest中的权限列表即将APK文件反编译处理,解析出其中包含的Manifest文件,获取其中包含的权限列表的过程。
[0050] 如图4所示,所述动态声明即指在开发过程中,由于Android6.0及以上版本特性,涉及个人用户信息的权限需要在代码中动态申请,经用户确认后方可使用,因此用户信息相关的权限需要在Java代码中进行获取。
[0051] 通过上述过程,分别获得待测App的SDK列表和权限列表,转化为向量形式,得到列表向量,如图2所示,利用列表向量计算该App与已发现有风险的App之间的相似度,具体步骤如下:
[0052] S8‑1、将待测App表示为N+M维的列表向量,所述N+M维列表向量中元素的位置具有相应的权重;其中N表示所有App中存在的不同SDK的数量,M为所有App中存在的不同权限的数量;
[0053] S8‑2、将待测App的向量表示与已知高风险App的向量表示之间进行余弦相似度计算;
[0054] S8‑3、当相似度超过设定阈值后,判定该App为潜在高风险App。
[0055] 具体地,假设在所有App中共存在N个不同的SDK以及M种不同的权限(根据网络安全标准实践指南‑移动互联网应用程序(App)系统权限申请使用指南,目前安卓和iOS的常见敏感系统权限为30个),则通过BOW模型,每个App都被表示为N+M维向量,此外,每个SDK或者权限在向量中表示的位置有相应的权重。
[0056] 所述权重计算方法:采用TF‑IDF(term frequency‑inverse document frequency)算法,TF为词频,IDF为逆文档频率。
[0057] 通常情况下一款App中特定SDK或权限出现的次数为1,此处的公式定义如下:
[0058] 特定SDK或者权限的权重=词频(TF)×逆文档频率(IDF)
[0059] 词频(TF)=一款App中特定SDK或权限在该款App中出现的次数/该款[0060] 逆文档频率(IDF)=log(所有App总数/(所有App中包含特定SDK或权限的App数+1))
[0061] 上述所谓所有App总数,是指所有待测App和高风险App库中的所有已知高风险App,实际使用中,显然待测App的数量是有限的,高风险App库中的App数量也是有限的,因此TF和App总数为固定值,进而,特定SDK或者权限的权重与该特定SDK或者权限在所有App中的出现次数成反比。即该SDK或者权限出现的次数越少,则其在检测判断中的重要性越高,在所有App中出现的次数越多,则其重要性越低。
[0062] 至此该N+M维向量就是对应App的特征向量表示,之后该App的向量表示与风险App的向量表示之间进行余弦相似度的计算,余弦相似度计算的是两个向量之间夹角的余弦值,在高维空间中两个向量相似的程度越高,则其余弦相似度越大。
[0063] 如图2所示,当超过一定风险阈值后,初步判定该App与已发现的风险App之间存在关联,将该App选出,进入第二阶段的检测。此处的阈值根据实际业务需求调整,如果关心召回率,将阈值调小,不会漏掉疑似高风险App;反之,如果关心准确率,将阈值调大。
[0064] 第二阶段动态分析进一步判定是否为高风险App。
[0065] 将待测App放入沙盒等模拟运行的环境中,通过模拟点击等方式触发App功能的运行,通过网络抓包的方式,获得待测App运行中请求的网址域名,通过域名以及查询其对应的网站备案信息,对比该App的请求域名与已知风险App的请求域名之间是否有同源的相似性。若发现相似,则将其标记为高风险App。
[0066] 若采用动态分析法不能判定为高风险的App,进行第三阶段人工审核,根据经验判定是否为高风险App。
[0067] 第三阶段人工审核方式确定的高风险App,分析其域名后可添加至高风险App库。
[0068] 通过第一阶段潜在高风险App获取后,再进行第二阶段的动态分析及第三阶段人工审核方法,增加了预处理获取潜在高风险App步骤,提高了审核效率。
[0069] 本发明还公开了一种自动高效的高风险移动应用程序检测系统,包括静态筛选模块、动态分析模块和人工审核模块;
[0070] 所述静态筛选模块,通过反编译获得待测App的SDK列表和权限列表,对比待测App与已知高风险App的相似度,获取潜在高风险App;
[0071] 所述动态分析模块,根据潜在高风险App与已知风险App的请求域名之间同源的相似性,进一步判定潜在高风险App是否为高风险App,对于确定属于高风险的App,进行标识并并添加至高风险App库中;
[0072] 所述人工审核模块,人工审核判定潜在高风险App,标记高风险App并添加至高风险App库中。
[0073] 进一步地,所述静态筛选模块包括待测App的列表获取模块和潜在高风险App判定模块;
[0074] 所述待测App列表获取模块,获取待测App的SDK列表和权限列表,转化为向量形式,得到列表向量;
[0075] 所述潜在高风险App判定模块,计算待测App的列表向量与高风险App库中的已知高风险App的列表向量的相似度,判定潜在高风险App。
[0076] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。