一种网站后门检测方法和装置与流程

文档序号:12375928阅读:290来源:国知局
一种网站后门检测方法和装置与流程

本发明涉及信息安全,尤其涉及一种网站后门检测方法和装置。



背景技术:

网站后门通常是指那些绕过网站安全性控制而获取网站服务器的控制权的网站文件,通常以asp、php、jsp或cgi等代码编写而成。Web脚本语言多数都支持执行动态代码,例如把接收到的参数当作代码来执行,或者把变量经过运算后当作代码来执行,这一点经常被黑客利用来编写网站后门,绕过安全检测。即,木马执行者将本身并不是木马的后门文件放进网站服务器,其通常具备很强的隐蔽性,不会直接被木马攻击者利用来攻击网站服务器,而是作为木马攻击者攻击网站服务器的通道。也即,木马攻击者通常提交特定的参数给网站后门。特定的参数提交到网站后门后,成为木马,实现对网站服务器的攻击。因此,需要定期检测网站后门是否存在。

现有的针对网站文件是否为网站后门的检测方案通常采用静态检测。即,通过采集大量网站后门的样本,判断待检测网站文件的特征是否与大量样本之一的特征关键词存在匹配,如果匹配则判断待检测网站文件为网站后门。静态检测的缺点是,现在多数脚本语言都支持运行时动态生成代码并使用assert方式执行,特定的参数可能经过加密和混淆后才提供给后门,这样后门从静态代码上看已经完全失去了后门的特征,只有把特定的参数经过加密和混淆提供给后门后,后门才表现出后门的特征。这种检测方式容易漏报和误报。



技术实现要素:

本发明的目的之一是提升网站后门检测的准确性。

根据本发明的一个方面,提供了一种网站后门检测方法,其中所述网站后门检测方法包括:

将待检测网站文件放入与该待检测网站文件的实际执行环境隔离的独立空间中运行;

响应于该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求,构造带有危险标记的外部参数提供给该待检测网站文件,其中如果在该待检测网站文件在所述独立空间中运行过程中,该带有危险标记的外部参数经受预定字符串处理函数,则危险标记保持;

判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数、及所述危险函数的参数是否带有危险标记;

如果判断出该待检测网站文件在所述独立空间运行的过程中执行危险函数、且该危险函数调用带有危险标记的参数,则检测出该待检测网站文件为后门文件。

根据本发明的另一个方面,还提供了一种网站后门检测装置,包括:

文件放入单元,被配置为将待检测网站文件放入与该待检测网站文件的实际执行环境隔离的独立空间中运行;

外部参数构造单元,被配置为响应于该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求,构造带有危险标记的外部参数提供给该待检测网站文件,其中如果在该待检测网站文件在所述独立空间中运行过程中,该带有危险标记的外部参数经受预定字符串处理函数,则危险标记保持;

判断单元,被配置为判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数、及所述危险函数的参数是否带有危险标记;

检测单元,被配置为如果判断出该待检测网站文件在所述独立空间运行的过程中执行危险函数、且该危险函数调用带有危险标记的参数,则检测出该待检测网站文件为后门文件。

与现有技术相比,本发明实施例具有以下优点:本发明实施例将待检测网站文件执行过程中向其提供的外部参数都作上危险标记,并且这些危险标记经过加密和混淆等字符串处理函数,危险标记是保持的,这样只要 判断出待检测网站文件运行过程中执行了危险函数,且该危险函数调用了危险标记,就能检测出该待检测网站文件为后门文件。通过这种利用危险标记层层跟踪的方式,即使外部参数经过了加密或混淆,本发明的实施例的这种方式仍然认为它可能是危险的,从而避免了现有技术特定参数经过加密和混淆就不容易被识别的缺陷。即使后门从静态代码上看已经完全失去了后门的特征,本发明实施例通过跟踪整个待检测网站文件运行过程,也能够检测出网站后门。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为根据本发明一个优选实施例的网站后门检测方法1的流程图;

图2为根据本发明一个实施例的构造带有危险标记的外部参数提供给待检测网站文件的示意图;

图3为根据本发明一个优选实施例的网站后门检测装置2的示意性框图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本发明作进一步详细描述。

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存 续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑、智能手机等。

所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。

需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。

后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。

这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本发明的示例性实施例的目的。但是本发明可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。

应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。

应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时, 其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。

这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。

还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。

根据本发明的一个方面的一个实施例,提供了一种网站后门检测方法1。

所述网站后门检测方法1可以在网站的服务器端执行,也可以在第三方服务器执行。例如,通过在网站的服务器端安装用于检测网站后门的应用程序,其中该应用程序可以从第三方服务器下载,也可以为网站的服务器端自带的程序,在离线的状态下,可以基于该应用程序在网站的服务器端的运行来检测该网站是否存在后门;或者,在在线的状态下,基于第三方服务器(其中第三方服务器例如为单个服务器端,或者为多个服务器端构成的云服务器)对安装在网站的服务器端的该应用程序的运行进行控制,以检测该网站是否存在后门。

其中所述网站后门通常是指那些绕过网站安全性控制而获取网站服务器的控制权的网站文件,通常以asp、php、jsp或cgi等代码编写而成。典型地,例如,以php代码编写的网站后门如下:

<?php

$a=base64_decode($_POST[‘cmd’]);

assert($a);

其中,$a代表变量,$_POST[‘cmd’]代表从外部接收的参数,base64_decode代表base64解码函数,assert代表函数名称。所述assert函数通常被认为是危险函数。所谓危险函数可以指这样一种情况:当该函数基于外部参数来运行时有可能被认为是网站后门的运行。一般地,危险函数集中体现为一些函数,可以事先列举出来放在一个预定集合中。

虽然上述函数assert被认为是危险函数,但仍需分析assert函数调用的参数a是否为外部参数才能判断其是否为后门文件。然而,现有的技术,如静态检测,因直接对网站文件的代码与后门特征库中的代码进行比对而缺少对网站文件中的函数所调用的参数来源(例如为外部参数还是本地文件的参数)的动态分析,而assert所调用的参数$a只有经过对base64_decode($_POST[‘cmd’])解码后,才能真正还原出来,因而现有的静态检测由于不会进行解码运算而不能将assert函数所调用的参数还原,也就无法知道assert函数调用的参数最初是来自外部还是来自内部,也就无法分析出assert函数调用的参数a是否为外部参数,所以静态检测技术无法检测出上述网站后门为后门文件。

当然,上述的网站后门仅为了示例,本发明实施例的网站后门检测方法如可适用于其他网站后门的检测,以引用的方式包含于此。

请参考图1,图1为根据本发明一个实施例的网站后门检测方法1的流程图。

如图1所示,所述网站后门检测方法1包括:

S101,将待检测网站文件放入与该待检测网站文件的实际执行环境隔离的独立空间中运行。

待检测网站文件是网站上一个独立的待检测文件片段。例如,在网站服务器上有执行程序的集合,其中每个执行程序可作为一个待检测网站文件。

实际执行环境是指待检测网站文件实际执行时的硬件和软件环境。硬 件环境例如该待检测网站文件执行时占用的硬件空间,软件环境例如该待检测网站文件执行时调用的函数、需要的参数等。如果待检测网站文件在实际的硬件和软件环境中执行,如果此时待检测网站文件是一个后门文件,再提供给它一个外部危险参数,最后可能会形成一个木马,造成实际危害。因此,本发明实施例中,将待检测网站文件放入与该待检测网站文件的实际执行环境隔离的独立空间中运行,这个独立空间不影响待检测网站文件实际的执行。即使在独立空间中运行时产生问题,也不会对待检测网站文件的实际执行造成影响。独立空间是指物理位置上独立、与外界的函数调用和参数交换也独立的空间。

在一种实现方式中,所述独立空间包括沙箱和/或虚拟机。

需要说明的是,虽然本发明实施例是将待检测网站文件放入到独立空间中运行,但是所述运行的过程同于所述待检测网站文件在实际执行环境中执行的过程,只是两者的运行环境不同而已。运行的过程都是:由于待检测网站文件包含一系列按序执行的函数,在函数中会调用一些参数,该待检测网站文件按序调用函数,并根据函数的需要进行函数需要的参数的请求。

S102,响应于该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求,构造带有危险标记的外部参数提供给该待检测网站文件,其中如果在该待检测网站文件在所述独立空间中运行过程中,该带有危险标记的外部参数经受预定字符串处理函数,则危险标记保持。

待检测网站文件在所述独立空间运行的过程中有时会发出内部参数获取请求,有时会发出外部参数获取请求。外部参数就是在待检测网站文件运行的过程中从外部提供的参数。在前例中的$a=base64_decode($_POST[‘cmd’])语句中的“$_POST[‘cmd’]”就是一个在待检测网站文件运行的过程中用户输入的参数,因此是外部参数。内部参数是在待检测网站文件运行的过程中需要的、由内部机制提供的参数,例如assert($Count),其中Count是一个由内部计数器存储的计数,其不需要外部提供。

如果待检测网站文件在所述独立空间运行的过程中需要外部参数,则发出外部参数获取请求。一旦判断出发出了外部参数获取请求,则响应于该请求,构造带有危险标记的外部参数提供给该待检测网站文件。

其中所述危险标记可以为任何符号的标记,例如在参数上加上标“*”或其他符号等等。

例如,当待检测网站文件执行到语句base64_decode($_POST[‘cmd’])时,需要外部参数$_POST[‘cmd’],此时发出外部参数获取请求。响应于监视到该请求,构造一个带有“*”的参数提供给待检测网站文件。

将带有危险标记的外部参数提供给该待检测网站文件后,如果在该待检测网站文件在所述独立空间中运行过程中,该带有危险标记的外部参数经受预定字符串处理函数,则危险标记保持。

这些预定字符串处理函数一般对应于加密、混淆、压缩等函数。本发明实施例将待检测网站文件执行过程中向其提供的外部参数都作上危险标记,并且这些危险标记经过加密和混淆等字符串处理函数后,危险标记是保持的,这样只要判断出待检测网站文件运行过程中执行了危险函数,且该危险函数使用了带危险标记的参数,就能检测出该待检测网站文件为后门文件。通过这种利用危险标记层层跟踪的方式,即使外部参数经过了加密或混淆,本发明的实施例的这种方式仍然认为它可能是危险的,从而避免了现有技术特定参数经过加密和混淆就不容易被识别的缺陷。

例如,base64_decode()是一个解码函数,带有“*”的参数经过base64_decode()后,其结果仍带有“*”。

所述预定字符串处理函数来自预先配置的字符串处理函数库,其中所述字符串处理函数库中的预定字符串处理函数被预先配置成在调用的参数带有危险标记的情况下,使预定字符串处理函数的结果参数保留该危险标记。

例如,预先配置该字符串处理函数库包括通用的一些编码函数、通用的一些压缩函数等,例如包含gzuncompress()。这样,当待检测网站文件执行到压缩函数gzuncompress(),它执行的是该字符串处理函数库中配置 的、能在调用的参数带有危险标记的情况下,其结果参数保留该危险标记的压缩函数,而不是一般的通常不保留该危险标记的压缩函数。

另外,可选地,还可以通过设置外部参数表简化步骤S102的处理。

请参考图2,图2示出了根据本发明一个实施例的构造带有危险标记的外部参数提供给待检测网站文件的步骤的详细流程图。如图2所示,步骤S102包括:

S201,截获该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求。

S202,从外部参数表中查找满足该外部参数获取请求的外部参数。

其中,所述外部参数表例如为哈希表或者为其他存储方式的空间。以PHP代码编写的待检测网站文件为例,函数GET和函数POST的参数都存放在哈希表中。它存储的是以前为了满足待检测网站文件在独立空间运行的过程中发出的外部参数获取请求在后面的步骤S204中提供给待检测网站文件的构造的带有危险标记的外部参数。在某些情况下,如初始化的情况,所述外部参数表可以为空,以便于后续操作所涉及的外部参数的存储。

例如,该外部参数获取请求需要获取外部参数a,刚好在外部参数表中存在外部参数a,则不执行步骤S203-204,直接将外部参数a返回给待检测网站文件。

S203,在从外部参数表中查找不到满足该外部参数获取请求的外部参数的情况下,才构造带有危险标记的外部参数提供给该待检测网站文件。

例如,以初始化的外部参数表为例,这种情况下的外部参数表为空表,则在所述待检测网站文件发出外部参数获取请求的情况下,从外部参数表中查找不到所需的外部参数,则构造带有危险标记的外部参数提供给该待检测网站。

又如,当外部参数表中只存储有外部参数a,如果所述待检测网站文件发出获取外部参数b的请求,则在这种情况下,同样在外部参数表中查找不到所需的外部参数,则构造带有危险标记的外部参数提供给该待检测网站。

S204,将构造的带有危险标记的外部参数存储在外部参数表中。

例如,以PHP代码编写的待检测网站文件为例,将构造的带有危险标记的外部参数存储在哈希表中。

由上,基于对所需的外部参数是否可以从外部参数表中查找的判断,可以在已经历史上已经构想过同样的外部参数的情况下,利用历史上构造的结果,减少构造的工作量。

S103,判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数、及所述危险函数的参数是否带有危险标记。

以前述php代码编写的一段经过base64解码函数的网站后门为例,判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数例如是指,发现了其中的assert()是一个危险函数;判断所述危险函数的参数是否带有危险标记,例如是指,发现了assert()中的结果$a带有“*”。

可选地,所述判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数是通过将该待检测网站文件在所述独立空间运行的过程中执行的函数与预定危险函数库中的危险函数进行匹配实现的。

也即,所述危险函数是预定义的,它是通过总结大量后门文件,发现其中的哪些函数被输入特定的外部参数后变成木马而归纳出来、放在预定危险函数库中的。所述预定危险函数库中存储有大量的危险函数。当所述待检测网站文件在独立空间运行的过程中执行的函数与预定危险函数库中的危险函数相匹配时,则可以判断所述待检测网站文件在所述独立空间运行的过程中执行危险函数。例如,预定危险函数库中存储有assert函数,则所述待检测网站文件在所述独立空间运行的过程中执行assert函数,则判断所述待检测网站文件在所述独立空间运行的过程中执行危险函数。

S104,如果判断出该待检测网站文件在所述独立空间运行的过程中执行危险函数、且该危险函数调用带有危险标记的参数,则检测出该待检测网站文件为后门文件。

具体而言,例如,以前述php代码编写的、具有Base64解码函数的程序为例,发现其中的assert()是一个危险函数,并发现assert()中的结果$a带有“*”,可以认为前述php代码编写的、具有Base64解码函数的程序是后门文件。

可选地,所述网站后门检测方法还包括:

如果判断出该待检测网站文件在所述独立空间运行的过程中不执行危险函数、或虽然执行危险函数但该危险函数不调用带有危险标记的参数,则检测出该待检测网站文件为安全文件。

具体而言,例如,以前述php代码编写的、具有Base64解码函数的程序为例,发现其中没有调用危险函数,或发现虽然调用了危险函数assert()、但assert()中的结果$a不带有“*”,可以认为前述php代码编写的、具有Base64解码函数的程序不是后门文件。

根据本发明的另一个实施例,还提供了一种网站后门检测装置2,包括:

-文件放入单元301,被配置为将待检测网站文件放入与该待检测网站文件的实际执行环境隔离的独立空间中运行。其中所述独立空间可以包括沙箱和/或虚拟机。

-外部参数构造单元302,被配置为响应于该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求,构造带有危险标记的外部参数提供给该待检测网站文件,其中如果在该待检测网站文件在所述独立空间中运行过程中,该带有危险标记的外部参数经受预定字符串处理函数,则危险标记保持;

-判断单元303,被配置为判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数、及所述危险函数的参数是否带有危险标记;

-检测单元304,被配置为如果判断出该待检测网站文件在所述独立空间运行的过程中执行危险函数、且该危险函数调用带有危险标记的参数,则检测出该待检测网站文件为后门文件。

可选地,所述预定字符串处理函数来自预先配置的字符串处理函数库, 其中所述字符串处理函数库中的预定字符串处理函数被预先配置成在调用的参数带有危险标记的情况下,使预定字符串处理函数的结果参数保留该危险标记。

可选地,所述外部参数构造单元302被配置为:

-截获该待检测网站文件在所述独立空间运行的过程中发出的外部参数获取请求;

-从外部参数表中查找满足该外部参数获取请求的外部参数;

-在从外部参数表中查找不到满足该外部参数获取请求的外部参数的情况下,才构造带有危险标记的外部参数提供给该待检测网站文件;

-将构造的带有危险标记的外部参数存储在外部参数表中。

可选地,所述判断单元303被配置为:

判断该待检测网站文件在所述独立空间运行的过程中是否执行危险函数是通过将该待检测网站文件在所述独立空间运行的过程中执行的函数与预定危险函数库中的危险函数进行匹配实现的。

可选地,所述检测单元304还被配置为:

如果判断出该待检测网站文件在所述独立空间运行的过程中不执行危险函数、或虽然执行危险函数但该危险函数不调用带有危险标记的参数,则检测出该待检测网站文件为安全文件。

应当理解,图3所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。。

所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件,也可以是完全的软件,还可以是硬件和软件结合的形式。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际 上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

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