1 Webshell 简介

2 检测方案

3 结 语

jsp的repeaterWebshell 检测综述 jQuery

随着Web技能的快速发展,Web功能的增强,越来越多的运用选择通过Web为用户供应做事。
大量的Web运用在丰富和便利了人们的日常生活和事情的同时也暴露了大量的攻击面,导致大量Web做事器时常遭受攻击。
攻击者在攻陷Web做事器后常日会在Web做事器上植入Webshell,并利用它来掌握Web做事器。
据微软公司的研究报告显示,从2020年8月到2021年1月,均匀每月在做事器上碰着此类威胁的

次数为140 000次,险些是上一年77 000次月均的两倍。
Webshell可以为攻击者供应一种伪装成与合法流量稠浊的通信信道,利用该信道可以实现对失落陷网络的持久访问。
Webshell恶意软件是一种长期存在的普遍威胁,能够绕过很多安全工具的检测。

网络攻击者一样平常通过Web运用的自身漏洞或者与其干系的其他失落陷主机进行Webshell的支配,Webshell可以作为一个持久性的后门,或者作为一个中继节点将攻击者的命令通报给其他系统。
攻击者常常将多个失落陷系统上的Webshell串联起来,从而实现跨网络流量的通报。

最开始Webshell都是明文传输的,并且通信流量也都未采纳任何保密方法,于是安全研究职员从Webshell或者其通信流量中提取明文特色码,然后通过检测特色码实现对Webshell的检测。
随即,为了绕过检测工具,攻击者采取了稠浊和加密技能对Webshell进行稠浊、加密,或者将Webshell代码嵌入到正常文件中。
这对Webshell的检测造成了很大的困扰,如何准确地检测出Webshell,阻挡基于Web的攻击已经成为网络安全领域的研究热点。
许多研究职员在Webshell检测领域进行了深入研究,并提出了一些卓有成效的方法。
这些方法紧张集中在文件检测和流量检测两种不同的技能路线上。

本文将从攻击事理和逃逸手段两个方面对Webshell进行先容,再从文件和通信流量两个方向上先容现有的Webshell的检测方案,并提出未来可能的技能路线。

1 Webshell 简介

Webshell因此ASP、ASPX、JSP、PHP等Web脚本形式存在的一种代码实行环境。
网络管理职员利用它可以进行做事器、网站后台的管理,而攻击者利用它可以掌握做事器实行一些特定的命令,以完成信息网络、数据盗取、系统破

坏等操作。
攻击者首先利用做事器的漏洞将具有特定功能的Webshell脚本上传到做事器,然后通过访问该Webshell脚本,在做事器上远程实行命令。

1.1 攻击事理

Webshell的种类有很多,由于不同脚本其自身的措辞特性,所实现的Webshell代码构造也有很大的差别。
虽然Webshell在代码表现形式上有很大的不同,但它们实现攻击的实质是一样的。
本文以PHP Webshell为例。

为了丰富用户体验,现在的Web运用程序都具有交互特性,即同一个页面可以根据用户的需求呈现不同的内容。
用户在访问做事器时可以在要求中携带参数,做事器收到要求后解析参数,根据不同参数的含义实行对应的操作,然后再将实行结果返回给用户。
一旦Webshell脚本被植入到做事器,攻击者就可以利用Web运用程序的交互特性访问Webshell脚本,Web容器收到要求后会解析要求中的参数,然后调用相应的阐明器实行Webshell脚本,并将解析好的参数通报给Webshell脚本。
一个PHP Webshell代码如图1所示。

图 1 一句话 PHP Webshell

图1中$_REQUEST[‘password’]可以获取用户Web要求中的password参数值,这是由PHP措辞支持的。
如果用户在要求中将password参数设置为一段PHP代码,那么这段代码将会通过eval函数被PHP阐明器实行。
攻击者可以通过这段代码完成诸如系统命令实行、文件操作、数据库操作等任务,以实现信息网络、数据盗取、主页修改等功能。

eval函数的浸染是将参数字符串当作PHP代码去实行,除此以外,在PHP中的system、exec、shell_exec、passthru、proc_open、show_source、parse_ini_file、popen等函数以及动态函数都具有命令或代码实行功能,这是通过Webshell实现攻击的一个主要缘故原由。

可以看到,在全体攻击过程中,参数通报属于正常的超文本传输协议(Hyper Text Transfer Protocol,HTTP)交互,所实行的函数也是编程措辞本身的功能,这就给Webshell的检测带来了很大的难度。
随着时期和技能的变迁,涌现了以下4类常见的Webshell。

(1)通用型Webshell。
通用型Webshell的功能比较全,对应的脚本文件也会比较大,它会调用许多系统关键函数,并且常日会对代码进行加密以隐蔽自己。

(2)单一型Webshell。
单一型Webshell是功能比较单一的Webshell,一样平常只包含一个功能,常见的Webshell功能包含打包网站源码、导出网站数据库、上传通用型Webshell等。

(3)一句话Webshell。
顾名思义,一句话Webshell脚本中只包含一条代码,一样平常这条代码可以实行任意通过参数通报过来的代码或命令,如图1所示。
一句话木马适用场景广泛,既可单独以文件的形式存在于Web目录中,也可嵌入其他文件中。
由于只有一行代码,以是暴露出来的特色也会比较少,通过适当变形可以很随意马虎绕过查杀。

(4)内存Webshell。
内存Webshell是在内存中写入恶意代码并实行,以达到远程掌握Web做事器的目的。
内存Webshell利用了一些Web中间件的漏洞实行某些恶意代码,过程中不会有文件落到磁盘中,检测难度比较大。

1.2 逃逸手段

为了避免被查杀,攻击者采取了多种办法对Webshell进行变形或者对通信流量进行加密,常用的方法包括以下6点。

(1)插入注释。
在代码段中插入注释信息,注释信息不会影响程序的正常实行,但是对检测工具会造成一定的滋扰。

(2)字符串编码/加密。
对代码中的一些关键字符串用Base64或其他编码办法进行编码,更有甚者利用约定好的加密办法进行加密,在调用的时候动态地进行解码或者解密。

(3)形状稠浊。
对代码中的变量名、函数名等标识符用一些无意义的符号进行等价变换,变得让人难以剖析、理解。

(4)逻辑稠浊。
通过插入分支、插入循环等办法变换程序的掌握流程,让程序变得难以被剖析。

(5)字符串拆分。
对付一些关键字符串,可以拆成很多段,用多个不同的参数进行通报,末了在利用的时候再进行拼接。

(6)通信流量加密。
可以通过约定好的,或者协商出来的加密方法对通信流量进行加密。

2 检测方案

根据上面的先容,利用Webshell掌握失落陷主机紧张经历两个阶段:一个阶段是Webshell文件上传,另一个阶段是命令实行。
Webshell文件由于须要通过实行攻击者发送过来的一些命令来掌握Web做事器,以是它与普通Web页面脚本之间存在较大的不同。
其余,由于获取的信息以及获取信息的办法与正常Web页面要求之间的巨大不同,攻击者利用Webshell实行命令期间,与Web做事器间的通信流量和正常页面要求的流量之间也存在较大不同。
以是本文关于Webshell的检测研究也紧张从文件和通信流量两个方面进行。

只管有许多方法可以检测Webshell,但检测Webshell依然是比较困难的,由于攻击者可以很随意马虎地利用加密、编码、稠浊等办法对Webshell脚本文件和流量进行修正,导致检测方法顾此失落彼,以是最为有效的检测方法是构建一个同时利用多种检测方法的纵深防御体系。

在检测Webshell过程中,无法避免将正常文件缺点标记为Webshell的情形,当一个潜在的Webshell被检测到之后须要结合其他手段,乃至通过人工的办法去确认Webshell的真实性。

2.1 基于文件的检测

基于文件的检测方法紧张从文件操作、文件之间的关系和文件内容这3个方面对文件进行剖析,进而创造潜在的Webshell文件。

2.1.1 基于文件操作的检测方法

Webshell文件一样平常都是由攻击者在攻陷了一个Web做事器后放置在做事器上的Web目录中,它紧张通过在Web目录下新增一个文件,或者修正现有的文件来实现。
可以用OSSEC、audit、dnotify等工具对Web目录及其子目录下的文件进行监控,一旦创造文件创建或者修正就进行告警,由安全专家进行剖析,或者调用其他自动化剖析工具对创建或者修正的文件进行剖析,从而识别出攻击者上传的Webshell。

基于文件监控的方法可以及时、高效地检测出可疑文件,但这些可疑文件究竟是不是Webshell还需依赖其他剖析工具或者人工剖析(由于一些正常业务也涉及新文件创建和修正),并且该方案须要在各个做事器上安装干系的文件监控软件,这在一些场景下是不被许可的,总体支配本钱较高。

2.1.2 基于文件连接关系的检测方法

一个Web站点常日包含非常多的页面,记住每个页面的地址并在地址栏中输入地址进行访问显然是不现实的,为了方便用户操作,一个页面中每每包含很多指向站点内其他页面的链接,用户通过这些链接就可以访问站点内的险些所有页面。
对付那些通过文件上传植入到Web做事器上的Webshell来说,正常页面中险些不会有指向Webshell脚本的链接,攻击者都是通过直接访问它的路径去实行特定操作的,以是Webshell脚本常日是一个或几个伶仃的页面。
基于这一点可以将一个站点看作一个有向图,站点中的每个页面对应图中的每个节点,不同页面间的链接指向关系对应图中的有向边。
在这个有向图中,如果一个节点的入度很大,则表明有许多其他节点对应的页面中包含有指向该节点对应页面的链接,它为正常页面的概率也就很大。
相反,如果图中一个节点的入度为0(或者很小)或者几个节点组成的强连通子图的入度为0(或者很小),则这些节点对应的页面是非常的概率就很大。

基于上述设想可以基于主动扫描与被动访问相结合的办法将一个站点的页面关系图创建出来,打算图中节点的入度,如果入度为0或者入度相较于其他节点来说小很多,则节点对应的页面有很大概率是非常的。
该方案可以通过网页之间的链接关系创造潜在的非常页面,但无法确定这些非常页面是否是Webshell,常日须要借助其他剖析工具进行进一步的剖析。
其余如果站点内的页面很多,创建出来的页面关系图会很大,图的干系算法的效率也会大幅低落。

2.1.3 基于文件内容的检测方法

基于正则表达式的特色码方法是最早被广泛用来进行Webshell检测的一种方法。
这种方法须要研究职员对已知的Webshell脚本进行研究,从中提取特色码,做成一个特色库。
在检测阶段用待检测文件的内容去匹配特色库,如果匹配到一个特色库,则认为待检测文件是一个Webshell文件。
这种方法的特点是操作大略、检测速率快,但是它也有明显的缺陷:为了担保检测准确率须要频繁更新特色库,人力耗费比较大,无法检测未知的Webshell,随意马虎被经由稠浊和加密的Webshell绕过。

为理解决基于传统检测方法所碰着的问题,机器学习技能被用来进行Webshell文件的检测,实践证明基于机器学习的方法在Webshell中起到了主要浸染。
个中,与Webshell干系的特色工程在基于机器学习的检测中扮演了主要的角色。
与之干系的特色选择紧张分为文本特色和语法特色两种类型。

文本特色无须考虑脚本的编程措辞特性,仅从字符、单词、标点符号等分布情形去实现Webshell的检测。
Behrens等人设计实现了一种基于统计方法的检测工具——NeoPI。
该工具试图从最长字符串、信息熵、重合因子3个方面判断一个文件包含稠浊代码的可能性。
由于正常的脚本文件里面的单词常日都是比较短的,但是经由稠浊、编码之后每每会产生很长的单词,识别出这些反常的长单词有助于识别稠浊代码。
信息熵可以用来度量一段信息的混乱程度,信息熵越大,则信息越混乱。
Webshell脚本文件为了绕过常规的检测会对它的一些内容进行加密,加密后的数据每每比较混乱,导致信息熵变大,因此利用信息熵可以识别稠浊代码。
重合因子是一种在密码剖析和自然措辞剖析中常用的技能,NeoPI只能用来度量一个文本文件或脚本文件经由稠浊或者加密的可能性,但是无法用来确定该文件便是Webshell文件,以是仅用它来检测Webshell脚本的效果并不好,其发展重点在于作为一种赞助工具,结合其他检测方法进行检测。

胡必伟等人提出了一种基于贝叶斯理论的Webshell检测模型,首先从文件中提取最长单词长度、压缩率、重合因子等特色进行剖析,然后演习一个贝叶斯分类进行Webshell的检测。
胡建康等人提出了一种基于决策树的检测模型,从文件中提取出单词数量、文本行数、函数调用模式的数量等特色作为特色向量去演习决策树模型,并用演习好的模型进行检测。
该模型虽然在实验数据集上取得了不错的效果,但在实际运用中效果不佳,紧张是由于提取的单词数量、文本行数、函数调用模式的数量等特色对付Webshell脚本和正常文件的区分度不大。
LYU等人提出了一种利用卷积神经网络检测Webshell的方案,该方案首先利用除英文和阿拉伯数字外的字符作为分隔符对文件进行分词,然后选择Word2vec算法对词进行向量化编码,末了用卷积神经网络演习一个二分类模型。
该方案不须要人工提取特色,设想利用深度神经网络强大的学习能力直接从文本文件学习出Webshell脚本文件和其他文件之间的差异。
虽然深度学习具有直接从原始数据中提取特色并进行学习的能力,但是这严重依赖于样本的质量和数量,如果有足够多的高质量样本,演习出的模型是可以学习到Webshell脚本和其他文件之间的真正的差异的。
在现实中,能获取到的Webshell样本数量是比较少的,并且质量也无法保障,因此演习出来的模型每每是过拟合的,在演习集上表现很好,但在实际运用中表现较差。

Webshell脚本都是符合某种编程措辞语法的脚本,将其当作普通文本进行剖析会丢失许多有代价的信息。
利用措辞语法层面的特色进行剖析可以更随意马虎地区分Webshell脚本和普通脚本文件。

孟正等人提出了一种从页面属性和页面操作角度基于支持向量机(Support Vector Machine,SVM)分类进行Webshell检测的模型,通过对常见Webshell脚本代码进行剖析,从脚本文件中提取出页面长度、代码行数、注释个数、加解密函数调用、system/eval/exec/shell_exec函数调用、系统函数调用、字符操作类函数调用、系统函数调用、文件操作类命令、ftp操作类命令、数据库操作类命令等作为特色向量,然后用SVM算法进行分类。
该方案从Webshell实行事理上进行了剖析,提取出Webshell脚本实行过程中常用且正常的Web脚本中不常用的一些函数作为特色,可以有效减少数据噪声的滋扰,同时也降落了对样本数据量的哀求。
但是一些经由稠浊的脚本险些无法从中看到上述函数或者命令的身影。
为理解决这个问题,Pan等人[9]提出了从PHP代码中提取Opcode序列作为一种主要特色,同时结合信息熵、最长单词长度、数据压缩比、关键函数或黑名单函数的调用情形等静态统计特色布局一个特色矩阵,然后用SVM、卷积神经网络(Convolutional Neural Networks,CNN)平分类模型进行演习,演习好的模型被用来检测Webshell。
Opcode是PHP代码实行过程中的一种中间码,PHP源码经由词法剖析、语法剖析后,再通过PHP的Zen引擎处理后会天生Opcode序列,在天生Opcode序列的过程中实在已经去除了绝大部分的稠浊,以是这种方法能有效检测经由稠浊的Webshell脚本。
但是Opcode目前仅在PHP中相比拟较随意马虎获取,其他类型的脚本暂时还无法轻易获取类似PHP Opcode的中间码。

2.2 基于通信流量的检测

由于所要完成的功能不同,攻击者访问Webshell脚本所产生的流量和正常Web页面要求所产生的流量模式是不同的,基于通信流量的检测便是通过对流量进行剖析创造不同平凡的流量。
基于流量的检测是基于文件检测的一个主要补充,在某些场景下获取文件并对其进行检测是困难的,并且还有一些Webshell是基于内存的,无法通过文件的办法进行检测,这时基于流量的检测就成为最主要的检测办法。

2.2.1 流量内容

Tian等人提出了一种利用卷积神经网络对流量内容进行剖析的Webshell检测模型,该方案首先对http要求内容进行分词,并用word2vec算法进行向量化表示,然后基于“长截短补”的原则将http要求表示成为固定大小的矩阵,末了演习出一个卷积神经网络模型进行Webshell检测。
虽然该模型在实验中取得了不错的效果,但是因演习样本不敷导致的过拟合问题依旧存在,并且该模型无法处理经由加密的流量。
为了绕过安全检测设备的检测,越来越多的Webshell抛弃了明文传输数据的办法,转而采取加密流量进行通信。

Zhang等人提出了一种在字符级利用卷积神经网络和是非时影象网络检测Webshell的模型,该方案分别从要求的统一资源定位系统(uniform resource locator,URL)和要求体中提取固定长度的字符,并将这些字符的ASCII码值作为特色向量输入到一个卷积神经网络,再将卷积神经网络的隐蔽层输出作为是非时影象网络的输入进行分类。
该方案将流量看作字节流进行处理,用大量的明文Webshell流量进行学习是可以学习到一些Webshell流量特色的。
并且理论上该方法也适用于加密Webshell流量,但是须要利用大量采取各种加密算法加密的Webshell流量进行演习。

2.2.2 流量行为

许多Webshell为了绕过基于流量内容的检测工具对其通信流量进行了加密,有些在加密前会有一个握手协商阶段,有些则省略了协商阶段直接从第一个报文开始进行加密。
有握手协商阶段的Webshell可以利用协商阶段的特色进行检测,但仅仅利用这些特色是不足的,仍会产生较高的误报率,没有握手协商阶段的Webshell由于没有什么明文的特色可以用来进行检测,以是产生的误报率会更高。
虽然流量内容是被加密的,但是流量的交互行为是无法加密的,可以通过对流量的交互行为进行剖析,从而实现对Webshell通信流量的检测。

Stergiopoulos等人提出了一种利用传输层行为特色检测加密流量的方案,该方案提取每个方向上每个报文负载大小、要求报文应答报文负载比、要求报文之间韶光间隔、要求相应报文之间韶光间隔等作为特色向量,然后演习一个分类器去识别攻击流量。
Yu等人在传输层干系行为特色的根本上增加了加密协议握手阶段的明文特色,并以指定的滑动窗口为单位打算均值、方差等统计量来扩展特色,然后用堆叠自编码器检测加密的攻击流量。
虽然采取这些基于流量行为的检测方法在一定程度上能够在加密流量中检测出攻击流量,但可利用的特色偏少,总体误报率偏高。

3 结 语

本文紧张从文件和流量两个角度对近几年安全领域针对Webshell检测的研究成果进行系统的总结,剖析了不同类型检测技能所具有的上风及其局限性。
鉴于稠浊、加密等技能在Webshell中的广泛运用,通过单一手段检测Webshell变得越来越困难。
更有效的办理方法是建立一种多层次检测系统,综合利用文件侧和流量侧多种检测技能在攻击的不同阶段对Webshell进行检测。
目前的检测手段虽然能够应对一些常规的Webshell攻击,但是对付一些精心布局的Webshell攻击越来越显乏力,由于攻击者为绕过检测会刻意隐蔽许多信息,这导致从单一角度获取到的有效信息会很少。
要办理这个问题,未来须要重点研究如何将流量侧、文件侧、系统日志侧等各种来源的数据有机地整合在一起,用一种有效的表征办法进行表示,然后利用机器学习算法进行剖析,以进一步提高检测效果、降落误报率。

引用格式:孙昊翔,曹浪,吴迪锋,等.Webshell检测综述[J].信息安全与通信保密,2022(9):82-90.

作者简介 >>>

孙昊翔,男,高等安全咨询顾问,紧张研究方向为网络安全、渗透测试、漏洞挖掘;

曹 浪,男,学士,软件工程师,紧张研究方向为渗透测试、主机安全风险评估模型;

吴迪锋,男,学士,助理工程师,紧张研究方向为网络安全检测模型剖析与运用、网络安全非常流量检测、网络安全风险评估;

谭 天,男,硕士,高等工程师,紧张研究方向为安全检测引擎、AI 安全。

选自《信息安全与通信保密》2022年第9期(为便于排版,已省去原文参考文献)