恶意应用的检测方法、装置、服务器和可读存储介质与流程

文档序号:26547014发布日期:2021-09-07 23:42阅读:161来源:国知局
恶意应用的检测方法、装置、服务器和可读存储介质与流程

1.本技术涉及应用软件检测技术领域,尤其涉及一种恶意应用的检测方法、装置、服务器和可读存储介质。


背景技术:

2.随着移动互联网技术的快速发展,安卓智能终端日益普及,安卓系统也已经逐渐成为了移动终端的较为普及的操作系统,与其他终端操作系统相比,开放式的安卓系统为应用开发者提供了更多的功能接口,这些功能接口在提高了系统的可扩展性,但同时也为恶意软件提供了便利。目前,恶意应用主要将提权、攻击向量代码等恶意行为放在对应的共享对象(shared object,so)文件内,这些恶意应用会通过窃取短信、银行卡账户密码等用户隐私数据而获得非法利益,对用户财产与隐私构成了严重的威胁,故而需要对so文件进行分析检测,排查出这些恶意应用。
3.现有技术中,对so文件的检测主要是采用启发式扫描的方法,并结合制定的规则对安全性未知的so文件进行审计,规则通常是根据已有的恶意二进制代码段或常见的恶意行为制定。
4.但是现有技术中使用制定规则进行审计的前提是so文件要能够逆向成代码,而恶意应用的开发者往往会利用代码混淆技术将代码进行加密、加壳和自修改,使得so文件逆向成代码的难度增加,从而导致恶意应用的检测效率变低。


技术实现要素:

5.本技术提供一种恶意应用的检测方法、装置、服务器和可读存储介质,用于解决现有恶意应用检测方法效率低的问题。
6.第一方面,本技术实施例提供一种恶意应用的检测方法,应用于服务器,包括:
7.响应于客户端上传的二进制文件,对所述二进制文件进行逆向,确定所述二进制文件是否逆向得到目标代码,所述二进制文件为根据预设编程语言编写后编译得到,且运行于目标应用程序的原生层中的文件;
8.若所述二进制文件逆向得到目标代码,则根据所述目标代码,获取第一检测结果,所述第一检测结果用于指示所述目标应用程序为恶意应用程序或非恶意应用程序;
9.若所述二进制文件逆向得不到所述目标代码,则获取所述二进制文件对应的操作码序列;
10.将所述二进制文件转换为灰度图像,根据预设机器学习算法、所述灰度图像和所述操作码序列,计算得到第二检测结果,所述第二检测结果用于指示所述目标应用程序为恶意应用程序或非恶意应用程序。
11.在第一方面的一种可能设计中,所述将所述二进制文件转换为灰度图像,包括:
12.使用预设第一函数将所述二进制文件转换为十六进制字符串;
13.对所述十六进制字符串进行字节分割,得到分割之后的字节,根据预设第二函数
和所述分割之后的字节,生成目标矩阵;
14.根据预设第三函数,将所述目标矩阵转换为灰度图像。
15.在第一方面的另一种可能设计中,所述获取所述二进制文件对应的操作码序列,包括:
16.将所述二进制文件逆向得到目标指令集;
17.通过预设计算机编程语言,将所述目标指令集转换为所述操作码序列。
18.在第一方面的再一种可能设计中,所述根据预设机器学习算法、所述灰度图像和所述操作码序列,计算得到第二检测结果,包括:
19.对所述操作码序列进行拆分得到长度为n的多个子序列,n为大于1的正整数;
20.计算每个子序列在所述操作码序列中出现的频率;
21.根据每个子序列在所述操作码序列中出现的频率,确定每个子序列的权重;
22.根据每个子序列的权重,对每个子序列进行加权,计算得到所述二进制文件对应的特征向量;
23.根据所述预设机器学习算法、所述二进制文件对应的特征向量和所述灰度图像,计算得到第二检测结果。
24.在第一方面的又一种可能设计中,所述预设机器学习算法为随机森林算法,所述根据所述预设机器学习算法、所述二进制文件对应的特征向量和所述灰度图像,计算得到第二检测结果,包括:
25.计算所述二进制文件对应的特征向量与m个不同种类的预设恶意样本向量的余弦相似度,m为大于1的正整数;
26.对所述灰度图像进行向量描述,得到所述灰度图像对应的图像向量;
27.根据所述随机森林算法、所述余弦相似度和所述灰度图像对应的图像向量,计算得到所述第二检测结果。
28.在第一方面的又一种可能设计中,所述根据所述目标代码,获取第一检测结果,包括:
29.根据预设自动化扫描工具,对所述目标代码进行扫描,得到所述目标代码的组合特征;
30.将所述组合特征与预设恶意代码进行对比,得到所述第一检测结果。
31.在第一方面的又一种可能设计中,所述响应于客户端上传的二进制文件之后,还包括:
32.利用预设反汇编应用,对所述二进制文件进行反汇编,生成包含汇编代码的目标文件;
33.将所述目标应用程序的系统调用记录至所述目标文件中,根据记录有系统调用的目标文件和所述预设机器学习算法,对所述目标应用程序进行分类,得到分类结果,所述分类结果用于指示所述目标应用程序为恶意应用程序或非恶意应用程序。
34.在第一方面的又一种可能设计中,所述对所述二进制文件进行逆向之前,还包括:
35.计算得到所述二进制文件对应的哈希值;
36.将所述二进制文件对应的哈希值与预设哈希值进行对比,所述预设哈希值为所述目标应用程序的初始二进制文件对应的哈希值;
37.若所述二进制文件对应的哈希值与所述预设哈希值不匹配,则对所述二进制文件进行逆向。
38.第二方面,本技术实施例提供一种恶意应用的检测装置,包括:
39.文件确定模块,用于响应于客户端上传的二进制文件,对所述二进制文件进行逆向,确定所述二进制文件是否逆向得到目标代码,所述二进制文件为根据预设编程语言编写后编译得到,且运行于目标应用程序的原生层中的文件;
40.第一检测模块,用于若所述二进制文件逆向得到目标代码,则根据所述目标代码和预设恶意代码,获取第一检测结果,所述第一检测结果用于指示所述目标应用程序为恶意应用程序或非恶意应用程序;
41.序列获取模块,用于若所述二进制文件逆向得不到所述目标代码,则获取所述二进制文件对应的操作码序列;
42.第二检测模块,用于将所述二进制文件转换为灰度图像,根据预设机器学习算法、所述灰度图像和操作码序列,计算得到第二检测结果,所述第二检测结果用于指示所述目标应用程序为恶意应用程序或非恶意应用程序。
43.第三方面,本技术实施例提供一种服务,包括存储器和至少一个处理器;
44.所述存储器存储计算机执行指令;
45.所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上述的方法。
46.第四方面,本技术实施例提供一种可读存储介质,所述可读存储介质中存储有计算机指令,所述计算机指令被处理器执行时用于实现如上述的方法。
47.第五方面,本技术实施例提供一种程序产品,包括计算机指令,该计算机指令被处理器执行时实现如上述的方法。
48.本技术实施例提供的恶意应用的检测方法、装置、服务器和可读存储介质,通过对恶意应用中的so文件进行逆向,如果能够逆向成代码,则直接通过该代码来判断so文件中是否存在恶意代码,确定目标应用是否为恶意应用,如果不能够逆向成代码,则可以通过该so文件,得到灰度图像和操作码序列,并结合机器学习算法来检测出该目标应用是否为恶意应用,能够有效的缩短对目标应用所花费的检测时间,提高检测效率。
附图说明
49.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理;
50.图1为本技术实施例提供的恶意应用的检测方法的场景示意图;
51.图2为本技术实施例提供的恶意应用的检测方法流程示意图;
52.图3为本技术实施例提供的恶意应用的检测装置的结构示意图;
53.图4为本技术实施例提供的服务器的硬件结构示意图。
54.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
55.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
56.需要说明的是,本技术实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
57.首先对本技术所涉及的名词进行解释:
58.原生层:
59.原生层(native层),该层包含了两部分内容:一部分是c语言与c++语言编写的native库,系统通过java框架应用程序编程接口(application programming interface,api)向移动应用程序开发者提供了部分native库的功能;另一部分是应用程序运行过程中,对于运行安卓5.0以上版本的设备,每个移动应用都允许运行在单独的系统进程内。
60.so文件:
61.so文件分为系统自带和开发者自主开发两种类型,均由c语言或c++语言代码编写后编译得到的,so文件为可以供其他程序使用的代码和数据。
62.图1为本技术实施例提供的恶意应用的检测方法的场景示意图,该方法可以应用于云端的服务器上。如图1所示,移动终端11可以是智能手机,示例性的,移动终端11可以是搭载有安卓操作系统的智能手机。用户可以在移动终端11中安装各种各样的应用,其中,有的应用可能存在窃取用户隐私数据的恶意代码,这些应用统称为恶意应用。恶意代码通常是放到so文件内,故而在对这些应用进行检测时,移动终端11可以将其so文件上传到服务器12,由服务器12来对so文件进行检测,确定其中是否植入有恶意代码,从而判断该应用是否为恶意应用。
63.在实际开发应用程序时,由于运行在native层的so文件执行代码效率要高于由java语言编写形成的执行代码,因此,智能手机中安装的应用程序中对性能要求较为严格的模块也逐渐借助生成so文件来实现(如高精度搜索、位图解码、图片清晰度处理等模块)。安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,借助这一特征,非恶意应用会把其需要保密的核心工作流程代码由混合语言实现,恶意应用则倾向于将提权、攻击向量代码等恶意行为放在对应的so文件内。
64.移动终端11中往往存储了大量用户隐私数据,特别是用户的通讯录、短信息、通话记录等,而且移动终端11的许多功能和服务涉及到用户资费,与用户的经济利益直接相关,若so文件存在恶意代码时,在加载这些so文件时,恶意代码会通过窃取短信、银行卡账户密码等用户隐私数据而获得非法利益,对用户财产与隐私构成了严重的威胁。
65.在此背景下,为了对抗移动终端中日益增长的恶意应用,反恶意应用的开发人员很大程度上需依赖自动化工具来分析新的恶意应用变种,进而制定对应的保护措施。然而,自动化分析工作相对难度较大,因为恶意程序的开发者往往利用代码混淆技术,比如二进制加密、加壳,或者代码自修改等方法等来增加自动化分析的难度,这些方法对传统的反静
态安全分析特别有效。与静态安全分析不同,动态的二进制流安全分析可以有效的监控程序的恶意行为,这些行为通常不容易被加壳混淆,而且直接反应其对应的攻击行为。因此,已有的研究工作侧重于开发特定的检测工具来动态检测和监控恶意移动应用的行为。
66.现有技术中,基于机器学习的自动化分析方法已经运用到计算机恶意应用检测的工作中。其主要分为两种,一种为对恶意应用行为分类处理,目标是将恶意操作对应到已知的恶意行为类别,站在人工智能的角度即是将机器学习的分类算法迁移学习运用到安全领域内。另一种为对恶意应用行为聚类处理,目标是发现具有相似行为的新类型的恶意行为,站在人工智能的角度即是将机器学习的聚类算法迁移学习运用到安全领域内。该过程的主要实现是使用隔离处理技术对预设指令执行有关处理,例如更新位图以记录相应的存储器是否被污染或判断跳转的安全性。
67.具体的,现有技术主要是使用两种工具来进行恶意应用的检测,其中一种为已有的安全工具如droidlegacy与deshotels,采用扫描代码以获取api调用的方法,并使用此功能对恶意软件进行分类,droidlegacy强调系统api调用的重要性。droidlegacy系统通过将应用程序划分为模块来生成签名,以创建类依赖关系图,图中的每个节点代表一个类,每个边显示类与类之间的关系。该图将相同的类组合在一起以形成单个模块,将使用jaccard与已知恶意软件的相似性检查这些模块的相似性,并且使用所选的共享特征(例如api调用频率)来生成恶意软件系列签名,根据每个恶意软件系列签名检测和分类恶意软件,但是该工具未采用多元的恶意软件分类特征,检测效果不够理想。另一种工具为droidnative工具,通过应用静态控制流图分析来检测和分类恶意软件。系统可以处理包含在应用程序中的java字节码和原生库,这些库为恶意软件检测提供了重要的帮助。如果应用程序的调用流程图的高百分比模块与已知恶意软件样本的部分模块匹配,则确定该应用程序是恶意软件。该系统使用两种技术:annotated control flowgraph技术和sliding window of difference技术,它们用于从调用流程图生成签名,以确定测试图形与恶意软件训练数据集生成的图形的相似性。然而,混淆技术会降低检测性能,使得检测效率变低。
68.针对上述问题,本技术实施例提供的恶意应用的检测方法、装置、服务器和可读存储介质,通过对恶意应用中的so文件进行逆向,如果能够逆向成代码,则直接通过该代码来判断so文件中是否存在恶意代码,确定目标应用是否为恶意应用,如果不能够逆向成代码,则可以通过该so文件,得到灰度图像和操作码序列,并结合机器学习算法来检测出该目标应用是否为恶意应用,能够有效的缩短对目标应用所花费的检测时间,提高检测效率。
69.下面,通过具体实施例对本技术的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
70.图2为本技术实施例提供的恶意应用的检测方法流程示意图,该方法可以应用于云端的服务器,如图2所示,该方法具体可以包括如下步骤:
71.s201、响应于客户端上传的二进制文件,对二进制文件进行逆向,确定二进制文件是否逆向得到目标代码。
72.其中,二进制文件为根据预设编程语言编写后编译得到,且运行于目标应用程序的原生层中的文件。
73.在本实施例中,二进制文件即so文件。示例性的,预设编程语言可以是c/c++等计
算机程序编写语言,安卓手机中的应用软件编译native层的c/c++程序生成的so文件是纯二进制文件。
74.示例性的,逆向是指将so文件逆向还原为汇编代码。在实际生活中,部分恶意应用的开发者会对so文件进行加壳、加固保护,使得逆向还原成汇编代码的难度提高,甚至会使得so文件难以逆向成汇编代码。而有的so文件则可能没有加壳、加固保护,此时可以通过对so文件进行逆向,得到汇编代码,即目标代码。
75.s202、若二进制文件逆向得到目标代码,则根据目标代码和预设恶意代码,获取第一检测结果。
76.其中,第一检测结果用于指示目标应用程序为恶意应用程序或非恶意应用程序。
77.在本实施例中,对于可以逆向得到目标代码的二进制文件,可以直接将目标代码与一些已有的恶意代码进行比对,若匹配,则表示该目标代码也属于恶意代码,判定该目标应用程序为恶意程序,若不匹配,则判定该目标应用程序为非恶意程序。
78.示例性的,在一种可能的实施方式中,还可以通过预设自动化扫描工具,对目标代码进行扫描,得到目标代码的组合特征,然后将组合特征与预设恶意代码进行对比,得到第一检测结果。
79.其中,预设自动化扫描工具可以是现有的常见代码扫描工具,逆向得到的目标代码可以包括有n个,每一个目标代码之间可以互相组合,形成组合特征。示例性的,可以是两个目标代码组合形成一个组合特征,也可以是三个以上的目标代码组合形成一个组合特征。在组合过程中,每一个目标代码可以配置不同的顺序,例如其中一个目标代码可以处于组合特征的头部、中部和尾部。
80.s203、若二进制文件逆向得不到目标代码,则获取二进制文件对应的操作码序列。
81.在本实施例中,操作码(operation code,opcode)是描述机器语言指令中,指定要执行某种操作的机器码,示例性的,以nop为一个指令为例,移动终端或者说计算机等机器由于只认识数字0和1,对于“nop”,机器并不清楚其代表的含义,此时会用一个十六进制数“0x90”来代替“nop”,在这里,“0x90”即为一个opcode,而“nop”则称为助记符。
82.示例性的,二进制文件可以通过逆向得到arm指令集,从arm指令集中得到opcode序列。
83.s204、将二进制文件转换为灰度图像,根据预设机器学习算法、灰度图像和操作码序列,计算得到第二检测结果。
84.其中,第二检测结果用于指示目标应用程序为恶意应用程序或非恶意应用程序。
85.示例性的,预设机器学习算法可以是随机森林算法,通过灰度图像、操作码序列作为特征向量,采用随机森林算法在阈值设定下可以分析检测该so文件是否为恶意文件,如果该so文件为恶意文件,则该目标应用程序为恶意应用程序;如果该so文件为非恶意文件,则该目标应用程序为非恶意应用程序。
86.示例性的,可以运用python的numpy、pandas、pil、scikit

learn库训练子集(60%的训练集和40%的测试集)和特征提取,构造包含500颗决策树的随机森林,并采用算法提示工具和算法提示脚本库来加快随机森林算法的训练速度。示例性的,算法提示工具可以是xgboost,xgboost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。算法提示脚本库可以是pypy,pypy是python的动态编译器,用于进行动态编译。
87.其中,python为一种计算机编程语言。numpy,全称为numerical python,是python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。pandas是基于numpy的一种工具,该工具是为解决数据分析任务而创建的,pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pil,全称为python image library,是一种图像处理工具包,该工具包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。scikit

learn是针对python的免费软件机器学习库,它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升等,并且旨在与numpy联合使用。
88.本技术实施例通过构建二进制文件的灰度图像,并结合opcode序列,最为随机森林算法的特征,能够充分的缩短检测时间,并且更加准确的检测出目标应用程序是否为恶意应用程序,提高恶意应用程序的检测效率。
89.在一些实施例中,上述步骤s204中
““
将二进制文件转换为灰度图像”,具体可以通过如下步骤实现:
90.使用预设第一函数将二进制文件转换为十六进制字符串;
91.对十六进制字符串进行字节分割,得到分割之后的字节,根据预设第二函数和分割之后的字节,生成目标矩阵;
92.根据预设第三函数,将目标矩阵转换为灰度图像。
93.在本实施例中,预设第一函数可以是hexlify函数,其中hexlify函数为python中的一个数据转换函数,以二进制文件作为输入,通过hexlify函数可以转换得到十六进制字符串。
94.示例性的,以00作为hexlify函数的输入,服务器运算hexlify(00)得到的十六进制字符串为0。
95.示例性的,预设第二函数可以是reshape函数,reshape函数是用于改变数组或矩阵的形状,使用reshape函数根据设定的宽度生成矩形。其中,矩阵中每个元素代表二进制中的字节,矩阵的规模由具体的二进制文件决定。
96.示例性的,预设第三函数可以是fromarray函数,fromarray函数可以实现矩阵到图像之间的转换。
97.本技术实施例通过将二进制文件转换为灰度图像,是因为恶意样本往往具有家族性,在灰度图像上表示为纹理的相似性,而不同种类的恶意样本区别较大,从而能够通过纹理的相似性来确定二进制文件是否为恶意文件。
98.进一步的,在一个实施例中,上述步骤s203中“获取二进制文件对应的操作码序列”,具体可以通过如下步骤实现:
99.将二进制文件逆向得到目标指令集;
100.通过预设计算机编程语言,将目标指令集转换为操作码序列。
101.在本实施例中,目标指令集可以是由arm汇编码组成,示例性的,arm汇编码中包括有各种指令,例如add、push、sub、pop、ldr等等指令。
102.示例性的,预设计算机编程语言可以是python,通过使用python最终得到的opcode序列可以是00000ff8(对应的汇编码为push)、00000ffa(对应的汇编码为add)和00001002(对应的汇编码为ldr)等,示例性的,汇编码ldr对应的含义为load register
(word)。
103.以如下代码为例:
104.jclass class=(*env)

>findclass(env,“com/zhangning/jnidemo/testclass”)
105.上述代码对应的arm汇编码如下表:
[0106][0107]
本技术实施例通过将二进制文件逆向得到目标指令集,再通过python得到操作码序列,能够快速准确的二进制文件对应的操作码序列,提高对目标应用程序进行恶意检测的效率。
[0108]
进一步的,在一些实施例中,上述步骤s204中“根据预设机器学习算法、灰度图像和操作码序列,计算得到第二检测结果”,具体可以通过如下步骤实现:
[0109]
对操作码序列进行拆分得到长度为n的多个子序列;
[0110]
计算每个子序列在操作码序列中出现的频率;
[0111]
根据每个子序列在操作码序列中出现的频率,确定每个子序列的权重;
[0112]
根据每个子序列的权重,对每个子序列进行加权,计算得到二进制文件对应的特征向量;
[0113]
根据预设机器学习算法、二进制文件对应的特征向量和灰度图像,计算得到第二检测结果。
[0114]
其中,n为大于1的正整数。
[0115]
具体的,将so文件的代码段逆向得到arm指令集,使用python代码得到其opcode序列,将opcode序列按照子序列长度分别为n进行处理,示例性的,n可以取3、4、5,然后计算每条长度为n的opcode序列的词频(term frequency,tf值),得到由opcode序列频率组成的向量s=(δ1,δ2,

δn),按照频率和为1的原则对其opcode序列出现的频率赋权值,得到由加权opcode序列频率组成的特征向量v=(wtf1,wtf2,

wtf n)。
[0116]
在本实施例中,预设机器学习算法可以是随机森林算法,可以运用python的numpy、pandas、pil、scikit

learn库训练子集(包含60%的训练集和40%的测试集)和特征提取,构造包含500颗决策树的随机森林,然后将上述的特征向量和灰度图像输入至随机森林中,输出得到第二检测结果。
[0117]
本技术实施例通过将二进制文件对应的操作码序列进行拆分,最终得到二进制文件对应的特征向量,作为特征输入至随机森林算法中,能够准确快速的检测出目标应用程序是否为恶意应用程序,提高恶意应用程序的检测效率。
[0118]
进一步的,在上述实施例的基础上,在一些实施例中,若预设机器学习算法为随机森林算法,则上述步骤“根据预设机器学习算法、二进制文件对应的特征向量和灰度图像,计算得到第二检测结果”,具体可以通过如下步骤实现:
[0119]
计算二进制文件对应的特征向量与m个不同种类的预设恶意样本向量的余弦相似度;
[0120]
对灰度图像进行向量描述,得到灰度图像对应的图像向量;
[0121]
根据随机森林算法、余弦相似度和灰度图像对应的图像向量,计算得到第二检测结果。
[0122]
其中,m为大于1的正整数。
[0123]
在本实施例中,可以通过运用计算机视觉的gist特征技术,用一个五维的感知维度的向量作为图像向量来描述该灰度图像,即将某一个灰度图像作为输入,利用gist特征技术,输出对应的gist描述符,作为图像向量。
[0124]
本技术实施例通过将灰度图像对应的图像向量作为随机森林算法的特征输入,能够准确快速的检测出目标应用程序是否为恶意应用程序,提高恶意应用程序的检测效率。
[0125]
在一些实施例中,上述恶意应用的检测方法具体还可以包括如下步骤:
[0126]
利用预设反汇编应用,对二进制文件进行反汇编,生成包含汇编代码的目标文件;
[0127]
将目标应用程序的系统调用记录至目标文件中,根据记录有系统调用的目标文件和预设机器学习算法,对目标应用程序进行分类,得到分类结果。
[0128]
其中,分类结果用于指示目标应用程序为恶意应用程序或非恶意应用程序。
[0129]
使用系统调用序列作为机器学习的特征经常在已有的工作中出现,因为大多数恶意软件使用一系列系统调用来利用系统中的漏洞。一些系统调用通常用于恶意软件。
[0130]
在本实施例中,预设反汇编应用可以是交互式反汇编器专业版工具(interactive disassembler professional,idapro),可以将每个二进制文件都被反汇编为汇编语言,并且可以生成包含汇编代码的gdl文件,作为目标文件。系统调用被记录到gdl文件的输出格式中,作为输入以馈送到机器学习算法中,输出文件用于模拟恶意软件和非恶意应用程序中的二进制或本机代码的行为。
[0131]
示例性的,预设机器学习算法可以是随机森林算法。
[0132]
本技术实施例通过将二进制文件反汇编并记录系统调用,根据预设机器学习算法对目标应用程序进行检测和分类,可以准确的得到分类结果,确定目标应用程序为恶意应用程序或非恶意应用程序。
[0133]
在上述实施例的基础上,在一些实施例中,上述恶意应用的检测方法具体还可以包括如下步骤:
[0134]
计算得到二进制文件对应的哈希值;
[0135]
将二进制文件对应的哈希值与预设哈希值进行对比;
[0136]
若二进制文件对应的哈希值与预设哈希值不匹配,则对二进制文件进行逆向。
[0137]
其中,预设哈希值为目标应用程序的初始二进制文件对应的哈希值,示例性的,预设哈希值可以为目标应用程序在第一次上传至服务器的so文件对应的哈希值。
[0138]
在本实施例中,对上传到该服务器的so文件代码段进行检测,首先,若该so文件是第一次上传至服务器,服务器此时没有该so文件对应的哈希值,服务器会先计算该so文件的哈希值并进行存储,作为预设哈希值,倘若该目标应用程序在后续某次更新过程中原来的so文件被替换为恶意so文件,则其哈希值会发生改变,此时服务器就需要再次对该so文件进行检测分析,当哈希值未发生变化,则服务器不用进行分析,从而提高恶意应用程序的检测效率。
[0139]
在实际应用中,恶意应用为了规避检测,会把包含有恶意代码的so文件放在应用外部,在目标应用程序执行后通过动态加载的方式调用非本地的外部so文件,即将包含恶意代码的外部so文件加载进来,替换了原来的so文件,本技术实施例通过使用哈希值进行比较,建立动态监测方法,可以实时监控该目标应用程序运行时加载的第三方so文件的安全性,提高恶意应用程序的检测效果。
[0140]
下述为本技术装置实施例,可以用于执行本技术方法实施例。对于本技术装置实施例中未披露的细节,请参照本技术方法实施例。
[0141]
图3为本技术实施例提供的恶意应用的检测装置的结构示意图,该检测装置可以集成于服务器上,也可以独立于服务器且与服务器协同作业实现本方案。如图3所示,该检测装置30包括文件确定模块31、第一检测模块32、序列获取模块33和第二检测模块34。
[0142]
其中,文件确定模块31用于响应于客户端上传的二进制文件,对二进制文件进行逆向,确定二进制文件是否逆向得到目标代码。第一检测模块32用于若二进制文件逆向得到目标代码,则根据目标代码和预设恶意代码,获取第一检测结果。序列获取模块33用于若二进制文件逆向得不到目标代码,则获取二进制文件对应的操作码序列。第二检测模块34用于将二进制文件转换为灰度图像,根据预设机器学习算法、灰度图像和操作码序列,计算得到第二检测结果。
[0143]
其中,二进制文件为根据预设编程语言编写后编译得到,且运行于目标应用程序的原生层中的文件,第一检测结果用于指示目标应用程序为恶意应用程序或非恶意应用程序,第二检测结果用于指示目标应用程序为恶意应用程序或非恶意应用程序。
[0144]
在一些实施例中,上述第二检测模块34具体可以用于:
[0145]
使用预设第一函数将二进制文件转换为十六进制字符串;
[0146]
对十六进制字符串进行字节分割,得到分割之后的字节,根据预设第二函数和分割之后的字节,生成目标矩阵;
[0147]
根据预设第三函数,将目标矩阵转换为灰度图像。
[0148]
在一些实施例中,上述序列获取模块33具体可以用于:
[0149]
将二进制文件逆向得到目标指令集;
[0150]
通过预设计算机编程语言,将目标指令集转换为操作码序列。
[0151]
在一些实施例中,上述第二检测模块34具体可以用于:
[0152]
对操作码序列进行拆分得到长度为n的多个子序列,n为大于1的正整数;
[0153]
计算每个子序列在操作码序列中出现的频率;
[0154]
根据每个子序列在操作码序列中出现的频率,确定每个子序列的权重;
[0155]
根据每个子序列的权重,对每个子序列进行加权,计算得到二进制文件对应的特征向量;
[0156]
根据预设机器学习算法、二进制文件对应的特征向量和灰度图像,计算得到第二检测结果。
[0157]
在一些实施例中,若预设机器学习算法为随机森林算法,则上述第二检测模块34具体可以用于:
[0158]
计算二进制文件对应的特征向量与m个不同种类的预设恶意样本向量的余弦相似度,m为大于1的正整数;
[0159]
对灰度图像进行向量描述,得到灰度图像对应的图像向量;
[0160]
根据随机森林算法、余弦相似度和灰度图像对应的图像向量,计算得到第二检测结果。
[0161]
在一些实施例中,上述第一检测模块32具体可以用于:
[0162]
根据预设自动化扫描工具,对目标代码进行扫描,得到目标代码的组合特征;
[0163]
将组合特征与预设恶意代码进行对比,得到第一检测结果。
[0164]
在一些实施例中,上述检测装置30还可以包括系统调用记录模块,用于:
[0165]
利用预设反汇编应用,对二进制文件进行反汇编,生成包含汇编代码的目标文件;
[0166]
将目标应用程序的系统调用记录至目标文件中,根据记录有系统调用的目标文件和预设机器学习算法,对目标应用程序进行分类,得到分类结果。
[0167]
其中,分类结果用于指示目标应用程序为恶意应用程序或非恶意应用程序。
[0168]
在一些实施例中,上述检测装置30还可以包括对比模块,用于:
[0169]
计算得到二进制文件对应的哈希值;
[0170]
将二进制文件对应的哈希值与预设哈希值进行对比,预设哈希值为目标应用程序的初始二进制文件对应的哈希值;
[0171]
若二进制文件对应的哈希值与预设哈希值不匹配,则对二进制文件进行逆向。
[0172]
图4为本技术实施例提供的服务器的硬件结构示意图。如图4所示,该服务器40包括:至少一个处理器41、存储器42、总线43。
[0173]
其中:处理器41以及存储器42通过总线完成相互间的通信。
[0174]
存储器42,用于存储计算机执行指令。存储器42可能包含高速ram存储器,也可能还包括非易失性存储器,例如至少一个磁盘存储器。
[0175]
处理器41,用于执行存储器42存储的计算机执行指令,使得至少一个处理器执行如上的方法。示例性的,具体可以执行上述实施例中所描述的方法中的相关步骤。
[0176]
处理器41可能是中央处理器,或者是特定集成电路(application specific integrated circuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
[0177]
本实施例还提供一种可读存储介质,可读存储介质中存储有计算机指令,当服务
器的至少一个处理器执行该计算机指令时,服务器执行上述的各种实施方式提供的恶意应用的检测方法。
[0178]
本实施例还提供一种程序产品,该程序产品包括计算机指令,该计算机指令存储在可读存储介质中。服务器的至少一个处理器可以从可读存储介质读取该计算机指令,至少一个处理器执行该计算机指令使得服务器实施上述的各种实施方式提供的恶意应用的检测方法。
[0179]
本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系;在公式中,字符“/”,表示前后关联对象是一种“相除”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a

b,a

c,b

c,或a

b

c,其中,a,b,c可以是单个,也可以是多个。
[0180]
可以理解的是,在本技术实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本技术的实施例的范围。在本技术的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术的实施例的实施过程构成任何限定。
[0181]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1