APP下载

基于城域网HTTP日志的WebShell检测方法研究

2018-05-21王林汝姬艳

江苏通信 2018年1期
关键词:字符日志分类器

王林汝 姬艳

1 江苏省互联网行业管理服务中心;2 中国电信股份有限公司江苏分公司

0 引言

WebShell就是以网页文件形式(如asp、jsp、php等类型)存在的一种命令执行环境,通常将其认为属于一种网页后门。这使得入侵者可以通过它来非法获取服务器系统权限,进而控制“肉鸡”发起DDos攻击,对网站内容进行篡改、在网页上挂木马病毒,作为隐藏自身的代理类服务器,对服务器内部进行扫描,对网页植入暗链/黑链等等。

最近几年,针对网站的隐蔽性攻击(如被植入后门等)表现出逐年稳定增长态势,国家互联网应急响应中心发布的《2016年中国互联网网络安全报告》中指出,2016 年,CNCERT/CC监测发现约 4 万个 IP 地址对我国境内82072 个网站被植入后门,其中政府网站有 2361 个,占境内被植入后门网站的 2.9%,网站数量较 2015 年增长 9.3%。

由于WebShell是使用HTTP协议进行木马上传及恶意操作,与被控制的服务器之间的通信是远程通过80端口进行传递,因此常规的防火墙很难以拦截此类攻击。并且使用WebShell进行攻击通常不会在被入侵系统的日志当中留下入侵痕迹,只会在网站的web日志当中留下一些数据提交历史记录,因此通过对HTTP日志进行分析来发现WebShell行为,是近期网络安全研究的热点。

1 相关工作研究

目前WebShell检测的方式主要分为静态检测和动态检测两方面[3]。当黑客使用WebShell来入侵服务器时,不管其操作是对文件进行上传或修改,都必然会有一个包含WebShell代码的文件,因此从文件代码入手,这是静态特征检测的思路;而当WebShell运行后,所有数据是通过HTTP协议进行传输,因此可以从HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测。

已有的研究工作当中,静态检测通过匹配已知WebShell的文件特征(如特征码、特征值、危险函数等)来实现WebShell检测方法,此类方法只能查找已知的WebShell,并且误报率漏报率会比较高,若配置的规则完善,则可以有效减低误报率,但是对于WebShell检测的漏报率则会相应提高。

而WebShell在代码执行当中所具备的特征,则称作动态特征。由于WebShell是通过HTTP协议进行通信,因此提取WebShell特有的HTTP请求/响应来形成特征库,对所有的HTTP请求日志进行匹配,这就是动态特征检测。

此外,还有通过对服务器内并部署的动态文件(如.php等)内的代码进行语法检测,根据对常用语言如php等采用扫描编译等方式,对代码和注释进行剥离,并对其中的变量、字符串、函数等语法结构进行归类和分析,进而来实现对于关键危险函数的检测发现;通过此方式可以完美解决漏报的情况;但误报上,仍存在问题。

已有的研究工作取得了一些科研成果,但存在以下不足:

(1)基于静态特征的检测方案当中,存在漏报率高且误报率高,无法及时发现0day型的WebShell,而且容易被代码混淆等方法绕过等等系列问题,并且由于需要配合人工进行二次检测,因此对于大型网站的WebShell检测而言需要的人力工作量很大;

(2)基于动态特征的检测方案,存在部署代价高,制定的规则需要频繁更新,并且无法发现经过混淆的恶意代码等缺点;

(3)对于基于语法检测的检测方案,需要大量已知的后门数据进行语法语义的分析训练,前期需要投入相当程度的成本,并且对于未发现的0day类型的WebShell无法检测发现,也无法发现经过混淆的恶意代码。

2 WebShell检测方案

2.1 方案分析

作者目前在工作中面临的实际问题是:

(1)如何处理海量的HTTP日志数据;

(2)如何实现对已知的WebShell和0day入侵的及时发现。

针对问题1:通过使用分布式计算框架来实现对于海量HTTP日志数据的处理;

针对问题2:则通过提取已知WebShell的访问参数进行训练从而实现对已知WebShell进行检测,统计单位时间内host的访问行为特征从而实现对未发现的0day类型WebShell进行检测,并使用机器学习分类器根据提取的特征进行训练,实现对WebShell的自动化实时检测。

2.2 特征选择

(1)访问参数特征选择

因为恶意WebShell的请求参数通常将包含特定的恶意代码或通过代码混淆实现上传恶意代码或进行操作,因此访问特征参数将从恶意代码匹配及代码混淆度进行检测。对于请求参数字段(对于GET方式,参数为url中?后的字符串,对于POST字段而言,则为post字段),依据&符号将参数字符串切割为单个参数,依据=符号将单个参数切割为key和value值。

1)恶意代码命中特征:根据已知的恶意WebShell日志及正常的HTTP访问日志,对日志内每个key/每个value及其是否为WebShell攻击进行关联分析,对关联度超过指定阈值的key或value判断为恶意代码,并依据关联程度及代码逻辑分析,结合已知WebShell恶意代码黑名单库,建立高嫌疑恶意代码库及低嫌疑恶意代码库。当有新的HTTP日志数据时,分别检测其中的访问参数命中高嫌疑恶意代码库及低嫌疑恶意代码库的次数,作为恶意代码命中特征。

2)最大参数字符长度:正常的HTTP请求参数通常由有意义的字符构成,字符长度不会太高。而WebShell的请求参数当中通常包含隐藏在参数中上传的文件代码,最大字符长度可能会较高。

3)请求参数最大字符熵值:正常的HTTP请求参数由明文构成,因此整体字符熵值较低。而通过代码加密或代码混淆的恶意代码,加密后整体字符分布呈现随机性,因此字符熵值较高。

4)字符重合指数:计算每个参数的平均字符重合指数,正常的HTTP访问参数通常是由有意义的字符组成,平均字符重合指数接近6.5%。而通过混淆或加密的WebShell代码字符分布比较随机,重合的字符较少,整体字符重合指数较低,接近随机分布3.5%。

(2)访问行为特征选择

1)请求方式访问占比:统计单位时间内对于指定host的各类HTTP请求方式(如GET/POST等)的比例,正常的访问行为下抓取网页内容当中GET类型的访问请求占比较高,而恶意WebShell请求由于需要上传代码或获取数据库内容,其POST类型的访问请求占比非常高。

2)总访问次数:统计单位时间类对于指定host的总访问请求次数,正常访问行为当中每分钟的访问次数稳定在一个合理区间,而遭到WebShell攻击入侵时,短期内将收到大量的非法访问请求,总访问次数将远高于正常值。

3)单IP访问次数最大占比:统计单位时间内对于指定host访问当中,所有源IP的访问次数占比,得到来访IP当中访问次数占比的最大值。在正常的HTTP访问行为中,通常每个来访IP的访问次数较为平均。而恶意WebShell访问当中,源自攻击者IP的单IP访问次数很高,因此单IP访问次数占比也很高。

4)动静态文件访问次数占比:统计单位时间内对于指定host访问当中,目的URL所属的类型比例。当被访问的URL包含动态文件后缀 ['‘jsp',‘php',‘asp',‘aspx',‘cgi'],则认为访问了动态文件,否则则认为该次访问属于访问静态文件。正常的HTTP访问请求当中,动态文件的访问请求比例通常低于静态文件的请求比例。但在WebShell请求当中,对于动态文件的访问占比远高于对静态文件的访问占比。

2.3 检测方案设计

依据上述的场景分析和特征选择,最终确定了一下8个特征作为后续机器学习训练所用参数,如表1所示:

(1)特征量化

对于全量的HTTP日志数据,将按目标host分别进行统计,设定单位时间为1分钟。

1)恶意代码命中特征:分别使用高嫌疑恶意代码库及低嫌疑恶意代码库对请求参数数据进行匹配,分别记录高嫌疑

表1 检测方案特征选择表

2)最大参数字符长度:对于请求参数内的多个参数,计算其每个参数内容字符长度data_length,并取其最大值max_data_length作为该项特征的值。若该项特征的数值越大,则属于WebShell行为的可能性越高。

3)请求参数最大字符熵值:对于请求参数内的多个参数,分别按照公式(1)计算域名di的域名字符熵:

并取最大值max_entropy作为该项特征的值。若最大字符特征熵值越大,则属于WebShell行为的可能性越高。

4)平均字符重合指数:对于请求参数内的多个参数,分别计算每个参数的请求值的字符重合指数,计算方式如下:如果英文的26个字母在文本中出现的概率分别为:p0,p1...p25,则该参数值的字符重合指数=p0^2+p1^2+p2^2...+p25^2;最终求的多个参数的字符重合指数并求其均值avg作为该项特征值。平均字符重合指数越高,则说明属于正常访问的可能程度越大。

5)请求方式访问占比:统计单位时间内对于指定host的GET类请求占比和POST类请求占比,类型的请求占比=该类型的请求次数/总访问次数。正常的HTTP访问请求当中GET类型请求方式的占比高于POST类请求次数的占比,而在WebShell行为当中,大部分的都是POST类型的请求,GET类型的请求占比较低。

6)总访问次数:统计单位时间内对于指定host的访问总次数sum_vivit_num;在正常的HTTP访问行为中,通常每个恶意代码命中次数High_evil_num和低嫌疑恶意代码命中次数normal_evil_num作为特征。高嫌疑恶意代码命中次数或低嫌疑恶意代码命中次数越高,则说明该属于WebShell行为的可能性越高。来访IP的访问次数较为平均。而恶意WebShell访问当中,源自攻击者IP的单IP访问次数很高,因此单IP访问次数占比也很高。

7)单IP访问次数最大占比:统计单位时间内对于指定host内每个IP的访问次数,单IP访问次数占比=单IP访问次数/总访问次数;并求出单IP访问次数最大占比。在正常的HTTP访问行为中,通常每个来访IP的访问次数较为平均。而恶意WebShell访问当中,源自攻击者IP的单IP访问次数很高,因此单IP访问次数占比也很高。

8)动静态文件访问次数占比:统计单位时间内对于指定host内目的URL所属的类型比例。当目的URL当中包含动态文件后缀 [‘jsp', ‘php', ‘asp', ‘aspx', ‘cgi'],则动态文件访问次数+1,否则静态文件访问次数+1;访问次数占比=动/静态文件次数÷总访问次数。正常的HTTP访问请求当中,动态文件的访问请求比例通常低于静态文件的请求比例。但在WebShell请求当中,对于动态文件的访问占比远高于对静态文件的访问占比。

(2)算法模型的选择

本次选择的分类算法模型是随机森林模型。随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的;在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类,随机森林算法对于多维特征的数据集分类有很高的效率,运行效率和准确率较高,实现起来也比较简单。

(3)整体方案流程

为了实现对已知WebShell行为的检测,需要从已知的恶意WebShell数据当中分析提取恶意代码特征,并结合公开的WebShell访问特征码建立恶意代码库,并对HTTP日志数据进行清洗过滤进行计算,整体方案流程如图1:

图1 整体方案流程图

整体方案分为4个阶段:

1)数据清洗阶段:数据清洗阶段负责对HTTP日志数据进行过滤和清洗,将符合筛选条件的HTTP日志按host和访问单位时间进行汇聚和统计,方便后续特征提取阶段。

2)特征提取阶段:依据上述的两大类共8个特征,对经过数据清洗的HTTP日志进行统计计算,将得到的特征值传输到后续阶段当中。

3)模型训练阶段:采用已知的WebShell日志记录及正常的HTTP访问记录提取到的特征值放入分类器进行训练和调优,通过多种常用分类器模型的效果对比,选择表现较优的分类器模型作为最终检测模型。

4)实时检测阶段:将单位时间内的实时数据提取到的特征值放入训练好的模型进行判断,若检测出告警,则依据访问参数及IP访问比例检出恶意访问IP,并将检测结果进行存储和上报。

3 实际效果评估与分析

3.1 实际数据来源

对江苏省2017年10月某周的7天脱敏后host中包括gov.cn的HTTP日志数据来进行检测,数据总记录条数约为2.23亿条。收集的HTTP日志数据包括以下的字段,如表2所示:

表2 HTTP日志字段格式表

3.2 分类器测评

本方案抽取正常HTTP日志记录50000条记录和已知WebShell日志30000条记录,共计80000条数据作为训练数据集;并在整体数据库当中随机抽取10份数据样本,每一份数据样本包含5000个正常HTTP访问记录和3000个WebShell记录,作为测试数据集。最后取10份 测试数据集的得分平均值,作为评判该模型性能的最终得分。

将训练得到的分类器和基于决策树C4.5得到的分类器以及基于逻辑回归的分类器从准确率、召回率和F1分数三方面进行性能比对,如表3所示。

3.3 真实数据检测

通过对7天共2.23亿条host以Gov.cn为结尾的HTTP日志进行检测,过滤掉平均每分钟访问次数小于10条的非热门访问后,对余下的近2千万条访问记录进行检测。共发现非法访问行为14万条,高嫌疑入侵IP七个。通过数据分析发现,通常入侵者是采用程序自动实现漏洞扫描上传代码获取服务器信息等工作,平均每分钟的动态文件访问次数超过3000次,动态文件访问占比超过90%。

表3 分类器的性能比对表

4 结束语

通过对WebShell行为的分析,总结和提取和WebShell在实现过程呈现的8个特征,进一步结合机器学习方法及大数据平台实现了通过HTTP日志数据对已知类型和0day类型的WebShell的检测方法。通过不同分类器模型的对比试验和使用真实的HTTP日志数据检测的实验结果表明,本方法在对于海量的HTTP日志数据当中发现WebShell行为具有实际应用价值,下一步将对检测出的WebShell行为进行深度研判及溯源分析。

猜你喜欢

字符日志分类器
一名老党员的工作日志
扶贫日志
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
雅皮的心情日志
雅皮的心情日志
基于差异性测度的遥感自适应分类器选择
基于实例的强分类器快速集成方法