冰蝎全系列有效:针对 HTTPS 加密流量的 webshell 检测研究

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 通信流量,分别从数据采集、特征提取、模型训练和预测、特征重要性分析等方面展开阐述。

二、冰蝎3.0

冰蝎是目前比较流行的加密型 webshell 客户端,它可以在通信过程中建立加密隧道,以躲避安全设备的检测。近期发布的3.0版本,对通信流量产生影响的主要是密钥交换方式的改变,其余都是一些功能上的改进。除了对一些 bug 的修复,涉及到流量变化的修改具体是:

  1. 去除动态密钥协商机制,采用预共享密钥,全程无明文交互;
  2. 请求体增加了随机冗余参数,避免防护设备通过请求体大小识别请求。

三、webshell 加密流量检测

1. 数据集

为了采集流量数据,我们自建了一个网站,并且安装使用了自签名证书,使得访问该网站的流量都是 TLS 加密的。所以无论是常见的非加密型 webshell 还是冰蝎这类加密型 webshell,访问该网站产生的都是 HTTPS 流量。

我们目前共收集了访问该网站的具有代表性的6种类型的流量数据,分别是正常访问的流量、两类页面性 webshell 的流量和三类客户端型 webshell 的流量,其中客户端型包括使用量最大的中国菜刀和对流量进行加密的冰蝎,近期也特别收集了新发布的冰蝎3.0的流量。

由于本文旨在研究访问同一 HTTPS 网站的正常加密流量和 webshell 加密流量的分类,所以将所有数据分为正常和 webshell 两种类型,分别标记为0和1。每种数据的标签和数量如表3.1所示,这里数据量的单位是数据包利用 Joy 解析之后双向网络流的数量。

表3.1 数据集的标签和数量统计列表

标签流量类型webshell 类型双向流数
0正常非 webshell64
1页面型页面型No.126
1页面型页面型No.216
1客户端型中国菜刀201622
1客户端型冰蝎2.022
1客户端型冰蝎3.024

2. 特征提取

调用 Joy 对数据包进行解析,得到 json 格式的解析结果,经过处理后提取出五种主要的数据元素,包含六百多维特征,分别是:

(1)数据流元特征

(2)数据包包长序列

(3)数据包时间间隔特征

(4)数据包字节分布特征

(5)数据包 TLS 特征

据观察,对访问同一 HTTPS 网站的 webshell 流量和正常流量作对比,具有如下表3.2中所列的几个特点。

表3.2 访问同一 HTTPS 网站的 webshell 流量和正常流量对比

特征区别
TLS 特征完全相同
入流的包数量正常加密流量通常较多,而 webshell 一般较少
总熵正常加密流量一般会大 webshell 一个数量级

关于熵值,如果数据经过加密或编码处理,那么它的熵值就会变大,所以 webshell 在熵值特征上与正常流量的区别符合常理。

3. 模型训练和测试

使用 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 本身是否是加密类型对模型的识别能力没有任何影响。

4. 特征重要性分析

如图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

Spread the word. Share this post!

Meet The Author

Leave Comment