具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种基于云的webshell攻击检测方法,如图1所示,该方法包括:
101、截获向网站服务器发送的脚本文件。
当外部(包括一般用户、黑客等)向网站服务器发送脚本文件时,需要经过网关,因此当该脚本文件到达网关时,网关可以对该脚本文件进行截获,以便对该脚本文件进行安全性的检测,从而保证达到网站服务器侧的脚本文件是安全的。
需要说明的是,上述脚本文件可以为asp(active server pages,动态服务器页面)文件、php(hypertext preprocessor,超文本预处理器)文件、jsp(java server pages,java服务器页面)文件、cgi(common gateway interface,公共网关接口)文件,或者其他格式的网页文件。
102、基于云平台检测脚本文件中是否存在预设的特征变形痕迹。
其中,特征变形痕迹为对脚本文件中的特征语句进行形式改动所产生的痕迹。特征语句可以为位于典型位置上的语句,例如含有函数的语句,也可以为具有其他特征的语句,还可以泛指可执行的代码语句。
具体的,特征变形痕迹可以为以下一个或任意多个的组合:注释语句、变量赋值字符、预设特征字符和预设特征函数名。若特征变形痕迹仅包括一项内容(如仅包括预设特征函数名),则网关仅对脚本文件进行该项内容的检测;若特征变形痕迹包括至少两项内容,则网关会分别对脚本文件进行每一项内容的检测。在实际应用中,网关可以根据预设检测顺序依次对脚本文件进行特征变形痕迹中所有内容的检测,也可以同时对脚本文件进行所有内容的检测。
需要说明的是,本步骤中提及的基于云平台主要是指网关需要先从云平台侧获取最新的特征变形痕迹、还原规则和基本特征语句,才可以对脚本文件进行检测。其中,最新的特征变形痕迹、还原规则和基本特征语句的获取方式可以为直接从云平台获取,也可以为通过云平台对本地的特征变形痕迹、还原规则和基本特征语句进行更新,其具体获取方式在此不作限定。
103、若脚本文件中存在特征变形痕迹,则根据预设的还原规则对改动过的特征语句进行还原。
其中,还原规则为特征变形规则的逆规则。当网关检测到脚本文件中存在特征变形痕迹时,说明特征语句已经按照预设的特征变形规则进行了改动。此时,网关按照特征变形规则的逆规则(还原规则)即可将改动过的特征语句进行还原,从而得到原始(改动前)的特征语句,以便进行后续步骤104、105的操作。
例如,网关检测到一条语句为“e/*aaaa*/val($_POST[‘a’]);”,通过与预设的特征变形痕迹相匹配,可知该语句中存在一种特征变形痕迹,即注释语句。该特征变形的规则为在语句中添加注释语句,因此该特征变形规则的逆规则(还原规则)为删除添加的注释语句。
104、检测还原后的特征语句是否与预设的基本特征语句相同。
其中,基本特征语句为攻击敏感语句,即由编程人员统计的能够直接确定存在webshell攻击特征的语句。在通过还原规则将改动过的特征语句还原后,可以获得原始的特征语句,此时,网关再通过与基本特征语句进行比对,就可以判断出还原后的特征语句是否为预设的基本特征语句,从而得出脚本文件是否为webshell攻击文件。
105、若还原后的特征语句与基本特征语句相同,则确定脚本文件为webshell攻击文件。
由于基本特征语句为攻击敏感语句,所以当网关检测出还原后的特征语句与基本特征语句相同时,可以确定该还原后的特征语句为攻击敏感语句,从而得知脚本文件中存在攻击敏感语句,进而确定该脚本文件为webshell攻击文件。反之,当网关检测出还原后的特征语句与基本特征语句不同时,可以确定该还原后的特征语句不是攻击敏感语句,从而得知脚本文件中不存在攻击敏感语句,进而确定该脚本文件不是webshell攻击文件。
示例性的,网关检测到“eval($/*xyz*/{“_P”.“OST”}[‘op’]);”中存在两种特征变形痕迹,分别为注释语句和预设特征字符,所以网关需要根据对应特征变形痕迹的还原规则对其进行还原。在实际应用中,对于注释语句和预设特征字符的还原规则均为删除操作,所以将注释语句与预设特征字符都删除后,得到的还原后的特征语句为“eval($_POST[‘op’]);”。将该特征语句与基本特征语句进行比较,可判断出脚本文件是否为webshell攻击文件。若基本特征语句中包含“eval($_POST[‘op’]);”,则还原后的特征语句与基本特征语句相同,从而得出该脚本文件为webshell攻击文件;若基本特征语句中不包含“eval($_POST[‘op’]);”,则还原后的特征语句与基本特征语句不同,从而还需要继续对脚本文件中的其他特征语句进行判断,才可确定该脚本文件是否为webshell攻击文件。
需要说明的是,在实际应用中,只有当网关确定其所截获的脚本文件不是webshell攻击文件时,才将该脚本文件继续上传到网站服务器,而当该脚本文件是webshell攻击文件时,不再将该脚本文件上传到网站服务器,从而保证了上传到网站服务器的脚本文件为安全的文件。
本发明实施例提供的基于云的webshell攻击检测方法,能够在外部向网站服务器发送脚本文件时,截获该脚本文件,并基于云平台先对该脚本文件进行特征变形痕迹的检测,再将改动过的特征语句进行还原,最后将还原后的特征语句与基本特征语句进行比较,若相同,则判定该脚本文件为webshell攻击文件。与现有技术中仅进行基本特征语句的检测方法相比,本发明通过先将改动后的特征语句进行还原,使得被打乱的特征语句还原为原有的特征语句,再与基本特征语句进行比对,使得隐藏在脚本文件中的基本特征语句被检测出来,从而确定该脚本文件为webshell攻击文件。
进一步的,依据上述方法实施例可知,当预设的特征变形痕迹只包含一种特征变形痕迹时,网关仅检测脚本文件中是否存在该特征变形痕迹;当预设的特征变形痕迹中包括多种特征变形痕迹时,网关会同时检测脚本文件中是否存在该多种特征变形痕迹,或者按照顺序依次检测该脚本文件中是否存在该多种特征变形痕迹。在检测出特征变形痕迹后,需要将改动过的特征语句还原,然而对于不同类型的特征变形痕迹具有不同的还原方法,下面针对不同情况进行介绍:
情况一:当特征变形痕迹包括注释语句时,网关会基于云平台检测脚本文件中是否存在注释语句。若脚本文件中存在注释语句,则将注释语句删除;若脚本文件中不存在注释语句,则无需进行注释语句的删除操作。
由于注释语句并不参与程序的执行,所以当黑客在特征语句中添加注释语句后,也不影响该特征语句本身的功能。当该特征语句为基本特征语句时,该脚本文件就是webshell攻击文件。但是在该特征语句中添加了注释语句后,改动后的特征语句就不再与基本特征语句相同了,因此需要将添加的注释语句删除,才能得到原始的特征语句,以便更精确地检测出本质上与基本特征语句相同的语句,从而避免发生webshell攻击文件漏检的现象。
在实际应用中,注释语句的检测主要是通过检测注释标识,例如:“//”、“/*”、“*/”等。例如,网关检测到一条特征语句“eva/*xxxxx*/l($_POST[‘a’]);”中包含“/*”和“*/”注释标识,则将携带有注释标识的注释语句删除,从而获得添加注释语句前的语句,即“eval($_POST[‘a’]);”。在获得改动前的特征语句后,将其与基本特征语句进行比对。若基本特征语句中包含“eval($_POST[‘a’]);”,则还原后的特征语句与基本特征语句相同,从而得出该脚本文件为webshell攻击文件;若基本特征语句中不包含“eval($_POST[‘a’]);”,则还原后的特征语句与基本特征语句不同,从而还需要继续对脚本文件中的其他特征语句进行判断,才可确定该脚本文件是否为webshell攻击文件。
情况二:当特征变形痕迹包括变量赋值字符时,网关会基于云平台检测脚本文件中是否存在变量赋值字符。若脚本文件中存在变量赋值字符,则将被赋值的变量还原;若脚本文件中不存在变量赋值字符,则无需进行变量还原操作。
在实际应用中,编程人员常常通过给特征语句中的变量赋值,即用新的变量来代替旧变量,从而使得该特征语句发生形式上的改变,而实际功能不变。在这种情况下,仅将变量赋值后的特征语句与基本特征语句进行比对,是无法检测出其隐藏的webshell攻击特征的。因此,网关需要先将被赋值的变量还原,以获得原始的特征语句,才可精确地判断出该特征语句是否为基本特征语句,从而正确地判断出该脚本文件是否为webshell攻击文件。
具体的,变量赋值字符主要包括变量赋值标识,即“=”,也可以包括其他具有赋值功能的字符,在此不作限定。
例如,脚本文件中有如下代码:
$aaa=e;
$bbb=v;
$ccc=a;
$ddd=l;
$xsser=$_POST[‘op’];
“$aaa”.“$bbb”.“$ccc”.“$ddd”($xsser);
网关在上述代码中检测到变量特征字符(即“=”),并且检测到““$aaa”.“$bbb”.“$ccc”.“$ddd”($xsser);”语句中的$aaa、$bbb、$ccc、$ddd和$xsser分别是给e、v、a、l、和$_POST[‘op’]赋的新变量,因此网关需要将这些新变量还原为原始变量,还原后的代码变为“eval($_POST[‘op’]);”,再将此特征语句与基本特征语句进行比较。若基本特征语句中包含“eval($_POST[‘op’]);”,则该脚本文件为webshell攻击文件;若基本特征语句中不包含“eval($_POST[‘op’]);”,则需要继续对脚本文件中的其他特征语句进行判断,才能确定该脚本文件是否为webshell攻击文件。
情况三:当特征变形痕迹包括预设特征字符时,网关会基于云平台检测脚本文件中是否存在预设特征字符。若脚本文件中存在预设特征字符,则将预设特征字符删除;若脚本文件中不存在预设特征字符,则无需进行预设特征字符删除操作。
在实际应用中,黑客常常通过在特征语句中添加拼接符等字符来打乱一个完整的函数名或者变量名等等,从而仅通过基本特征语句无法检测出来该特征语句中存在的webshell攻击特征,因此需要将含有预设特征字符的特征语句还原,才可更进一步地检测出该特征语句是否是含有webshell攻击特征的语句,从而判断该脚本文件是否为webshell攻击文件。
例如,网关检测到““e”.“v”.“a”.“l”($_POST[‘a’]);”中含有拼接符双引号和点,所以将该特征语句中的双引号和点删除后,可以获得原始的语句,即“eval($_POST[‘a’]);”。此时,将“eval($_POST[‘a’]);”与基本特征语句比对,若基本特征语句中包含“eval($_POST[‘a’]);”,则该脚本文件为webshell攻击文件,若基本特征语句中不包含“eval($_POST[‘a’]);”,则需要继续对脚本文件中的其他特征语句进行判断,才能确定该脚本文件是否为webshell攻击文件。
情况四:当特征变形痕迹包括预设特征函数名时,网关会基于云平台检测脚本文件中是否存在预设特征函数名。若脚本文件中存在预设特征函数名,则根据特征函数功能的逆功能对对应特征函数的语句进行还原;若脚本文件中不存在预设特征函数名,则无需进行特征函数的还原。
实际应用中,黑客常常利用一些特殊函数来对特征语句进行变形,使得特征语句本身的功能不发生改变,而仅通过基本特征语句进行检测,往往无法将其隐藏的webshell攻击特征检测出来。因此,网关需要先将经特征函数改动的特征语句还原,才可以更精确地将隐藏的webshell攻击特征检测出来,从而完成webshell攻击文件的鉴定。
具体的,预设特征函数名包括str_replace、preg_replace、pack、chr、base64_decode、strrev、str_rot13、rot_13、create_function、urldecode、strtr、gzuncompress、gzinflate和gzdecode等。每个特征函数名所对应的特征函数都具有一定的功能,因此网关通过特征函数功能的逆功能就可以将改动后的特征语句还原,从而获得原始的特征语句,以便进行后续基本特征语句的检测。
例如,脚本文件中有如下代码
$abcd=str_repalce(“abc”,“eva”,“abcl”);
$abcd($_POST[‘a’]);
网关检测到上述代码中存在str_repalce,而str_repalce函数在本语句中实现的功能为:将abcl中的abc用eva来代替,因此“$abcd($_POST[‘a’]);”实际上为“eval($_POST[‘a’]);”。由此可知,需要利用str_repalce函数功能的逆功能将“$abcd($_POST[‘a’]);”还原,从而得到“eval($_POST[‘a’]);”,再将“eval($_POST[‘a’]);”与基本特征语句比对。若基本特征语句中包括eval($_POST[‘a’]);”,则该脚本文件为webshell攻击文件;若基本特征语句中不包括eval($_POST[‘a’]);”,则不能根据上述代码判断出该脚本文件为webshell攻击文件。
又如,脚本文件中有如下代码
$xxyz=strtr(“exyz”,“xyz”,“val”);
$xxyz($_POST[‘a’]);
网关检测到上述代码中存在strtr,而strtr函数在本语句中实现的功能为:将exyz中的x、y、z分别用v、a、l来代替,因此“$xxyz($_POST[‘a’]);”实际上为“eval($_POST[‘a’]);”。由此可知,需要利用strtr函数功能的逆功能将“$xxyz($_POST[‘a’]);”还原,从而得到“eval($_POST[‘a’]);”,再将“eval($_POST[‘a’]);”与基本特征语句比对。若基本特征语句中包括eval($_POST[‘a’]);”,则该脚本文件为webshell攻击文件;若基本特征语句中不包括eval($_POST[‘a’]);”,则不能根据上述代码判断出该脚本文件为webshell攻击文件。
进一步的,在检测脚本文件中是否存在预设的特征变形痕迹之前,网关侧需要先获取特征变形痕迹、还原规则和基本特征语句,才能进行后续的检测或还原等操作。
具体的,由于云平台侧存储有在不同网站中出现的webshell攻击文件,所以云平台侧具有最全的涉及webshell攻击的特征变形痕迹、还原规则和基本特征语句。因此网关可以从云平台侧获取最新的特征变形痕迹、还原规则和基本特征语句。
具体的,若网关本地不存在特征变形痕迹、还原规则和基本特征语句,则在对脚本文件进行特征变形痕迹的检测之前,网关可以从云平台侧获取携带有最新的特征变形痕迹、还原规则和基本特征语句的文件;若网关本地存在特征变形痕迹、还原规则和基本特征语句,则网关可以通过云平台直接更新本地的特征变形痕迹、还原规则和基本特征语句,例如,通过向云平台获取更新包来更新本地的特征变形痕迹、还原规则和基本特征语句。
此外,在实际应用中,在网关截获脚本文件以后,可以直接将脚本文件上报给云平台,让云平台采用上述检测方法对该脚本文件进行检测,从而将检测结果发送给网关,以便网关确定该脚本文件是否可以继续发送给网站服务器。
进一步的,由于云平台侧需要不断的更新和完善本地的特征变形痕迹、还原规则和基本特征语句的文件,所以在网关确定脚本文件为webshell攻击文件之后,需要向云平台上报本次检测出来的webshell脚本文件,以便云平台对特征变形痕迹、还原规则和基本特征语句的文件进行更新。
进一步的,依据上述方法实施例,本发明实施例还提供了一种基于云的webshell攻击检测装置,如图2所示,该装置包括:截获单元21、检测单元22、还原单元23和确定单元24。其中,
截获单元21,用于截获向网站服务器发送的脚本文件;
检测单元22,用于基于云平台检测截获单元21截获的脚本文件中是否存在预设的特征变形痕迹,特征变形痕迹为对脚本文件中的特征语句进行形式改动所产生的痕迹;
还原单元23,用于当检测单元22检测到脚本文件中存在特征变形痕迹时,根据预设的还原规则对改动过的特征语句进行还原,还原规则为特征变形规则的逆规则;
检测单元22,还用于检测还原单元23还原后的特征语句是否与预设的基本特征语句相同,基本特征语句为攻击敏感语句;
确定单元24,用于当检测单元22检测到还原后的特征语句与基本特征语句相同时,确定脚本文件为webshell攻击文件。
进一步的,检测单元22检测的特征变形痕迹为以下一个或任意多个的组合:
注释语句、变量赋值字符、预设特征字符和预设特征函数名。
具体的,如图3所示,检测单元22,包括:
第一检测模块221,用于当特征变形痕迹包括注释语句时,基于云平台检测脚本文件中是否存在注释语句;
还原单元23,包括:
第一删除模块231,用于当脚本文件中存在注释语句时,将注释语句删除。
进一步的,如图3所示,检测单元22,包括:
第二检测模块222,用于当特征变形痕迹包括变量赋值字符时,基于云平台检测脚本文件中是否存在变量赋值字符;
还原单元23,包括:
第一还原模块232,用于当脚本文件中存在变量赋值字符时,将被赋值的变量还原。
进一步的,如图3所示,检测单元22,包括:
第三检测模块223,用于当特征变形痕迹包括预设特征字符时,基于云平台检测脚本文件中是否存在预设特征字符;
还原单元23,包括:
第二删除模块233,用于当脚本文件中存在预设特征字符时,将预设特征字符删除。
进一步的,如图3所示,检测单元22,包括:
第四检测模块224,用于当特征变形痕迹包括预设特征函数名时,基于云平台检测脚本文件中是否存在预设特征函数名;
还原单元23,包括:
第二还原模块234,当脚本文件中存在预设特征函数名时,根据特征函数功能的逆功能对对应特征函数的语句进行还原。
进一步的,如图3所示,该装置进一步包括:
获取单元25,用于在检测单元22检测脚本文件中是否存在预设的特征变形痕迹之前,向云平台获取特征变形痕迹、还原规则以及基本特征语句;
更新单元26,用于在检测单元22检测脚本文件中是否存在预设的特征变形痕迹之前,通过云平台更新本地缓存的特征变形痕迹、还原规则以及基本特征语句。
进一步的,如图3所示,该装置进一步包括:
上报单元27,用于在确定单元24确定脚本文件为webshell攻击文件之后,向云平台上报脚本文件。
本发明实施例提供的基于云的webshell攻击检测装置,能够在外部向网站服务器发送脚本文件时,截获该脚本文件,并基于云平台先对该脚本文件进行特征变形痕迹的检测,再将改动过的特征语句进行还原,最后将还原后的特征语句与基本特征语句进行比较,若相同,则判定该脚本文件为webshell攻击文件。与现有技术中仅进行基本特征语句的检测方法相比,本发明通过先将改动后的特征语句进行还原,使得被打乱的特征语句还原为原有的特征语句,再与基本特征语句进行比对,使得隐藏在脚本文件中的基本特征语句被检测出来,从而确定该脚本文件为webshell攻击文件。
进一步的,依据上述装置实施例,本发明实施例还提供了一种基于云的webshell攻击检测网关,该网关包括如图2或3所示的装置。
本发明实施例提供的基于云的webshell攻击检测网关,能够在外部向网站服务器发送脚本文件时,截获该脚本文件,并基于云平台先对该脚本文件进行特征变形痕迹的检测,再将改动过的特征语句进行还原,最后将还原后的特征语句与基本特征语句进行比较,若相同,则判定该脚本文件为webshell攻击文件。与现有技术中仅进行基本特征语句的检测方法相比,本发明通过先将改动后的特征语句进行还原,使得被打乱的特征语句还原为原有的特征语句,再与基本特征语句进行比对,使得隐藏在脚本文件中的基本特征语句被检测出来,从而确定该脚本文件为webshell攻击文件。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的随身电子防丢设备的状态检测方法、设备、服务器及***设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。