首页
社区
课程
招聘
[原创]通过相似度分析的恶意应用检测方法
发表于: 2016-12-30 14:46 8458

[原创]通过相似度分析的恶意应用检测方法

2016-12-30 14:46
8458
因为一些原因,很多内部的文章是无法放到网上分享的,本次分享一个我们已实际在电信级平台中使用的技术,并且该技术已申请专利,目前处于专利审查阶段。

我们知道对于安卓应用,与之前PC上的应用最大的不同就是安卓采用Java开发,易于被反编译分析,并且可以被重新打包生成新的相似应用,虽然我们目前做了很多加固、防破解的技术,但道高一尺、魔高一丈,总是有破解的办法。
这也就造成了安卓应用的恶意程序与PC上的病毒、恶意程序最大的不同点:变种特别容易,传播周期更短,危害更高。一、两年前大肆传播的相册病毒,变种不下几十万种,有几次我们团队被半夜叫起来处理问题,因为高级领导的手机中毒了,机密信息被分发的到处都是。

针对这种情况,我们采用了一种新的恶意应用检测技术,我称之为 《通过相似度分析的恶意应用检测方法》,下面是一些主要技术方案的内容,与大家分享。
-----------------------------------------------------------------------
随着移动智能终端的普及、移动互联网业务的蓬勃发展,移动应用软件的数量呈现快速增长趋势。移动智能终端引发的颠覆性变革揭开了移动互联网产业发展的序幕,智能终端改变了人们的工作生活方式,而移动应用软件的安全也面临严峻形势。
移动应用软件的快速增长,带来各种盗版、恶意应用、病毒等应用的大规模泛滥。相对于传统PC终端,移动终端的恶意应用特点更加明显,恶意应用的变种速度非常快,每天都有大量的变种恶意应用出现。
截止2014年底,Android平台应用软件数量突破200万,成为应用软件最多的系统平台,而因为Android平台的应用开发模式所决定,相对于传统PC终端,恶意应用的变种多为发布者自行开发并传播,变种周期较长,而因为Android应用很容易进行反向工程,恶意代码很容易被重新编译打包后形成变种再次发布,所以恶意应用的变种更加容易,从而造成变种频繁,周期很短。因此对于移动终端的恶意应用防治,如何有效的解决恶意应用的变种识别显得尤为重要。
传统PC终端中,针对变种的识别主要采用了三种方法:
1、        基于广谱特征码:也叫基因特征码,基因码检测总结了某类恶意应用的特征,一个基因码既可对应一大类恶意应用。除此以外,基因码还能有效地对付变种恶意应用,一定程度上弥补了特征码查杀对未知恶意应用无可奈何的窘境。
2、        启发式扫描技术:又称基于行为分析的恶意应用扫描技术,是以分析恶意应用与正常软件的不同行为特点来区分恶意应用的,这样也就能有效地发现未知恶意应用,以及恶意应用的各种变种。在安全专家眼中,恶意应用和普通程序的行为大不一样,如普通程序不会在系统关键目录生成文件,不会在系统各处挂上钩子,不会注册乱七八糟的服务等等。启发式扫描将安全专家的一些分析思路使用计算机自动分析技术实现,根据应用的行为来判定应用是否存在恶意行为。
3、        基于人工智能AI技术:人工智能技术是通过对恶意应用的行为综合分析、学习,不断自行优化自己的恶意应用行为特征库,同时自动提取特征码。从最初始的恶意应用行为特征码,经过不断优化、增加,最终形成更优化的行为特征码库,以应对各种未知恶意应用和恶意应用变种;同时通过自动提取恶意应用特征码,以增强对已知恶意应用的查杀效率。

现有技术的缺点及本方案要解决的技术问题
现有恶意应用检测技术方法不足之处在于:
1、        基于广谱特征码的局限性如下:
        增加了误报的概率。基因特征码查杀容易将带有某些特征代码的正常软件判为威胁,一些正常软件会被误报。
        基因特征码分析提取难度极大,需要非常专业的技术人员,并且特征码的提取质量极大地影响到最终的恶意应用判断,因此这种方法的人为影响因素很大,其效果取决于安全专业技术人员的素质。
        需要大量的样本进行分析,在基因特征码被分析提取出来前,无法应对恶意应用的传播,针对移动终端恶意应用变种快,传播周期短的特点,这种方法无法有效解决恶意应用的查杀问题。

2、        启发式扫描的局限性如下:
        误报率很高。有同样行为的软件并不一定都是恶意应用,例如读取通讯录向指定地址发送的行为,一定是窃取用户信息吗?也有可能是数据备份软件。
        运行效率低下。因为需要在虚拟机中运行恶意应用,并同时收集恶意应用的行为数据进行分析,这种方式的运行效率低下,更适合于在后台服务器运行,对于有用户交互的杀毒工具,用户体验不好。

3、        人工智能技术主要问题如下:
        人工智能是一个需要不断学习的过程,只有当恶意应用样本足够多的时候,人工智能引擎才能够完成自己的学习过程,从而完善行为特征码,所以这种技术滞后于恶意应用的传播。
        人工智能的算法模型非常复杂,同时恶意应用的特征又多变,设计一个好的学习模型非常困难,往往一种模型并不能满足所有应用场合的需要。
        在移动终端上,恶意应用变种的特征是数量多,变化快,传播时间短。一款变种可能只传播几天就会消失,并出现另外的变种,这种特点下使用人工智能效率很低。

总之,在移动互联网业务的新形势下,移动终端的数量已经大大超过PC终端的数量,移动应用成为未来最主要的应用形式,采用PC时代的恶意应用检测方法,已经无法满足需要,只有寻求一种全新的解决方案,才能保障用户的利益,保障用户的信息安全,促进产业链的可持续发展。

为了提高移动应用的变种恶意应用检测自动化水平,减少误判率,提升对未知变种的发现效率,本文设计了一套基于应用相似度分析为基础的恶意应用变种检测方法。
本方方案是以启发式扫描为基础,针对启发式扫描运行效率低下的问题,提出使用静态行为分析扫描技术,从而避免通过虚拟机加载应用执行并分析的性能瓶颈,首先将安卓应用反编译后形成Smali代码,以静态分析代码的形式对应用的权限申请、函数调用结构、特征信息串等进行分析,从而发现有恶意行为的应用;而对于使用了加固、加密等措施的应用,无法有效获得反编译的Smali代码,则通过虚拟机沙箱技术,通过让应用在沙箱中执行,通过沙箱获取应用的函数访问、短信发送、网络访问等信息,形成日志信息,通过对日志信息、应用的权限申请进行分析,从而发现有恶意行为的应用。通过静态分析与动态分析结合的方法,对于未加固的应用,通过静态分析以节省计算资源,对于加固的应用(或是无法反编译的应用),通过动态沙箱分析。
为了解决启发式扫描技术中误报率高的问题,在已发现的疑似恶意应用中,通过相似度分析,对应用的名称、包名进行模糊匹配,再配合应用签名证书,代码、资源文件、目录结构的相似度等多种分析方法结合,有效减少误报率,提升识别的准确性。

本技术要解决的问题有四个:
1.        通过使用静态代码分析技术与动态沙箱分析结合的方式,有效解决启发式扫描中因对于虚拟机的消耗而造成的性能低下问题,同时部分无法反编译的应用仍通过传统沙箱分析;
2.        通过在启发式扫描基础上,增加相似度分析过程,有效解决启发式扫描误报率高的问题,从符合行为规则的应用中,找出与已有恶意应用相似的应用,进一步筛选出的恶意应用,误报率已下降到10%以下;
3.        解决针对恶意应用的相似度分析算法问题,在已有的文本相似度、图像资源相似度的基础上,增加目录结构框架相似度分析技术。
4.        多种分析算法的综合研判问题。

解决方案简述:
Android恶意应用检测系统整体架构如下:

系统核心部分是启发式扫描子系统和相似度分析子系统。待检测的应用首先通过启发式扫描子系统进行检测,启发式扫描子系统加载恶意行为信息库、白名单信息库,作为检测的基准。其中APK反编译组件负责将待检测的应用反编译为Smali代码和相应的资源文件。
恶意行为分析组件与可达矩阵算法组件是整个行为分析算法的核心,可达矩阵的原理就是通过三个维度分析某一种恶意行为是否可完成,三个维度为:权限申请维度、函数调用维度、信息输出维度,即一个恶意行为在安卓应用中是否可以完成,取决于是否申请了与该行为相关的权限、是否调用了完成该行为的函数、是否有与该行为相关的输出(网络、短信、文件等),而恶意行为信息库中按这三个维度保存各种恶意行为信息。通过对反编译后的应用代码、权限文件、资源文件进行扫描,当应用中出现满足某一恶意行为的情况时,即标注该应用为疑似恶意应用,并记录其满足的恶意行为情况。
被启发式扫描子系统检测出的疑似恶意应用,进入相似度分析子系统,相似度分析子系统将疑似恶意应用与恶意应用样本库中的信息进行相似度比较,当发现疑似恶意应用与恶意应用样本库中的某个样本相似度达到设定值时,即判定该应用为恶意应用,纳入恶意应用信息库;如果未发现与恶意应用样本库中存在相似性,则进入误判库,由运营维护人员进一步分析,属于误判并可纳入白名单的,纳入白名单以避免下次再出现误判,如果确实属于恶意应用,但样本库中缺少相应样本的,则标注为恶意应用,并纳入恶意应用样本库。
本方案的核心是基于变种的恶意应用其主要代码结构、资源文件等仍是相似的,只会修改个别信息而重新打包,而从我们现有的项目中通过对10万个以上的应用分析,这种规则是完全成立的。

静态行为分析启发式扫描流程:

1、        启发式扫描子系统启动时,加载恶意行为信息库、白名单库,根据恶意行为信息库生成可达矩阵模型;
2、        启发式扫描子系统接收待检测的应用;
3、        调用APK反编译组件,对待检测应用进行反编译操作,解析出应用的包名、签名证书、应用名,以及权限配置文件、资源文件、反编译的Smali文件;
4、        调用恶意行为分析组件,对反编译的信息进行扫描,通过可达矩阵运算,分析应用中是否存在满足恶意行为信息库中的恶意行为;
5、        当发现待检测应用中存在恶意行为时,即标注该应用为疑似恶意应用,纳入到疑似恶意应用库中;当检测发现应用中不存在恶意行为时,则标注为正常应用,纳入到正常应用库;

相似度分析流程:

1、        相似度分析子系统启动,加载恶意应用样本库信息;
2、        相似度分析子系统从疑似恶意应用库中获取待分析的应用;
3、        首先进行签名证书匹配,如果发现该疑似恶意应用所使用的签名证书已存在于恶意应用样本库中,则直接判定为恶意应用,流程结束;
4、        如果签名证书匹配不满足,则进一步使用编辑距离算法进行应用名称、包名的相似性分析,从恶意应用样本库中找出与待检测应用相似的样本集合;
5、        如果该集合存在,则先以该集合为分析范围,集合内的样本分别与待检测应用进行目录结构、文本文件、图像文件的相似度分析,计算相似度值,当发现有样本与待检测应用的相似度符合设定值时,则标注该应用为恶意应用,进入恶意应用信息库;
6、        如果该集合不存在,或是在该集合中没有发现符合设定值的情况,则以全部样本为集合,分别与待检测应用进行目录结构、文本文件、图像文件的相似度分析,计算相似度值,当发现有样本与待检测应用的相似度符合设定值时,则标注该应用为恶意应用,进入恶意应用信息库;
7、        如果待检测应用经分析为非恶意应用,则进入误判信息库,由运维人员进一步人工处理,人工处理后,这部分应用根据人工分析的结果,分别进入白名单库、正常应用库,或是经人工分析属于新的恶意应用时,则进入恶意应用样本库;这部分工作属于日常运维工作,将长期进行,以维护知识库的更新。

疑似恶意应用判定方法:
通过静态行为分析启发式扫描发现疑似恶意应用,采用可达矩阵算法。
1、        构造基础行为信息表:构造权限配置、函数调用、信息输出信息表,从恶意行为信息库中将恶意行为对应的权限申请、函数调用、信息输出三个维度的内容分别取出,去重后构造成统一的基础行为信息表。

2、        矩阵1:恶意行为信息矩阵,在启发式扫描子系统启动时,通过加载恶意行为信息库构造生成,该矩阵列的个数为基础行为信息表的长度,行的个数为恶意行为信息的个数,矩阵元素为0、1构成;

3、        矩阵2:扫描结果矩阵,该矩阵为单列矩阵,行的长度为基础行为信息表的长度,通过扫描待检测应用的权限配置文件、Smali代码文件、资源配置文件,并与基础行为信息表进行匹配,当与该表中的某项匹配时,矩阵对应行就为1,否则为0;

4、        矩阵3:恶意行为判定矩阵:通过矩阵1、矩阵2相乘运算,得到恶意行为判定矩阵,该矩阵为单行矩阵,列的个数为恶意行为信息的个数;

5、        当恶意行为判定矩阵中某一列的值为1时,即表示该应用已符合该列对应的恶意行为规则。

恶意应用判定方法:
通过相似度分析判定恶意应用,对于疑似恶意应用,与恶意应用样本库中的恶意应用之间进行相似度分析,符合设定值时,则标注为恶意应用。

直接判定:
1、        应用名称相似;
2、        包名相似;
3、        签名证书相同。
符合此条件时,直接判定为恶意应用,不需要再进行相似度分析

通过相似度分析判定:
1、        代码相似度85%以上;
2、        文本型资源文件相似度60%以上;
3、        图像资源文件相似度75%以上;
4、        目录结构相似度70%以上。
通过相似度分析后,符合以上规则,则判定为恶意应用,以上参数可根据运营数据分析后调整。

目录结构框架相似度分析算法:
目录结构框架相似度分析采用目录对比法,算法相对较简单,以恶意应用样本的目录结构为基础,与待检测应用的目录结构按目录层级结构进行对比,计算待检测应用与样本应用之间的相同目录个数,除以目录总数所得的百分比,即得目录相似度值。

函数调用结构框架相似度分析算法:
函数调用结构框架相似度分析针对每个Smali中的函数调用结构进行分析,分析同名函数中的方法名称的相似情况(该方法会受到混淆的影响,所以重要程度放低)。

文本文件相似度分析算法:

采用编辑距离算法,即源字符串,最少需要经过多少编辑操作,即可变形为目标字符串,此值越小,说明文件越相似。
最终相似度计算公式为:
(1-编辑距离/文件大小)* 100%
分别计算每个文件的相似度值,最终再计算平均值,即可得出最终两个应用的相似度值。

对于编辑距离计算,实际上是一个多阶段决策类型的最优解问题,对source字符串做最小的修改变换到target字符串,需要在处理过程中的每个阶段都选择修改最小的方式,但是本题中每个阶段之间都不是孤立的,受到前面已经确定的决策和后面可选的决策共同影响,无法通过对每一次决策的最优决策简单堆叠出最后的最优结果,因此采用动态规划法

动态规划法是解决多阶段决策最优化问题常用的一种思想方法,也是所有解题方法中最抽象的一种方法。使用动态规划法解决问题的关键有两点,一点是定义子问题的最优子结构,另一点是确定子问题最优解的堆叠方式。定义最优子结构就是分解子问题,可以用递推的方式,也可以用递归的方式,基本原则就是将问题分成M个子问题,同时确定每个子问题的最优解与其它N(N小于M)个子问题之间的关系。子问题最优解的堆叠方式是指最优决策序列和它的子序列的递推关系,包括子问题最优解的递推关系和边界值两部分。对于一个问题,如果能够找最优子结构的定义方式(包括子问题之间的关系)和子问题最优解的堆叠方式,并且每个子问题最优解都满足无后效性,则该问题就可以尝试用动态规划法解决这个问题。

图像文件相似度分析算法:

采用感知哈希算法,对两张同名的待比较图片各生成一个256位的"指纹"(fingerprint)字符串,然后比较两个图片的指纹。结果越接近,就说明图片越相似。
"指纹"(fingerprint)字符串的比较采用汉明距离法,不区分字符位置,对256个字符进行比较,所发现的不同字符数即为汉明距离值。
汉明距离值以40为最大值,大于40则说明图像完全不相似,小于10说明图像很相似。最终对所有的图像进行对比分析,得出汉明距离值,计算平均汉明距离值,经此来计算图像资源的相似度。
最终相似度计算公式为:
(1-平均汉明距离值/40)* 100%

"指纹"(fingerprint)字符串计算方法:
一:缩小尺寸。
将图片缩小到16x16的尺寸,总共256个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
二:简化色彩。
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
三:计算平均值。
计算所有256个像素的灰度平均值。
四:比较像素的灰度。
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
五:计算哈希值。
将上一步的比较结果,组合在一起,就构成了一个256位由0与1构成的数组,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。
得到指纹以后,就可以对比不同的图片,看看256位中有多少位是不一样的。如果不相同的数据位不超过20,就说明两张图片很相似;如果大于40,就说明这是两张不同的图片。

本方案技术特点
1、        与基于广谱特征码的方法相比,本方案省去最困难的提取特征码的工作,避免人为因素对扫描结果的影响,减少了对高级专业人员的依赖;
2、        与传统启发式扫描法相比,通过使用静态行为分析启发式扫描替代传统的通过虚拟机执行应用的方式,提高了执行效率;
3、        在启发式扫描的基础上,增加相似度分析算法,大大降低误判率,提升对恶意应用自动研判的准确性;
4、        与人工智能法相比,发现新恶意应用速度极大提高,不需要经过大量的机器学习,只需要通过人工分析1例已有恶意应用,加入恶意应用样本库,即具备对该恶意应用的变种的自动研判能力。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2955
活跃值: (562)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
真不错,值得学习
2016-12-30 16:33
0
雪    币: 93
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
通过相似度分析判定
下面4条是并的关系?

编辑距离判断相似度,这个跟我本科毕业论文采用的算法一样。。。
2016-12-30 17:14
0
雪    币: 1887
活跃值: (2776)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
具体选什么算法没有太大的关系,关键还是要针对选定的算法产生特征集,并且还是要维护一个高质量的样本集。这种方法也没有预见性。只能过滤未知的样本,而不能识别未知的恶意样本。
从某种意义上来讲,使用这种方法也是没有办法的办法。分析的维度,高度不够,反恶意程序永远有滞后性,20 30年来一直都是老思路,感觉都快穷途末路了。
2016-12-30 17:38
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
正常的文件谁混淆加密。。。混淆加密的全部报警,沙箱运行,限制权限。
2016-12-30 19:57
0
雪    币: 183
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
实践才是最好的老师,其实方法并不是独创,只是这种方式组合使用是我们首先提出来的,并且通过现网每天100亿条的访问日志分析,以及每天10万个左右的应用分析,效果确实是很不错的,恶意应用变种基本上只要发布被用户下载,最多5个小时后,即可被系统捕获并分析出来。
当然系统的设计除了这个算法,大数据的处理也是关键,如何能够处理每天100亿以上的访问日志,以及解包分析10万以上的应用相似度,是对系统架构设计的考验。
2017-1-3 16:32
0
雪    币: 148
活跃值: (298)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
什么乱七八糟的,无源码无真相
2017-1-9 17:05
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
有相关的检测工具可以提供吗
2020-2-7 15:32
0
雪    币: 4394
活跃值: (1571)
能力值: ( LV7,RANK:113 )
在线值:
发帖
回帖
粉丝
9
这种?
..

2020-2-7 15:42
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
Adventure 这种?..
这是?
2020-2-7 16:07
0
游客
登录 | 注册 方可回帖
返回