一种恶意文件的检测方法及装置与流程

文档序号:11432529阅读:319来源:国知局
一种恶意文件的检测方法及装置与流程

本申请涉及计算机技术,特别涉及一种恶意文件的检测方法及装置。



背景技术:

超文本预处理器(hypertextpreprocessor,php)语言是一种弱类型编程语言,支持大量的灵活语法格式,熟练掌握php编程语言的恶意攻击者可以通过充分利用php的语言特性,编写出大量的网页后门(webshell)文件对目标脚本文件进行攻击。

现有技术下,通常是由云服务器在主机层面采用webshell检测引擎对webshell进行检测,而webshell检测引擎的运行原理是基于预设的字符串、正则规则对目标脚本文件进行排查,判断其中是否包含有webshell。

然而,无论是字符串还是正则规则,其配置方式过多地依赖于管理人员对php语言本身以及webshell变形方式的理解,存在一定的主观性,因而,webshell检测引擎在采用预设的字符串和正则规则进行webshell排查时,并不能覆盖到所有类型的webshell,存在一定程序的漏检。

另一方面,目前还大量存在“绕过”技术,即通过特殊的语法构造,躲过webshell检测引擎的检测,这也会造成webshell检测引擎的漏检。

由此可见,现有技术下,webshell检测引擎的检测准确性并不高,需要进行优化。



技术实现要素:

本申请实施例提供一种恶意文件检测方法及装置,用于提高webshell的检测准确性。

本申请实施例提供的具体的技术方案如下:

一种恶意文件的检测方法,包括:

将所述第一参数集合作为输入参数,执行指定的目标脚本文件;

当确定目标脚本文件在执行所述第一函数集合中的任意一个函数的过程中,使用了所述第一参数集合中的任意一个参数时,判定所述目标脚本文件为恶意文件;其中,所述第一参数集合中记录的每一个参数均被设置污点标记,所述第一函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

较佳的,所述第一参数集合中记录的参数为超全局变量。

较佳的,将所述第一参数集合作为输入参数,执行指定的目标脚本文件之前,进一步包括:

基于所述第一函数集合中的每一个函数,将待测试的目标脚本文件中对应的函数插入hook检测代码。

较佳的,执行指定的目标脚本文件之前,进一步包含:

将所述目标脚本文件与预设的第一白名单及第一黑名单进行匹配,判定所述目标脚本文件未记录在所述第一白名单及第一黑名单时,确定能够执行所述目标脚本文件。

较佳的,执行指定的目标脚本文件之前,进一步执行以下操作中的一种或任意组合:

将目标脚本文件与预设的第一一句话webshell集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一一句话webshell集合用于描述恶意程序的模式特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第一多模正则规则集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件 与预设的第一大马恶意样本集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,所述方法应用于客户端侧或者云服务器侧。

较佳的,若所述方法应用于客户端侧,则判定目标脚本文件不为恶意文件后,进一步包括:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作中的一种或任意组合:

将目标脚本文件与预设的第二一句话webshell集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件;其中,所述第二一句话webshell集合用于描述恶意程序的型号特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第二多模正则规则集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的第二大马恶意样本集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,若所述方法应用于客户端侧,则判定目标脚本文件不为恶意文件后,进一步包括:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作:

将第二参数集合作为输入参数,执行所述目标脚本文件;

确定所述目标脚本文件在执行所述第二函数集合中的任意一个函数的过程中,使用了所述第二参数集合中的任意一个参数时,确定所述目标脚本文件为恶意文件;

其中,所述第二参数集合中记录的每一个参数均被设置污点标记,所述第二函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

一种恶意文件的检测装置,包括:

执行单元,用于将所述第一参数集合作为输入参数,执行指定的目标脚本文件;

判定单元,用于当确定目标脚本文件在执行所述第一函数集合中的任意一个函数的过程中,使用了所述第一参数集合中的任意一个参数时,判定所述目标脚本文件为恶意文件;其中,所述第一参数集合中记录的每一个参数均被设置污点标记,所述第一函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

较佳的,所述第一参数集合中记录的参数为超全局变量。

较佳的,将所述第一参数集合作为输入参数,执行指定的目标脚本文件之前,所述执行单元进一步用于:

基于所述第一函数集合中的每一个函数,将待测试的目标脚本文件中对应的函数插入hook检测代码。

较佳的,执行指定的目标脚本文件之前,所述执行单元进一步用于:

将所述目标脚本文件与预设的第一白名单及第一黑名单进行匹配,判定所述目标脚本文件未记录在所述第一白名单及第一黑名单时,确定能够执行所述目标脚本文件。

较佳的,执行指定的目标脚本文件之前,所述执行单元进一步执行操作中的一种或任意组合:

将目标脚本文件与预设的第一一句话webshell集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一一句话webshell集合用于描述恶意程序的模式特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第一多模正则规则集合 进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的第一大马恶意样本集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,所述测试装置为客户端,或者,为云服务器。

较佳的,若所述装置为客户端,则所述判定单元判定目标脚本文件不为恶意文件后,所述执行单元进一步用于:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作中的一种或任意组合:

将目标脚本文件与预设的第二一句话webshell集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件;其中,所述第二一句话webshell集合用于描述恶意程序的型号特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第二多模正则规则集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的第二大马恶意样本集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,若所述装置为客户端,则所述判定单元判定目标脚本文件不为恶意文件后,所述执行单元进一步用于:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作:

将第二参数集合作为输入参数,执行所述目标脚本文件;

确定所述目标脚本文件在执行第二函数集合中的任意一个函数的过程中,使用了所述第二参数集合中的任意一个参数,确定所述目标脚本文件为恶意文件;

其中,所述第二参数集合中记录的每一个参数均被设置污点标记,所述第二函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

本申请实施例中,在主机层面重新设计一个轻量级php语法编译器/解释器,以实现对目标脚本文件的动态检测,即对关键参数设置污点标记,再以关键参数作为输入参数,执行目标脚本文件,以及通过对目标脚本文件中的关键函数进行hook,判断关键函数执行过程中是否使用到了设置了污点标记的关键参数,从而判断目标脚本文件中是否存在变形webshell,这样,便从webshell的本质出发,抓住了webshell的运行关键点,无论webshel如何变形,均可以准确地检测出webshell,有效地提高了检测精准度及检测效率,避免了漏检及误报,另一方面,采用本申请实施例提供的技术方案,人需使用简单的php工具即可完成webshell的检测,无需使用庞杂的检测算法,即降低了检测复杂度,也降低了后期运维成本。

附图说明

图1为本申请实施例中测试装置为客户端时恶意文件检测流程示意图;

图2为本申请实施例中测试装置为云服务器时恶意文件检测流程示意图;

图3为本申请实施例中测试装置功能结构示意图。

具体实施方式

为了提高webshell的检测准确性,本申请实施例中,基于对webshell变形本质的理解,重新设计了一种基于php虚拟机沙箱的检测方法,即预先针对指定的输入参数设置污点标记,再通过在目标脚本文件中的目 标函数中插入hook检测代码,检测目标函数是否使用了携带污点标记的输入参数,根据检测结果判断目标脚本文件是否包含了webshell。

下面结合附图对本申请优选的实施方式进行详细说明。

目前,网上流行的webshell的演变方式虽然多种多样,但经归纳总结后发现它们都具有一些共同的特点:

1)接收超全局变量作为输入参数。

2)在命令执行部分,部分相关函数会使用超全局变量作为输入参数。

基于上述特点,本申请实施例中,设计了一种新的php测试工具,重写了php内核代码,用于在目标脚本文件中针对与命令执行相关的函数插入hook检测代码,从而实现对输入参数进行污点标记检测,以判断当前输入参数是否是通过指定的超全局变量传入,进而判断当前的目标脚本文件是否具有可疑行为。

本申请实施例中,测试流程即可以在客户端侧执行,也可以在网络侧执行,即测试装置既可以是客户端也可以是云服务器,还可以是客户端+云服务器的服务结构。下面对这两种情况分别进行详细介绍。

第一种情况下,假设测试装置1为客户端(如,pc机,笔记本电脑,平板电脑等等)。

参阅图1所示,测试装置1进行恶意文件检测的具体流程如下:

步骤100:测试装置1确定文件发生变动时,获取目标脚本文件。

实际应用中,测试装置1可以通过客户端操作系统提供的用于文件变动操作事件通知的api,实时地获取指定监控目录的文件变动情况(如,创建,更新等等),确定文件发生变动时,获取目标脚本文件,所谓的目标脚本文件可以是指定监控目录下已有的但更新后的脚本文件,也可以是指定监控目录下最新创建的脚本文件等等。

步骤101:测试装置1对目标脚本文件进行编码预处理。

由于目标脚本文件中可能会存在采用指定语言编码后的代码部分,因此, 为了后续脚本执行过程的顺利进行,测试装置1需要提前对目标脚本文件进行编码预处理,即对目标脚本文件进行解码,例如,对经vbscript、utf7编码后的文件进行解码。

步骤102:测试装置1对目标脚本文件进行规范化处理。

由于目标脚本文件中可能会存在采用不规范的语法编写的代码部分,因此,为了后续脚本执行过程的顺利进行,测试装置1需要提前对目标脚本文件进行规范化处理,如,基于动态服务器页面(activeserverpage,asp)的标准语法规则或php的标准语法规则,对目标脚本文件中的相关语句进行语法规范化处理。

当然,在正式进行检测之前,测试装置1可以采用白名单1和黑名单1对目标脚本文件进行匹配,确定目标脚本文件未记录在白名单1和黑名单1中时,再执行后续的步骤103。所谓的白名单1和黑名单1可以是测试装置1根据之前的测试经验总结的可信名单和不可信名单,如果目标脚本文件的相关信息记录在这两份名单中的任意一份名单内,则可以直接确定目标脚本文件是否为恶意文件。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

当然,若预先已确定目标脚本文件为新创建的文件,则也可以不采用白名单1和黑名单1进行筛选,在此不再赘述。

步骤103:测试装置1加载对应目标脚本文件预设的规则配置文件。

较佳的,在执行步骤103之后,在执行步骤104之前,可以将目标脚本文件与预设的一句话webshell集合1进行匹配,判定未匹配成功时,确定能够执行后续操作步骤,其中,一句话webshell集合1用于描述恶意程序的模式特征。

本申请实施例中,所谓的一句话webshell,如,<?phpeval($_post[‘op’]);?>是一种极其精简短小的webshell木马,由于体积小,攻击者可以将其插入在脚本文件的任意位置,达到不被注意的目的,因此,在 正式进行测试之前,可以先通过预设的一句话webshell集合1(包含至少一条一句话webshell)对目标脚本文件进行筛选,如果命中(即确定目标脚本文件符合一句话webshell集合1描述的木马特征,如,文件的型号符合一句话webshell集合1的描述),则可以直接确定目标脚本文件为恶意文件,从而节省了后续的测试步骤。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

当然,若预先已确定目标脚本文件必定不存在任意一种一句话webshell,则也可以不使用一句话webshell集合1进行筛选,在此不再赘述。

步骤104:测试装置1获取目标脚本文件对应的多模正则规则集合1。

本实施例中,不同类型的目标脚本文件对应不同的多模正则规则集合,因此,测试装置1需要加载规则配置文件,然后根据目标脚本文件的后缀选取对应的多模正则规则集合(后续均称为多模正则规则集合1),其中,多模正则规则集合1用于描述恶意程序的内容特征。

例如,测试装置1使用的客户端的多模正则规则集合1为:

规则1:

<rule>[^\w](eval|assert|popen|proc_open|shell_exec|passthru|system)\(([^\(\),]*)(\$_get|\$_cookie|\$_post|\$_session|\$_request)\[(.{1,20})\]\)</rule>

上述多模正则规则表示:字符串中出现由eval、assert、popen、proc_open、shell_exec、passthru、system其中任意一个代表的函数名,并且其输入参数为$_get、$_cookie、$_post、$_session、$_request其中的任意一个。

规则2:

<rule>[^\w](eval|assert)\(\$_(get|post|request)\[.{0,34}\]\)</rule>

上述多模正则规则表示:字符串中出现由eval、assert其中任意一个代表的函数名,并且其输入参数为$_get、$_post、$_request其中任意一个,这3个参数都代表着php中的超全局数组,并且其索引下标元素字符串的长 度为1到34个字符之间。

步骤105:测试装置1采用获取的多模正则规则集合1对目标脚本文件进行匹配。

与现有技术下采用的单模正则规则相比,多模正则规则集合可以从多方面来描述webshell的恶意特征,因此,具有更高的匹配精准度。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

当然,若目标脚本文件数量不多,或者,已预先获知无需采用多模正则规则进行筛选,则也可以不使用多模正则规则集合1进行匹配,在此不再赘述。

步骤106:测试装置1判断是否命中(即是否匹配成功);若是,则执行步骤110,否则,执行步骤107。

进一步地,在执行步骤106之后,在执行步骤107之前,测试装置1还可以进一步采用模糊化哈希(hash)算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的大马恶意样本集合1进行匹配,判定匹配成功时,确定目标脚本文件为恶意文件,其中,大马恶意样本集合1为具有完备功能的恶意脚本文件集合。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

模糊化hash算法是一种开源标准化相似度比较算法,该算法通过对目标文件进行分段hash计算,然后综合判断所有各段的相似度结果,对局部性、微小修改的两个文本能计算出较高的相似度,具有较好的容忍度。而所谓大马,是指用php等脚本编程语言编写出的具有相当完备功能的脚本文件,其中实现了完整的网站管理功能,例如,文件管理、数据库操作等,可以被黑客利用进行重复入侵利用,和一句话webshell最大的区别在于大马没有明显的恶意代码特征,安全运维人员很容易将其误认为是正常的网站后台管理文件,因此,可以理解大马是webshell的一种变形。

因此,本申请实施例中,可以引入模糊化hash算法,对大马进行检测, 由于模糊化hash算法对目标脚本文件的微小改动具有较好的容错性,即使攻击者对大马的局部代码或部分代码特征进行修改,通过模糊化hash算法和安全人员已知的样本库进行相似度比较,仍然能够获得较高的检测成功率。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

当然,若目标脚本文件数量不多,或者,已预先确定不存在大马恶意文件时,则也可以不使用模糊化hash算法进行排查,在此不再赘述。

步骤107:测试装置1目标脚本文件进行php测试。

具体的,在执行步骤107时,可以基于php虚拟机沙箱技术实现php检测,具体如下:

首先,测试装置1对php虚拟机进行必要的初始化工作,申请必要的内容及相应的数据结构。

其次,测试装置1对参数集合1中超全局变量设置污点标记。

其中,所谓的超全局变量即是php语言中预定义的几个全局变量,超全局变量在php脚本文件的全部作用域中均可使用,不需要特别说明,就可以在函数及类中使用。

可选的,本申请实施例中,超全局变量可以包含以下参数中的任意一种或组合:$_server、$_post、$_get、$_cookies和$_files;参数集合1中的所有元素都被设置污点标记,即向每一个参数赋值一个特殊的标记字符串。

再次,测试装置1基于函数集合1,在目标脚本文件中对相应的函数加入hook检测代码,这样,在执行目标脚本文件时,可以检测传入的参数是否包含污点标记,其中,被设置了hook检测代码的函数均为脚本文件运行过程中能够使用的命令函数;例如:

vm_builtin_eval;

m_builtin_assert;

caseph7_op_call;

vm_builtin_require;

vm_builtin_require_once;

vm_builtin_include;

vm_builtin_include_once;

vm_builtin_ob_start;

vm_builtin_json_decode;

vm_builtin_extract;

vm_builtin_call_user_func。

最后,测试装置1将参数集合1作为输入参数执行目标脚本文件,在执行过程中,如果测试装置1在设置有hook检测代码的任意一个函数中发现传入的参数中包含污点标记(即发现任意一个函数使用了参数集合1中的参数),则说明目前脚本文件在进行危险操作,即确定检测到webshell,因为,其执行过程将外部传入的被设置有污点标记的参数直接带入了较为敏感的函数执行过程。

步骤108:测试装置1判断是否命中(即是否测试到webshell);若是,则执行步骤110,否则,执行步骤109。

步骤110:测试装置1向云服务器上报目标脚本文件的相关信息,即向云服务器报告目标脚本文件是否为恶意文件。

相应的,云服务器获得测试装置1上报的目标脚本文件后,若获知目标脚本文件已被判定为包含有webshell的恶意文件,则记录在样本库中,若获知目标脚本文件未被判定为包含有webshell的恶意文件,则会进一步地对目标脚本文件进行排查,由于云服务器处于网络侧,可以收集各个客户端上报的恶意文件,因此,云服务器的样本库更为精准,排查的准确度也越高。因而,可以在客户端无法确定的情况下,云服务器可以进一步协助进行仲裁,这一点将在后续实施例中进行说明。

对应上述第一种情况,在第二种情况下,假设测试装置2云服务器。云服务器既可以单独针对目标脚本文件进行websehll检测,其具体过程参照步骤100-步骤110相类似,也可以在步骤100-步骤110的基础上作进一步仲裁,本实施例中,以进一步仲裁为例进行说明。

参阅图2所示,测试装置2进行恶意文件检测的具体流程如下:

步骤200:测试装置2获取目标脚本文件。

本实施例中,假设测试装置2是云服务器,并且假设测试装置2是接收测试装置1上报的目标脚本文件后作进一步仲裁,因此,测试装置2是通过测试装置1获取目标脚本文件。

而实际应用中,若测试装置2单独执行检测任务,则也可以通过实时监控获取指定监控目录的文件变动情况(如,创建,更新等等),确定文件发生变动时,获取目标脚本文件,在此不再赘述。

步骤201:测试装置2判断目标脚本文件是否存在于预设的白名单2中?若是,则执行步骤210;否则,执行步骤202。

步骤202:测试装置判断目标脚本文件是否存在于预设的黑名单2中,若是,则执行步骤211;否则,执行步骤203。

从步骤201和步骤202可以看出,测试装置2在云端维护了的一套非黑即白的海量恶意文件hash库,可以对目标脚本文件对待检测样本先进行一次hash快速匹配,采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

相较于白名单1和黑名单1,云端维护的白名单2和黑名单2的精准度更高,仲裁结果更为准确,因此,即使在测试装置1上经过黑白名单的筛选,在云端也可以再次进行一次黑白名单的筛选。

另一方面,本实施例是以测试装置2针对测试装置1上报的目标脚本文件作进一步仲裁为例进行介绍,因此,将测试装置2使用的黑白名单称为白名单2和黑名单2以示区分。而实际应用中,若测试装置2单独执行检测任务,则 也可以将测试装置2使用的黑白名单称为白名单1和黑名单1,在此不再赘述。

当然,若预先已确定目标脚本文件为新创建的文件,则也可以不采用白名单2和黑名单2进行筛选,在此不再赘述。

步骤203:测试装置2确定目标脚本文件在上报源(即测试装置1)执行php检测时未命中。

如果上报源执行php检测时命中,则测试装置会将目标脚本文件直接记载至数据库。

步骤204:测试装置2判断目标脚本文件是否命中预设的一句话webshell集合2,若是,则执行步骤205;否则,执行步骤206。

其中,一句话webshell集合2用于描述恶意程序的模式特征,如文件型号(size),因为有些目标脚本文件看似完整,打开后里面却通常只有一行代码,这种通常情况下都是websehll,因此,通过文件size便可以初步判断是否是恶意文件。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

相较于一句话webshell集合1,云端维护的一句话webshell集合2的精准度更高,仲裁结果更为准确,因此,即使在测试装置1上经过一句话webshell集合1的筛选,在云端也可以再次进行一次一句话webshell集合2的筛选。

另一方面,本实施例是以测试装置2针对测试装置1上报的目标脚本文件作进一步仲裁为例进行介绍,因此,称测试装置2使用的是一句话webshel集合2以示区分。而实际应用中,若测试装置2单独执行检测任务,则也可以称测试装置2使用的是一句话webshell集合1,在此不再赘述。

当然,若预先已确定目标脚本文件必定不存在任意一种一句话webshell,则也可以不使用一句话webshell集合2进行筛选,在此不再赘述。

步骤205:测试装置2确定删除webshell。

本申请实施例中,删除webshell是确定存在websehll时一种特殊的操作方式,只针对一句话webshell适用,这么做的目的是出于以下几个方面考虑:

1、攻击者往往会将恶意代码插入到被害用户的正常网站文件中,导致产品虽然检测出相关样本存在恶意行为,也无法执行删除工作

2、同时存在另一类样本,其自身就是一个纯粹的恶意文件,即是一个独立的包含恶意代码的文件,删除此类文件不影响用户网站的正常运行,所以将这类样本单独分出来,执行删除操作,直接从用户机器上删除此类文件,阻止此类文件给用户带来进一步损失。

步骤206:测试装置2获取目标脚本文件对应的多模正则规则集合2对目标脚本文件进行匹配。

本实施例中,不同类型的目标脚本文件对应不同的多模正则规则集合,因此,测试装置2需要根据目标脚本文件的后缀获取相应的多模正则规则集合2来执行匹配操作。

测试装置2在云端维护的规则配置方式相较于测试装置1,其差别在于检测强度不同,测试装置1使用的客户端的多模正则规则集合1相当于一个粗粒度网,会将大量可疑的目标脚本文件都进行上报,而测试装置2使用的云端的多模正则规则集合2相当于一张细粒度网,会筛选出真正存在webshell的恶意文件,以防止漏报。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

例如,测试装置2使用的云端的多模正则规则集合2为:

规则1:

<rule>function\\s{0,}(lambda_n).*?</rule>

上述多模正则规则表示:字符中出现名字为lambda_n的函数声明。

规则2:

<rule>[^\w](eval|assert|popen|proc_open|shell_exec|passthru|system)\(([^\(\) ,]*)(\$_get|\$_cookie|\$_post|\$_session|\$_request)\[(.{1,20})\]\)</rule>

上述多模正则规则表示:字符串中出现由eval、assert、popen、proc_open、shell_exec、passthru、system其中任意一个代表的函数名,并且其输入参数为$_get、$_cookie、$_post、$_session、$_request其中任意一个。

规则3:

<rule>\\1\\(\\\s{0,}\)</rule>

上述多模正则规则表示:字符串中出现名字为lambda_n的函数声明,并且在其他地方出现了lambda_n()这种函数调用的代码结构。

测试装置1和测试装置2使用的不同检测强度的多模正则规则集合,均可以通过编写php扩展脚本来实现。

另一方面,本实施例是以测试装置2针对测试装置1上报的目标脚本文件作进一步仲裁为例进行介绍,因此,称测试装置2使用的是多模正则规则集合2以示区分。而实际应用中,若测试装置2单独执行检测任务,则也可以称测试装置2使用的是多模正则规则集合1,在此不再赘述。

当然,若目标脚本文件数量不多,或者,已预先获知无需采用多模正则规则进行筛选,则也可以不使用多模正则规则集合2进行匹配,在此不再赘述。

步骤207:测试装置2判断是否命中(即是否匹配成功),若是,则执行步骤211;否则,执行步骤208。

进一步地,在执行步骤207之后,在执行步骤208之前,测试装置2还可以进一步采用模糊化hash算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的大马恶意样本集合2进行匹配,判定匹配成功时,确定目标脚本文件为恶意文件,其中,大马恶意样本集合2为具有完备功能的恶意脚本文件集合。采用这种方式,在存在大量的目标脚本文件时,可以预先过滤掉一部分目标脚本文件,以提高测试效率。

相较于大马恶意样本集合1,云端维护的大马恶意样本集合2的精准度更 高,仲裁结果更为准确,因此,即使在测试装置1上经过大马恶意样本集合1的筛选,在云端也可以再次进行一次大马恶意样本集合2的筛选。

另一方面,本实施例是以测试装置2针对测试装置1上报的目标脚本文件作进一步仲裁为例进行介绍,因此,称测试装置2使用的是大马恶意样本集合2以示区分。而实际应用中,若测试装置2单独执行检测任务,则也可以称测试装置2使用的是大马恶意样本集合1,在此不再赘述。

当然,若目标脚本文件数量不多,或者,已预先确定不存在大马恶意文件时,则也可以不使用模糊化hash算法进行排查,在此不再赘述。

步骤208:测试装置2目标脚本文件进行php测试。

具体的,在执行步骤208时,可以基于php虚拟机沙箱技术实现php检测,具体如下:

首先,测试装置2对参数集合2中超全局变量设置污点标记,其中,所谓的超全局变量可以包含以下参数中的任意一种或组合:$_server、$_post、$_get、$_cookies和$_files;参数集合2中的所有元素都被设置污点标记,即向每一个参数赋值一个特殊的标记字符串。

其次,测试装置2基于函数集合2,在目标脚本文件中对相应的函数加入hook检测代码,这样,在执行目标脚本文件时,可以检测传入的参数是否包含污点标记,其中,被设置了hook检测代码的函数均为脚本文件运行过程中能够使用的命令函数;例如:

vm_builtin_eval;

m_builtin_assert;

caseph7_op_call;

vm_builtin_require;

vm_builtin_require_once;

vm_builtin_include;

vm_builtin_include_once;

vm_builtin_ob_start;

vm_builtin_json_decode;

vm_builtin_extract;

vm_builtin_call_user_func。

最后,测试装置2将参数集合2作为输入参数执行目标脚本文件,在执行过程中,如果测试装置2在设置有hook检测代码的任意一个函数中发现传入的参数中包含污点标记(即发现任意一个函数使用了参数集合2中的参数),则说明目前脚本文件在进行危险操作,即确定检测到webshell,因为,其执行过程将外部传入的被设置有污点标记的参数直接带入了较为敏感的函数执行过程。

实际应用中,相较于参数集合1和函数集合1,参数集合2和函数集合2可以设置得更为精细,因此,在测试装置1上对目标脚本文件进行php测试后,在测试装置2上还是可以再进行一次php测试,以提高测试精准度。

另一方面,本实施例是以测试装置2针对测试装置1上报的目标脚本文件作进一步仲裁为例进行介绍,因此,称测试装置2使用的是参数集合2和函数集合2以示区分。而实际应用中,若测试装置2单独执行检测任务,则也可以称测试装置2使用的是参数集合1和函数集合1,在此不再赘述。

步骤209:测试装置2判断是否命中(即是否测试到webshell);若是,则执行步骤211,否则,执行步骤210。

步骤210:测试装置2确定目标脚本文件中不存在webshell。

步骤211:测试装置2确定目标脚本文件中存在webshell。

基于上述实施例,参阅图3所示,本申请实施例中,测试装置至少包括执行单元30和判定单元31,其中,

执行单元30,用于将第一参数集合作为输入参数,执行指定的目标脚本文件;

判定单元31,用于当确定目标脚本文件在执行第一函数集合中的任意一个 函数的过程中,使用了所述第一参数集合中的任意一个参数时,判定所述目标脚本文件为恶意文件;其中,所述第一参数集合中记录的每一个参数均被设置污点标记,所述第一函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

较佳的,所述第一参数集合中记录的参数为超全局变量。

较佳的,将所述第一参数集合作为输入参数,执行指定的目标脚本文件之前,执行单元30进一步用于:

基于所述第一函数集合中的每一个函数,将待测试的目标脚本文件中对应的函数插入hook检测代码。

较佳的,执行指定的目标脚本文件之前,执行单元30进一步用于:

将所述目标脚本文件与预设的第一白名单及第一黑名单进行匹配,判定所述目标脚本文件未记录在所述第一白名单及第一黑名单时,确定能够执行所述目标脚本文件。

执行指定的目标脚本文件之前,执行单元30进一步执行操作中的一种或任意组合:

将目标脚本文件与预设的第一一句话webshell集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一一句话webshell集合用于描述恶意程序的模式特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第一多模正则规则集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的第一大马恶意样本集合进行匹配,判定未匹配成功时,确定能够执行所述目标脚本文件,其中,所述第一大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,所述测试装置为客户端,或者,为云服务器。

较佳的,若测试装置装置为客户端,则判定单元31判定目标脚本文件不为恶意文件后,执行单元30进一步用于:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作中的一种或任意组合:

将目标脚本文件与预设的第二一句话webshell集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件;其中,所述第二一句话webshell集合用于描述恶意程序的型号特征;或者,

将目标脚本文件与对应所述目标脚本文件预设的第二多模正则规则集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二多模正则规则集合用于描述恶意程序的内容特征;或者,

采用模糊化哈希算法对目标脚本文件进行处理,将处理后的目标脚本文件与预设的第二大马恶意样本集合进行匹配,判定匹配成功时,确定所述目标脚本文件为恶意文件,其中,所述第二大马恶意样本集合为具有完备功能的恶意脚本文件集合。

较佳的,若所述装置为客户端,则判定单元31判定目标脚本文件不为恶意文件后,执行单元30进一步用于:

将目标脚本文件的相关信息上报至云服务器,触发云服务器执行以下操作:

将第二参数集合作为输入参数,执行所述目标脚本文件;

确定所述目标脚本文件在执行第二函数集合中的任意一个函数的过程中,使用了所述第二参数集合中的任意一个参数,确定所述目标脚本文件为恶意文件;

其中,所述第二参数集合中记录的每一个参数均被设置污点标记,所述第二函数集合中记录的每一个函数均为脚本文件运行过程中能够使用的命令函数。

综上所述,本申请实施例中,在主机层面重新设计一个轻量级php语法 编译器/解释器,以实现对目标脚本文件的动态检测,即对关键参数设置污点标记,再以关键参数作为输入参数,执行目标脚本文件,以及通过对目标脚本文件中的关键函数进行hook,判断关键函数执行过程中是否使用到了设置了污点标记的关键参数,从而判断目标脚本文件中是否存在变形webshell,这样,便从webshell的本质出发,抓住了webshell的运行关键点,无论webshel如何变形,均可以准确地检测出webshell,有效地提高了检测精准度及检测效率,避免了漏检及误报,另一方面,采用本申请实施例提供的技术方案,人需使用简单的php工具即可完成webshell的检测,无需使用庞杂的检测算法,即降低了检测复杂度,也降低了后期运维成本。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使 得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1