加密流量分析调研
0. 加密流量分析的现状
现在越来越多的病毒,木马,C&C控制,多采用加密的方式进行传输数据或控制, 所以导致现在的一些IDS或IPS的防护产品,由于无法解密的原因而失效,为应对这种情况,不少安全公司开始了加密的恶意流量探测技术的研究。
目前国内有比较新的安全公司观成科技在做,利用机器学习进行数据分析,恶意流量的检出率高达99.5%,误报率在5%左右,如果是真的,这个成绩还是很惊人的。
经过大量数据验证和实际网络测试,目前在加密流量安全检测的检出率可达到99.95%,误报率可控制在5%以下;支持检测的网络协议包括SSL(HTTPS、POP3S、IMAPS、FTPS)、SSH、RDP等;支持检测的SSL版本包括SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2;支持检测的恶意加密流量包括:超过200种家族恶意代码通信(特洛伊木马、勒索软件、感染式病毒、蠕虫病毒、下载器等),加密通道中的扫描探测、暴力破解和CC攻击等,Tor(暗网)、翻墙软件、非法VPN等应用的通信。
国外思科研究的比较多,他们推出了加密流量分析技术ETA,主要是通过分析加密流量中的一些可见信息,比如ip的数据包长度,包与包之间的间隔, 以及tls中的记录长度,密钥套件信息等数据特征,然后同样是采用机器学习的方法进行数据分析,网上并没有相关检出率和误报率的数据。
我的目的是实验下,按照以上的思路,去实践下,分析加密流量的检测效果到底如何?
1. 数据源获取
机器学习的思路,无非就是数据分析,特征提取,以及建立模型,训练数据,再评测,再训练,来回折腾,思科将前几年用于研究小数据集的流量特征数据的抓取的工具开源了,就是下面要介绍的joy。
所以,实践就从joy工具研究做起。
1.1 joy介绍
joy是思科开源的一个基于libpcap的产品,用于提取网卡中或pcap文件中的流量数据,利用类似于netflow的流数据模型,生成json格式的文件,并未直接用于ETA或其他思科产品,只是一个小型的数据获取和基本分析工具。
开源地址:https://github.com/cisco/joy
主要数据包括:
- ip数据包的长度,到达时间
- 字节经验概率的分布
- tls记录长度和到达时间的顺序
- 未加密的tls数据,比如密钥套件,密钥套件长度以及服务器证书字符串.
- dns名称,地址,ttl
- http标头元素和http前八个字节的body
1.2 joy编译安装
joy的核心代码是c,混杂着一些python脚本,编译还是c的老几样办法:
./configure --enable-gzip && make && make install
这个过程还是挺顺利的,没遇到什么问题。安装环境本来就有安装依赖,如果没有安装过,需要先安装依赖包,如下:
yum install build-essential libssl-dev libpcap-dev libcurl4-openssl-dev
如果是windows
或者macos
则可以看下开源的wiki。
还有个安装脚本install_joy目录下的install-sh,可以直接安装成一个服务,配置文件也默认生成一个。
默认安装配置文件位置: cat /usr/local/etc/joy/options.cfg
。
同时会新创建joy用户和用户组,用于运行joy。
1.3 基本使用
选项比较多,功能还是很强大,这里面就不一一列举了,写个基本的命令例子大家可以参考下:
bin/joy tls=1 bidir=1 dist=1 zeros=0 retrans=0 entropy=1 interface=em1 promisc=1 example=1 username=root output=joy.json
生成的数据内容实例:
{"sa":"::","da":"ff02::16","pr":58,"sp":null,"dp":null,"bytes_out":56,"num_pkts_out":2,"time_start":1595230896.690740,"time_end":1595230897.518769,"packets":
[{"b":28,"dir":"<","ipt":0},{"b":28,"dir":"<","ipt":828}],"byte_dist":[37,3,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4],"byte_dist_mean":40.803571,"byte_dist_std":
82.553436,"entropy":1.959057,"total_entropy":109.707217,"ip":{"out":{"ttl":1}},"example":56,"expire_type":"i"}
这些字段信息又如何解释那,在joy工具中有个json的文件,有字段名的解释,部分说明:
"sa" : {"type" : "string",
"description" : "IP Source Address, as a string. It MAY be in dotted quad notation, e.g. \"10.0.2.15\", or it MAY be an arbitrary hexadecimal JSO
N string, which will be the case when anonymization is used."
},
"da" : {"type" : "string",
"description" : "IP Destination Address, as a string. Its format is identical to the IP Source Address."
},
"x" : { "type" : "string",
"description" : "Timeout. a: active, i: inactive."
},
2 读pcap包生成flow的json数据
joy tls=1 bidir=1 dist=1 num_pkts=50 zeros=0 retrans=0 entropy=1 /home/miaohq/soft/joy-master/test/pcaps >test.json
3 架构思路
沿着思科的思路,做加密流量的检测,整体思路比较清晰,核心内容如下图:
预测架构
-
首先通过网卡抓包或pcap分析程序分析报文,生成tls的流量数据,这一步可以参考joy的代码,
重点关注tls的生成的部分数据。 -
根据joy选取特征和网上一些资料,确定下特征,从json流中提取需要的数据。
-
对这些特征数据做归一化等方法进行处理。
-
用训练好的模型进行预测。
-
如果预测是恶意流量则告警,非恶意流量则不告警。
这里面的几个难点在于:
- 模型的训练,需要找到大量的加密的恶意流量和正常的https数据进行训练。
也就是说数据集的寻找比较困难。 - 特征选择
哪些特征比较重要,哪些特征可以有好的召回率和精准率,需要进一步的测试和挑选。