Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Detecting Fingerprinted Data in TLS Traffic

论文下载

Abstract & Introduction

  • 使用机器学习的方法来检测TLS流量是否有某个文件。数据被压缩后的长度一定程度上反应了熵值大小,而熵的分布可以看做数据的指纹。
  • 这种检测方法,可以用于非法内容的检测,另外如果检测出的文件能够确定通信一方的身份,那么通信的匿名性就丢失了。这种检测方法不局限于TLS,可以针对同时使用压缩和加密的密码协议。

Background

Fig

  • TLS:记录协议的流程:分组,压缩,MAC,加密
  • Deflate:同时使用LZ77压缩算法和霍夫曼编码。LZ77算法使用滑动窗口,压缩重复出现的数据序列;霍夫曼编码根据符号出现的频率来调整每个符号对应的二进制编码。
  • Deflate是有状态的,用滑动窗口的内容和符号的频率表表示,从一个分组切换到下一分组时,deflate状态不变,即滑动窗口和频率表不变.

Data Fingerprinting

每个分组的压缩率反映了该分组的熵值,分组组成的序列则反映了一个文件熵的分布,就像数据的指纹

Sources of noise

  1. 分组偏移和不确定的压缩状态:TLS每个分组最大为2**14 字节,理想情况是待测文件从某个分组的头部开始,但很多时候应用数据都是从数据流的中间开始,头部多出的数据对压缩的初始状态产生了很大影响
  2. 分组加密的填充: 压缩后的数据和mac需要被填充为分组长度的倍数,分组长度也是不固定的。

Fingerprint definition

  • Rω : 大小为ω字节的随机字符串
  • Siω(F) (i=1,…,n(Rω|F)) : Rω与F拼接后在TLS中传输的序列

Fig

“The fingerprint of a file F is the set of record size sequences corresponding to different lengths of prefixed random data”

Data Detection

对于不同的文件Fi,i=1,…,l,令Zi=(Φω(Fi),Fi) 要让基于经验的risk function Remp()最小

Fig

在模式识别中,函数Q选择binary loss function

Fig

要令Remp(α)最下,我们需要找到一个函数f(z,α),可以用支持向量机(SVM),决策树,随机森林,extremely randomized tree来学习出函数f

Implementation & Evalution

Generation of Data Fingerprints

作者使用python,借助openssl库实现了一个支持TLS1.0的服务端,对称算法为AES-256,压缩算法为Deflate。一个TLS客户端自动的向服务端发送文件,并触发tshark来抓取流量。ω的取值为500,这样一个指纹的TLS长度序列数量

Fig

是2**14/ω=33,即#Φω(F)=33

k=0时,7个不同mp3文件的TLS记录长度序列(Sikω(F))i=10,…,35,可以看到每个文件的TLS记录长度都是独特的。

Fig

Comparison of File Formats

  • 为了测试机器学习的算法在不同文件格式上的表现,作者选择了mp3、ELF、PDF、JPG、WEBM(视频文件)几种格式。
  • 有些文件很小,如JPG,因此在(Sikω(F))i=1,…,n(Rω|F)),i可以限制在1-12,θ={1,…,12}即JPG文件在12个TLS records就发完了。
  • 最后的evaluation sets,x表示不同的文件类型.

Fig

5种类型文件各106个,在不同学习模型下的准确率

Fig

Large Scale Detection

针对固定文件类型的大规模测试,测试5443个mp3文件,ω=500,θ={1,…,30}

Fig

Fig

Countermeasures

关闭压缩功能就可以有效的防止压缩造成的信息泄露,(TLS1.2就没有压缩算法)但是在移动设备上,出于性能的考虑,压缩是很必要的


  • 一道关于压缩算法泄露信息的ctf题目

Codegate 2015 Smashing the Potato guess the cookie