天天看点

不解密数据竟也能识别TLS加密的恶意流量?

加密一直都是保护用户通讯隐私的重要特性,可如果恶意程序在传播过程中也加密的话,对这样的流量做拦截感觉就麻烦了很多。谈到加密,tls(transport layer security protocol,传输层安全协议)就是当前使用非常广泛的协议:国外部分研究机构的数据显示,已有至多60%的网络流量采用tls,当然也包括一些恶意程序(虽然大约只有10%)。

不解密数据竟也能识别TLS加密的恶意流量?

来自思科的一组研究人员最近研究出一种方法,不需要对这类流量进行解密,就能侦测到采用tls连接的恶意程序,是不是感觉有点小神奇?

不解密数据竟也能识别TLS加密的恶意流量?

  tls协议

这是怎么做到的?

思科已经公开了这份研究报告,题为《辨认使用tls的恶意程序(无需解密)》(英文其实表达得更为准确,名为”deciphering malware’s use of tls”)。我们比较笼统地归结原理,其实是tls协议本身引入了一系列复杂的数据参数特性——这些特性是可以进行观测检查的,这样自然就能针对通讯双方做出一些合理的推断。

这份报告中有提到:“通过这些特性,我们可以检测和理解恶意程序通讯方式,与此同时tls本身的加密属性也能提供良性的隐私保护。”听起来似乎还是比较理想的新技术——在不需要对流量进行解密的情况下就达成流量安全与否的判断,的确具备很大意义。

为此,思科大约分析了18个恶意程序家族的数千个样本,并在企业网络中数百万加密数据流中,分析数万次恶意连接。整个过程中,网络设备的确不对用户数据做处理,仅是采用dpi(深度包检测技术)来识别clienthello和serverhello握手信息,还有识别连接的tls版本。

“在这篇报告中,我们主要针对433端口的tls加密数据流,尽可能公正地对比企业一般的tls流量和恶意tls流量。为了要确认数据流是否为tls,我们需要用到dpi,以及基于tls版本的定制signature,还有clienthello和serverhello的信息类型。”

“最终,我们在203个端口之上发现了229364个tls流,其中443端口是目前恶意tls流量使用最普遍的端口。尽管恶意程序端口使用情况多种多样,但这样的情况并不多见。”

不解密数据竟也能识别TLS加密的恶意流量?

不仅如此,据说他们还能就这些恶意流量,基于流量特性将之分类到不同的恶意程序家族中。“我们最后还要展示,在仅有这些网络数据的情况下,进行恶意程序家族归类。每个恶意程序家族都有其独特的标签,那么这个问题也就转化为不同类别的分类问题。”

“即便使用相同tls参数,我们依然就够辨认和比较准确地进行分类,因为其流量模式相较其他流量的特性,还是存在区别的。我们甚至还能识别恶意程序更为细致的家族分类,当然仅通过网络数据就看不出来了。”

实际上,研究人员自己写了一款软件工具,从实时流量或者是抓取到的数据包文件中,将所有的数据输出为比较方便的json格式,提取出前面所说的数据特性。包括流量元数据(进出的字节,进出的包,网络端口号,持续时间)、包长度与到达间隔时间顺序(sequence of packet lengths and times)、字节分布(byte distribution)、tls头信息。

其实我们谈了这么多,还是很抽象,整个过程还是有些小复杂的。有兴趣的同学可以下载思科提供的完整报告。

分析结果准确性还不错

思科自己认为,分析结果还是比较理想的,而且整个过程中还融合了其机器学习机制(他们自己称为机器学习classifiers,应该就是指对企业正常tls流量与恶意流量进行分类的机制,甚至对恶意程序家族做分类),正好做这一机制的测试。据说,针对恶意程序家族归类,其准确性达到了90.3%。

“在针对单独、加密流量的识别中,我们在恶意程序家族归类的问题上,能够达到90.3%的准确率。在5分钟窗口全部加密流量分析中,我们的准确率为93.2%(make use of all encrypted flows within a 5-minute window)。”

====================================分割线================================

本文转自d1net(转载)

继续阅读