0x00

本系列笔记是用来记录论文阅读过程中产生的问题与思考的随笔性质文本,结构可能比较松散,无法完全体现园论文的精髓之处,仅供自己日后温习参考之用。

  • 题目:Identifying Encrypted Malware Traffic with Contextual Flow Data
  • 作者: Blake Anderson (Cisco), David McGrew (Cisco)
  • 出处:AISec ‘16 Proceedings of the 2016 ACM Workshop on Artificial Intelligence and Security
  • 关键词:Malware; Machine Learning; Transport Layer Security; Network Monitoring

0x01 提出问题

  • 根据恶意软件收发的加密流量数据来检测恶意软件的类型是很有必要的。
  • 传统的特征提取方式大多聚焦在数据包大小和一些与时间有关的参数,本文扩充了特征提取范围,运用到完整TLS握手数据包、同TLS握手数据包同一来源的DNS数据流和5分钟窗口内的HTTP数据流(后两者被称为contextual flow)。根据以上数据,我们能够
  • 将提取到的特征输入到监督机器学习算法中,能够得到非常高的识别准确率。

0x02 解决方法

  • 特征提取步骤:针对contextual flow,从DNS流中,我们主要分析从DNS服务器中返回的带有一个地址的响应,以及和这个地址相关联的TTL值;从HTTP流中,我们主要分析HTTP头中的各种属性。针对TLS stream,我们主要分析它们的握手包中提供的信息;针对其他数据包(如普通TCP,UDP,ICMP包,Observable metadata)。我们将提取它们的“边信道信息”。
  • 分类识别步骤:对特征进行正则化处理,并投入监督学习算法中。
  • 使用真实网络环境下抓取的数据包进行测试。

0x03 特征来源

TLS流

TLS流在交互之初是不加密的,因其需要同远程服务器进行握手。我们可以观测到的未加密TLS元数据包括clientHelloclientKeyExchange。从这些包的信息中,我们可以推断出客户端使用的TLS库等信息。从这些信息中,我们可以发现,良性流量的行为轨迹与恶意流量是十分不同的。

客户端方面,我们首先观察两个TLS特征:Offered CiphersuitesAdvertised TLS Extensions。对于前者,恶意流量更喜欢在clientHello中提供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)

随后,我们观察良性与恶性流量客户端公钥的区别。良性流量往往选择256-bit的椭圆曲线密码公钥,而恶意流量往往选择2048-bit的RSA密码公钥。

服务端方面,我们能够从serverHello流中得到服务端选择的Offered CiphersuitesAdvertised TLS Extensions信息。良性流量的选择比较多元化,而恶性流量往往会选择较为过时的技术。在certificate流中,我们能够得到服务端的证书链。无论是恶意流量还是良性流量,其证书的数量都是差不多的,但若我们观察长度为1的证书链,就能够发现,其中的70%都来自恶意流量自签名,0.1%来自良性流量自签名。

除此之外,SubjectAltName这个X.509拓展以及证书的有效时间也可区分一定量的良性和恶意流量。

DNS流

许多恶意软件使用域名生成算法来随机生成域名,这是一个明显区别于普通流量的行为。因此这便是我们识别恶意流量的突破口。

在比较域名的长度时,良性流量的域名基本符合高斯分布,其最高点在6或7处;而恶意流量的域名分布在6处存在一个极为尖锐的高峰。在对域名使用字符种类的探测上,我们发现良性流量域名使用数字字符较恶意流量更多。

在比较DNS返回响应中携带的IP地址的个数时,我们发现,良性流量更多地返回2或8个,而恶意流量更多地返回4或11个。同时,在比较响应中的TTL数值时,我们发现良性流量中最常出现的数值为60、300、20和30;在恶意流量的TTL数值中,300是一个常见数值,但是20和30却并不常见。且恶意流量中经常出现数值100,但这个数值几乎从未出现在良性流量中过。

除了以上指标,我们还能通过参考Alexa排名来获取良性流量和恶意流量在域名上的区别。我们将域名分为6类:top-100, top-1000, top-10000, top-100000以及未上榜。随后我们发现,86%的恶意流量域名都未上榜

HTTP流

HTTP响应报头中,恶意流量最常用的属性为Server,Set-Cookie和Location,但良性流量最常用的属性为Connection,Expires和Last-Modified;在HTTP请求报头中,良性流量最常用的属性为User-Agent,Accept-Encoding和Accept-Language

在属性值的观察中,良性流量最常用的Content-Type为image/\*,而恶意流量最常用的是text/\*。其他恶意流量常用的MIME值为:text/html;charset=UTF-8以及text/html;charset=utf-8

恶意流量往往宣称自己使用的服务器为低版本的Nginx,而良性流量往往宣称自己使用的是低版本的Apache或Nginx

恶意流量的User-Agent字段中较为常见的值为Opera/9.50(WindowsNT6.0;U;en),次常见的为一些版本的Mozilla/5.0或Mozilla/4.0;而良性流量则一般为WindowsOS X版本的Mozilla/5.0

0x04 特征提取细节

边信道信息

  • (此处未看懂,与马尔科夫链有关)
  • 创立一个256-bit的数组,为每一种长度的payload计数

TLS数据

  • 基于客户端的特征:将176种密码套件的类型、TLS拓展以及公钥长度列成一个list,并使用一个二元数组(只有0和1)针对对该流量数据的具体情况进行标记;
  • 基于服务端的特征:同上。

DNS数据

  • 类似于上文的方法,我们罗列了针对域名的特征如下:32个可能的TTL值和一个“other”选项、数字字符的数量、非字母数字字符的数量、DNS响应中返回的IP地址数量,以及6个衡量域名在Alexa排名的位阶。

HTTP数据

  • 类似于上文的方法,选择6个在HTTP报头中经常的出现的字段,以及一个“other”选项。

0x05 测试结果

  • SPLT + BD + TLS + HTTP + DNS:99.933%
  • SPLT + BD + TLS + HTTP:99.983%
  • SPLT + BD + TLS + DNS:99.968%
  • TLS + HTTP + DNS:99.988%
  • SPLT + BD + TLS:99.933%
  • HTTP + DNS:99.985%
  • TLS + HTTP:99.955%
  • TLS + DNS:99.883%
  • HTTP:99.945%
  • DNS:99.496%
  • TLS:96.335%