CN107516041B - 基于深度神经网络的WebShell检测方法及其*** - Google Patents
基于深度神经网络的WebShell检测方法及其*** Download PDFInfo
- Publication number
- CN107516041B CN107516041B CN201710705914.1A CN201710705914A CN107516041B CN 107516041 B CN107516041 B CN 107516041B CN 201710705914 A CN201710705914 A CN 201710705914A CN 107516041 B CN107516041 B CN 107516041B
- Authority
- CN
- China
- Prior art keywords
- tree
- abstract syntax
- webshell
- syntax tree
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Quality & Reliability (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Machine Translation (AREA)
Abstract
本发明公布了一种基于深度神经网络的WebShell检测方法及其***,基于抽象语法树的递归循环神经网络,针对脚本语言自动获取脚本的词法、语法信息,利用抽象语法树的层次化结构特征完成特征抽取和WebShell检测,包括预处理、样本生成和WebShell检测;首先自动获取脚本的词法、语法信息,再利用基于抽象语法树的递归循环神经网络完成特征抽取和WebShell检测。本发明方法的部署成本低、可移植性好、检测准确率高。
Description
技术领域
本发明涉及信息安全技术领域,具体涉及一种基于抽象语法树的递归循环神经网络的WebShell检测方法及其***。
背景技术
WebShell是以网页形式存在的一种命令执行环境,常被入侵者用作对网站服务器操作的后门工具。攻击者通过WebShell获得Web服务的管理权限,从而达到对Web应用的渗透和控制。
由于WebShell和普通Web页面特征几乎一致,所以可逃避传统防火墙和杀毒软件的检测。而且随着各种用于反检测特征混淆隐藏技术应用到WebShell上,使得传统基于特征码匹配的检测方式很难及时检测出新的变种。
从攻击者角度,WebShell就是一个asp、aspx、php或者jsp等编写的脚本木马后门。攻击者在入侵一个网站后,常常将这些脚本文件上传到Web服务器目录下。通过浏览器访问的方式,访问脚本文件的同时,可以控制Web服务器,比如读取网站数据库数据、删除网站服务器上的文件,如果Web权限比较高,甚至可以直接运行***分命令。
现有的检测WebShell的方法都是白盒检测,即针对WebShell脚本文件的源代码进行检测,具体可以分为基于主机的检测和基于网络的检测两类。
基于主机的检测:这类方法中,工业界较普遍的检测方法为直接使用已知关键词作为特征,使用grep语句搜索可疑文件后人工分析,或者使用程序定期检查已有文件的MD5值以及检查是否有新文件产生。这种直观地检测方法容易被攻击者使用混淆手段规避。
基于网络的检测:目前的现有方法主要集中于在网络入口处配置入侵检测***后者WAF来检测WebShell,通过分析HTTP请求中是否包括特殊关键词(例如,<form、<%、<?、<php等)来判断攻击者是否正在上传HTML或者脚本文件,即将所有上传HTML或脚本的行为识别为一次上传WebShell的攻击。这种方法需要很大的开销,还存在误报的可能性;并且只能检测到正在发生上传WebShell的行为,而对于已有的WebShell则无能无力。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于抽象语法树的递归循环神经网络的WebShell检测方法及其***。本发明中同时引入程序语言处理技术和深度学习技术,主要通过程序语言处理技术自动获取脚本的词法、语法信息,同时利用深度神经网络完成特征抽取和WebShell检测,主要针对主流的脚本语言,包括PHP、JavaScript、Perl、Python、Ruby等。本发明***主要包括三个模块,依次为利用程序语言处理技术的预处理模块、完成向量化表示的样本生成模块和利用深度学习技术的检测模块。本发明方法的部署成本低、可移植性好、检测准确率高。
以下是几种典型神经网络模型相关术语定义:
神经网络的运算公式可定义为:
其中,o(i)表示神经网络第i层的输出向量,o(i)的维度为该神经元数量(网络节点数);x(i)是网络第i-1层的输出,并作为第i层的输入;W(i)和b(i)是神经网络第i层的参数;称为激活函数,通常为非线性函数。该神经网络层被称为全连接层(Full Connectionlayer)。
循环神经网络(RNN,recurrent neural network)用于处理序列输入。循环神经网络每次处理一个输入序列元素,同时用一个隐藏式单元维护所有过去时刻序列元素的历史状态。
循环神经网络层计算公式为:
池化层(Pooling Layer)最早出现在卷积神经网络中,是一个在输入矩阵中滑动的下采样窗口。池化层每次在对应的矩阵子区域内按采样函数进行下采样,并按规定步幅滑动到下一位置,直到在整个输入矩阵内采样完毕,最终把采样结果矩阵输出到下一层。最常见的采样方式有最大值采样、最小值采样和均值采样。
拼接层(Concatenation Layer)负责将输入的k个向量合并成一个输出向量,即:
o=i1&i2&,…,&ik,其中&为连字符。
本发明提供的技术方案如下:
一种基于深度神经网络的WebShell检测方法,基于抽象语法树的递归循环神经网络(AST_RRNN,Recursive Recurrent Neural Network based on abstract syntaxtree),利用抽象语法树的层次化结构特征,针对主流的脚本语言进行WebShell检测;包括预处理过程、样本生成过程和检测过程;具体包括如下步骤(方案流程框图具体如图1所示):
A.脚本文件首先经过预处理:预处理模块包括词法分析器、语法分析器、简化,输入为脚本源代码,输出为抽象语法树AST(abstract syntax tree),具体如下:
A1.将程序代码进行词法分析,生成词法单元流;
A2.词法分析器对词法单元流进行语法分析,构造抽象语法树;
A3.简化步骤,主要是在语法分析步骤之后过滤掉语义无关信息,类如注释等。
B.样本生成。AST_RRNN的WebShell检测方法的样本生成模块包括两部分输入内容:简化后的AST和AST叶子节点。但是抽象语法树的大小(树的节点数)差异对检测模块的训练和预测带来不良影响,因此,向量化抽象语法树前,需要对抽象语法树进行压缩处理。并且样本生成模块负责将抽象语法树转化成一种便于检测模块训练和预测的向量化表达。抽象语法树的压缩步骤如下:
B1.抽象语法树的压缩,主要是利用n节点抽样子树和m叉树变换的概念和方法,以限制抽象语法树的大小,此外利用简单的特征工程方法完成对叶子节点的向量化表示。
B2.树节点的向量化表示。采用独热编码(One Hot Encoding)方法是最直观的向量化编码方法,采用独热编码向量化抽象语法树的节点v,记为one_hot(v),表示v的节点类型;采用词袋模型(Bag of Word)向量化抽象语法树T,记为BoW(T),表示T中各类型节点的数目。
B3.叶子节点的向量化表示,叶子节点均为标量(Node_Scalar)类型,包括整数、浮点数、字符串等。本方法仅关注字符串标量节点(Scalar_String),并对字符串标量节点抽取危险函数特征和字符串统计特征。
C.检测过程:采用深度神经网络作为检测模块。针对抽象语法树的树形结构,采用递归循环神经网络。包括如下过程:
C1.针对树形结构,本方案定义一种神经网络层:递归长短期记忆层(Recursive_LSTM,Recursive Long Short Term Memory Layer)。Recursive_LSTM层利用树的递归特性,树的向量表示由其根节点及子树集合的向量表示通过某种非线性运算产生。
C2.树形结构中根节点的向量化表示同B2中树节点的向量化表示;子树集合的向量表示通过将子树依次输入递归长短期记忆层计算生成。假设树T=(V,E)的根节点为r,记r的子节点集合为C={c1,c2,…,ci,…,c|c|},其对应的子树集合为其中ci为的根节点。则T向量化表示的计算公式为式1:
C3.利用Recursive_LSTM层,设计一个递归循环神经网络(RRNN)作为检测模块。RRNN的输入包括两部分:1)k个向量化的m叉树,代表抽象语法树的中间节点;2)定长的向量,表示抽象语法树的叶子节点。RRNN的运算过程描述如下:
C31.RRNN底端由k个共享权重的Recursive_LSTM层,对应处理k个m叉树,通过运算输出k×d维的特征,记为FeatureR=[f1,f2,…,fk]T。
C32.池化层(Pooling Layer)同时使用最大值、最小值、均值三种下采样函数对FeatureR按列进行下采样(pooling)操作。因此,池化层输出3个d维向量,记为Featurep=[fmax,fmin,fmean]T。
C33.拼接层(Concatenation Layer)将Featurep以及叶子特征对应的向量fs拼接成一个向量,即FeatureA=fmax&fmin&fmean&fs,(&表示拼接符);FeatureA是对信息熵、最长单词、
重合指数、压缩比、危险函数的表示;
C34.后续的全连接层利用特征FeatureA进行WebShell判定。
具体地,给定判定阈值,当FeatureA超过判定阈值限定时,识别为WebShell文件。
其中,判定阈值需要经过训练得到,根据准确率以及召回率,进行调节,并不是固定值。在训练判定阈值的过程中,设准确率Precision为U,召回率Recall为V,准确率U=提取出的正确信息条数/提取出的信息条数,又称为查准率;召回率V=提取出的正确信息条数/样本中的信息条数,又称为查全率。查准率和查全率两者取值均在0和1之间,数值越接近1,查准率或查全率就越高。判定阈值可根据准确率和召回率进行调节。本发明具体实施中,具体通过绘制Precision-Recall曲线来帮助调节分析,并选定参数。
本发明基于抽象语法树的递归循环神经网络检测方法。首先,利用词法分析器将脚本代码转化成抽象语法树。然后,发明一种抽象语法树的压缩算法。最后针对抽象语法树的结构特点,发明一种递归循环神经网络模型作为检测模块。
另一方面,本发明还提供了一种基于抽象语法树的递归循环神经网络的WebShell检测***,所述***包括:
1.预处理模块,利用语法分析器作为预处理模块,以脚本源代码为输入,通过语法分析,输出抽象语法树;
2.样本生成模块,AST_RRNN方法的样本生成模块负责将抽象语法树转化成一种便于检测模块训练和预测的向量表达。对抽象语法树的向量化表示分为两部分:1)采用特征工程,利用简单的匹配规则和统计量计算方法,对叶子节点进行向量化表示。2)对中间节点构成的抽象语法树部分,设计采样算法限制其规模,其基本思想是利用一组规模较小抽样子树替代原抽象语法树;
3.检测模块是一个深度神经网络模型,构造递归循环神经网络(RRNN)。自定义递归长短期记忆层Recursive_LSTM,提供对树形结构的自底向上的运算方式。RRNN网络由于输入为k个树形结构,RRNN的底端为k个共享参数的Recusive_LSTM层,其运算结果通过池化层处理后与叶子节点的向量表达拼接,并最终输入后续全连接层。
本发明的有益效果是:
本发明提供一种基于抽象语法树的递归循环神经网络的WebShell检测方法及其***。本发明中同时引入程序语言处理技术和深度学习技术,针对主流的脚本语言,包括PHP、JavaScript、Perl、Python、Ruby等,通过程序语言处理技术自动获取脚本的词法、语法信息,同时利用深度神经网络完成特征抽取和WebShell检测,主要包括三个模块,依次为利用程序语言处理技术的预处理模块、完成向量化表示的样本生成模块和利用深度学习技术的检测模块。利用本发明提供的技术方案进行WebShell检测具有以下优点:
1)自动提取特征,不再依赖特征工程;
2)可移植性好,其思路和流程适用于任何脚本语言;
3)作为静态检测方法,可以轻量级部署在Web服务器端,部署和检测成本都较小;
4)检测正确率高:通过多种试验方式对比,本发明基于抽象语法树的递归循环神经网络的WebShell检测方法不仅能够有效的应对一些比较新的WebShell类型文件(如0dayWebShell),对于一些变形、加密、已存在的WebShell文件,均有很好的查杀效果。
附图说明
图1是本发明提供的WebShell检测方法的流程框图。
图2是本发明实施例中的WebShell文件检测过程中的预处理模块的流程框图。
图3是本发明实施例中的WebShell文件检测过程中的样本生成模块的流程框图。
图4是本发明实施例中的WebShell文件检测过程中的检测模块的流程框图。
图5是本发明提供的***的组成框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种基于抽象语法树的递归循环神经网络WebShell检测方法及其***,***包括预处理模块、样本生成模块、检测模块;通过上述过程实现对网站WebShell文件的检测,本发明具体实施方式如下(本例中以PHP脚本为例进行说明,其他类型脚本语言同理):
A.预处理模块,本部分包括词法分析器、语法分析器、简化步骤,具体如下(如图2):
A1.词法分析器,包含程序代码(脚本源代码)的PHP类型文件F,经过词法分析之后,生成词法单元流WS;
A2.利用语法分析器PHP-parser对WS进行语法分析,构造出一颗抽象语法树AST。
语法分析过程通常会过滤掉语义无关信息,比如注释。语法分析基于词法分析,比词法分析规则更严格。同时,与词法单元流相比,抽象语法树能更准确的体现代码结构信息。
A3.简化抽象语法树,PHP-pharse解析后的抽象语法树结构清晰,但是略显冗余,需要对抽象语法树进行简化,简化步骤如下:
A31.删掉抽象语法树的所有叶子节点,同时为不损失叶子节点特征,样本生成模块采用简单的特征工程方法对叶子节点进行向量化处理;
A32.抽象语法树的中间节点只保留声明、表达式和标量节点类型,忽略辅助类型。
B.样本生成模块(具体如图3):
B1.抽象语法树的压缩,由于抽象语法树的大小(树的节点)差异对检测模块的训练和预测带来不良影响,因此在向量化抽象语法树前,有必要先对抽象语法树进行压缩处理。主要是采用n节点抽样子树和m叉树变换的概念和方法,以限制抽象语法树的大小。具体压缩步骤如下:
其中,T()函数为价值评估函数,用于评估自变量Fsub表示的抽样子树集合对WebShell判断结论的“价值”,或者理解评估Fsub对得到WebShell检测结论能贡献的信息量。T()函数的形式和含义需要自定义,价值评估函数定义为:
覆盖性σ()函数,本方案中期望Fselect中尽可能多的包含T中的节点,以获得T的更多信息。因此,定义覆盖性为Fselect在节点集合的大小与|V|的比值,公式:
可疑性函数。假设是抽象语法树T的两颗n节点抽样子树。若恰好对应源代码中WebShell功能部分,对应的无恶意的混淆代码部分,则在WebShell检测问题中,显然比更具有“可疑度”。同理,对于节点vi比vj更具有“可疑度”,因此,定义节点v的可疑度为:
其中,cv,webshell表示v在训练集中所有WebShell脚本中出现的次数,cv,all表示v在训练集中所有脚本中出现次数。定义n节点抽样子树Tsample的可疑度为其所有节点可疑度的均值:
相应地,定义Fselect的可疑度为Fselect中所有n节点抽样子树的可疑度的均值:
其中,Tree_Diversity()是树的距离算法,计算得到两棵树之间的距离。
树的距离算法Tree_Diversity()具体如下:
B13.对中的所有抽样子树,执行m叉树变换算法,记为m叉树变换算法将任意树的子节点规模限制为m,并且保证对任意规模为n的树,进行m叉树变换后的规模小于2n。将Ftransfer替代抽象语法树T,作为检测模块的输入。
m叉树变换算法。思路是:若节点v的子节点集合C超过规模限制,即|C|>m,则在v和C中间增加一层填充节点,直到v的子节点规模符合限制。填充节点只降低子节点规模,不包含任何语法语义信息,在向量表示时定义为0向量。具体算法如下:
假设Tsample为n节点抽样子树,经m叉树变换后得到的树Ttransfer显然满足子节点规模不大于m。m叉树变换过程引入的填充节点均为Ttransfer的中间节点,因此填充节点个数必然小于|Vsample|,即Ttransfer的规模小于2|Vsample|。
至此,针对抽象语法树的压缩过程完成。
B2.树节点的向量化表示。树节点的向量化表示采用独热编码(One HotEncoding)方法,该方法是最直观的向量化编码方法,采用独热编码向量化抽象语法树的节点v,记为one_hot(v),表示v的节点类型;采用词袋模型(Bag of Word)向量化抽象语法树T,记为BoW(T),表示T中各类型节点的数目。
假设Ttransfer={Vtransfer,Etransfer}由T={V,E}的一个n节点抽样子树经过m叉树变换生成。对Vtransfer的任意非填充节点v,记T和Ttransfer中以v为根节点的子树分别T(v)和在向量化过程中,v的向量化表示由两部分组成:第一部分用来表示节点v自身的类型,采用独热编码方式,记为:
Encode(v)=one_hot(v)
对于填充节点,规定两部分表示均为0向量。
B3.叶子节点的向量化表示,叶子节点均为标量(Node_Scalar)类型,包括整数、浮点数、字符串等。本方法仅关注字符串标量节点(Scalar_String),并对字符串标量节点抽取危险函数特征和字符串统计特征。
针对脚本语言建立危险函数列表,对照危险函数列表,查找字符串标量节点中是否包含危险函数字段。危险函数特征用词袋模型进行向量化表达。特征向量长度等于危险函数列表的长度;字符串统计特征,从数学的角度解释,当字符串经过混淆、编码、加密等模糊处理后,其中某些数学统计量往往会偏离正常脚本中的字符串的概率分布。这也是NeoPi(一款由Neohapsis发布在github上的开源工具)方法的基本原理。NeoPi是由Python编写的脚本工具,使用多种统计方法检测存在于文本及脚本文件中的恶意代码,NeoPi检测工具主要通过抽取文件的信息熵、最长单词、重合指数、特征、压缩比的值来进行检测。本方法选取NeoPi方法中字符串长度、重合指数、信息熵、文件压缩比4个重要指标,考察脚本中每个字符串常量。
字符串长度(Length of String)。正常代码中的字符串常量简洁明了,而部分WebShell将代码片段嵌入字符串常量,因而相较正常脚本,WebShell脚本中更可能出现长字符串。
重合指数(Index of Coincidence)。重合指数是用来判断文件是否被加密或编码的一种方式。其计算公式为:
IC(s)=∑(fi*fi-1)/N*(N-1)
其中,fi代表样本中字符i在字符串s中出现的频率,N为字符串长度。统计表明,有意义英文文本的重合指数为0.0667,而完全随机的英文字符串的指数0.0385。就是说,当一个英文字符串的重合指数接近0.0385时,我们刚倾向认为它被加密或者编码,从而进一步推断该脚本可能为WebShell。
信息熵(Entropy of Information)。信息熵是信息论中的基本概念,是对***有序化程度的一个度量。其计算公式:
H(s)=-∑pi*logpi
其中,pi字符串i在字符串s中出现的比例。由此,当字符串因加密或编码而伪随机化,其信息熵增大,因此信息熵值越大,WebShell的可能性越高。
文件压缩比,文件压缩比被定义为未被压缩的文件大小和压缩后的文件大小之比。数据压缩的实质,在于消除特定字符在分布上的不均衡,通过把短码分配给高频字符,而低频字符使用长码,来实现长度上的优化。一个网页文件被base64编码后,消除了非ASCII的字符,就会表现为更小的分布的不均衡,压缩比就会越大,其计算方法如下:
其中,zip()表示对数据进行压缩,length()表示计算数据长度。
C.检测模块(如图4)。采用深度神经网络作为检测模块,针对抽象语法树的树形结构,采用递归循环神经网络,具体如下:
C1.针对树形结构,本方案定义一种新的神经网络层:递归长短期记忆层(Recursive_LSTM,Recursive Long Short Term Memory Layer)。Recursive_LSTM层的基本思想为:利用树的递归特性,树的向量表示由其根节点及子树集合的向量表示通过某种非线性运算产生。
C2.根节点的向量化表示同于B2中树节点的向量化表示;子树集合的向量表示通过将子树依次输入长短期记忆层计算生成。形式化地,假设树T=(V,E)的根节点为r,记r的子节点集合为C={c1,c2,…,ci,…,c|c|},其对应的子树集合为其中ci为的根节点。则T向量化表示的计算公式为:
C3.利用Recursive_LSTM层,设计一个递归循环神经网络(RRNN)作为检测模块。RRNN的输入包括两部分:1)k个向量化的m叉树代表抽象语法树的中间节点;2)定长的向量表示抽象语法树的叶子节点。RRNN的运算过程描述如下:
C31.RRNN底端由k个共享权重的Recursive_LSTM层,对应处理k个m叉树,通过运算输出k×d维的特征,记为FeatureR=[f1,f2,…,fk]T。
C32.池化层(Pooling Layer)同时使用最大值、最小值、均值三种下采样函数对FR按列进行下采样(pooling)操作。因此,池化层输出3个d维向量,记为Featurep=[fmax,fmin,fmean]T。
C32.拼接层(Concatenation Layer)将Fp以及叶子特征对应的向量fs拼接成一个向量,即FeatureA=fmax&fmin&fmean&fs。(&表示拼接符)
C34.后续的全连接层利用特征FeatureA进行WebShell判定。
其中,判定阈值需要经过训练得到,根据准确率以及召回率,进行调节,并不是固定值。在训练判定阈值的过程中,设准确率为U,召回率为V,准确率U=提取出的正确信息条数/提取出的信息条数,又称为查准率;召回率V=提取出的正确信息条数/样本中的信息条数,又称为查全率。查准率和查全率两者取值均在0和1之间,数值越接近1,查准率或查全率就越高。判定阈值可根据准确率和召回率进行调节。一般来说,准确率Precision即检索出来的条目有多少是准确的,召回率Recall即所有准确的条目有多少被检索出来了。在实施中当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下是存在矛盾的。比如极端情况下,实验中只搜索出一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要判断是希望Precision比较高或是Recall比较高。
RRNN具体细节见表1-1。训练过程中,损失函数采用二分类交叉信息熵函数,训练方法采用方法SGD(随机梯度下降方法,stochastic gradient descent)),批训练每批次样本数为32,训练迭代次数1000。
表1-1 AST_RRNN方法检测模块参数的详细描述
下面通过实例对本发明做进一步说明。
实施例:
本方案采用的是有监督的方式训练,训练深度神经网络的主流方法是随机梯度下降方法(SGD)以及其变形形式。该方法每次向神经网络中输入一组训练样本,利用目标函数的值更新神经网络的参数,直到目标函数值收敛。具体更新方式是将神经网络中所有参数沿目标函数梯度下降的方向(导数的反方向)移动一小步。
本实例的样本集选取,样本集共包含大量的正常脚本和6669个WebShell脚本。从正常样本集合中抽取100000个脚本用于训练token的词向量。剩余的正常脚本随机抽取6669个,与所有WebShell脚本共同组成分类问题的训练集。
表1-2实例数据集的训练集和测试集的划分
训练集 | 测试集 | 总计 | |
WebShell脚本 | 5187 | 1482 | 6669 |
正常脚本 | 5187 | 1482 | 6669 |
1)首先,利用100000个PHP脚本的词法分析结果作为输入;
2)利用PHP-parser生成抽象语法树;
3)样本生成模块中4个关键参数的确定,①n:限制树的规模;②m:限制树的子节点规模;③K:抽样子树集合的大小;④k:最终输入m叉树的个数。在RRNN训练过程中,对任意抽象语法树T=(V,E),构造样本时,n固定为1000,m固定为10,K=min(50,),k=min(K,10)。当RRNN模型训练已经完成情况下,每次训练过程固定3个参数值,对剩余变量分别取不同的值,记录检测结果。
4)测试过程中发现,当n、m、K、k的取值增加时,AST_RRNN方法的检测效果通常会提高。因此,在检测过程中,可以根据抽象语法树大小,适当提高4个参数的取值,以提高检测的准确度。
AST_RRNN方法利用两类特征:①从叶子节点抽取的特征;②从抽象语法树中抽取的特征。在已训练的RRNN基础上,分别利用叶子节点特征和抽象语法树特征重新训练调整RRNN的参数。
1)使用叶节点特征和抽象语法树特征作为输入时,准确率0.9886;
2)仅使用叶子节点特征时,准确率0.7649;
3)仅使用抽象语法树特征时,准确率0.8659;
抽象语法树作为特征的检测效果明显高于以叶子节点作为特征的检测结果,这说明抽象语法树中的结构信息对于WebShell检测至关重要。并且,仅利用单一特征,无论是抽象语法树还是叶节点均会引起准确率至少10%以上的下降,这一现象是由于叶子节点特征刻画数据传递部分的关键信息,抽象语法树是对数据执行部分的准确描述,两者共同作用保证AST_RRNN方法的检测结果。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (10)
1.一种基于深度神经网络的WebShell检测方法,基于抽象语法树的递归循环神经网络,针对脚本语言自动获取脚本的词法、语法信息,利用抽象语法树的层次化结构特征完成特征抽取和WebShell检测,包括预处理过程、样本生成过程和检测过程;具体包括如下步骤:
A.脚本文件预处理过程:
输入为脚本源代码,预处理包括词法分析、语法分析、简化,输出为抽象语法树T=(V,E),其中V是T中叶子节点的集合,E是T中边的集合;
B.样本生成过程:
输入包括简化后的抽象语法树和抽象语法树的叶子节点;包括:对抽象语法树进行压缩处理和向量化抽象语法树,向量化抽象语法树包括树节点和叶子节点的向量化表示;
C.采用深度神经网络进行WebShell检测:针对抽象语法树的树形结构,深度神经网络采用递归循环神经网络;包括如下过程:
C1.针对树形结构定义一种神经网络层为递归长短期记忆层,所述递归长短期记忆层利用树的递归特性,由树的根节点及子树集合的向量表示,通过非线性运算产生树的向量表示;
C2.树形结构中根节点的向量化表示方法采用与步骤B中树节点的向量化表示相同的方法;树形结构中子树集合的向量表示通过将子树依次输入递归长短期记忆层计算生成;
C3.利用递归长短期记忆层,设计一个递归循环神经网络RRNN作为检测模块;
RRNN的输入包括:k个向量化的m阶多叉树,代表抽象语法树的中间节点;定长的向量,表示抽象语法树的叶子节点;RRNN的运算过程包括:
C31.RRNN底端包括k个共享权重的递归长短期记忆层,对应处理k个m叉树,通过运算输出k×d维的特征,记为FeatureR=[f1,f2,…,fk]T,fk为第k个d维特征向量;
C32.RRNN池化层同时使用最大值、最小值、均值三种下采样函数对FeatureR按列进行下采样操作,池化层输出三个d维向量,记为Featurep=[fmax,fmin,fmean]T,其中,fmax为池化层使用最大值采样函数输出的d维向量,fmin为池化层使用最小值采样函数输出的d维向量,fmean为池化层使用均值采样函数输出的d维向量;
C33.RRNN拼接层将Featurep及叶子特征对应的向量fs拼接成一个向量,得到拼接后的特征向量FeatureA=fmax&fmin&fmean&fs,&表示拼接符;
C34.RRNN全连接层利用特征向量FeatureA进行WebShell判定。
2.如权利要求1所述WebShell检测方法,其特征是,步骤脚本文件预处理过程具体为:
A1.将程序代码进行词法分析,生成词法单元流;
A2.对词法单元流进行语法分析,构造抽象语法树;
A3.对进行语法分析后的词法单元流进行过滤,去掉语义无关信息,以达到简化抽象语法树的目的。
3.如权利要求2所述WebShell检测方法,其特征是,步骤A3简化抽象语法树包括如下步骤:
A31.删掉抽象语法树的所有叶子节点,同时为不损失叶子节点特征,样本生成时采用简单的特征工程方法对叶子节点进行向量化处理;
A32.抽象语法树的中间节点只保留声明、表达式和标量节点类型,忽略辅助类型。
4.如权利要求1所述WebShell检测方法,其特征是,步骤B样本生成过程包括:
B1.抽象语法树的压缩:利用n节点抽样子树和m叉树变换方法,限制抽象语法树的大小;可利用特征工程方法完成对叶子节点的向量化表示;
B2.向量化表示树节点:向量化编码方法采用独热编码方法,采用独热编码向量化抽象语法树的节点v,记为one_hot(v),表示v的节点类型;采用词袋模型向量化抽象语法树T,记为BoW(T),表示T中各类型节点的数目;
B3.向量化表示叶子节点:对字符串标量类型的叶子节点抽取得到危险函数特征和字符串统计特征。
5.如权利要求4所述WebShell检测方法,其特征是,步骤B1具体压缩步骤如下:
其中,T()函数为价值评估函数,用于评估自变量Fsub表示的抽样子树集合对WebShell判断结论的“价值”,或者理解评估Fsub对得到WebShell检测结论能贡献的信息量;价值评估函数T()定义如下:
6.如权利要求5所述WebShell检测方法,其特征是,价值评估函数T()定义中,
其中,ω1、ω2、ω3为常数;优选地,ω1、ω2、ω3均设为1。
7.如权利要求5所述WebShell检测方法,其特征是,覆盖性函数σ()为Fselect在节点集合的大小与|V|的比值:
可疑性函数的定义为:假设是抽象语法树T的两颗n节点抽样子树;若恰好对应源代码中WebShell功能部分,对应的无恶意的混淆代码部分,则在WebShell检测中,比更具有“可疑度”;对于节点vi比vj更具有“可疑度”;定义节点v的可疑度为:
其中,cv,webshell表示v在训练集中所有WebShell脚本中出现的次数;cv,all表示v在训练集中所有脚本中出现次数;定义n节点抽样子树Tsample的可疑度为所有节点可疑度的均值:
相应地,定义Fselect的可疑度为Fselect中所有n节点抽样子树的可疑度的均值:
多样性函数π()的定义具体为:定义Fselect的多样性如下:
其中,通过Tree_Diversity()计算得到两棵树之间的距离。
9.如权利要求1所述WebShell检测方法,其特征是,步骤C34中,全连接层利用特征向量FeatureA进行WebShell判定,具体地,给定判定阈值,当FeatureA超过所述判定阈值时,识别为WebShell文件。
10.利用权利要求1~9所述WebShell检测方法实现的WebShell检测***,包括预处理模块、样本生成模块和检测模块;
所述预处理模块利用语法分析器,以脚本源代码为输入,通过语法分析,输出抽象语法树;
所述样本生成模块用于将抽象语法树转化成便于检测模块训练和预测的向量表达,包括:采用特征工程,利用简单的匹配规则和统计量计算方法,对叶子节点进行向量化表示;对中间节点构成的抽象语法树部分,通过采样算法限制规模,利用一组规模较小抽样子树替代原抽象语法树;
所述检测模块为深度神经网络模型,构造递归循环神经网络,自定义递归长短期记忆层,提供对树形结构的自底向上的运算;递归循环神经网络的底端为k个共享参数的Recusive_LSTM层,输入为k个树形结构,运算结果通过池化层处理后与叶子节点的向量表达拼接,最终输入全连接层进行WebShell检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710705914.1A CN107516041B (zh) | 2017-08-17 | 2017-08-17 | 基于深度神经网络的WebShell检测方法及其*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710705914.1A CN107516041B (zh) | 2017-08-17 | 2017-08-17 | 基于深度神经网络的WebShell检测方法及其*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107516041A CN107516041A (zh) | 2017-12-26 |
CN107516041B true CN107516041B (zh) | 2020-04-03 |
Family
ID=60723188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710705914.1A Active CN107516041B (zh) | 2017-08-17 | 2017-08-17 | 基于深度神经网络的WebShell检测方法及其*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107516041B (zh) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108376283B (zh) * | 2018-01-08 | 2020-11-03 | 中国科学院计算技术研究所 | 用于神经网络的池化装置和池化方法 |
CN108388425B (zh) * | 2018-03-20 | 2021-02-19 | 北京大学 | 一种基于lstm自动补全代码的方法 |
US11132444B2 (en) * | 2018-04-16 | 2021-09-28 | International Business Machines Corporation | Using gradients to detect backdoors in neural networks |
CN110502897A (zh) * | 2018-05-16 | 2019-11-26 | 南京大学 | 一种基于混合分析的网页恶意JavaScript代码识别和反混淆方法 |
CN109101235B (zh) * | 2018-06-05 | 2021-03-19 | 北京航空航天大学 | 一种软件程序的智能解析方法 |
CN108898015B (zh) * | 2018-06-26 | 2021-07-27 | 暨南大学 | 基于人工智能的应用层动态入侵检测***及检测方法 |
CN108985061B (zh) * | 2018-07-05 | 2021-10-01 | 北京大学 | 一种基于模型融合的webshell检测方法 |
CN109120617B (zh) * | 2018-08-16 | 2020-11-17 | 辽宁大学 | 基于频数cnn的多态蠕虫检测方法 |
CN109240922B (zh) * | 2018-08-30 | 2021-07-09 | 北京大学 | 基于RASP提取webshell软件基因进行webshell检测的方法 |
CN109462575B (zh) * | 2018-09-28 | 2021-09-07 | 东巽科技(北京)有限公司 | 一种webshell检测方法及装置 |
CN109657466A (zh) * | 2018-11-26 | 2019-04-19 | 杭州英视信息科技有限公司 | 一种函数级软件漏洞检测方法 |
CN109635563A (zh) * | 2018-11-30 | 2019-04-16 | 北京奇虎科技有限公司 | 用于识别恶意应用程序的方法、装置、设备及存储介质 |
CN109684844B (zh) * | 2018-12-27 | 2020-11-20 | 北京神州绿盟信息安全科技股份有限公司 | 一种webshell检测方法、装置以及计算设备、计算机可读存储介质 |
CN109905385B (zh) * | 2019-02-19 | 2021-08-20 | 中国银行股份有限公司 | 一种webshell检测方法、装置及*** |
CN111614599B (zh) * | 2019-02-25 | 2022-06-14 | 北京金睛云华科技有限公司 | 基于人工智能的webshell检测方法和装置 |
CN111611150B (zh) * | 2019-02-25 | 2024-03-22 | 北京搜狗科技发展有限公司 | 一种测试方法、装置、介质和电子设备 |
CN109933602B (zh) * | 2019-02-28 | 2021-05-04 | 武汉大学 | 一种自然语言与结构化查询语言的转换方法及装置 |
CN110086788A (zh) * | 2019-04-17 | 2019-08-02 | 杭州安恒信息技术股份有限公司 | 基于云WAF的深度学习WebShell防护方法 |
CN110232280B (zh) * | 2019-06-20 | 2021-04-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
CN110362597A (zh) * | 2019-06-28 | 2019-10-22 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
CN110855661B (zh) * | 2019-11-11 | 2022-05-13 | 杭州安恒信息技术股份有限公司 | 一种WebShell检测方法、装置、设备及介质 |
CN111198817B (zh) * | 2019-12-30 | 2021-06-04 | 武汉大学 | 一种基于卷积神经网络的SaaS软件故障诊断方法及装置 |
CN113094706A (zh) * | 2020-01-08 | 2021-07-09 | 深信服科技股份有限公司 | 一种WebShell检测方法、装置、设备及可读存储介质 |
CN111741002B (zh) * | 2020-06-23 | 2022-02-15 | 广东工业大学 | 一种网络入侵检测模型的训练方法和装置 |
CN112118225B (zh) * | 2020-08-13 | 2021-09-03 | 紫光云(南京)数字技术有限公司 | 一种基于RNN的Webshell检测方法及装置 |
CN112035099B (zh) * | 2020-09-01 | 2024-03-15 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112132262B (zh) * | 2020-09-08 | 2022-05-20 | 西安交通大学 | 基于可解释模型的循环神经网络后门攻击检测方法 |
CN112487368B (zh) * | 2020-12-21 | 2023-05-05 | 中国人民解放军陆军炮兵防空兵学院 | 一种基于图卷积网络的函数级混淆检测方法 |
CN113190849B (zh) * | 2021-04-28 | 2023-03-03 | 重庆邮电大学 | Webshell脚本检测方法、装置、电子设备及存储介质 |
US20220405572A1 (en) * | 2021-06-17 | 2022-12-22 | Cylance Inc. | Methods for converting hierarchical data |
CN113810375B (zh) * | 2021-08-13 | 2023-01-20 | 网宿科技股份有限公司 | webshell检测方法、装置、设备及可读存储介质 |
CN114462033A (zh) * | 2021-12-21 | 2022-05-10 | 天翼云科技有限公司 | 一种脚本文件检测模型的构建方法、装置及存储介质 |
CN114499944B (zh) * | 2021-12-22 | 2023-08-08 | 天翼云科技有限公司 | 一种检测WebShell的方法、装置和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101895420A (zh) * | 2010-07-12 | 2010-11-24 | 西北工业大学 | 快速网络流量异常检测方法 |
CN103971054A (zh) * | 2014-04-25 | 2014-08-06 | 天津大学 | 一种基于行为序列的浏览器扩展漏洞的检测方法 |
CN105069355A (zh) * | 2015-08-26 | 2015-11-18 | 厦门市美亚柏科信息股份有限公司 | webshell变形的静态检测方法和装置 |
-
2017
- 2017-08-17 CN CN201710705914.1A patent/CN107516041B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101895420A (zh) * | 2010-07-12 | 2010-11-24 | 西北工业大学 | 快速网络流量异常检测方法 |
CN103971054A (zh) * | 2014-04-25 | 2014-08-06 | 天津大学 | 一种基于行为序列的浏览器扩展漏洞的检测方法 |
CN105069355A (zh) * | 2015-08-26 | 2015-11-18 | 厦门市美亚柏科信息股份有限公司 | webshell变形的静态检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107516041A (zh) | 2017-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107516041B (zh) | 基于深度神经网络的WebShell检测方法及其*** | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN111428044B (zh) | 多模态获取监管识别结果的方法、装置、设备及存储介质 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与*** | |
CN108170736B (zh) | 一种基于循环注意力机制的文档快速扫描定性方法 | |
WO2020259260A1 (zh) | 一种结构化查询语言sql注入检测方法及装置 | |
CN111600919B (zh) | 智能网络应用防护***模型的构建方法和装置 | |
CN113596007B (zh) | 一种基于深度学习的漏洞攻击检测方法和设备 | |
Xiaomeng et al. | CPGVA: code property graph based vulnerability analysis by deep learning | |
CN113190849B (zh) | Webshell脚本检测方法、装置、电子设备及存储介质 | |
CN107229563A (zh) | 一种跨架构的二进制程序漏洞函数关联方法 | |
CN111597803B (zh) | 一种要素提取方法、装置、电子设备及存储介质 | |
CN111737289B (zh) | Sql注入攻击的检测方法、装置 | |
CN107341399A (zh) | 评估代码文件安全性的方法及装置 | |
CN114201406B (zh) | 基于开源组件的代码检测方法、***、设备及存储介质 | |
CN111758098A (zh) | 利用遗传编程的命名实体识别和提取 | |
CN109067708B (zh) | 一种网页后门的检测方法、装置、设备及存储介质 | |
CN115033890A (zh) | 一种基于对比学习的源代码漏洞检测方法及*** | |
CN112035099A (zh) | 一种抽象语法树中节点的向量化表示方法及装置 | |
CN113971283A (zh) | 一种基于特征的恶意应用程序检测方法及设备 | |
CN111562943B (zh) | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 | |
Jha et al. | Deepmal4j: Java malware detection employing deep learning | |
CN114722389A (zh) | Webshell文件的检测方法、装置、电子设备及可读存储介质 | |
Hrkút et al. | Current Trends in the Search for Similarities in Source Codes with an Application in the Field of Plagiarism and Clone Detection | |
CN117435246B (zh) | 一种基于马尔可夫链模型的代码克隆检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |