Webshell脚本检测方法、装置、电子设备及存储介质

文档序号:26103296发布日期:2021-07-30 18:14阅读:78来源:国知局
Webshell脚本检测方法、装置、电子设备及存储介质

本发明属于网络安全领域,特别地涉及一种webshell脚本检测方法、装置、电子设备及存储介质。



背景技术:

webshell是一种由php,jsp,asp等脚本语言编写的功能性网页脚本,它们被广泛地用于网络攻击中。随着信息技术的发展,针对web应用的网络攻击也在不断地增加。据网信办统计,2020年上半年,境内外约1.8万个ip地址对我国境内约3.59万个网站植入后门,较2019年上半年增长36.9%。由此可见针对web应用攻击的猖獗。

抽象语法树,是针对编程语言进行语义分析后生成的树状语义结构表示,树中的每一个节点都代表源码的结构。这种结构不依赖特定语言的实现细节,因此能够有效地反映样本代码的实际执行流程。抽象语法树的节点包含丰富的语义信息,这些信息包括样本的表达式,变量,调用函数,类型等信息,因此抽象语法树节点序列能够清晰高效地表达样本的运行特征。

随着传统webshell检测技术的普及,攻击者也开始通过各种手段试图规避检测。较为常见的技术有拆分关键词,编码webshell,加密webshell通讯流量等。但传统webshell检测技术有漏报率高,识别变形混淆webshell能力弱的缺点,已经无法适应当前复杂的攻防场景。因此业界急需一种能够有效针对混淆变形webshell的检测系统。



技术实现要素:

基于现有技术存在的问题,本发明发现混淆变形前后webshell的语义结构具有一定相似度,而卷积神经网络又能够较好地提取文本的局部特征。因此两者有效地结合能够有效地提升webshell检测的能力,从而提出了一种webshell脚本检测方法、装置、电子设备及存储介质。

在本发明的第一方面,本发明提供了一种webshell脚本检测方法,包括:

采集脚本数据,所述脚本数据包括不同脚本编程语言类型的webshell脚本和其他网页脚本;

对所述脚本数据按照其对应的脚本编程语言进行预处理;

将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

在本发明的第二方面,本发明还提供了一种webshell脚本检测装置,包括:

脚本数据采集模块,用于采集不同脚本编程语言类型的webshell脚本和其他网页脚本;

数据预处理模块,用于对所述脚本数据按照其对应的脚本编程语言进行预处理;

语义分析模块,用于将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

词向量生成模块,用于将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

检测模块,用于将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

在本发明的第三方面,本发明还提供了一种电子设备,包括:

存储器,存储有计算机可读指令;

处理器,读取存储器存储的计算机可读指令,以执行如本发明第一方面所述的一种webshell脚本检测方法。

在本发明的第四方面,本发明还提供了一种计算机可读存储介质,其特征在于,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如本发明第一方面所述的一种webshell脚本检测方法。

本发明的有益效果:

1.本发明提出了一套针对多种类型webshell样本共同建模的webshell检测方案,有效地降低针对不同类型webshell单独建模的检测方案的时间成本的消耗。

2.由于本发明编程语言构成的webshell的语义特征存在一定区别,客观上无法使用某一种统一的策略处理,本发明通过不同的处理方法对相应的脚本进行预处理,能够便于统一处理各种不同类型的脚本数据。其次,不同类型的webshell具有的特性各不相同,例如不同类型的webshell脚本可以使用基于不同原理的混淆方式。因此,使用不同的预处理方式能够更好地处理不同的脚本来达到更好的检测效果。

附图说明

图1为本发明实施例中一种webshell脚本检测方法流程图;

图2为本发明实施例中脚本数据预处理流程图;

图3为本发明实施例中归一化抽象语法树节点序列示意图;

图4为本发明实施例的抽象语法树序列提取的流程图;

图5为本发明实施例中word2vec模型结构图;

图6为本发明实施例中采用的text-cnn神经网络模型架构图;

图7为本发明一种实施例中的webshell检测装置架构图;

图8为本发明优选实施例中的webshell检测装置架构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例的解决方案主要是:采集脚本数据后,对所述脚本数据进行预处理;预处理完成后按照对应的编程语言进行语义分析,抽取出对应的抽象语法树序列;将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;将词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

图1是本发明实施例的一种webshell脚本检测方法流程图,如图1所示,所述检测方法包括:

101、采集脚本数据,所述脚本数据包括不同脚本编程语言类型的webshell脚本和其他网页脚本;

采集脚本数据的过程中,可以分为训练阶段和测试阶段,其中训练阶段中的脚本数据为打标后的样本数据,例如将webshell脚本的标签打为1,将其他网页脚本作为白样本的标签打为0,为了后续测试阶段的检测准确性,可以通过多种方式尽可能的收集多种脚本样本。

这里的脚本样本可以包括但不限于计算机编程语言(hypertextpreprocessor,php),动态服务器页面(activeserverpage,asp),开发web应用程序的类库(aspx),jsp(javaserverpages,java服务器页面),一种功能丰富的计算机程序语言(perl),一种面向对象、解释型计算机程序设计语言(python)等,所述webshell脚本可以通过web服务远程访问该脚本文件能够获取上传/下载/修改/删除文件,数据库以及执行任意命令等控制权限。

而对于测试阶段,是为了检测出未知脚本数据是否为webshell脚本,因此未知脚本数据没有标签,需要通过后续的检测过程检测出未知脚本数据的标签值。

201、对所述脚本数据按照其对应的脚本编程语言进行预处理;

所述预处理可以对提供的样本进行去重,数据清洗,语义分析,剥离非相关节点等功能。

具体的,图2给出了本发明实施例中脚本数据预处理流程图;如图2所示,所述预处理过程可以包括:

211、确定所述脚本数据的脚本编程语言类型,包括php,jsp和asp;

212、使用md5算法对所述脚本数据进行去重处理;

213、对去重后的脚本数据执行混淆检测处理,检测到混淆后采用相应的去混淆算法恢复出样本数据;

214、对恢复出的php样本数据采用正则表达式提取出样本中的php源码;

215、对恢复出的jsp样本数据中unicode编码的样本进行unicode解码后,直接提取出样本的jsp源码;

216、对恢复出的asp脚本数据中utf-7编码的样本进行utf-7解码后,采用正则表达式提取出样本中的vb源码。

301、将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

针对三种不同类型的样本,需要使用三种不同的方式进行语义分析,最终获得样本对应的抽象语法树节点,对获取的抽象语法树进行剪枝,去除在分类模型中起作用较小的特征节点,并对获取的抽象语法树节点进行格式化,最终输出抽象语法树序列。

对于php样本数据:

采用自定义规则将所述php源码转换为抽象语法树的语义参数和语义节点;

广度优先遍历所述抽象语法树,访问每一个语义节点;

判断所述语义节点的类型,若所述语义节点是内嵌html节点,则以递归的形式将该语义节点的内容去更新所述抽象语法树,否则输出所述语义节点的名称;

直至遍历完成所有语义节点,将所有输出的语义节点名称作为php抽象语法树序列。

在一些实施例中,针对php类型的样本,在检测到zend混淆后,需要对样本采用相应去混淆算法尝试恢复混淆前的样本,去除混淆后,需要用正则表达式提取出样本中的可执行代码部分,以便在语义分析的步骤中,样本能够被顺利解析。

在一些具体的实施例中,针对php样本的抽象语法树提取主要使用了php-parser开源工具,该工具可以将指定php代码转化为抽象语法树。通过自定义规则将php样本从源码形式转化为语法树的语义参数和节点,并最终转化为抽象语法树节点序列。

对于jsp脚本数据:

将所述jsp源码编译为java源码;

采用自定义规则将所述java源码转换为抽象语法树的语义参数和语义节点;

广度优先遍历抽象语法树,访问每一个语义节点;

判断当前分支的所述语义节点的类型,当所述语义节点为非注释或基础类名称节点时,则输出语义节点的名称,并继续访问语义节点;当所述语义节点为声明、定义或者初始化类型时,则直接继续访问语义节点;

直至遍历完成所有语义节点,将所有输出的语义节点名称作为java抽象语法树序列。

在一些优选实施例中,为了快速剪枝,在访问每一个语义节点之前还包括当所述语义节点类型为调用方法时,且所述调用方法为jspservlet中的方法时,则完成当前分支的解析,继续进行下一分支。

在一些实施例中,针对jsp类型的样本,需要对进行unicode编码的样本进行unicode解码来恢复样本编码前的内容。

在一些具体的实施例中,根据jsp运行的机理,jsp在接收到请求后会被服务器编译为java文件,在完成文件的编译后提供服务。因此jsp样本的提取流程需要在完成jsp被转化为java文件后,使用开源工具javaparser完成对java源码的抽象语法树节点序列提取。

对于asp脚本数据:

采用自定义规则将所述vb源码解析为抽象语法树;

广度优先遍历抽象语法树,访问每一个语义节点;

判断所述语义节点的类型,当所述语义节点不是注释节点,输出所述语义节点的名称;

直至遍历访问完成所有语义节点,将所有输出的语义节点名称作为vb抽象语法树序列。

在一些实施例中,针对asp类型的样本,同样也需要对其进行解码并使用正则表达式提取其中的vb代码。

在一些具体的实施例中,根据asp的运行原理,实际上asp运行时执行的是vb代码,因此针对asp样本的语义分析可以被转化为针对vb代码的语义分析。首先通过正则匹配asp文件中所有的vb代码,将单个文件中的vb代码拼接,然后针对vb代码块进行语义分析。

在上述实施例中,由于php,asp样本的运行原理和jsp样本不同,所以需要通过不同的流程来完成不同类型样本的抽象语法树提取。其中php样本和asp样本可以直接在服务器上运行,而jsp样本则需要被服务器编译为java代码后才能够被编译执行;因为php的语言特性,解析器没法解析unicode编码的脚本,所以php不需要解码,jsp可以解析unicode解码所以需要解码,而asp也有可能需要utf-7解码;在解码结束后,需要用正则提取各自出需要的内容。

在一些实施例中,当所有语义节点被转化为各自的抽象语法树节点序列时,最后需要对各个样本的序列节点做归一化处理,归一化后的语义节点名称统一为4个字符串度。这种做法能够有效降低在训练时卷积神经网络的内存消耗。最终得到归一化后的抽象语法树节点序列,归一化后的序列如图3。不同的字符串度代表了分析后不同的语义结构,不同的语义结构在分类中起到了不同的效果。

图4为本发明实施例的抽象语法树序列提取的流程图,如图4所示,在本实施例中,首先需要判断样本的类型,当所述类型为php样本时,则经过php语义分析后,直接获得php抽象语法树;对所述php抽象语法树剪枝后得到php抽象语法树序列;当所述类型为jsp/jspx样本时,将jsp/jspx样本中间件编译成java文件,经过java语义分析后,获得java抽象语法树,对所述java抽象语法树剪枝后得到java抽象语法树节点序列;当所述类型为asp文件时,通过对正则表达式提取出asp文件中的vb代码,获得vb文件,通过对vb文件进行语义分析后,获得vb抽象语法树,对所述vb抽象语法树剪枝后得到vb抽象语法树序列;将这三种抽象语法树节点序列归一化后得到抽象语法树节点序列。

401、将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

与步骤101同理,本实施例也可以将获取抽象语法树序列的样本分为训练集和测试集,将训练集样本节点序列输入word2vec词向量嵌入模型获取词嵌入和样本特征词向量,测试集将直接输入训练完成的模型进行测试。

在一些实施例中,本发明的词向量嵌入模型为word2vec模型,该模型是谷歌公司推出的一款能够实现词嵌入的双层神经网络。word2vec模型通常分为两类,分别是跳步模型(skip-gram)模型和连续词袋模型(cbow),模型架构如图5所示。跳步模型能够通过输入词汇预测词汇的上下文,而连续词袋模型与此相反,能够通过上下文来预测输入词汇。该样本中不同的词汇频率分布在十几到几千间,因此本发明选择能更好处理低频词汇的跳步模型。

本发明对归一化后的抽象语法树节点序列进行分词,将分词结果作为word2vec模型的原始输入,生成每一个单词的词向量,最终生成特征向量矩阵作为词向量生成模块的输出。

在完成词嵌入模型的训练后,本发明将生成的特征向量矩阵和词嵌入送给神经网络模块中的text-cnn模型,在步骤s501中进行训练以及测试。

501、将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

在一些优选实施例中,考虑到词嵌入和词向量具有不同的维度,本发明需要对不同维度的词向量进行融合,词嵌入表示为其中,表示词向量k的n维嵌入表示;αi表示词向量k的第i个维度的权重,βi表示词向量k被编码之后的第i个维度的向量表示;υ表示词向量中所有维度归一化之后的结果;n表示词向量维度数。

本实施例利用每个词向量维度所计算出的权重来对不同维度的词向量进行融合,这样可以减少由于维度漂移对最终词嵌入表示所带来的噪声信息,能够增强词向量的多维信息嵌入表示,从而加强webshell的检测的准确性;同时本发明采用对数平滑的方式对权重进行处理,能够缩小数据的绝对数值,使得数据维持在稳定状态。

text-cnn是kim等人在2014年提出,针对文本分类设计的卷积神经网络。和自然语言处理领域中常用的循环神经网络相比,text-cnn具有模型结构简单,计算速度快,能够更有效地提取局部特征的优势。本发明选择text-cnn模型作为神经网络模块的分类模型,模型的输入是词向量生成模块输出的特征向量矩阵。

text-cnn的模型架构如图6所示,该模型由4部分构成,输入层,卷积层,池化层,全连接层。在输入层中,代表节点序列中第i个节点对应的k维词向量,而对应样本的节点序列长度为n,此时每一个样本的特征矩阵可以表示为:

x1:n代表将n个k维词向量拼接为n×k维的特征矩阵作为卷积神经网络的输入。

在卷积层中,卷积神经网络中卷积核的宽度为k,所以卷积核只能向下移动。当卷积核构成h×k维的窗口时,将窗口中的xi:i+h-1矩阵作为输入,按照式生成第i个特征向量ci,则有:

ci=f(w·xi:i+h-1+b)

指的是噪音项,而f是某个非线性函数,最终得到特征图。

c=[c1,c2,…,cn-h+1]

在池化层中,模型对输入的特征图采用最大池化操作,即在n-h个特征中挑选出值最大的特征作为样本最重要的特征来代表样本。

当存在多个卷积核时,多个卷积核挑选出的最大特征将会被拼接并被送入全连接层,在该层会得到最终每个输出分类的概率作为分类的依据。

当存在m个卷积核时,全连接层的输入为:

为了防止模型过拟合,需要设置一定的丢弃率,在反向传播中的输出单元为y则有:

在式中,是逐元素的乘法操作符,而r代表伯努利随机变量的掩码向量,用于控制特征随机丢弃。最终的输出经过转化输出各个标签的概率。

训练完成的模型可以直接投入检测。

图7给出了本发明一种实施例中的webshell检测装置架构图,如图7所示,它主要分为三个部分:第一部分,数据预处理模块,该模块将对提供的样本进行去重,数据清洗,语义分析,剥离非相关节点等功能,最后将样本转化为抽象语法树节点序列。第二部分,词向量生成模块。该模块主要是将抽象语法树序列转化为词向量。最后一部分是神经网络模块,该模块将使用词向量生成模块产生的特征向量矩阵以及词嵌入作为输入,使用text-cnn模型完成对webshell检测模型的训练,训练完成的模型可以直接投入webshell检测。

图8给出了本发明优选实施例中的优选实施例中的webshell检测装置架构图,如图8所示,本发明还提供了一种webshell脚本检测装置,包括:

脚本数据采集模块,用于采集不同脚本编程语言类型的webshell脚本和其他网页脚本;

数据预处理模块,用于对所述脚本数据按照其对应的脚本编程语言进行预处理;

语义分析模块,用于将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

词向量生成模块,用于将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

检测模块,用于将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

本实施例相较于上一实施例,增加了脚本数据采集模块,用来采集用作训练和用作测试或者检测的脚本数据;新增了语义分析模块来重点对不同编成语言的脚本进行对应的语义分析;还将神经网络模块替换为检测模块,利用训练完成的text-cnn神经网络中,检测出webshell脚本。

在本发明的第三方面,本发明还提供了一种电子设备,包括:

存储器,存储有计算机可读指令;

处理器,读取存储器存储的计算机可读指令,以执行如本发明第一方面所述的一种webshell脚本检测方法。

具体可以执行:

采集脚本数据,所述脚本数据包括不同脚本编程语言类型的webshell脚本和其他网页脚本;

对所述脚本数据按照其对应的脚本编程语言进行预处理;

将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

可选的,所述处理器可执行的计算机可读指令的细化功能和扩展功能可以参照上述描述。

在本发明的第四方面,本发明还提供了一种计算机可读存储介质,其特征在于,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如本发明第一方面所述的一种webshell脚本检测方法。

具体可以执行:

采集脚本数据,所述脚本数据包括不同脚本编程语言类型的webshell脚本和其他网页脚本;

对所述脚本数据按照其对应的脚本编程语言进行预处理;

将预处理后的脚本数据进行语义分析,按照其对应的脚本编程语言抽取出抽象语法树序列;

将抽象语法树序列输入到词向量嵌入模型中获取词嵌入和样本特征词向量;

将所述词嵌入和样本特征词向量输入到预先训练好的text-cnn神经网络中,检测出webshell脚本。

可选的,所述计算机可执行指令的细化功能和扩展功能可参照上文描述。

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

本领域专业技术人员还可以进一步意识到,结合本申请中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本申请中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

在本发明的描述中,需要理解的是,术语“同轴”、“底部”、“一端”、“顶部”、“中部”、“另一端”、“上”、“一侧”、“顶部”、“内”、“外”、“前部”、“中央”、“两端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。

在本发明中,除非另有明确的规定和限定,术语“安装”、“设置”、“连接”、“固定”、“旋转”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

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