这几天读了2篇关于流量分析攻击的文章,写下一些核心思想和主要问题。

  情景设定:被攻击者通过SSH、SSL隧道连接到某个代理,通过该代理访问互联网;攻击者可以获得二者之间往来的加密数据包。由于数据包都是通过加密方式发送到某服务器,所以攻击者唯一能知道的就是数据包发送的大小和时间。如何推测出用户正在访问什么网站呢?

  核心思想:不同的网站在访问时,链路上往来的数据包的大小是不一样的,例如,访问www.baidu.com 、www.sina.com.cn 和 www.njupt.edu.cn 时得到的IO吞吐数据分别如下面3张图所示:

www.baidu.com

www.sina.com

www.njupt.edu.cn

  将这些数据包的大小,按时间排序,得到一个序列(这个序列描述了这个网站的特征)。不同的网站访问时,得到的序列也是完全不同的。攻击者先花费一定的时间,通过SSH或SSL的加密隧道,对大量的网站进行访问,记录下这些网站的数据包序列,构成一个大的字典。攻击时,只需将被攻击者某次会话的所有数据包的包头截下来,将数据包的大小构成一个序列,然后用这个序列与字典中的候选序列进行比较,选择相似度最大的前几个网站,作为猜测的结果。

  主要难点:如何判断两个序列的相似性?http://web2.0coder.com/archives/73 讲到了一个和这个问题相似的例子:

  有五本书,a,b,c三个童鞋看过,它们对这五本书的评价如下(分数为1~5):

  A = [1, 2, 4, 3, 5]
  B = [2, 4, 3, 3, 4]
  C = [3, 3, 2, 2, 3]

  问题,谁和用户A的口味比较相似?

  作者给出了几种方法,其中就包括论文中提到的 Jaccard系数。

  论文中提到的另一种方法是朴素贝叶斯方法

(详情参看:

 http://zh.wikipedia.org/wiki/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%86%E7%B1%BB%E5%99%A8

http://blog.csdn.net/pongba/article/details/2958094)。前中一般在数据挖掘和机器学习中使用,后一种方法属于随机过程的知识。

  作者分别使用上面的方法,制作出分类器进行实验,结果显示一次性猜对的可能性不是太高,在20%-40%之间,但是10次猜中的可能性高达80%。

  当然,由于互联网上的网站实在太多,实验中作者并没有将所有的网站加入到字典中,而是从中选取了一定数量个访问频率最高的网站做成了一个字典,供查询匹配使用。

 

  攻击的防范:在另一篇论文中,作者针对上面的方法提出提出了防范措施,主要就是通过改变数据包的大小,降低攻击者判断的准确性。具体如何改变,方法就有很多,比如:在数据包中添加一些额外的字节;将TCP包拆分成多个小的数据包发送;时不时地要求服务器重新发送某个TCP包;降低链路的MSS的大小;调整滑动窗口的大小等等。通过这些方法可以明显的降低攻击者判断的准确性。

 

论文链接(前两篇讲攻击原理,第三篇讲防范):

http://www.springerlink.com/content/1062w684754754h4/

 

http://dl.acm.org/citation.cfm?id=1180437

 

http://hostmaster.freehaven.net/anonbib/cache/LZCLCP_NDSS11.pdf

版权声明:本文为yulele原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yulele/archive/2012/09/19/2694431.html