一种Android恶意应用检测方法、装置、电子设备及存储介质
技术领域
本发明涉及网络安全技术领域,尤其涉及一种Android恶意应用检测方法、装置、电子设备及存储介质。
背景技术
伴随3G、4G网络的全覆盖,5G时代即将到来,现如今移动智能终端的安全问题如细菌般滋生。近些年通过移动终端窃取用户隐私、造成用户财产损失的案件屡见不鲜。“隐私保护”、“信息安全”等相关概念已经逐渐引起政府、企事业单位、科研机构乃至普通用户的高度重视。为了更好的应对Android平台恶意应用的肆虐,目前,已有很多国内外杀毒软件公司和从事网络空间安全的研究学者都积极投身于Android恶意软件检测的相关研究。基于Android系统的恶意应用检测可以分类三类:静态检测、动态检测和动静态结合检测。其中,静态检测具有检测速度快,系统能耗低,对实时性要求低以及易实现等诸多优点,因此静态检测成为了目前最为广泛采用的检测方法。
静态检测是在Android应用软件安装之前对其进行检测分析,确定是否存在安全问题与隐患。首先,在Google Play或者第三方市场下载Android应用程序安装包(AndroidApplication Package File,APK),然后对安装文件进行反编译,使用的工具如APK Tool和Dex2Jar,最终将其反编译为JAR文件(或Java源文件),接下来通过解析源代码提取特征来甄别恶意应用。往常提取的特征有:签名、权限和Dalvik字节码等。其中,基于签名的方法简单且高效,但是对数据库规模有很大的依赖,对于具有新签名的应用程序难以检测;基于权限的方法都是利用权限的统计信息,但正常的良性应用也存在过度申请权限的情况,这样会导致基于此类的分析方法产生较高的误报率,权限特征可用性不强;基于Dalvik字节码的方法未考虑反射机制的存在,获得的特征粒度过粗,因此不能取得理想的检测性能。
针对Android恶意应用检测领域的已有研究,存在以下两个问题:1、恶意软件制造者已经将恶意应用程序构造的与良性应用十分相似,传统特征对于新兴的恶意应用可能不能取得理想的分类效果;2、超过90%的Android应用的静态分析方法没有考虑到反射调用问题,近几年还有报告指出,反射调用的存在是许多恶意应用检测工具性能不佳的重要因素。
发明内容
本发明实施例提供了一种Android恶意应用检测方法、装置、电子设备及存储介质,用以解决现有恶意软件制造者已经将恶意应用程序构造的与良性应用十分相似,传统特征对于新兴的恶意应用可能不能取得理想的分类效果;以及超过90%的Android应用的静态分析方法没有考虑到反射调用问题的问题。
基于上述问题,本发明实施例提供的一种Android恶意应用检测方法,包括:
根据Android应用软件的源代码获取调用信息图;获取所述调用信息图中的所有函数的控制流图;所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充;利用标准方法调用替换所述调用信息图中的反射方法调用,生成新的调用信息图;获取所述新的调用信息图中所有函数的控制流图,基于所述控制流图,执行控制流及数据流的迭代分析,直到迭代分析结果信息不再更新为止;获取应用软件中的敏感数据流的特征向量;对所述特征向量进行降维,并利用机器学习算法进行恶意判断。
进一步地,所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充,具体为:获取调用信息图中的全部节点,对每一个反射调用,生成一个反射调用标准化模板,反射调用标准化模板中包括:未知参数类型、参数值和方法调用信息;根据反射方法调用和实际方法调用之间的参数对应关系,将数据类型和数据值依次分别填充到反射调用标准化模板中的未知参数类型和参数值中。
进一步地,获取应用软件中的敏感数据流的特征向量,具体为:搜索应用程序中的全部函数,再利用函数scanMethodForSourcesSinks()计算每个函数中的源点和汇聚点,最后输出函数中含有的汇聚点的数量;调用前溯追踪方法forwardSolver.solve(),验证从源点到汇聚点是否存在相连接的数据途径,若存在,在results变量中存储特征向量分析结果。
进一步地,对所述特征向量进行降维,并利用机器学习算法进行恶意判断,具体为:利用SUSI机器学习方法,将源点和汇聚点分为15个源类别和18个汇聚类别,获得270(15*18)维的特征向量;将特征向量传递到四种机器学习算法中,对Android应用软件进行恶意判断,所述四种机器学习算法分别是随机森林算法、决策树算法、逻辑回归算法和最近邻分类器算法。
本发明实施例提供的一种Android恶意应用检测装置,包括:
信息图获取模块:用于根据Android应用软件的源代码获取调用信息图;填充模块:用于所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充;新信息图生成模块:用于利用标准方法调用替换所述调用信息图中的反射方法调用,生成新的调用信息图;分析模块:用于获取所述新的调用信息图中的所有函数的控制流图,基于所述控制流图,执行控制流及数据流的迭代分析,直到迭代分析结果不再存在信息更新为止;向量获取模块:获取应用软件中的敏感数据流的特征向量;恶意判断模块:用于对所述特征向量进行降维,并利用机器学习算法进行恶意判断。
进一步地,标准化反射调用模块还包括:反射调用标准化模板生成模块:用于获取调用信息图中的节点,对每一个反射调用,生成一个反射调用标准化模板;反射调用标准化模板中包括:未知参数类型、参数值和方法调用信息;填充模块:用于根据反射方法调用和实际方法调用之间的参数对应关系,将数据类型和数据值依次分别填充到反射调用标准化模板中的未知参数类型和参数值中。
进一步地,向量获取模块还包括:数量计算模块:用于搜索应用程序中的全部函数,再利用函数scanMethodForSourcesSinks()计算每个函数中的源点和汇聚点,最后输出函数中含有的汇聚点的数量;验证存储模块:用于调用前溯追踪方法forwardSolver.solve(),验证从源点到汇聚点是否存在相连接的数据途径,若存在,在results变量中存储特征向量分析结果。
进一步地,恶意判断模块还包括:降维模块:用于利用SUSI机器学习方法,将源点和汇聚点分为15个源类别和18个汇聚类别,获得270(15*18)维的特征向量;判断模块:用于将特征向量传递到四种机器学习算法中,对Android应用软件进行恶意判断,所述四种机器学习算法分别是随机森林算法、决策树算法、逻辑回归算法和最近邻分类器算法。
本发明实施例同时公开一种Android恶意应用检测的电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行任一前述的Android恶意应用检测方法。
本发明实施例提供了计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现任一前述的Android恶意应用检测方法。
与现有技术相比,本发明实施例提供的一种Android恶意应用检测方法、装置、电子设备及存储介质,至少实现了如下的有益效果:本发明实施例考虑到恶意软件制造者已经将恶意应用程序构造的与良性应用十分相似,尝试采用敏感数据流作为分类特征,相比采用权限、API和Dalvik字节码等传统特征的现有技术对于新兴的恶意应用更能取得理想的分类效果。同时,考虑到反射机制的广泛采用使得数据流分析结果产生偏差,解决了静态污点分析工具在处理Android反射机制方面的不足,提出反射标准化机制,检测准确率和精度都有大幅度提升,误报率也明显降低。
附图说明
图1为本发明实施例提供的一种Android恶意应用检测方法的流程图;
图2为本发明实施例提供的一种控制流图的示例;
图3为本发明实施例提供的又一种Android恶意应用检测方法的流程图;
图4为本发明实施例提供的控制流与数据流的分析过程图;
图5为本发明实施例提供的特征向量降维并构建最终特征向量集合的示例图;
图6为本发明实施例提供的一种Android恶意应用检测装置的结构图;
图7为本发明实施例提供的电子设备的结构示意图。
具体实施方式
下面结合说明书附图,对本发明实施例提供的一种Android恶意应用检测方法、装置、电子设备及存储介质的具体实施方式进行说明。
本发明实施例提供的一种Android恶意应用检测方法,如图1所示,具体包括以下步骤:
S101、根据Android应用软件的源代码获取调用信息图;
对每个应用程序代码会首先生成调用信息图,然后针对调用信息图中的每个函数进一步生成控制流图,所以调用信息图为对于应用程序来说,是规模最大最全面的一个图。
S102、所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充;
由于反射机制的存在会使得控制流分析和数据流分析的结果不准确。如果不对反射调用方法进行处理,在构建控制流图时,方法调用不会指向该程序真正调用的方法,这必将中断控制流信息,使后续的控制流分析和数据流分析结果产生偏差,进而影响到检测结果的准确性。因此,本发明实施例采用一种Android应用程序伪代码的新方法处理反射调用。
对预处理后的代码进行反射分析确定每一个真实被调用的函数,这些函数都具有以下三个有效部分:1)函数名称;2)接收对象;3)参数列表。这里需要说明的是该函数的还原是不会被函数返回值干扰的,故不必考虑。因此,搜索并推断出通过反射调用的函数名、接受对象以及参数列表是本发明实施例在解决Android应用程序代码中反射调用问题的首要工作。然后,把这三个部分组合还原为其实际的函数调用形式,最终调用信息图中的调用指示信息指向真实调用的方法,这个过程称为标准化反射。
S103、利用标准方法调用替换所述调用信息图中的实际方法调用,生成新的调用信息图;
反射方法调用:是函数的一种间接调用形式,通常具有一定的迷惑性和隐蔽性。实际方法调用:是在一个反射调用中最终要调用的真实方法。标准方法调用:是函数的一种直接调用形式,是通过反射标准化过程得到的。
S104、获取所述新的调用信息图中所有函数的控制流图,基于所述控制流图,执行控制流及数据流的迭代分析,直到迭代分析结果信息不再更新为止;
首先在Android应用软件的源代码中找到程序的开始语句和跳转语句,然后通过程序代码的组织结构以及调用关系将其划分成很多个大大小小的基本程序块。接下来,在每个start语句之后依次将其他语句添加到相应的块中,直到遇到下一个程序块的开始。最终,当应用程序代码中的所有start语句都形成了由其引领的基本程序块之后,根据应用程序的结构将这些基本块以有向图的形式连接起来,得到控制流图,控制流图的示例如图2所示。通过控制流分析,能够得到Android应用软件代码的运行特征,如应用程序代码的执行路径。
控制流分析结束之后,数据流分析将在其结果之上展开,来进一步剖析程序代码中有效数据的流向。本发明实施例剖析了Android应用软件中数据的传递方式,其中涉及的主要技术含有别名、常量和类级分析等。
然而,通过数据流分析可能会改变控制流分析结果。例如,在进行了数据流分析之后,也许会更新一些程序点的控制流信息。对于这些得到更新的程序点,再次执行控制流分析。接下来,对新的控制流分析的结果又一次执行数据流分析。在这个迭代过程中,直到二者的分析结果趋于稳定且不再有新信息的更新时,视为完成了该阶段工作。
S105、获取应用软件中的敏感数据流的特征向量;
具体为:搜索应用程序中的全部函数,再利用函数scanMethodForSourcesSinks()计算每个函数中的源点和汇聚点,最后输出函数中含有的汇聚点的数量;调用前溯追踪方法forwardSolver.solve(),验证从源点到汇聚点是否存在相连接的数据途径,若存在,在results变量中存储特征向量分析结果。
S106、对所述特征向量进行降维,并利用机器学习算法进行恶意判断;
具体为:利用SUSI机器学习方法,将源点和汇聚点分为15个源类别和18个汇聚类别,获得270(15*18)维的特征向量;将特征向量传递到四种机器学习算法中,对Android应用软件进行恶意判断,所述四种机器学习算法分别是随机森林算法、决策树算法、逻辑回归算法和最近邻分类器算法。
本发明实施例考虑到恶意软件制造者已经将恶意应用程序构造的与良性应用十分相似,尝试采用敏感数据流作为分类特征,相比采用权限、API和Dalvik字节码等传统特征的现有技术对于新兴的恶意应用更能取得理想的分类效果。同时,考虑到反射机制的广泛采用使得数据流分析结果产生偏差,解决了静态污点分析工具在处理Android反射机制方面的不足,提出反射标准化机制,检测准确率和精度都有大幅度提升,误报率也明显降低。
本发明实施例提供的又一种Android恶意应用检测方法,如图3所示,具体包括以下步骤:
S201、将Android应用程序安装包文件转换为soot的三地址中间语言Jimple;
S202、根据Android应用软件的源代码获取调用信息图;
S203、所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充;
S204、获取调用信息图中的全部节点,对每一个反射调用,生成一个反射调用标准化模板;
反射调用标准化模板中包括:未知参数类型、参数值和方法调用信息;
例如,反射调用标准化模板中的未知参数类型、参数值和方法调用信息都使用Flag n代替;
S205、根据反射方法调用和实际方法调用之间的参数对应关系,将数据类型和数据值依次分别填充到反射调用标准化模板中的未知参数类型和参数值中;
如果反射调用标准化模板中所有未知参数相关信息都被填回,即替换了所有Flagn,就判定此次标准化反射工作完成。
S206、利用标准方法调用替换所述调用信息图中的实际方法调用,生成新的调用信息图;
S207、获取所述新的调用信息图中所有函数的控制流图,基于所述控制流图,执行控制流及数据流的迭代分析,直到迭代分析结果信息不再更新为止;
提取控制流首先需要获取控制流图,因此获取控制流图是基础与关键。然后把控制流分析结果传递给数据流分析,但是通过数据流分析会对控制流的分析结果造成某种程度的影响。因此,需要把此时数据流分析的结果传回给控制流分析,完成控制流分析后再度传递给数据流分析,以此迭代,最后当它们共同的分析结果趋于稳定,不会再产生新信息的更新时,即认为本步骤的分析结束,分析过程如图4所示。
S208、搜索应用程序中的全部函数,再利用函数scanMethodForSourcesSinks()计算每个函数中的源点和汇聚点,最后输出函数中含有的汇聚点的数量;
Android应用程序隐私相关信息获取点作为数据依赖分析的“源点”,即source;信息泄漏点作为数据依赖分析的“汇聚点”,即sink。检索到源点source到汇聚点sink有数据流动或者有依赖关系,就会生成相应的敏感数据流信息。
S209、调用前溯追踪方法forwardSolver.solve(),验证从源点到汇聚点是否存在相连接的数据途径,若存在,在results变量中存储特征向量分析结果;
本发明实施例提出的方法提取的原始数据流信息包含完整的source和sink方法名,可以将它们作为特征表示为:Features(app)=(src_method1→sink_method1,src_method1→sink_method2,…,src_methodm→sink_methodn-1,src_methodm→sink_methodn)。
S210、利用SUSI机器学习方法,将源点和汇聚点分为15个源类别和18个汇聚类别,获得270(15*18)维的特征向量;
由于Android库中存在成千上万个source和sink,因此特征向量中的m和n的值可能非常大。当源点与汇聚点之间的数据流在应用程序中出现时,该特征向量的值为1,相反为0。而在应用程序中实际调用的源点和汇聚点相比Android库中的数量非常少,因此可以很容易地推断,特征向量中大多数的值都是0。这意味着特征向量过于稀疏,无法产生好的结果。为了获得更好的特征向量,本发明实施例将SUSI技术应用于对源点和汇聚点的分类。
SUSI是一种较为成熟的自动机器学习指导方法,被用于直接从Android API代码中识别源点和汇聚点。此外,SUSI将识别到的source和sink分为15个源类别和18个汇聚类别,如表1所示,以揭示哪些信息在哪里泄漏。以这种方式我们对S209中得到的特征向量进行降维,最终获得了一个270(15*18)维的特征向量,降维并构建最终特征集合的具体过程如图5所示。该方法得到的特征向量可以表示为:Features(app)=(src_category1→sink_category1,src_category1→sink_category2,…,src_category15→sink_category17,src_category15→sink_category18)。
表1由SUSI分类的source和sink的种类
S211、将特征向量传递到四种机器学习算法中,对Android应用软件进行恶意判断;
所述四种机器学习算法分别是随机森林算法、决策树算法、逻辑回归算法和最近邻分类器算法。
本发明实施例解决了静态污点分析工具存在的不足,可比FlowDroid检测到更多的源点、汇聚点、更多的隐私内容和隐私泄露方式。最终获取了包含反射调用关系的细粒度数据流,检测准确率和精度都有大幅度提升,误报率也明显降低,同时应用SUSI技术,从而降低特征维度,相比以往其他降维处理的方法大大地优化了训练效果。
本发明实施例还提供的一种Android恶意应用检测装置,如图6所示,包括:
信息图获取模块301:用于根据Android应用软件的源代码获取调用信息图;
填充模块302:用于所述调用信息图中,对每一个反射调用,生成一个反射调用标准化模板,根据反射方法调用和实际方法调用之间的参数对应关系对反射调用标准化模板进行填充;
新信息图生成模块303:用于利用标准方法调用替换所述调用信息图中的反射方法调用,生成新的调用信息图;
分析模块304:用于获取所述新的调用信息图中的所有函数的控制流图,基于所述控制流图,执行控制流及数据流的迭代分析,直到迭代分析结果不再存在信息更新为止;
向量获取模块305:获取应用软件中的敏感数据流的特征向量;
恶意判断模块306:用于对所述特征向量进行降维,并利用机器学习算法进行恶意判断。
进一步地,标准化反射调用模块还包括:反射调用标准化模板生成模块:用于获取调用信息图中的节点,对每一个反射调用,生成一个反射调用标准化模板;反射调用标准化模板中包括:未知参数类型、参数值和方法调用信息;填充模块:用于根据反射方法调用和实际方法调用之间的参数对应关系,将数据类型和数据值依次分别填充到反射调用标准化模板中的未知参数类型和参数值中。
进一步地,向量获取模块还包括:数量计算模块:用于搜索应用程序中的全部函数,再利用函数scanMethodForSourcesSinks()计算每个函数中的源点和汇聚点,最后输出函数中含有的汇聚点的数量;验证存储模块:用于调用前溯追踪方法forwardSolver.solve(),验证从源点到汇聚点是否存在相连接的数据途径,若存在,在results变量中存储特征向量分析结果。
进一步地,恶意判断模块还包括:降维模块:用于利用SUSI机器学习方法,将源点和汇聚点分为15个源类别和18个汇聚类别,获得270(15*18)维的特征向量;判断模块:用于将特征向量传递到四种机器学习算法中,对Android应用软件进行恶意判断,所述四种机器学习算法分别是随机森林算法、决策树算法、逻辑回归算法和最近邻分类器算法。
本发明实施例考虑到恶意软件制造者已经将恶意应用程序构造的与良性应用十分相似,尝试采用敏感数据流作为分类特征,相比采用权限、API和Dalvik字节码等传统特征的现有技术对于新兴的恶意应用更能取得理想的分类效果。同时,考虑到反射机制的广泛采用使得数据流分析结果产生偏差,解决了静态污点分析工具在处理Android反射机制方面的不足,提出反射标准化机制,检测准确率和精度都有大幅度提升,误报率也明显降低。
本发明实施例还提供一种电子设备,图7为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-5所示实施例的流程,如图7所示,上述电子设备可以包括:壳体71、处理器72、存储器73、电路板74和电源电路75,其中,电路板74安置在壳体71围成的空间内部,处理器72和存储器73设置在电路板74上;电源电路75,用于为上述电子设备的各个电路或器件供电;存储器73用于存储可执行程序代码;处理器72通过读取存储器73中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的方法。
处理器72对上述步骤的具体执行过程以及处理器72通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-5所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
本发明的实施例还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。