APP下载

基于文本特征和日志分析的Webshell检测

2022-03-23常昊陈岑张铮李鸣岩

网络安全技术与应用 2022年2期
关键词:特征分析日志代码

◆常昊 陈岑 张铮 李鸣岩

基于文本特征和日志分析的Webshell检测

◆常昊 陈岑 张铮 李鸣岩

(国网河南省电力公司电力科学研究院 河南 450000)

Webshell植入后门攻击是目前网络入侵的常用手段之一,有着隐蔽性高,危害性大的特点,攻击者通过混淆代码等免杀技术会绕过目前检测手段,导致现有方法无法及时地检测出Webshell。本文提出了一种将文本特征分析和日志分析结合的方法,利用Webshell和正常页面在文本特征上的显著差异与访问时产生的行为模式异常的特点对Webshell进行检测。

Webshell;网络入侵;文本特征;日志分析

Webshell是一种常见的网站服务器被入侵后留下的后门程序,指的是以PHP、JSP、ASP等以动态网页脚本形式存在的命令执行环境。如果入侵者通过网站的命令执行或上传文件等漏洞上传后门页面,在服务器上植入了Webshell,那么就可以对服务器上的文件执行上传、修改、查看、删除操作,甚至可以在服务器上运行系统命令,从而使用它进一步展开攻击,例如:篡改网页、获取数据、内部扫描、植入木马等,在整个攻击链中,Webshell通常被用于权限维持并作为下一步入侵的跳板[1]。网站后门植入仍然是目前主要的网络安全攻击手段之一,由于其有着极强的隐藏性以及可以实现灵活的操作,许多入侵者通过Webshell长期稳定地控制系统,同时用户对此也毫无察觉,因此其危害不容小觑。在2020年一年的时间内,CNCERT/CC总共检测到我国境内有53171个网站被植入了后门,其中政府机构的网站有256个[2]。2016年至2020年的几年中,我国境内被植入后门网站的数量呈周期性变化趋势,峰值最高达到84850,如果快速而精准地识别Webshell是当前网络安全的一大难题。

通常情况下,攻击者利用Webshell展开网络攻击是最重要的一环,也是开始展开攻击的信号,因此如何快速地定位和检测Webshell文件是目前急需解决的问题。目前而言,检测Webshell的技术多种多样,但单使用某一种检测方法局限性较大,准确率或系统资源开销方面无法同时得到保障。因此,本文提出了一种将网页文本特征和网站日志结合分析的检测Webshell的方法,旨在提高检测准确率降低系统资源开销,提高系统安全性。

1 相关研究

目前,主流的检测Webshell的方式有静态分析、动态检测、日志分析、机器学习检测大致四类。

1.1 静态分析

静态分析可以通过对文本的语义、语法分析,从而判断是否为高危文件,如易楠进行的基于语义分析的Webshell检测方法[3]。也可以根据文本属性特征去判断是否为Webshell,属性特征包括文本的特征码、危险函数、文件关联度、信息熵、函数调用等,当特征属性满足条件时则判断为Webshell,Truong Dinh Tu等人将文本恶意特征作为判断依据的方法[4],Ben Hagen等人使用NeoPI工具计算特征值的方法[5]。此种判断方法检测方便,检测速度较快,但缺点也十分明显,只能检测当前已知的Webshell,对于0day或混淆过的文件仍旧可以避开Webshell的检测,导致漏报率较高。

1.2 动态检测

动态检测方式是对网站流量、系统进程或系统调用的异常行为进行检测。当Webshell被访问时,产生的网络流量和正常页面产生的网络流量有着较大差别,通过流量的差异可以对Webshell进行检测[6],也可以通过扩展PHP对代码进行hook从而对Webshell的危险函数进行捕获[7]。此种判断方法检测实时性较高,当有Webshell被访问时可以及时将其检测出来,但由于需要开启扫描和监控系统,进程和流量需要消耗额外的系统资源或设备,部署成本较高。

1.3 日志分析

日志分析检测的方法是通过分析网站访问日志的方式来检测Webshell。Webshell通常有访问频率低、访问时间异常、url异常或无意义等特点,因此可以根据网站运行期间产生的日志进行模式匹配从而对Webshell进行检测,如石刘洋使用的基于Web日志对Webshell进行检测的方法[8]。但此类方法实时性较低,无法及时发现Webshell。

1.4 机器学习检测

机器学习检测Webshell的方式是目前较为热门的Webshell检测方式,以PHP代码为例,通常需要先将代码转为AST抽象语法树或者OPCODE,之后使用TF-IDF进行特征提取[9],挑选特征集使用机器学习模型进行训练,最终对Webshell进行预测。如Handong Cui等人使用随机森林模型检测Webshell方法[10]和Longchen Qi等人使用深度学习检测Webshell方法[11]对Webshell都有着较好的鉴别能力,机器学习检测的方法目前对于大部分的Webshell检测都有着较好的检测效果,但也存在一些缺点,例如需要训练样本多,模型调参困难,部署成本高等因素,且对于代码混淆或冗余代码过多的Webshell检测效果仍旧不是很理想。

2 本文方法

本文中主要使用文本特征分析的方法结合Web日志对Webshell进行检测。当两类检测结果有任何一个被检测为是Webshell时,则认为被检测对象为Webshell,同时检测该页面或行为所关联的页面,降低漏报率。由于正常的代码文件和Webshell文件的文本特征有着明显的差距,许多Webshell有着代码混淆、文本长度过短、孤岛文件等特点,对此可以使用文本特征分析法,文本特征分析主要根据文件的信息熵、文本长度、引用数量、压缩比、重合指数等参数对文件进行Webshell的分类,但由于此种方法为静态分析,可能会对0day或做免杀处理的Webshell无法判断造成漏报,因此可以和日志中的用户访问的行为模式相结合,判断所访问页面是否为Webshell,从而提升检测的准确率。检测流程如图1所示。

图1 检测流程

检测流程可以分为文本特征分析和日志分析两部分。

2.1 文本特征分析

正常页面和Webshell在文本特征方面有着显著的区别,例如:正常页面的代码可读性较好,文件的格式较为整洁,文件的长度适中或较长,大部分文件都会相互引用,而Webshell文件长度较短,孤岛文件情况较多,在代码经过混淆的情况下,可读性极差。首先对文本进行预处理,接下来根据这些文本特征,对文本文件进行统计学相关的特征分析。最后将特征结果放入使用正常代码训练的LightGBM模型中进行预测。

(1)文本预处理

在进行特征计算之前需要对待检测页面进行文本的预处理,通常情况下,页面中的标签、注释等内容对于文件实际执行的结果不会产生影响,但注释的内容可能会有额外的含义,因此,在进行特征计算前,需要先将待检测文本中的标签去除掉,并将注释的内容进行分词处理,为后续特征计算的内容做准备。

(2)文本特征计算

本文提出的文本特征分析方法中,主要选取以下几个特征值:文件信息熵、文件文本长度、文件引用数量、文本压缩比、重合指数、关键词匹配、文件名含义、字符数量比等在内的十多种文本特征。文件引用的数量可以被称为文件的出度,自身被引用的数量可以被称为入度,当文件出度与入度均为0时,称之为孤岛文件,通常情况下木马文件的入度与出度均为0,即不被其他文件所引用,自身也不引用其他文件,如果某文件疑似Webshell,且出现出度不为0的情况,应加倍注意,此时可能存在当前Webshell去引用植入的另外一个后门的情况。下面以编码过的php一句话Webshell为例,其文件入度与最长语句长度两个特征值可以充分反映Webshell的特征。

代码1 编码后的一句话木马 ');include('user_aut4.php');?>

经过编码后的代码如果使用普通的静态检测技术是无法进行特征匹配的,因为特征库无法涵盖所有的混淆或加密过的PHP代码,除此之外还有运算符号变形、字符串拼接、编码等绕过防御手段,此时如果使用文本特征值去分析则可以很好地分辨出Webshell的特征。

以上特征从不同方面较为完整地反映了文本的结构信息。将待检测文本计算出以上特征值后,交给LightGBM模型进行Webshell的预测。

(3)LightGBM模型

GBDT是机器学习中一个一直比较热门的模型,核心思想是使用弱分类器迭代训练得到最优化的模型,此类模型具有不易过拟合、预测效果准确的特点。

LightGBM是一个GBDT算法的实现框架,具有更快的训练速度、更低的内存消耗、更好的准确率的特点,在当前的实际工作当中有着较好的应用,根据文本特征对文本进行分类的效果十分优秀。

2.2 日志分析

日志是Web服务器运行时产生的记录文件,该文件记录了所有访客访问的页面、时间、访客IP、请求状态码等信息。下列以一条Apache的NCSA日志为例进行分析,日志数据字段如表1所示。

Apache服务器日志 58.61.122.14 - - [22/Feb/2020:09:51:46 +0800] “GET /HTTP/1.1″ 206 6326”http://www.google.cn/search?q=webdataanalysis” “Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1)

>表1 日志字段

字段名称实例 访问者IP58.61.164.141 访问时间22/Feb/2020:09:51:46 +0800 请求方法GET 访问路径/ 协议HTTP/1.1 状态码206 数据大小6326 来源页面http://www.google.cn/search?q=webdataanalysis 用户代理Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

日志中保留了许多有用的访问信息,通过对日志进行清洗、预处理和行为模式分析,便可以判断访问页面是否为Webshell。

(1)日志预处理

日志预处理需要先将日志里和Webshell检测时无关的条目去除掉,首先需要将日志中访问状态码为不是200的条目去除掉,绝大多数情况下只有状态为200的访问才是有效的访问,其次由于入侵者植入后门时也可以将php文件伪装成图片类的文件或将php文件修改后缀为php3或phtml等后缀,因此仅将后缀为html、js、css等静态资源文件的访问记录也进行清理。此时,清理过的日志记录中仅保留以php、jpg、png、gif、phtml等为后缀的访问记录。

(2)日志行为模式分析

通过对已有的Web日志做分析发现,正常页面的访问模式和Webshell的访问模式有着较大的差别。正常页面的文件名一般情况下均有实际意义,访问频次非常高,且通常情况下访问时间都为非休息时间,数据大小因为页面内容的原因,通常情况下会比较大,用户代理也为正常的浏览器代理信息;Webshell页面通常情况下文件命名杂乱无实际意义,访问频次非常低,且访问时间通常异于正常页面,因为不需要额外的内容显示,数据大小也明显会小很多,如果仔细观察Webshell产生的日志信息还会发现,来源页面的信息通常为空,因为Webshell大部分情况下均为孤岛文件。

以上仅为对日志中单个属性分析观察得到的正常页面和Webshell之间的差距,当将日志文件当作数据流,把每一个日志条目当作一个行为的话,还可以对Webshell的行为模式进行匹配,例如:用户访问的文件后缀与文件路径不符;用户访问的文件名为非法文件名后缀。当日志中匹配到以上行为模式时,均可以认为已经被植入了Webshell。此时结合之前进行的文本特征分析,将用户行为模式分析结果和文本特征分析结果联合起来检测Webshell。此外检测结果的准确率会随着Webshell的访问行为模式匹配规则的优化而提高,应时常维护行为模式匹配库。

3 实验验证

3.1 实验数据源

文本特征分析的代码数据分为正常的样本和Webshell样本,其中,正常样本选取目前Github上最受欢迎的五个框架,分别是:Laravel、Symfony、Codelgniter、Yii和cakephp,而Webshell代码则从选取来自Github的部分代码仓库和从网络上搜集的各种类型的样本,数据来源如表2所示。

表2 数据来源

样本类别来源 正常样本https://github.com/laravel/laravel 正常样本https://github.com/symfony/symfony 正常样本https://github.com/bcit-ci/CodeIgniter 正常样本https://github.com/yiisoft/yii2 正常样本https://github.com/cakephp/cakephp Webshellhttps://github.com/tennc/webshell Webshellhttps://github.com/JohnTroony/php-webshells Webshellhttps://github.com/xl7dev/WebShell Webshellhttps://github.com/BlackArch/webshells

Webshell数据集中包含了jsp、asp、php等多种语言的恶意代码,其攻击逻辑类似,本文仅针对php代码生成的Webshell做检测。

日志分析样本采用蜜罐系统产生的日志,截取包含有Webshell攻击记录前后的部分日志,所截取的日志条目的数量大致在10万条数据,用以分析攻击者行为模式。

实验验证分析待检测数据使用公司遭受到网络攻击的服务器的日志和全部代码,截取其中大致20万条的日志数据。

3.2 实验参数

对于文本特征分析,主要选用文件信息熵、文件文本长度、文件引用数量、文本压缩比、重合指数等多种文本特征值,如表3所示。

表3 文本特征

序号特征序号特征 1信息熵10注释段关键词匹配数量 2文本长度11最长语句长度 3文件引用数量12符号与数字、字母数量比 4文件被引用数量13代码是否二次编码 5文本压缩比14死循环逻辑数量 6重合指数15使用$变量名调用函数的次数 7特殊符号数量16字符串拼接次数与代码长度比 8代码段关键词匹配数量17文件后缀是否异常 9代码段关键词匹配位置18文件名是否有意义

使用全部正常样本和Webshell样本数据作为训练集,对训练集预处理后进行特征属性计算,最后使用LightGBM机器学习模型算法进行训练,然后对待检测数据中的所有文本文件进行预测。

LightGBM模型的训练,学习率设置为0.1,由于训练样本相对较小,为了防止过拟合,将树的深度设置为3。

日志分析,需要将日志中Webshell访问的行为模式进行分析和总结,对蜜罐系统日志所截取的10万数据进行分析后,得到Webshell访问模式的特点,行为模式总结如表4所示,Webshell的访问特点一般情况下满足以表中的模式组合。

表4 Webshell访问行为模式

序号行为模式 1同一个IP连续使用多个不同用户代理,或使用antSword/v2.0等字段的用户代理 2访问以php3、phtml、php大小写混写为后缀的页面 3访问以.php、.jpg等类型为后缀的文件(或png、gif等) 4访问如http://www.xx.com/test.php/1.jpg 5同一IP连续使用GET和POST方法请求无含义文件名文件 6访问时间明显异于其他文件 7使用POST方法请求返回数据包大小明显不同于其他文件 8页面来源为空 9访问文件类型与路径不符(如在静态资源文件夹下访问php文件)

本文中所做实验将使用部分行为模式的组合进行检测。

3.3 实验结果

将数据源中的正常样本和Webshell样本预处理后,对其计算文本特征值,以其中五个特征值为例,计算结果的平均值如表5所示。

表5 文本特征值计算结果

类别数据集信息熵最长语句长度被引用次数文本压缩比重合指数 正常样本laravel4.73475.5361.3640.4520.0861 正常样本symfony4.99860.1723.0930.4070.0785 正常样本CodeIgniter5.21096.41600.3840.0423 正常样本yii25.13070.2232.2860.3790.0719 正常样本cakephp5.00652.1013.1830.4240.0735 Webshelltennc/webshell5.53710513.7900.5450.0404 WebshellJohnTroony/php-webshells5.5478328.08500.3900.0418 Webshellxl7dev/WebShell5.6047711.61700.4020.0421 WebshellBlackArch/webshells5.6223213.93200.3430.0382

观察可以看出,正常样本的信息熵特征值普遍小于Webshell样本集,正常样本重合指数普遍大于Webshell样本,文件被引用数量普遍具有明显差异,样本集中Webshell被引用数量均为0,最长语句长度特征值差异最大。

经过训练后,使用LightGBM模型对实验数据中的20万余条日志条目和系统代码进行分析预测,配合Web日志进行分析后,准确率可以达到96.71%。

使用目前较为流行的Webshell检测软件D盾可以对经过语法特征匹配的Webshell轻松检测出,但并不能检测出经过部分代码编码或免杀处理的Webshell。如代码1中所示的代码段,通过计算,在进行文本特征分析阶段就可以将其检测出。经过验证使用该方法对目前较为难检测的经过代码编码的Webshell和免杀处理的Webshell都有着较好的检测结果。

该方法结合用户访问产生的日志中的行为模式对Webshell进行综合判断,弥补了单使用静态文件分析的灵活性不足的问题,综上所述,使用文本特征分析结合日志分析检测Webshell的方法可行。

4 结束语

本文首先说明了目前存在的多种Webshell的检测方法的优点与缺点,单独使用某一种方法都无法十分准确地识别Webshell,然后提出了一种使用文本特征分析和Web日志分析相结合的Webshell检测方法,将静态文本分析的实时性与日志分析的动态检测相结合,降低检测方法的漏报率,最后经过实验验证,该方法拥有者较好的准确率,证明了本文提出的方法具有可行性。

[1]龙啸,方勇,黄诚,等.Webshell研究综述:检测与逃逸之间的博弈[J].网络空间安全,2018,9(01):62-68.

[2]国家计算机网络应急技术处理协调中心. 2020年中国互联网网络安全报告[EB/OL].https://www.cert.org.cn/publish/main/upload/File/2020%20Annual%20Report.pdf.2021-07-21.

[3]易楠,方勇,黄诚,等.基于语义分析的Webshell检测技术研究[J].信息安全研究,2017,3(02):145-150.

[4]T. Dinh Tu,C. Guang,G. Xiaojun and P. Wubin, "Webshell detection techniques in web applications,"Fifth International Conference on Computing,Communications and Networking Technologies(ICCCNT),Hefei,China,2014,pp. 1-7. doi:10.1109/ICCCNT.2014.6963152.

[5]Scott Behrens,Ben Hagen. Web Shell Detection Using NeoPI.2011-4-14.[EB/OL]https://resources.infosecin stitute.com/topic/web-shell-detection/

[6]赵运弢,徐春雨,薄波,等.基于流量的WebShell行为分析与检测方法[J].网络安全技术与应用,2018(04):8-9.

[7]康志辉.基于PHP扩展的webshell检测研究[J].科技传播,2015,7(19):123-124.

[8]石刘洋,方勇.基于Web日志的Webshell检测方法研究[J].信息安全研究,2016,2(01):66-73.

[9]赵瑞杰,施勇,张涵,等.基于TF-IDF的Webshell文件检测[J].计算机科学,2020,47(S2):363-367.

[10]H. Cui,D. Huang,Y. Fang,L. Liu and C. Huang, "Webshell Detection Based on Random Forest–Gradient Boosting Decision Tree Algorithm,"2018 IEEE Third International Conference on Data Science in Cyberspace(DSC),Guangzhou, China,2018,pp. 153-160. doi:10.1109/DSC.2018.00030.

[11]L. Qi,R. Kong,Y. Lu and H. Zhuang,"An End-to-End Detection Method for WebShell with Deep Learning,"2018 Eighth International Conference on Instrumentation & Measurement,Computer,Communication and Control (IMCCC),Harbin,China,2018,pp. 660-665.doi: 10.1109/IMCCC.2018.00143.

猜你喜欢

特征分析日志代码
2013—2020年开封地区无偿献血人群HIV感染状况及特征分析
一名老党员的工作日志
1822号台风“山竹”演变特征分析
穆夏艺术特征分析
近60年银川气温变化特征分析
扶贫日志
雅皮的心情日志
创世代码
创世代码
创世代码