标签(空格分隔): Paper
模式匹配不适用于加密数据流,实现了一种有监督的机器学习方法来学习网络流的数据特征,进而对恶意加密流量进行分类,最终错误率可以降到 0。网络流数据特征包括五分钟时间窗口内的 TLS 握手元数据、DNS 与加密流相关联的上下文流、HTTP 上下文流的 HTTP 头
深度包检测和签名匹配都不足以应对加密流量的威胁,而对流量的解密则削弱了用户隐私,不仅如此,对流量的解密不是在任何时刻都能起作用,而且这是一个计算密集型的任务
基于沙盒样本以及大型企业网络收集的数据训练有监督的机器学习算法,这样绕过对加密流量的解密,通过学习恶意加密流量的数据特征来识别恶意加密流量的存在
主要做到了以下几点:
- 利用上下文信息识别加密流量中的威胁
- 超高的准确率
- 真实环境下进行检测确认并非因为过拟合
恶意流量和良性流量的 TLS 使用差别很大,可以使用提供的密码套件,TLS 扩展和客户的公钥长度来简单说明这些差异
TLS 密码套件可以分为可接受和过时的两类,恶意软件通常提供一组三个过时的密码套件,包括 0x0004(TLS_RSA_WITH_RC4_128_MD5),而良性流量中 0x002f(TLS_RSA_WITH_AES_128_CBC_SHA)是最多的
客户端支持的 TLS 扩展中差别似乎不大,恶意流量与良性流量都选择使用 0x000d(signature_algorithms),而恶意软件通常更少选择 0x0005 (status request)、0x3374 (next protocol negotiation) 和 0xff01 (renegotiation info)
客户端的公钥长度是另一个区分点,大部分的 DMZ 流量使用 256 位的椭圆曲线密码作为公钥,但大多数恶意流量使用 2048 位 RSA 作为公钥
恶意流量通常选择已经过时的密码套件,DMZ 流量包含服务器支持的 TLS 扩展的大量变体
恶意流量和 DMZ 的证书链数量大致相同,但长链中 70% 是自签名的恶意软件,1% 是自签名的 DMZ 流量。
有效期有显著差异
DNS 域名也可以从 SNI 和 SAN 中获得
指标 | 正常 | 恶意 |
---|---|---|
长度 | 6-7 | 6/10 |
非字母占比 | 高 | 低 |
关联 IP | 少 | 多 |
TTL | 60/20/30/300 | 300 |
我们在 DMZ 收集了 1743842 条 HTTP 流记录,在 ThreatGRID 收集了 1004798 条 HTTP 流记录
我们的工具解析流中所有可能的头字段和值,这比 Web 日志信息更丰富
指标 | 正常 | 恶意 |
---|---|---|
常见字段 | Server, Set-Cookie, Location | Connection, Expires, Last-Modified |
常见内容类型 | image/* | text/*; text/html; charset=UTF-8 and text/html; charset=utf-8 |
服务器端 | 无版本的 Apache/Nginx,几乎所有的 AmazonS3 与 Nginx 1.4.7 | 无版本的 Nginx,几乎所有的 LiteSpeed 和 gws |
User-Agent | Mozilla/5.0 的变体 | Opera/9.50(WindowsNT6.0;U;en), Mozilla/5.0 和 Mozilla/4.0 的变体 |
注:DMZ 出站 HTTP 字段常用:User-Agent, Accept-Encoding 和 Accept-Language 注:User-Agent 在数据集中有几千个独特的字符串
通过将 User-Agent 与 TLS 库相关联,可以得到有用的推论。可以通过 TLS 元数据推断 TLS 库信息,然后根据 TLS 库信息推断浏览器
与异常检测不同,有监督学习提供了扎实、易于解释的结果,但要注意过拟合的发生
未加密的 TLS 元数据可以用来推断客户端 TLS 库,恶意软件的作者会使用正常情况下不同的 TLS 库配置
- TLS 提供的加密套件列表和扩展可以被用于推断加密库和版本,在流初始化时可以推断 User-Agent
- 找到 HTTP 中的 User-Agent 和相邻 TLS 参数中推断出的 User-Agent 的差异是一个有用的指标
处理过程:
- 首先确定具有区分能力的 TLS、DNS 和 HTTP 的数据特征
- 使用这些可以正确地分类流类型的数据特征来定义机器学习算法
- 最后,我们利用 HTTP 和 DNS 流提供的上下文信息辅助对 TLS 加密的网络流进行分类
我们使用协议特征的细节分析来区分恶意流量与良性流量,其中包括对 TLS 握手元数据的深度分析和与加密流量特征密切相关的上下文流
该方案和其他现存流技术不同之处就在于使用细节信息而非使用流中的元数据。扩展流记录到流中包含的全部元数据,例如未加密的 TLS 握手信息、端点上下文流
DMZ 流量中会包含少量恶意流量
分析工具基于 Python 和 Scikit-learn
2016.1-2016.4期间我们收集了 ThreatGRID 完整的 21417 个恶意流量的 TLS 握手信息,以及 2016年4月的5天内的 1130386 个良性 TLS 流量
TLS 数据使用 clientHello, serverHello, certificate 和 clientKeyExchange 信息
十折交叉验证与L1-逻辑回归
最终,所有数据特征都要归一化为零均值(zero-mean)和单位方差(unit variance)
使用了 55000 个样本
所有数据特征都用上的模型可能拥有比用上部分数据特征的模型具有更少的模型参数
注:特征影响权重
基于元数据的特征,比如包长和到达时间的序列,用马尔科夫链进行建模 跟踪 TCP 序列号,排除 TCP 重传的影响。数据包长选择 UDP、TCP 和 ICMP 的有效载荷大小,除这三种类型中的一种,包长会被设置为 IP 数据包的长度。到达时间精确到毫秒
时间和长度都被离散化为“箱子”,对长度来说,马尔科夫链有 10 个箱子,每个箱子 150 字节。对时间来说,马尔科夫链有 10 个箱子,每个箱子 50 毫秒。这样总共有一百个特征 转换概率被用于机器学习算法的特征
在被分析的流的分组的有效载荷中遇到的每个字节值的计数除以在分组有效载荷中找到的总字节数得到字节分布,可以简单地计算流的字节值概率。256字节的分布概率也是机器学习算法使用的特征
基于客户端的 TLS 数据使用密码套件列表、客户端公钥列表和客户端公钥长度
我们在密码套件列表中观察到了 176 个独特的十六进制代码,组成了一个长度为 176 的二进制向量 使用长度为 21 的二进制向量表示 TLS 扩展,使用一个整数值表示公钥长度
基于服务器的 TLS 数据使用密码套件列表、支持的扩展、证书数量、SAN 名称数量,有效天数以及是否存在自签名证书
- 收集域名和 FQDN 的长度
- 40个最常见后缀列表,每个后缀都有一个二进制向量
- 32个最常见的 TTL 值列表
- 数字字符数、非字母字符数、DNS 响应返回的 IP 地址数
- 六个二进制向量,表示域名在 Alexa 的前 100/1000/10000/100000/1000000 还是未找到(每个域名选择最好的那个类别)
对于每个 TLS 流,我们在 TLS 流的 5 分钟窗口内收集来自相同源地址的所有 HTTP 流
我们使用了 HTTP 数据中的七种类型的字段。 对于每个字段,我们选择了恶意软件或良性样本和“其他”类别中至少1%使用的所有特定值 这些字段包括出站和入站 HTTP 字段,Content-Type,User-Agent,AcceptLanguage,Server 和 Code
Paper 的 6.3 部分讲述了二度关联的部分,也值得一看,总结整理并未摘录
基于网络的恶意软件检测:
- 垂直关联(一台主机)
- 横向关联(两台主机)
使用 TLS 的恶意软件在过去的十个月(2015年6月到2016年4月)里从 7% 增长到 18%