webshell是Web攻击中常见的一种木马形式,目前主流的检测方法都是基于HTTP请求和响应流量的内容特征,然而在HTTPS协议下,很多webshell检测机制是无能为力的。冰蝎这类加密型webshell的出现更是增加了检测难度,尤其是冰蝎3.0版本采用预共享密钥机制,即使在HTTP场景中的检测也是有一定难度的。本文通过提取网络流量中的若干特征,主要针对访问同一HTTPS网站的正常加密流量和webshell加密流量的分类进行了探索,实现了在HTTPS加密流量中webshell通信流量的识别,无论对于冰蝎2.0还是3.0升级版,都能够达到很好的识别效果。
由于Web服务具有很强的便利性,已经被越来越多地用于提供信息服务,然而其中的数据和用户信息也成为了很多不法分子获利的目标。webshell是一种基于Web服务的后门程序,提供了对各种关键功能的远程访问,例如执行任意命令、遍历文件目录、查看和修改任意文件、提升访问权限等。所以如何有效地识别出webshell文件或通信是一个亟待解决的问题。
目前较为成熟的webshell检测方法一般有三种:日志检测、文件检测和流量检测,主流的检测方式都必须由人工构建字符特征作为输入参数,然而攻击者可以通过对webshell代码进行变形从而达到绕过检测的目的,并且随着越来越流行的加密型webshell的出现和HTTPS加密流量的广泛使用,无疑给webshell检测带来了更大的挑战。
本文利用流量检测的方式并基于统计特征,聚焦于在HTTPS加密流量中识别出包含冰蝎在内的webshell通信流量,分别从数据采集、特征提取、模型训练和预测、特征重要性分析等方面展开阐述。
冰蝎是目前比较流行的加密型webshell客户端,它可以在通信过程中建立加密隧道,以躲避安全设备的检测。近期发布的3.0版本,对通信流量产生影响的主要是密钥交换方式的改变,其余都是一些功能上的改进。除了对一些bug的修复,涉及到流量变化的修改具体是:
1、去除动态密钥协商机制,采用预共享密钥,全程无明文交互;
2、请求体增加了随机冗余参数,避免防护设备通过请求体大小识别请求。
为了采集流量数据,我们自建了一个网站,并且安装使用了自签名证书,使得访问该网站的流量都是TLS加密的。所以无论是常见的非加密型webshell还是冰蝎这类加密型webshell,访问该网站产生的都是HTTPS流量。
我们目前共收集了访问该网站的具有代表性的6种类型的流量数据,分别是正常访问的流量、两类页面性webshell的流量和三类客户端型webshell的流量,其中客户端型包括使用量最大的中国菜刀和对流量进行加密的冰蝎,近期也特别收集了新发布的冰蝎3.0的流量。
由于本文旨在研究访问同一HTTPS网站的正常加密流量和webshell加密流量的分类,所以将所有数据分为正常和webshell两种类型,分别标记为0和1。每种数据的标签和数量如表3.1所示,这里数据量的单位是数据包利用Joy解析之后双向网络流的数量。
表3.1 数据集的标签和数量统计列表
调用Joy对数据包进行解析,得到json格式的解析结果,经过处理后提取出五种主要的数据米素,包含六百多维特征,分别是:
(1)数据流米特征
(2)数据包包长序列
(3)数据包时间间隔特征
(4)数据包字节分布特征
(5)数据包TLS特征
据观察,对访问同一HTTPS网站的webshell流量和正常流量作对比,具有如下表3.2中所列的几个特点。
表3.2 访问同一HTTPS网站的webshell流量和正常流量对比
关于熵值,如果数据经过加密或编码处理,那么它的熵值就会变大,所以webshell在熵值特征上与正常流量的区别符合常理。
使用LightGBM作为webshell流量识别分类模型,一些重要参数的设计如下:
learning_rate=0.1
n_estimators=200
colsample_bytree=0.9
num_leaves=7
subsample=0.9
(1)在冰蝎3.0发布之前,我们已经收集了表3.1中除冰蝎3.0之外的所有数据,并做了一些研究,分别进行了下面三个小实验。
实验一:使用所有流量,随机选出20%作为测试集,剩余的随机选出20%作为验证集,其他80%作为训练集,整体准确率较高,实验结果显示,测试集中只有一条流被分类错误,准确率为96.9%。
实验二:由于数据量较少很可能导致过拟合,所以进行了交叉验证,预留出页面型No.2的数据作为测试集,使用其余的数据作为训练集和验证集,实验结果显示,16条数据流中预测正确的是15条,准确率是93.7%。
实验三:由于冰蝎2.0是当时数据集中唯一的加密型webshell,所以单独预留出冰蝎2.0的数据作为测试集,使用其余的数据作为训练集和验证集,实验结果显示,22条数据流中预测正确的是18条,准确率是81.8%。
从实验一和实验二可以看出,模型经过训练之后,对访问同一HTTPS网站的正常流量和webshell流量具有较好的识别能力。实验三则证明了webshell本身是否是加密类型对模型的识别能力没有任何影响,即使在加密型webshell并不存在于训练集中的情况下,模型依然能识别出冰蝎的流量。
(2)最近冰蝎发布3.0版本,虽然功能上的改进对流量识别影响不大,但是我们想看看密钥交换方式的改变对流量识别的影响,所以在前面实验的基础上继续研究。我们新收集了3.0版本的冰蝎访问自建HTTPS网站的流量,由于网站的TLS证书已经发生变化,为了避免TLS相关特征对实验结果的影响,以下实验只使用了前四种数据米素,包含四百多维特征。
实验四:使用之前的所有数据进行训练和验证,将冰蝎3.0流量作为测试集输入训练好的模型中进行测试,实验结果显示,24条数据流中预测正确的是23条,准确率是95.8%。
实验五:因为之前的数据中有冰蝎2.0产生的流量,为了避免不同版本冰蝎的相似性对实验结果造成的影响,去掉训练集中的冰蝎2.0数据,让训练集中不包含任何加密型webshell流量,还是使用冰蝎3.0的流量作为测试集,实验结果显示,24条数据流中预测正确的是23条,准确率是95.8%。
从实验四可以看出,在模型对访问同一HTTPS网站的正常流量和webshell流量具有识别能力的情况下,模型依然能够识别新版本的冰蝎流量,也就是冰蝎3.0流量的出现并没有影响模型的识别能力。实验五则证明了和实验三相同的结论,即webshell本身是否是加密类型对模型的识别能力没有任何影响。
如图3.1所示,分别顺序展示了五个实验的重要程度较高的10个特征,column列表示特征所在的维度,importance列表示特征重要程度,数值越大,重要程度越高,按降序排列。
图3.1 五个实验的特征重要性
表3.1中观察到的后两个特征入流的包数量和总熵分别是第0维和第8维特征,由图3.1可以看出,两者都发挥了比较重要的作用,而TLS特征并没有发挥任何作用,符合观察到的特点。另外,虽然每次模型训练使用到的特征重要性不尽相同,但也可以发现,一些重要的特征基本不变,只是特征重要程度有所变化。
本文主要研究了访问同一HTTPS网站的正常加密流量和webshell加密流量的分类问题,实验结果表明,经过训练的模型不仅对正常加密流量和包含冰蝎在内的webshell加密流量具有较好的识别能力,而且即使在训练集中只包含非加密型webshell的情况下,模型依然能够识别冰蝎这类加密型webshell,冰蝎3.0版本也不例外。
当然这只是一个初步探索,未来还有很多工作需要继续。首先,数据对机器学习模型的训练非常重要,本文实验中用到的数据量是较少的,虽然能在一定程度上说明问题,但是还需要更多的数据来进行验证;其次,webshell的检测需要结合安全专家知识提取出更有区分度的特征,好的特征工程直接决定了模型效果的上限;最后,数据平衡、模型调优等都是机器学习方法中不可缺少的部分,对模型预测结果有着积极的作用。
https://mp.weixin.qq.com/s/XMLK5OCpH9pICD9EL9nugA