掌桥专利:专业的专利平台
掌桥专利
首页

一种恶意脚本代码检测方法及装置

文献发布时间:2023-06-19 11:29:13


一种恶意脚本代码检测方法及装置

技术领域

本申请涉及计算机技术领域,更具体的说,涉及恶意脚本代码检测方法及装置。

背景技术

目前,随着计算机技术的发展,脚本文件被广泛应用在各类场景中,并且恶意脚本文件也随之迅速增加。如何精准的识别出各类场景中的恶意脚本文件,成为整个行业研究的主要方向。

例如,行业内主要采用静态检测方法来识别出网页中的恶意脚本文件。其中,静态检测方法为:在计算机设备获取到需要识别的脚本文件以后,计算机设备会判断该脚本文件中的脚本代码是否与恶意脚本库中的恶意特征相匹配,如果该脚本文件中的脚本代码与恶意脚本库中的恶意特征相匹配,说明该脚本文件为恶意脚本文件。

为了避免恶意脚本文件被上述静态检测方法识别出来,黑客通常会对恶意脚本文件中的代码进行混淆处理,使得被混淆处理后得到的恶意脚本文件中不存在与恶意脚本库中的恶意特征相匹配的脚本代码,从而达到逃避检测、更好的隐藏恶意脚本的目的。

因此,如何识别出被混淆处理的恶意代码,成为目前亟需解决的问题。

发明内容

本申请提供一种恶意脚本代码检测方法及装置,以有效的检测出经过混淆处理的恶意脚本文件中的恶意代码。

第一方面,本申请提供了一种恶意脚本代码检测方法,该方法包括:获取待检测的脚本文件,脚本文件中包含第一代码段;根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征,第一恶意特征同时存在于恶意脚本特征库和第一检测样本中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的;根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

在第一方面中,本申请实施例提供的至少一个代码转换规则能够将脚本文件中的第一代码段转换成第一检测样本,第一检测样本体现了实现第一代码段的对应程序功能的实质信息。进一步将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,恶意特征体现了实现恶意代码对应程序功能的实质信息。本申请实施例中的实质信息包括程序结构和关键数据,程序结构包括变量运算以及所调用的函数的先后顺序、以及变量、运算与函数之间相互关系等等,关键数据包括对变量的赋值等等。无论对代码进行怎样的混淆和变形,混淆后的代码要想实现混淆前的代码的程序功能,混淆后的代码需要与混淆前的代码具有相同的实质信息。如果第一检测样本与恶意脚本特征库中的第一恶意特征匹配,说明第一代码段的程序结构与第一已知恶意代码的实质信息是相同的。在第一代码段的程序结构与第一已知恶意代码的实质信息相同的情况下,如果第一已知恶意代码的程序功能会使计算机设备感染病毒或木马,说明第一代码段的程序功能也会使计算机设备感染病毒或木马,从而能够确定脚本文件中的第一代码段为恶意代码。本申请实施例通过转换规则,能够从脚本文件的代码中去除对于实现程序功能没有实质影响的信息,而保留对于实现程序功能具有实质影响的信息,从而能够检测出经过混淆处理的恶意脚本文件中的恶意代码。

在第一方面的一种可能的实现方式中,至少一个代码转换规则还包括第二转换规则。第二转换规则包括将第一操作符转换为第二值,且将第二操作符转换为第三值,第一操作符和第二操作符均用于对常量或变量执行运算,第一操作符与第二操作符不同。

在第二转换规则中,将第一代码段中的每个操作符转换成对应的数值,以使计算机设备能够得知第一代码段中哪些代码属于操作符。由于每个操作符在第一代码段中所起到的作用和功能均不相同,所以每个操作符对应的数值均不相同。考虑到操作符是实现代码对应的程序功能的重要信息,本申请实施例通过第二转换规则,保留对于实现程序功能具有实质影响的信息。

在第一方面的一种可能的实现方式中,至少一个代码转换规则还包括第三转换规则。第三转换规则包括第一函数名转换后内容不变,第一函数名属于预定敏感函数名集合中的函数名。或者将第二函数名转换为第一值,第二函数名不属于预定敏感函数名集合中的函数名。

由于预定敏感函数名本身具有较为明显的识别恶意特征的作用,因此在第三转换规则中,使得敏感函数名被保留下来,从而更好的确定第一代码段是否属于恶意代码。

在第一方面的一种可能的实现方式中,至少一个代码转换规则还包括第四转换规则。第四转换规则包括:在第一变量名的赋值和第二变量名的赋值均为字符串时,将第一变量名的赋值转换为第四值,将第二变量名的赋值转换为第四值;或在第一变量名的赋值和第二变量名的赋值均为数值时,将第一变量名的赋值转换为第五值,将第二变量名的赋值转换为第五值。

在第四转换规则中,如果第一代码段中的变量名的赋值为字符串,那么将变量名的赋值转换为第四值,以使计算机设备能够得知第一代码段中哪些代码属于字符串。如果第一代码段中的变量名的赋值为数值,那么将变量名的赋值转换为第五值,以使计算机设备能够得知第一代码段中哪些代码属于数值。

在第一方面的一种可能的实现方式中,至少一个代码转换规则还包括第五转换规则。第五转换规则包括:在第一变量名的赋值为不可见字符串时,将第一变量名的赋值加入第一检测样本中。

在第五转换规则中,如果第一代码段中的变量名的赋值为不可见字符串,说明变量名的赋值不能按照预定编码格式进行转换。不可见字符串本身是对识别恶意特征比较有用的信息。本申请实施例通过将第一变量名的赋值加入第一检测样本中,以使变量名的赋值得以保留在转换后得到的第一检测样本中,从而更好的确定第一代码段是否属于恶意代码。

在第一方面的一种可能的实现方式中,至少一个代码转换规则还包括第六转换规则。第六转换规则包括:在第二变量名的赋值为可见字符串时,按照预定编码格式将第二变量名的赋值转换为第一字符串,并将第一字符串加入第一检测样本中。

由于编码格式变化也是一种混淆或变形的方式,本申请实施例通过第六转换规则,能够将通过多种不同编码格式的相同内容,归一化转换为一种预定编码格式,能够大大减少不同代码之间的差异性,从而从脚本文件的代码中去除对于实现程序功能没有实质影响的信息。通过第六转换规则,能够实现解混淆的功能,从而能够检测出经过混淆处理的恶意脚本文件中的恶意代码。

在第一方面的一种可能的实现方式中,获取待检测的脚本文件以前,方法还包括:获取恶意脚本文件集合,恶意脚本文件集合包括一个或多个恶意脚本文件。在恶意脚本文件集合中选择一个恶意脚本文件,对被选中的恶意脚本文件按照以下方式进行处理,直到按照以下方式处理完恶意脚本文件集合中的每个恶意脚本文件为止:根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本。将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

其中,本申请将恶意脚本文件集合中的每个恶意脚本文件的代码全部转换成多个恶意特征样本,并将多个恶意特征样本添加到恶意脚本特征库,从而使得恶意脚本特征库中掌握了大量的恶意代码的程序结构。在需要确定待检测的脚本文件中是否存在恶意代码时,便可根据至少一个代码转换规则将待检测的脚本文件的第一代码段转换成第一检测样本,并将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配。如果第一检测样本与恶意脚本特征库中的第一恶意特征,说明待检测的脚本文件的第一代码段的程序结构与第一恶意特征对应的第一已知恶意代码的程序结构相同,所以能够确定待检测的脚本文件中存在恶意代码。因此,本申请实施例能够利用建立恶意脚本特征库,以使本申请实施例提供的恶意脚本代码检测方法能够利用恶意脚本特征库,来识别出经过混淆处理的代码是否为恶意代码。

在第一方面的一种可能的实现方式中,第一值、第二值、第三值、第四值和第五值均为八进制、十进制或十六进制的数值。

第二方面,本申请提供了一种恶意脚本代码检测方法,该方法包括:获取恶意脚本文件集合,恶意脚本文件集合包括一个或多个恶意脚本文件。在恶意脚本文件集合中选择一个恶意脚本文件,对被选中的恶意脚本文件按照以下方式进行处理,直到按照以下方式处理完恶意脚本文件集合中的每个恶意脚本文件为止:根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同。将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

第三方面,本申请提供了一种计算机设备,包括存储器和与存储器连接的处理器,存储器用于存储指令。处理器用于执行指令,以使计算机设备执行以下操作:获取待检测的脚本文件,脚本文件中包含第一代码段;根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征,第一恶意特征同时存在于恶意脚本特征库和第一检测样本中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的;根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

在第三方面的一种可能的实现方式中,至少一个代码转换规则还包括第二转换规则。第二转换规则包括将第一操作符转换为第二值,且将第二操作符转换为第三值,第一操作符和第二操作符均用于对常量或变量执行运算,第一操作符与第二操作符不同。

在第三方面的一种可能的实现方式中,至少一个代码转换规则还包括第三转换规则。第三转换规则包括第一函数名转换后内容不变,第一函数名属于预定敏感函数名集合中的函数名。将第二函数名转换为第一值,第二函数名不属于预定敏感函数名集合中的函数名。

在第三方面的一种可能的实现方式中,至少一个代码转换规则还包括第四转换规则。第四转换规则包括:在第一变量名的赋值和第二变量名的赋值均为字符串时,将第一变量名的赋值转换为第四值,将第二变量名的赋值转换为第四值;或在第一变量名的赋值和第二变量名的赋值均为数值时,将第一变量名的赋值转换为第五值,将第二变量名的赋值转换为第五值。

在第三方面的一种可能的实现方式中,至少一个代码转换规则还包括第五转换规则。第五转换规则包括:在第一变量名的赋值为不可见字符串时,将第一变量名的赋值加入第一检测样本中。

在第三方面的一种可能的实现方式中,至少一个代码转换规则还包括第六转换规则。第六转换规则包括:在第二变量名的赋值为可见字符串时,按照预定编码格式将第二变量名的赋值转换为第一字符串,并将第一字符串加入第一检测样本中。

在第三方面的一种可能的实现方式中,处理器,还用于获取恶意脚本文件集合,恶意脚本文件集合包括一个或多个恶意脚本文件;在恶意脚本文件集合中选择一个恶意脚本文件,对被选中的恶意脚本文件按照以下方式进行处理,直到按照以下方式处理完恶意脚本文件集合中的每个恶意脚本文件为止:根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本;将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

在第三方面的一种可能的实现方式中,第一值、第二值、第三值、第四值和第五值均为八进制、十进制或十六进制的数值。

第四方面,本申请提供了一种计算机设备,包括存储器和与存储器连接的处理器,存储器用于存储指令。处理器用于执行指令,以使计算机设备执行以下操作:获取恶意脚本文件集合,恶意脚本文件集合包括一个或多个恶意脚本文件。在恶意脚本文件集合中选择一个恶意脚本文件,对被选中的恶意脚本文件按照以下方式进行处理,直到按照以下方式处理完恶意脚本文件集合中的每个恶意脚本文件为止:根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值。将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

第五方面,本申请提供了一种计算机设备,包括:获取模块,用于获取待检测的脚本文件,脚本文件中包含第一代码段;处理模块,用于根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征,第一恶意特征同时存在于恶意脚本特征库和第一检测样本中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的;根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

第六方面,本申请提供了一种计算机设备,包括:获取模块,用于获取恶意脚本文件集合,恶意脚本文件集合包括一个或多个恶意脚本文件;处理模块,用于在恶意脚本文件集合中选择一个恶意脚本文件,对被选中的恶意脚本文件按照以下方式进行处理,直到按照以下方式处理完恶意脚本文件集合中的每个恶意脚本文件为止:根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

第七方面,本申请提供了一种计算机存储介质,用于储存为上述计算机设备所用的计算机软件指令,其包含用于执行上述第一方面、上述第二方面和上述第一方面的任意一种可能的实现方式所设计的程序。

第八方面,本申请提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。

第九方面,本申请提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面、上述第二方面和上述第一方面的任意一种可能的实现方式中的方法。

附图说明

图1为本申请实施例提供的恶意脚本代码检测方法的一种可能的应用场景的示意图;

图2为本申请实施例提供的一种恶意脚本代码检测方法的流程图;

图3为本申请实施例提供的另一种恶意脚本代码检测方法的流程图;

图4为本申请实施例提供的一种计算机设备的结构示意图;

图5为本申请实施例提供的另一种计算机设备的结构示意图。

具体实施方式

目前,黑客通常以非法的目的设计恶意脚本文件,并让恶意脚本文件存在于网页等载体中。其中,恶意脚本文件具有自我复制、传播和破坏等能力,对计算机设备具有极大的危害。传统的静态检测方法可以识别出网页等载体中的恶意脚本文件。黑客为了避免恶意脚本文件被传统的静态检测方法识别出来,会预先对恶意脚本文件中的代码进行混淆或变形处理。其中,黑客通常会对恶意脚本文件中的变量名、操作符、字符串、函数、数组和对象等代码进行混淆。

下面通过一个简单的例子来说明黑客是如何对恶意脚本文件中的变量进行混淆的。其中,实际的混淆过程比较复杂,而且需要混淆的代码也会比较多。为了节省篇幅且能够说明原理,下面将使用较为简短的代码进行示例性的说明。

示例的,假设黑客设计的恶意脚本文件A包括代码段X,代码段X包括以下三行代码:

a=1;

b=2;

c=a+b;

由于代码段X已经作为恶意特征存储在静态检测方法对应的恶意脚本库S中,所以黑客为了避免恶意脚本文件A的代码段X被静态检测方法识别出来,黑客会对恶意脚本文件A的代码段X进行混淆处理。假设黑客将代码段X进行混淆处理后得到代码段Y,代码段Y包括以下三行代码:

x=1;

y=2;

z=x+y;

通过对比代码段X和代码段Y可以得知,黑客将代码段X中的变量“a,b,c”转换成代码段Y中的变量“x,y,z”,但是代码段X和代码段Y的代码结构和数据均相同。因此代码段Y能够实现的功能与代码段X相比也未发生变化。黑客会设计出具有代码段Y的恶意脚本文件B,并将恶意脚本文件B设计到网页等载体中。

由于代码段Y并未作为恶意特征存储在静态检测方法对应的恶意脚本库S中,所以静态检测方法无法利用恶意脚本库S识别出网页中的恶意脚本文件B。

为此,本申请实施例提供了一种恶意脚本代码检测方法,可以有效的检测出经过混淆处理的恶意脚本文件中的恶意代码。

图1为本申请实施例提供的恶意脚本代码检测方法的一种可能的应用场景的示意图。可选地,图1中的位于受保护网络中的终端设备101、报文转发设备和位于互联网中的云检测设备102中的任意一个均能够执行本申请实施例提供的方法。

可选地,终端设备101包括但不限于台式电脑、移动终端、掌上电脑、可穿戴设备、平板电脑、笔记本电脑、电子阅读器等等。

可选地,报文转发设备包括但不限于防火墙103、路由器、安全网关104等等。

当终端设备101执行本申请实施例提供的恶意脚本代码检测方法时,终端设备101从存储器中获得待检测的脚本文件。可选地,待检测的脚本文件是终端设备101的用户通过浏览器访问互联网时,嵌入在网页文件中并被终端设备101下载并缓存到存储器中的;或者是终端设备101的用户通过邮件客户端接收到邮件时,被携带在邮件的附件中并被终端设备101下载并缓存到存储器的;或者是嵌入在pdf文档中,并在终端设备101打开便携式文档格式(pdf,Portable Document Format)文档时,被释放并缓存到存储器的。

当报文转发设备执行本申请实施例提供的恶意脚本代码检测方法时,报文转发设备从终端设备101与互联网之间传输的网络流量中获取终端设备101从互联网中下载、或者向互联网中上传的待检测的脚本文件。可选地,报文转发设备通过代理机制、入侵检测系统(IDS,intrusion detection system)、深度报文检测(DPI,Deep Packet Inspection)等技术获得上述待检测的脚本文件后,对待检测的脚本文件执行恶意脚本代码检测方法后,根据检测结果阻断或者放行承载所述待检测的脚本文件的网络流量。进一步地,为了避免降低报文转发设备的性能或者避免因检测带来的传输延时,报文转发设备在获得待检测的脚本文件后,将待检测的脚本文件发送给与报文转发设备旁路连接的分析设备105。分析设备105以离线的方式对待检测的脚本文件执行恶意脚本代码检测方法后,将检测结果通知所述报文转发设备,以便于报文转发设备拦截后续承载该脚本文件的网络流量。

当云检测设备102执行本申请实施例提供的恶意脚本代码检测方法时,云检测设备102接收其他网络设备发送的待检测的脚本文件,对待检测的脚本文件执行恶意脚本代码检测方法后,向发送待检测的脚本文件的网络设备返回检测结果。通过这种方式云检测设备102向其他网络设备提供检测恶意脚本代码的服务。可选地,云检测设备102通过WebUI接收终端设备101、或者报文转发设备等其他网络设备提交的待检测的脚本文件,通过网页、邮件、短信等方式向提交待检测的脚本文件的设备返回检测结果。

请参见图2所示,图2为本申请实施例提供的一种恶意脚本代码检测方法的流程图。本申请实施例提供的恶意脚本代码检测方法能够应用在计算机设备上。可选地,计算机设备为图2中的终端设备101、报文转发设备和位于互联网中的云检测设备102。本申请实施例提供的恶意脚本代码检测方法包括以下步骤S101至S104。

S101、获取待检测的脚本文件。

脚本(Script)文件是指包含使用脚本语言编写的计算机可执行代码的文件。脚本语言包括但不限于JavaScript,VBScript,shell,Python等等。这些脚本语言虽然有所差异,但这些脚本语言对于代码的语法、定义基本都遵从编程语言的通用结构、且代码顺序地被执行。因此虽然本申请实施例后续以JavaScript为例进行举例说明,但本申请实施例提供的恶意脚本代码检测方法适用于各种脚本语言编写的脚本文件。

其中,脚本文件中包含第一代码段,第一代码段是脚本文件中的全部代码段或部分代码段。通常情况下,脚本文件中包括代码和注释,代码用于实现脚本文件对应的功能,注释用于对代码进行解释和说明,以使人们能够更加轻松地了解代码的含义,从而增加代码的可读性,便于二次开发和修改。第一代码段指的是脚本文件中的代码,第一代码段中不包含脚本文件中的注释。

可选的,待检测的脚本文件为网页中的脚本文件,例如JavaScript,VBScript。

以计算机设备为终端设备为例,假设在计算机设备接收到打开网页H1的指令时,从安全角度考虑,计算机设备会先执行图2所示的S101至S104,以检测该网页H1的脚本文件中是否存在恶意代码。如果该网页的脚本文件H1中不存在恶意代码,那么计算机设备便会执行该网页H1的脚本文件,以显示该网页的内容。如果该网页H1的脚本文件中存在恶意代码,那么计算机设备会禁止执行该网页H1的脚本文件,并提醒用户该网页H1中可能存在木马或病毒。

S102、根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本。

其中,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同。第一值为预先设定的数值。

例如,假设预先将第一值设定为数值“15”,而且第一代码段中包括变量名“a”和变量名“b”,那么利用第一转换规则可将变量名“a”和变量名“b”均转换为“15”。

当然,在第一代码段中的变量名的数量大于两个时,第一转换规则还包括将每个变量名均转换为第一值。

例如,假设预先将第一值设定为数值“15”,而且第一代码段中包括变量名“a”、变量名“b”、变量名“c”和变量名“d”,那么利用第一转换规则可将变量名“a”、变量名“b”、变量名“c”和变量名“d”均转换为“15”。

在第一转换规则中,将第一代码段中的每个变量名转换成第一值,以使计算机设备能够得知第一代码段中哪些代码属于变量名。

由于变量名本身并不影响代码的程序功能,本申请实施例通过第一转换规则,计算机设备将大量不同的变量名转换为第一值,能够大大减少不同代码之间的差异性,从而从脚本文件的代码中去除对于实现程序功能没有实质影响的信息。通过第一转换规则,能够实现解混淆的功能,从而能够检测出经过混淆处理的恶意脚本文件中的恶意代码。

可选地,在第一代码段中存在操作符(也被称为运算符)时,那么至少一个代码转换规则还包括第二转换规则。第二转换规则包括将第一操作符转换为第二值,且将第二操作符转换为第三值,第一操作符和第二操作符均用于对常量或变量执行运算,第一操作符与第二操作符不同。通常第二值与第三值不同。

其中,操作符包括但不限于“+”、“-”、“×”、“÷”、“=”、“(”、“)”、“[”、“]”、“,”、“%”、“;”和“。”等符号。每种操作符都预先设定一个数值,例如,预先将操作符“=”转换后的数值设定为“59”,预先将操作符“;”转换后的数值设定为“54”,预先将操作符“(”转换后的数值设定为“39”,预先将操作符“)”转换后的数值设定为“40”,预先将操作符“[”转换后的数值设定为“69”,预先将操作符“]”转换后的数值设定为“70”,预先将操作符“,”转换后的数值设定为“46”。

在第二转换规则中,将第一代码段中的每个操作符转换成对应的数值,以使计算机设备能够得知第一代码段中哪些代码属于操作符。由于每个操作符在第一代码段中所起到的作用和功能均不相同,所以每个操作符对应的数值均不相同。考虑到操作符是实现代码对应的程序功能的重要信息,本申请实施例通过第二转换规则,保留对于实现程序功能具有实质影响的信息。

可选地,在第一代码段中存在函数名时,那么至少一个代码转换规则还包括第三转换规则。第三转换规则包括第一函数名转换后内容不变,第一函数名属于预定敏感函数名集合中的函数名。将第二函数名转换为第一值,第二函数名不属于预定敏感函数名集合中的函数名。

其中,预定敏感函数名集合包括多个敏感函数名,预定敏感函数名集合包括但不限于以下的敏感函数名:“appendChild”、“eval”、“innerHTML”、“write”、“charAt”、“fromCharCode”、“indexOf”、“parseInt”、“replace”、“split”、“substr”和“unescape”。

例如,假设第一代码段中存在函数名“eval”,由于函数名“eval”属于预定敏感函数名集合中的函数名,那么函数名“eval”的转结果为“eval”,敏感函数名转换后的内容不会发生变化,即敏感函数名不进行转换,或者说,敏感函数名转换后的内容与转换前的内容相同。

又如,假设第一代码段中存在函数名“alert”,而且第一值被预先设定为“15”,由于函数名“alert”不属于预定敏感函数名集合中的函数名,那么函数名“alert”的转结果为“15”。

由于预定敏感函数名本身具有较为明显的识别恶意特征的作用,因此在第三转换规则中,使得敏感函数名被保留下来,从而更好的确定第一代码段是否属于恶意代码。

可选的,在第一代码段中的变量名存在对应的赋值时,那么至少一个代码转换规则还包括第四转换规则。第四转换规则包括:在第一变量名的赋值和第二变量名的赋值均为字符串时,将第一变量名的赋值转换为第四值,将第二变量名的赋值转换为第四值;或在第一变量名的赋值和第二变量名的赋值均为数值时,将第一变量名的赋值转换为第五值,将第二变量名的赋值转换为第五值。在本申请实施例中,字符串包含至少一个字符。可选的,第四值为“24”,第五值为“21”。

在第四转换规则中,如果第一代码段中的变量名的赋值为字符串,那么将变量名的赋值转换为第四值,以使计算机设备能够得知第一代码段中哪些代码属于字符串。如果第一代码段中的变量名的赋值为数值,那么将变量名的赋值转换为第五值,以使计算机设备能够得知第一代码段中哪些代码属于数值。

可选地,在第一代码段中的变量名的赋值为不可见字符串时,那么至少一个代码转换规则还包括第五转换规则。第五转换规则包括:在第一变量名的赋值为不可见字符串时,将第一变量名的赋值加入第一检测样本中。其中,不可见字符串为不能按照预定编码格式进行转换的字符串。

在第五转换规则中,如果第一代码段中的变量名的赋值为不可见字符串,说明变量名的赋值不能按照预定编码格式进行转换。不可见字符串本身是对识别恶意特征比较有用的信息。本申请实施例通过将第一变量名的赋值加入第一检测样本中,以使变量名的赋值得以保留在转换后得到的第一检测样本中,从而更好的确定第一代码段是否属于恶意代码。

可选的,在第一代码段中的变量名的赋值为可见字符串时,那么至少一个代码转换规则还包括第六转换规则。第六转换规则包括:在第二变量名的赋值为可见字符串时,按照预定编码格式将第二变量名的赋值转换为第一字符串,并将第一字符串加入第一检测样本中。其中,可见字符串为能够按照预定编码格式进行转换的字符串。

可选的,预定编码格式为ASCII(American Standard Code for InformationInterchange)码、GB2312(信息交换用汉字编码字符集)、Unicode(单一码)或UTF-8(8-bitUnicode Transformation Format,针对Unicode的可变长度字符编码)。

由于编码格式变化也是一种混淆或变形的方式,本申请实施例通过第六转换规则,能够将通过多种不同编码格式的相同内容,归一化转换为一种预定编码格式,能够大大减少不同代码之间的差异性,从而从脚本文件的代码中去除对于实现程序功能没有实质影响的信息。通过第六转换规则,能够实现解混淆的功能,从而能够检测出经过混淆处理的恶意脚本文件中的恶意代码。

在第一代码段中存在声明变量名的关键字时,那么至少一个代码转换规则还包括第七转换规则。第七转换规则包括:将每个关键字转换成对应的数值,每个关键字对应的数值均不相同。

例如,“var”是声明变量的关键字,预先将“var”对应的数值设定为“97”。“let”是声明变量的关键字,预先将“let”对应的数值设定为“98”。

在第七转换规则中,将第一代码段中的每个关键字转换成对应的数值,以使计算机设备能够得知第一代码段中哪些代码属于关键字。由于每个关键字在第一代码段中所起到的作用和功能均不相同,所以每个关键字对应的数值均不相同。考虑到关键字是实现代码对应的程序功能的重要信息,本申请实施例通过第七转换规则,保留对于实现程序功能具有实质影响的信息。

在本申请实施例中提到的第一值、第二值、第三值、第四值和第五值均为八进制、十进制或十六进制的数值。当然,第一值、第二值、第三值、第四值和第五值也可以为其他进制的数值。

为了更清楚的展示本申请实施例是如何根据至少一个代码转换规则对第一代码段中的代码进行转换,并基于转换结果得到第一检测样本,下面通过一个示例来说明。下面的这个示例会使用到至少一个代码转换规则中的第一转换规则、第二转换规则和第四转换规则。

示例的,假设第一代码段包括以下三行代码:

x=1;

y=2;

z=x+y;

在第一代码段中,第一行代码为“x=1;”。其中,“x”为变量名,“x”对应的数值为“15”。“=”为操作符,“=”对应的数值为“59”。“1”为数值,“1”对应的数值为“21”。“;”为操作符,“;”对应的数值为“54”。最后,利用至少一个代码转换规则可以将第一代码段中的第一行代码转换为“15 59 21 54”。

在第一代码段中,第二行代码为“y=2;”。其中,“y”为变量名,“y”对应的数值为“15”。“=”为操作符,“=”对应的数值为“59”。“2”为数值,“2”对应的数值为“21”。“;”为操作符,“;”对应的数值为“54”。最后,利用至少一个代码转换规则可以将第一代码段中的第二行代码转换为“15 59 21 54”。

在第一代码段中,第三行代码为“z=x+y;”。其中,“z”为变量名,“z”对应的数值为“15”。“=”为操作符,“=”对应的数值为“59”。“x”为变量名,“x”对应的数值为“15”。“+”为操作符,“+”对应的数值为“60”。“y”为变量名,“y”对应的数值为“15”。“;”为操作符,“;”对应的数值为“54”。最后,利用至少一个代码转换规则可以将第一代码段中的第一行代码转换为“15 59 15 60 15 54”。

请参见表1所示,表1所示的为根据至少一个代码转换规则对第一代码段的三行代码进行转换后生成的第一检测样本。

表1

S103、将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征。换句话说,“匹配中的第一恶意特征”,是指第一恶意特征是恶意脚本特征库中与第一检测样本相匹配的恶意特征。“匹配中”或者“相匹配”的含义也被理解为第一恶意特征同时存在于恶意脚本特征库和第一检测样本中。其中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的。

恶意脚本特征库中会预先存储有多个恶意特征,而且恶意脚本特征库中的恶意特征是由恶意代码根据至少一个代码转换规则转换得到的,恶意特征用于表示恶意代码的程序结构,恶意代码指的是使计算机设备感染病毒或木马的具有危险性的代码。另外,在图3所示的实施例中,会详细的介绍建立恶意脚本特征库的过程。

示例的,请参见表1和表2所示,表2所示的为预先建立的恶意脚本特征库,表2所示的恶意脚本特征库中包括预先存储的多个恶意特征。

表2

在表1和表2所示的示例中,由于表1中的第一检测样本与表2中的编号1对应的恶意特征完全匹配,则计算机设备确定表2中的编号1对应的恶意特征为第一恶意特征。

S104、根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

在图2所示的实施例中,本申请实施例提供的至少一个代码转换规则能够将脚本文件中的第一代码段转换成第一检测样本,第一检测样本体现了实现第一代码段的对应程序功能的实质信息。进一步将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,恶意特征体现了实现恶意代码对应程序功能的实质信息。

本申请实施例中的实质信息包括程序结构和关键数据,程序结构包括变量运算以及所调用的函数的先后顺序、以及变量、运算与函数之间相互关系等等,关键数据包括对变量的赋值等等。无论对代码进行怎样的混淆和变形,混淆后的代码要想实现混淆前的代码的程序功能,混淆后的代码需要与混淆前的代码具有相同的实质信息。

如果第一检测样本与恶意脚本特征库中的第一恶意特征匹配,说明第一代码段的程序结构与第一已知恶意代码的实质信息是相同的。在第一代码段的程序结构与第一已知恶意代码的实质信息相同的情况下,如果第一已知恶意代码的程序功能会使计算机设备感染病毒或木马,说明第一代码段的程序功能也会使计算机设备感染病毒或木马,从而能够确定脚本文件中的第一代码段为恶意代码。本申请实施例通过转换规则,能够从脚本文件的代码中去除对于实现程序功能没有实质影响的信息,而保留对于实现程序功能具有实质影响的信息,从而能够检测出经过混淆处理的恶意脚本文件中的恶意代码。

通过图2所示的实施例可以得知,黑客能够将脚本文件中的代码进行混淆处理得到第一代码段,如果常规的静态检测方法对应的数据库中未保存过第一代码段,那么常规的静态检测方法便无法识别出第一代码段是否属于恶意代码。但是,本申请实施例提供的恶意脚本特征库会保存大量恶意代码的程序结构,只要第一代码段的程序结构预先存储在恶意脚本特征库中,即使恶意脚本特征库中未保存过第一代码段,本申请实施例也能够识别出第一代码段属于恶意代码。相对于常规的静态检测方法,本申请实施例提供的恶意脚本代码检测方法能够识别出经过混淆处理的代码是否为恶意代码。

为了更清楚的展示至少一个代码转换规则中的多种转换规则的使用方式,下面通过另一个示例来进行说明。下面的这个示例会使用到至少一个代码转换规则中的第一转换规则、第二转换规则、第三转换规则、第四转换规则、第五转换规则、第六转换规则和第七转换规则。

请参见表3所示,表3所示的为预先建立的根据至少一个代码转换规则生成的转换规则、代码与数值的对应关系。

表3

请参见表4所示,表4所示的为预先建立的根据至少一个代码转换规则生成的操作符与数值的对应关系。

表4

请参见表5所示,表5所示的为预先建立的根据至少一个代码转换规则生成的声明变量名的关键字与数值的对应关系。

表5

示例的,假设第一代码段包括以下六行代码:

var s=[],

j=‘0x90909090…….’,

e=‘abc’,

r=‘\u006d\u0061\u006c\u0077\u0061\u0072\u0065......';

alert(r);

eval(j);

请参见表6所示,表6所示的为根据至少一个代码转换规则对第一代码段的六行代码进行转换后生成的第一检测样本。

表6

在表6的第一行样本为“97 30 15 59 69 70 46”,表6的第一行样本是由第一代码段的第一行代码“var s=[],”根据至少一个代码转换规则生成的。

在第一代码段的第一行代码中,“var”为声明变量名的关键字,通过表5可以得知“var”对应的数值为“97”。“空格”为操作符,通过表4可以得知“空格”对应的数值为“30”。“s”为变量名,通过表3可以得知“s”对应的数值为“15”。“=”为操作符,通过表4可以得知“=”对应的数值为“59”。“[”为操作符,通过表4可以得知“[”对应的数值为“69”。“]”为操作符,通过表4可以得知“]”对应的数值为“70”。“,”为操作符,通过表4可以得知“,”对应的数值为“46”。

关于第一代码段的第二行代码至第一代码段的第五行代码,其转换过程与第一代码段的第一行代码类似,即通过表3至表5中的映射关系来确定代码对应的数值,在此不再赘述。

在第一代码段的第六行代码中,“eval”属于预定敏感函数名集合中的函数名,即“eval”属于表3中的第一函数名。根据第三转换规则可以得知,第一函数名转换后内容不变,所以“eval”直接转换为“eval”,所以表6中的第六行样本的第一个样本为“eval”。

在第一代码段的第二行代码中,“‘0x90909090…….’”为变量名“j”的赋值,而且变量名“j”的赋值为不可见字符串。根据第五转换规则可以得知,将变量名“j”的赋值加入第一检测样本中,即可得到表6中的第一检测样本的第七行样本“0x90909090…….”。

在第一代码段的第四行代码中,“‘\u006d\u0061\u006c\u0077\u0061\u0072\u0065......'”为变量名“r”的赋值,而且变量名“r”的赋值为可见字符串。根据第六转换规则可以得知,按照预定编码格式将变量名“r”的赋值转换为第一字符串“malware......”,并将第一字符串“malware......”加入第一检测样本中,即可得到表6中的第一检测样本的第八行样本“malware......”。

通过表3至表6所示的示例,本申请实施例说明了通过至少一个代码转换规则如何将第一代码段中的代码转换成第一检测样本。当然,至少一个代码转换规则并不局限于已经提供的七个转换规则。

请参见图3所示,图3为本申请实施例提供的另一种恶意脚本代码检测方法的流程图,图3所示的方法为建立图2的S103中提到的恶意脚本特征库的过程。图3所示的方法包括以下步骤S201至S204。

S201、获取恶意脚本文件集合。

其中,恶意脚本文件集合包括一个或多个恶意脚本文件,每个恶意脚本文件中均包括恶意代码,恶意代码指的是使计算机设备感染病毒或木马的具有危险性的代码。

例如,假设预先收集多个恶意脚本文件,并确认每个恶意脚本文件中均具有恶意代码。然后,将多个恶意脚本文件添加至恶意脚本文件集合中。当然,可以定期的向恶意脚本文件集合中添加一些新的恶意脚本文件。

S202、在恶意脚本文件集合中选择一个恶意脚本文件。

其中,恶意脚本文件集合中的每个恶意脚本文件均会执行S203和S204的步骤。

S203、根据至少一个代码转换规则,对被选中的恶意脚本文件的代码段中的代码进行转换,基于转换结果得到恶意特征样本。

其中,图3的S203与图2的S102的执行过程是类似的,关于图3的S203的详细内容请参见图2的S102的详细描述。

S204、将得到的恶意特征样本作为一个恶意特征加入恶意脚本特征库。

其中,在得到恶意特征样本以后,便可以将恶意特征样本添加到恶意脚本特征库中。

在图3所示的实施例中,本申请实施例将恶意脚本文件集合中的每个恶意脚本文件的代码全部转换成多个恶意特征样本,并将多个恶意特征样本添加到恶意脚本特征库,从而使得恶意脚本特征库中掌握了大量的恶意代码的程序结构。在需要确定待检测的脚本文件中是否存在恶意代码时,便可根据至少一个代码转换规则将待检测的脚本文件的第一代码段转换成第一检测样本,并将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配。如果第一检测样本与恶意脚本特征库中的第一恶意特征,说明待检测的脚本文件的第一代码段的程序结构与第一恶意特征对应的第一已知恶意代码的程序结构相同,所以能够确定待检测的脚本文件中存在恶意代码。因此,本申请实施例能够利用建立恶意脚本特征库,以使本申请实施例提供的恶意脚本代码检测方法能够利用恶意脚本特征库,来识别出经过混淆处理的代码是否为恶意代码。

相应地,本申请实施例提供了一种计算机设备,用以执行上述各个实施例提供的远程控制检测方法。图4为本申请实施例提供的一种计算机设备的结构示意图。计算机设备包括处理器131和存储器132。可选地,计算机设备还包括网络接口133。

处理器131是一个或多个CPU。可选的,该CPU为单核CPU或多核CPU。

存储器132包括但不限于是随机存取存储器(random access memory,RAM)、只读存储器(Read only Memory,ROM)、可擦除可编程只读存储器(erasable programmableread-only memory,EPROM或者快闪存储器)、快闪存储器、或光存储器等。存储器132中保存有操作系统的代码。

网络接口133是有线接口,例如光纤分布式数据接口(Fiber Distributed DataInterface,FDDI)、千兆以太网(Gigabit Ethernet,GE)接口;网络接口133也可以是无线接口。网络接口133用于接收来自于内部网络和/或外部网络的数据流,根据处理器131的指示与内部网络中的交换机进行通信。

可选地,处理器131通过读取存储器132中保存的指令实现上述实施例中的方法,或者,处理器131也可以通过内部存储的指令实现上述实施例中的方法。在处理器131通过读取存储器132中保存的指令实现上述实施例中的方法的情况下,存储器132中保存实现本申请上述实施例提供的方法的指令。

处理器131执行存储器132中存储的指令后,使得计算机设备执行以下操作:获取待检测的脚本文件,脚本文件中包含第一代码段;根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征,第一恶意特征同时存在于恶意脚本特征库和第一检测样本中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的;根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

至少一个处理器131进一步根据存储器132保存的若干对应关系表(如前面实施例中的表1至表6)来执行上述方法实施例所描述的方法。处理器131实现上述功能的更多细节请参考前面各个方法实施例中的描述,在这里不再重复。

可选地,计算机设备还包括总线134,上述处理器131和存储器132通过总线134相互连接,也可以采用其他方式相互连接。

可选地,计算机设备还可以包括输入设备135和输出设备136,输入设备135用于向计算机设备输入数据,输出设备136用于输出计算机设备的处理结果。输入设备135包括但不限于键盘、触摸屏、麦克风等。输出设备136包括但不限于显示器、打印机等。

图5为本申请实施例提供的另一种计算机设备的结构示意图。该计算机设备包括获取模块141和处理模块142。

获取模块141,用于获取待检测的脚本文件,脚本文件中包含第一代码段;

处理模块142,用于根据至少一个代码转换规则,对第一代码段中的代码进行转换,基于转换结果得到第一检测样本,至少一个代码转换规则包括第一转换规则,第一转换规则包括将第一变量名转换为第一值、且将第二变量名转换为第一值,第一变量名与第二变量名不同;将第一检测样本与恶意脚本特征库中的多个恶意特征进行匹配,确定匹配中的第一恶意特征,第一恶意特征同时存在于恶意脚本特征库和第一检测样本中,第一恶意特征是根据至少一个代码转换规则对第一已知恶意代码转换得到的;根据匹配中的第一恶意特征,确定待检测的脚本文件中存在恶意代码。

获取模块141和处理模块142能够实现的附加功能、实现上述功能的更多细节请参考前面各个方法实施例中的描述,在这里不再重复。

图5所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。

图5中上述各个模块既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。例如,采用软件实现时,获取模块141和处理模块142可以是由图4中的处理器131读取存储器中存储的程序代码后,生成的软件功能模块来实现。图5中上述各个模块也可以由计算机设备中的不同硬件分别实现,例如获取模块141由图4中的网络接口133实现,而处理模块142由图4中处理器131中的部分处理资源(例如多核处理器中的其他核),或者采用现场可编程门阵列(Field-Programmable Gate Array,FPGA)、或协处理器等可编程器件来完成。显然上述功能模块也可以采用软件硬件相结合的方式来实现,例如获取模块141由网络接口133实现,而处理模块142是由CPU读取存储器中存储的指令后生成的软件功能模块。

图5中装置可以实现的其他附加功能、与其他网元设备的交互过程、以及能够实现的技术效果、以及获取模块141和处理模块142实现上述功能的更多细节请参考前面各个方法实施例中对于计算机设备的描述,在这里不再赘述。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员将会理解,当使用软件实现本申请实施例的各个方面、或各个方面的可能实现方式时,上述各个方面、或各个方面的可能实现方式可以全部或部分地以计算机程序产品的形式实现。计算机程序产品是指存储在计算机可读介质中的计算机可读指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。

计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包括但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合。如计算机可读存储介质为随机存取存储器(Random Access Memory,RAM)、只读存储器(read only memory,ROM)、可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)或便携式只读存储器(Compact Disc Read-OnlyMemory,CD-ROM)。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本申请的这些修改和变型属于本发明权利要求的范围之内,则本发明也意图包括这些改动和变型在内。

相关技术
  • 一种恶意脚本代码检测方法及装置
  • 基于代码语法分析器的网站恶意代码检测方法及装置
技术分类

06120112941212