加密一直是保护用户通信隐私的重要特性,但是如果恶意程序在传输过程中也进行了加密,拦截这样的流量感觉麻烦很多。说到加密,TLS(TransportLayerSecurityProtocol,传输层安全协议)是目前使用非常广泛的协议:国外一些研究机构的数据显示,高达60%的网络流量使用TLS,当然还有一些恶意程序(虽然只有10%左右)。思科的一组研究人员最近开发了一种方法来检测使用TLS连接的恶意程序,而无需解密此类流量。是不是感觉有点神奇?TLS协议是如何做到这一点的??思科发布了这份研究报告,标题为《辨认使用TLS的恶意程序(无需解密)》(英文其实更准确,叫做“DecipheringMalware'suseofTLS”)。让我们以更一般的方式总结一下原理。事实上,TLS协议本身引入了一系列复杂的数据参数特征——这些特征是可以观察和检查的,从而自然而然地为通信双方做出一些合理的推断。报告中提到:“通过这些特性,我们可以检测和了解恶意程序的通信方式,同时,TLS本身的加密特性也可以提供良性的隐私保护。”听起来像是一种理想的新技术——在不解密流量的情况下判断流量是否安全,确实具有重要意义。为此,思科分析了来自大约18个恶意程序系列的数千个样本,并分析了企业网络中数百万加密数据流中的数万个恶意连接。整个过程中,网络设备不处理用户数据,只是使用DPI(深度包检测技术)识别clientHello和serverHello握手信息,以及识别连接的TLS版本。“在这份报告中,我们主要关注433端口的TLS加密数据流,尽可能公平地比较企业的一般TLS流量和恶意TLS流量。为了确认数据流是否为TLS,我们需要使用DPI,以及基于TLS版本的自定义签名,以及clientHello和serverHello的信息类型。”“最终,我们在203个端口上发现了229,364个TLS流,其中443端口是目前恶意TLS流量使用最多的端口。尽管恶意程序的端口使用场景多种多样,但这种情况很少见。“不仅如此,据说他们还能够根据流量特征将这些恶意流量分类为不同的恶意软件家族。”分类。每个恶意程序家族都有其独特的标签,因此该问题转化为不同类别的分类问题。“即使使用相同的TLS参数,我们仍然能够更准确地识别和分类它们,因为它们的流量模式仍然不同于其他流量特征。我们甚至可以识别出更细粒度的恶意程序家族分类,其中的当然不能仅通过网络数据看。”实际上,研究人员编写了一个软件工具,将实时流量或捕获的数据包文件中的所有数据输出为更方便的JSON格式,并提取上述数据特征。包括流量元数据(字节进出、数据包进出、网络端口号、持续时间)、数据包长度和到达间隔时间序列(SequenceofPacketLengthsandTimes)、字节分布(bytedistribution)、TLS头信息。其实我们讲了这么多,还是很抽象,整个过程还是有点复杂。感兴趣的同学可以点击此处下载思科提供的完整报告。分析结果的准确性还不错。Cisco认为分析结果相当理想,而且整个过程还融入了它的机器学习机制(他们称之为机器学习分类器,应该是指对企业正常TLS流量和恶意流量进行分类的机制,甚至可以对恶意程序进行分类家庭),这正是该机制的目的。经过测试。据报道,对恶意软件家族进行分类的准确率为90.3%。”在识别单个加密流量时,我们能够在对恶意软件家族进行分类的问题上实现90.3%的准确率。在5分钟窗口内对所有加密流进行分析时,我们的准确率率为93.2%(在5分钟窗口内使用所有加密流)。”
