一种WebShell文件的检测方法和装置与流程

文档序号:18923542发布日期:2019-10-19 03:47阅读:185来源:国知局
一种WebShell文件的检测方法和装置与流程

本发明属于网络安全技术领域,涉及WebShell文件检测,具体涉及一种基于变量回溯和抽象语法树的Webshell检测方法及装置。



背景技术:

WebShell是一种常见的网页后门,它常常被攻击者用来获取Web服务器的操作权限。攻击者在进行网站入侵时,通常会将WebShell文件与Web目录下的正常网页放置在一起,然后通过浏览器访问WebShell文件,从而获取命令执行环境,最终达到控制网站服务器的目的。当网站服务器被控制后,就可以在其上任意查看数据库、上传下载文件以及执行任意程序命令等。WebShell与正常网页具有相同的运行环境和服务端口,它与远程主机是通过http协议(通常为80端口)进行数据交换,因此能够很容易地避开杀毒软件的检测和穿透防火墙。另外,WebShell是纯文本程序,相对于二进制编码程序,它在使用上更加灵活多变,也易于进行混淆,这就使得基于特征匹配的方法很难对WebShell进行准确检测的原因。

WebShell文件大致可以分为以下三大种类:一是复杂型WebShell,通常简称为大马,这一类文件体积较大,功能齐全,通常会调用系统函数,且一般会进行加密、变形、混淆等处理;二是文件上传型WebShell,通常简称为小马,这一类文件只包含上传文件功能,体积小;三是一句话木马,仅仅用于向服务器提交控制数据,代码简短,通常只有一行代码,使用相对比较灵活,可以作为单独的文件也可以插入到正常的文件中,变形非常多,难以通过正则等手段直接检测。

目前大多WebShell检测工具是通过特征库匹配方法来实现,特征库匹配方法是通过将Web服务器端的脚本与已知的WebShell特征库进行匹配,若匹配成功,则确定该脚本为WebShell,这种检测方法比较依赖于特征库,对于未知WebShell文件的检测无用。再者,目前许多WebShell文件为了躲避杀毒软件的查杀,会进行相应的加密、变形、混淆等的处理,以逃避杀毒软件的查杀,而现有的WebShell检测技术对于这类文件的检测存在误报率和漏报率均较高的问题。



技术实现要素:

为了克服上述现有技术的不足,本发明提供一种基于变量回溯和抽象语法树的Webshell检测方法和装置,主要针对Web服务器,通过基于变量回溯和抽象语法树技术的检测过程扫描待检测文件,包括可疑文件筛选过程、特征匹配检测过程、抽象语法树分析检测过程、无关代码剔除过程以及数学公式检测过程,最终检测出WebShell文件。本发明的检测效率高、误报率低,能够快速、精确地检测出WebShell文件,从而保证Web服务的安全。

为方便说明,文中涉及符号解释如表1:

表1说明书中涉及符号及其含义

语法树是一种描述程序语法结构的树的图形表述,语法树描绘了从文法的开始符号开始推导出它的语言中的一个语句。

本发明提供的技术方案如下:

一种Webshell检测方法,基于变量回溯和抽象语法树,主要包括可疑文件筛选过程、特征匹配检测过程、抽象语法树分析检测过程、无关代码剔除过程以及数学公式检测过程,输出确定的WebShell文件;具体包括如下步骤:

开始可疑文件筛选过程:

A.读取网站目录中文件,过滤出可疑文件,得到可疑文件集:

A1.根据文件的创建时间筛选出可疑文件,可疑文件集记为T1;

A2.根据文件的相互关联筛选出可疑文件,可疑文件集记为T2;

A3.根据文件类型筛选出可疑文件,可疑文件集记为T3;

根据前面过程筛选出可疑文件集,文件类型可以作为判断一个文件是否是WebShell的关键,所以最终的可疑文件集T是取T1与T2的并集后,再与T3取交集,既是T=(T1∪T2)∩T3,对这些文件再进行以下步骤:

B.对筛选出的可疑文件集(T)进行特征匹配检测:

B1.建立常见WebShell特征库(H),常见WebShell特征库(H)包括常见WebShell文件的特征码;

B2.读取可疑文件,与常见WebShell特征库(H)中特征码进行匹配;

B3.是否匹配成功?

B4.是,则该文件为WebShell,该文件检测结束;

B5.否则,将该文件加入剩余可疑文件集;

对可疑文件集T中的每个文件执行步骤B2~B5;经过此过程检测后的剩余可疑文件集记为Q,继续以下步骤C,

C.抽象语法树分析检测过程:

C1.对于Q文件集中加密、变形的可疑文件进行变量回源、函数回源、解码操作;

C2.利用抽象语法树分析可疑文件;

C3.与特征库(I)进行匹配;特征库I是通过对WebShell文件经常利用的系统函数、上传功能等函数进行抽取形成。

C4.是否匹配成功?

C5.是,则该文件是WebShell,该文件检测结束;

C6.否则,将该文件加入剩余可疑文件集;

对可疑文件集Q中的每个文件执行步骤C1~C6;经过此过程检测后的剩余可疑文件集记为S,继续以下步骤D,

D.无关代码剔除过程:

D1.读取S中的可疑文件;

D2.剔除出无关代码;

D3.对于剔除了无关代码的文件,再与特征库K进行匹配;

对于已知的WebShell文件进行源码分析,剔除出无关代码后形成特征库K。

D4.是否匹配成功?

D5.是,则该文件是WebShell,该文件检测结束;

D6.否则,将该文件加入剩余可疑文件集;

对可疑文件集S中的每个文件执行步骤D1~D6;经过此过程检测后的剩余可疑文件集记为R,继续以下步骤E,

E.数学公式检测过程:

E1.根据信息熵(ie)、最长单词(lw)以及重合指数(ic)对R中文件的代码混淆程度进行判断;

E2.混淆程度赋值是否大于设定阈值?

E3.是,则说明是WebShell文件;

E4.否则,说明不是WebShell文件;

至此,检测结束。

其中,对于信息熵(ie)的描述是通过ASCII表来衡量文件的不确定性;采用最长单词是因为长的字符串或许存在被编码或被混淆处理的可能性;采用重合指数(ic)是因为重合度低预示着代码潜在的被加密或者被混淆的概率较大;通过信息熵(ie)、最长单词(lw)以及重合指数(ic)这三个值的描述来确定一个文件的混淆程度,混淆程度越大,说明是WebShell的可能性越大。一般地,正常的网站可执行文件是没有做很大程度的混淆处理的必要,许可网站可执行文件根本不做混淆处理。所以,如果一个文件的混淆程度很高,大于设定的一个阈值(通过大量测试确定阈值选择),影响到执行效率时,就可以认为这个文件是WebShell文件,对于WebShell文件而言混淆处理是为了避免查杀。

本发明还提供了一种基于变量回溯和抽象语法树的Webshell检测装置,包括:可疑文件筛选单元、特征匹配单元、抽象语法树检测分析单元、剔除无关代码单元和数学公式检测单元;其中:

可疑文件筛选单元,用于根据文件类型、创建时间、文件引用筛选出WebShell文件的可疑文件集,包括文件类型筛选子单元、创建时间筛选子单元和文件引用筛选子单元;

特征匹配单元,用于建立特征库,并将特征库与可疑文件筛选单元中筛选出的可疑文件集进行匹配,检测出一部分WebShell文件;余下的可疑文件为加密或变形的文件,构成新的可疑文件集,输入到抽象语法树检测分析单元;

抽象语法树检测分析单元,通过对输入的可疑文件集中的文件进行函数回源、变量回源、解码操作以及抽象语法树分析检测,检测出一部分WebShell文件;余下的可疑文件构成新的可疑文件集,输入到剔除无关代码单元;

剔除无关代码单元,通过剔除可疑文件中的无关代码,与提取出已知的WebShell文件中的无关代码,让两者进行比较,检测出一部分WebShell文件;余下的可疑文件构成新的可疑文件集,输入到数学公式检测单元;

数学公式检测单元,通过信息熵、最长单词数、重叠指数衡量可疑文件中的混淆程度,检测出一部分WebShell文件;余下的可疑文件则不是WebShell文件;

通过以上单元,实现对WebShell文件的检测。

与现有技术相比,本发明的有益效果是:

本发明提供一种基于变量回溯和抽象语法树的Webshell检测方法和装置,主要针对Web服务器,通过基于变量回溯和抽象语法树技术的检测过程扫描待检测文件,包括可疑文件筛选过程、特征匹配检测过程、抽象语法树分析检测过程、无关代码剔除过程以及数学公式检测过程,最终检测出WebShell文件。

利用本发明提供的技术方案,能够对Web服务器下的WebShell文件进行检测,文件检测的效率高、误报率低,能够快速、精确地检测出服务器中的WebShell文件,从而保证服务器的安全。本发明通过特征匹配检测对已知的WebShell进行检测,再通过抽象语法树分析检测、无关代码剔除以及数学公式检测对未知WebShell进行检测,检测率较高;本发明使得能够扫描的WebShell文件不仅仅局限于特征库与市面比较常见的WebShell文件;其中,无关代码剔除能够实现对于已知的WebShell文件的变形进行检测。利用本方案,可以很全面、系统地对WebShell进行检测。本发明的检测效率高、误报率低,能够快速、精确地检测出WebShell文件,从而保证Web服务的安全。

附图说明

图1是本发明提供的WebShell文件检测方法的流程框图。

图2是本发明提供的WebShell文件检测方法中的可疑文件筛选流程框图。

图3是本发明提供的WebShell文件检测方法中的特征匹配流程框图。

图4本发明实施例中抽象语法树分析检测出来的WebShell文件的流程框图。

图5本发明实施例中经过无关代码剔除后检测出来的WebShell文件的流程框图。

图6本发明实施例中经过数学公式检测过程后检测出来的WebShell文件的流程框图。

具体实施方式

下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。

本发明提供一种基于变量回溯和抽象语法树的WebShell检测方法,依次包括疑文件筛选过程、特征匹配检测过程、抽象语法树分析检测过程、无关代码剔除过程以及数学公式检测过程;通过上述检测过程扫描待检测文件,从而检测出WebShell文件。

本发明还提供了一种基于变量回溯和抽象语法树的Webshell检测装置,包括:可疑文件筛选单元、特征匹配单元、抽象语法树检测分析单元、剔除无关代码单元和数学公式检测单元;其中:

可疑文件筛选单元,用于根据文件类型、创建时间、文件引用筛选出WebShell文件的可疑文件集,包括文件类型筛选子单元、创建时间筛选子单元和文件引用筛选子单元;

特征匹配单元,用于建立特征库,并将特征库与可疑文件筛选单元中筛选出的可疑文件集进行匹配,检测出一部分WebShell文件;余下的可疑文件为加密或变形的文件,构成新的可疑文件集,输入到抽象语法树检测分析单元;

抽象语法树检测分析单元,通过对输入的可疑文件集中的文件进行函数回源、变量回源、解码操作以及抽象语法树分析检测,检测出一部分WebShell文件;余下的可疑文件构成新的可疑文件集,输入到剔除无关代码单元;

剔除无关代码单元,通过剔除可疑文件中的无关代码,与提取出已知的WebShell文件中的无关代码,让两者进行比较,检测出一部分WebShell文件;余下的可疑文件构成新的可疑文件集,输入到数学公式检测单元;

数学公式检测单元,通过信息熵、最长单词数、重叠指数衡量可疑文件中的混淆程度,检测出一部分WebShell文件;余下的可疑文件则不是WebShell文件;

通过以上单元,实现对WebShell文件的检测。

图1是本发明提供的WebShell文件检测方法的流程框图,每个过程相应一个单元,分别对应可疑文件筛选单元、特征匹配单元、抽象语法树检测分析单元、剔除无关代码单元和数学公式检测单元。本发明具体实施包括如下过程:

A.读取网站目录中文件,过滤出可疑文件:

图2是WebShell文件检测方法中的可疑文件筛选过程的流程框图,其中,指定目录为需要检测的目录,一般需要检测Web文件存放的目录(图中的网站目录)。获取网站文件目录中的文件信息,包括文件名称、文件类型、文件创建时间信息以及文件的引用次数等。

A1.根据文件的创建时间筛选出可疑文件:

对于根据文件的创建时间筛选出可疑文件,首先检测文件创建时间;然后,将创建时间相接近的文件分配到一个组中,对于相近时间描述即是当两个文件创建时间小于一个某个阈值时,将这两个文件分配到一组中,通过这种方式将所有文件进行分组;最后,分组结束后,统计每一组中文件个数,个数小于某个阈值的整组文件,视为WebShell可疑文件。通过此方式筛选出的可疑文件集记为T1。经过大量测试发现当设置时间间隔阈值t=5minutes时,即当两个文件创建的时间间隔小于时间间隔阈值(5分钟)时被分配到同一组。如果这些分好组的文件个数小于或者等于设置的组中文件个数阈值(如5个),则将这组文件视为可疑WebShell文件,记录在时间检测可疑文件集T1中;

A2.根据文件的相互关联筛选出可疑文件,可疑文件集记为T2:

文件的引用次数是度量文件间相互关联的标尺,当一个文件的引用次数很少,甚至是没有时,它是WebShell的可能性越大。引用次数的阈值设为5,当引用次数小于5的文件为一组,小于10大于5的文件为一组,依次分下去;小于引用次数5的文件为可疑WebShell文件,记录在引用检测可疑文件集T2中;

A3.根据文件类型筛选出可疑文件,可疑文件集记为T3:

WebShell最终还是需要执行,一些文件由于类型原因不会是WebShell的载体,常被选为WebShell载体的文件类型:asp、jsp、php、txt、pl等,对这类型文件进行筛选,剔除掉这些文件类型以外的文件,形成可疑文件集T3;

最后,根据前面过程筛选出可疑文件集,筛选可疑文件的三个条件中,文件类型是最为关键的,它是判断一个文件是否是WebShell的关键,所以最终的可疑文件集T是取T1与T2的并集后,再与T3取交集,既是T=(T1∪T2)∩T3,对T中文件再进行以下步骤的检测,直到检测出WebShell。

B.对筛选出的可疑文件集(T)进行特征匹配检测(如图3):

B1.建立常见WebShell特征库(H);

H是通过对常见的WebShell文件进行Base64编码形成。

B2.读取可疑文件与特征库H中特征码进行匹配;

B3.是否匹配成功?

B4.是,则该文件为WebShell,该文件检测结束;

B5.否则,继续以下步骤,经过此过程检测后的剩余可疑文件集记为Q;

C.抽象语法树分析检测过程(如图4):

C1.对于Q文件集中加密、变形的可疑文件进行变量回源、函数回源、解码操作;

变量回源具体方法,举例说明如下:对于一个进行了变量变换的ASP文件,采用如下代码对Execute变量回源:

<%

d="88)))"

b="eval"

c="(request(char("

ac132=b&c&d

Execute(ac132)

%>

变量ac132回源后对应eval(request(char(88))),所以,对于上述代码执行变量回源后,对应代码为:Execute(eval(request(char(66)))),该过程便是变量回源过程。

针对函数回源、解码具体的做法,例如:对于一个函数加密的PHP文件,具体用如下对应文件内容进行函数回源:

<?php

$ibf=str_replace("y","","ysytyry_yryeypylyacye");

$agq=$ibf("v","","vbabsev64_vdevcvovdve");

$nv=$ibf("up","","upcuprupeupaupteup_upfupuupnupcuptupiupoupn");

$dw=$nv(″,$agq("rr","",$xwh.$cw.$pg.$mn)));$dw();

?>

其中,$pg、$mn、$cw、$xwh是进行了代码插入、base64编码后的变量,通过对这些参数去除混淆代码rr以及base64解码后,可以得知函数$nv回源后的函数为create_function。

C2.利用抽象语法树分析可疑文件;

利用词法分析器和语法分析器从源代码中获取抽象语法树,然后进行模式匹配。抽象语法树分析是将待检测的可疑文件代码与WebShell文件分别构建抽象语法树,将两棵抽象语法树的子树根据根节点类型分别进行分类,抽取出公共子树部分。

C3.与特征库(I)进行匹配;

特征库I是通过对WebShell文件经常利用的系统函数、上传功能等函数进行抽取形成。

WebShell文件中通常会使用到一些函数,例如读写文件函数、上传文件函数,为了达到攻击的目的甚至会调用一些系统函数,打开文件、读写文件的函数,如:fopen()、fwirte()、fread()等,系统函数例如:system()等;

本发明实施例中,具体通过对1000多个WebShell文件进行源码级别的分析,从中得到最能表述WebShell文件特征的函数组成特征库I。

C4.是否匹配成功?

C5.是,则该文件是WebShell,该文件检测结束;

C6.否则,继续以下步骤,经过此过程检测后的剩余可疑文件集记为S;

D.无关代码剔除过程(如图5):

D1.读取S中的可疑文件;

D2.剔除出无关代码;

为了躲避查杀,许多WebShell文件中会插入大量代码注释以及无逻辑的语句等;无关代码剔除环节主要是剔除这部分无用代码。例如,针对杂乱的PHP代码文件中大量的代码注释以及无逻辑的语句代码,通过进行源码扫描,能够去除大量干扰注释。在剔除大量无关代码后,能够还原出该文件的行为是一个WebShell文件。

除了剔除不同语言的注释之外,还能剔除的类型包括:对字符串的拼接,例如func('a'+'b')==>func('ab'),剔除多余的运算符;另外,剔除多余空格,例如int a=b==>int a=b,剔除多余的空格;除此之外还包括一些编码转化,转化为正常ASCII码的情况,例如base64(fdsafdsa)==>1。本发明的剔除无关代码操作中主要是对这几类的代码进行剔除,以此保留文件的特征行为,完成对文件的检测识别。

D3.将剔除了无关代码的文件与特征库K进行匹配;

K是剔除了无关代码的已知WebShell文件组成的特征库。

对于变形的、加密的WebShell文件,通过进行D2中的无关代码剔除过程,抽取出WebShell文件特征行为,作为特征库K。

D4.是否匹配成功?

D5.是,则该文件是WebShell,该文件检测结束;

D6.否则,继续以下步骤,经过此过程检测后的剩余可疑文件集记为R;

E.数学公式检测过程(如图6):

E1.根据信息熵(ie)、最长单词(lw)以及重合指数(ic)对R中文件的代码混淆程度进行判断;

对于ie代表信息熵,一个系统越是有序信息熵会越低,一个系统越是混乱,信息熵就越高。如果一个系统S内存在多个时间S={E1,…,En},每个事件的几率分布P={P1,...,Pn},则每个事件本身的信息熵为:ie=-log2Pi,这个数值并不是太好计算,本发明实施例通过转换ie=ie*ie/6计算得到。

对于重合指数,ic=Σ(fi*(fi-1))/N(N-1),其中fi代表样本中某个字母出现的比率,N代表字母出现在样本中的个数,但是,计算出的ic的数值不利于后续的计算,本发明实施例通过ic=0.08/ic处理,计算得到ic值,能够让ic的数值更方便计算。

对于最长单词数,只要找到文件中最长的单词的个数即可,记为lw;若最长单词数大于且不包括1000,则赋予lw的最终值15;若值在1000(包括1000)到500(不包括500)之间,lw的最终值为10;500(包括500)到300(不包括300)之间为5;300(包括300)到0(包括0)之间赋值为0。对于赋值区间的选取以及赋值是通过大量的测试得出,当选值为以上这些值时误报率更低。

计算得到可疑文件ic、ie、lw值,将三者之和作为该文件的混淆程度权值F,即F=ic+ie+lw。

E2.混淆程度权值F是否大于设定阈值?

设定阈值,经过大量测试,总结出当阈值取30时,结果误报率更低,所以当一个文件的F>30时,则判定该文件为WebShell文件。

E3.是,则说明是WebShell文件;

E4.否则,则说明不是WebShell文件;

至此,检测结束。

下面通过实例对本发明做进一步说明。

实施例:

假设一个用C语言编写的C/S模式的应用中,管理端是一台以windows为操作系统的终端电脑M,代理端是一台以Linux为系统的服务器S,当前用户为Admin,登录管理端M,并且连接到代理端S,用户可以对网站WebShell进行扫描。

假定用户Admin选择对网站目录www进行WebShell扫描,并且用户的网站目录下存在的WebShell类型是:一句话WebShell文件F,具体通过如下步骤,对www目录进行扫描,检测是否存在WebShell文件:

1)开始:

2)从M端传输:对www目录进行WebShell文件扫描命令;

3)S端接收M端传入的信息,根据命令对www目录进行扫描;

4)获取目录下的文件信息,包括文件的文件的名称、创建时间、类型以及引用的次数;

5)获取文件的名称为F.asp,类型是asp,创建时间是2016.5.12.14.12,被引用次数为0次;

6)与文件F创建时间间隔小于5分钟的文件分为一组;

7)计算文件F所在组的文件个数,个数为1,小于5;

8)文件F被归到T1中;

9)文件F的引用次数为0次,小于5;

10)文件F被归到T2中;

11)文件F的类型为asp,被归到T3中;

12)T1与T2取并集,与T3取交集,最终被归到T中;

13)读取T中的F文件,与建立的特征库H进行匹配;

14)匹配不成功,F文件归入Q,继续以下步骤;

15)检测Q中的F,对F进行变量回源、函数回源、解码操作,保存为文件F1;

16)利用抽象语法树将F1解析,与特征库I进行匹配;

17)匹配不成功,继续以下步骤,F被归入S;

18)F与已知WebShell文件进行对比;

19)剔除F中无关代码,形成文件F2;

20)剔除出已知WebShell无关代码,形成特征库K;

21)将F2与K进行破匹配;

22)匹配不成功,则继续进行以下步骤;

23)F归入文件集R;

24)读取R中的F文件;

25)计算F中的ie、lw、ic的值,将三者相加;

26)大于30,文件是WebShell,输出结果;

27)结束。

需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

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