2015年9月3日星期四

让Bittorrent走Tor代理时的风险问题及解决办法

让Bittorrent走Tor代理时的风险问题及解决办法

文章目录

  1. 前言
  2. 当Bittorrent走Tor代理
  3. 第一重攻击
  4. 第二重攻击
  5. 第三重攻击

1. 前言

我写这篇博文的目的是想让大家明白:

  1. 仅仅通过让软件走Tor代理来达到匿名的目的是远远不够的。想要实现真正的匿名,还有其他许多需要注意的地方;
  2. 即使使用Tor代理,使用某些软件(本文主要涉及:Bittorrent类和中间代理类软件),仍可能增加身份暴露的风险;
  3. 通过本文下面介绍的多种手段,可以有效地降低上述风险。

这篇博文是我在Tor Blog这篇博文的基础之上,结合如今Tor用户的一些实际使用情况写成的。那篇洋文博文的标题叫“Bittorrent over Tor isn’t a good idea”,翻译过来就是“让Bittorren走Tor代理不是个好主意”,而这也是Tor官方给出的保持匿名的几个基本建议之一。

另外,如果我的博文里面有任何错误或者你不太理解的地方,请在留言中告诉我,因为这样可以帮我把博文变得更加清楚、容易理解:)

2. 当Bittorrent走Tor代理

2.1 什么是Bittorrent类软件

这一小节的目的是让大伙儿对Bittorrent类软件(以下简称BT软件)有个感性的认识,所以不涉及到技术层面的问题。简单来说,我们常接触到的“BitTorrent Sync”、“MLDonkey”、“迅雷”、“QQ旋风”都属于BT类软件。

2.2 BT软件对匿名性的威胁

根据BT软件和BT协议本身存在的问题,人们已经发现并掌握了针对该类软件去匿名化攻击的方式。这种攻击方式可以分为三部分,或者可以说是三种不同攻击的组合。下面我使用“重”这个量词来描述攻击的原因就在于:每一重攻击的实行都是要建立在前一重攻击已经实现的基础之上。

3. 第一重攻击

3.1 攻击对象

第一重攻击针对的是那些把BT应用程序设置为走Tor代理的同学。这类同学希望借此能够在Tracker服务器上隐匿自己真实的IP地址,防止同在使用该Tracker服务器的用户(以下简称:Peers)查看到。(见图)

3.2 BT客户端的设计缺陷之一

上述做法的问题在于:许多流行的BT客户端(包括Bittorent Sync)都会在某些情况下选择忽略他们的代理设置。为什么会这样呢?简单来说就是,你的代理设置有误(可能是因为Tracker服务器使用UDP协议而你提供的socks代理仅支持TCP协议,也可能纯粹就是你把端口号输错了),BT客户端用不了,而BT客户端的开发者又不想让你误以为是他的软件太垃圾,因此就选择了忽略代理设置。

大家如果手头就有Bittorent Sync可以试一下,把在代理设置里随便填个IP和端口,然后保存。怎么样?是不是软件运行正常?那是因为软件开发者“不想让你失望”:(

3.2.1 导致的问题

上述缺陷导致的问题是:你不确定此时此刻BT客户端是否在走代理。对于天朝用户来讲,代理不稳定,容易突然“断线”,就更是加剧了这一风险。比如:使用的Tor代理突然断线,BT客户端不管不顾地继续工作,你的真实IP就暴露给了Tracker服务器和Peers。

3.2.2 二翔子的解决办法

  1. 使用双虚拟机隔离技术,确保BT客户端“不走代理端口就没端口走”。具体操作方法参见编程随想的这个系列博文
  2. 使用更加安全,匿名性更好的作法是使用Whonix操作系统

3.3 BT客户端的设计缺陷之二

另外,一些BT客户端(Tor Blog上提到uTorrent、BitSpirit和 libTorrent,Bittorrent Sync还没测试)会直接把你的真实IP写入到要发送给Tracker服务器或者Peers的信息中。

3.3.1 导致的问题

这时,Tor还是在履行自己的任务:“匿名地”将你的真实IP发送给Tracker或者Peers。所以结果就是,“没有人知道你是从哪里把你的真实IP发送出去的”。是不是很讽刺?

3.3.2 解决办法

  1. 使用双虚拟机隔离技术,确保BT客户端“不走代理端口就没端口走”。具体操作方法参见编程随想的这个系列博文
  2. 使用更加安全,匿名性更好的作法是使用Whonix操作系统

4. 第二重攻击

第二重攻击的目的在于:让同在该Tracker服务器上的攻击者(Attacking Peer,简称:AP)识别出你的身份。前面说过,第二重攻击是在第一重攻击已经成功的基础之上实现的,也就是说AP已经知道了服务器上的那个真实IP地址以及其端口号。

4.1 BT协议的缺陷

BT协议,至少是在BT客户端使用它时,会要求选择一个随机的监听端口号(比如:50344)(如图),然后把这个50344的端口号告诉Tracker服务器和Peers。由于这个数是随机的,所以每个人的监听端口号通常也是Tracker服务器上独一无二的一个。

4.1.1 导致的问题

与你通讯的AP此时可以看到你的IP(也就是Tor出口节点的IP)和你的端口号:50344。接着他就拿着你的端口号(50344)和Tracker服务器上的相同端口号比对,于是你的“Tor出口节点的IP”就被和你的“真实IP”对应上了。此时你的身份也就被确认了:(

另外,如果Peers之间的通讯没有经过加密,出口节点同样可以嗅探到你的明文数据并进行上述攻击。(好在Bittorrent Sync采用了强加密技术)

4.2 解决办法

4.2.1 Tor官方的解决办法

  1. 不要让Bittorrent走Tor代理:这种情况下,不但Tor提供不了匿名性,BT反而会拖累Tor网络的整体速度;
  2. 告诉开发者改进BT协议和客户端:Tor保护不了泄露你身份的应用。

4.2.2 二翔子的解决办法

  1. 避免第一重攻击的发生;
  2. 由编程随想统一发布一个监听端口号供大家设置,因为这里的读者之所以使用Bittorrent Sync,多是因为他的那个网盘:)

5. 第三重攻击

第三重攻击可以借助前两重攻击的成功来实现,但是也可以通过其他攻击的成功来实现(后面我会讨论到),因此显得更加重要

5.1 Tor是如何处理你的流量的?

为了说清楚第三重攻击,我们必须先了解Tor是怎么处理你的流量的。我们都知道,为了帮你实现匿名,Tor每次运行起来后,都会为你准备多条线路(circuit),每条线路都包含“入口节点”、“中间节点”和“出口节点”这三台服务器。Tor把每个应用需要通讯的数据都交给一个单独的线路来完成(如下图),也就是说,当你加载一个网页只需要“麻烦”三台服务器,而不是九台。这样做不但保证了传输效率,而且提高你的匿名性,因为要知道,每多用一条线路(实际上是每多经过一个出口节点),你的流量被窃听的概率就多了一分。

需要说明的是,下图之所以写“针对Linux和Unix环境”是因为这两个操作系统下所有连接到Tor的应用都有一个“进程ID”(pid:process ID),可以方便Tor识别出每个流量是哪个应用的,而那篇博文发出时(2010年),作者只说了Windows下会比较困难,至于现在实现没有,二翔子没来得及调查,很惭愧。

5.1.1 设计的缺点

但是这样的设计不好的一面是,出口节点可以把你经过它的全部流量做成一个短快照(short snapshots of user profiles)。一旦这些流量中有一个被识别出身份,那么其他的流量的身份也就自然而然地知道了

比如说:第二重攻击已经把你的“Tor出口节点的IP”就被和你的“真实IP”对应上了,也就是你与Tracker服务器的通讯已经被识别出了身份。那么你经过了该出口节点的其他流量也被识别出来了:(

5.1.2 问题很严重

读到这里,你有没有发现其实问题很严重?因为能够确认你身份的流量有很多!比如说:二翔子一边用Tor聊着QQ(或者其他能确认为我身份的服务),一边回复Blogspot(对,它没有启用加密)里的留言,朝廷运行的出口节点截获了这段流量,一下子就可以知道二翔子是谁了:(

5.2 中间代理放大了风险

细心的同学可能会问,你在5.1里不是说“Tor把每个应用需要通讯的数据都交给一个单独的线路来完成”吗?怎么会出现两个应用数据全跑到一个出口节点(共用一条线路)的情况?其实出现这种情况至少有两种可能:

  1. 使用Tor的应用多于其Tor客户端创建的线路个数,因此必然有多个应用数据传输共用一个Tor线路的情况(传说中的抽屉原理);
  2. 我使用了中间代理(比如:Privoxy),导致Tor(可能)以为我只有一个应用使用了Tor,因此只走一条线路(经过一个出口节点)。(如下图)

5.3 解决办法

5.3.1 Tor官方的解决办法

Tor官方在这篇博文的结尾处讨论了几种当时(2010年)还没付诸行动的解决办法,但至于最后改进没有,改进方案是什么,二翔子还没来得及跟踪。

5.3.2 二翔子的解决办法

最为简单的办法是使用更加安全,匿名性更好的Whonix操作系统。但如果同学觉得现在上手Whonix还有困难,不妨参考以下建议:

  1. 不要嫌麻烦,在不同的虚拟机中多运行几个Tor客户端,详细的说明可以看编程随想的这篇博文中的,“多个隔离虚拟机共用同一个网关虚拟机”这一小节;
  2. 只让暴露身份风险不大的程序共用一个中间代理程序,而对于暴露身份风险较大的程序要自己走一个Tor客户端;
  3. 不要让任何与你真实身份有关的流量(比如聊QQ时的流量)走Tor:第一,这样做只是有可能帮你隐匿你的物理位置,根本达不到匿名的目的;第二,朝廷会特别留意网络行为怪异的人,试问:如果腾讯服务器上记录到你的IP全是Tor出口节点的IP,你不算怪异谁算?


版权声明

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

4 条评论:

  1. 總算看完了……5.3.2有關摳摳(QQ)這種東西,我覺得一方面是從註冊到使用都不能涉及真實身份,然後專門開個虛擬機用來作為這一虛擬身份。

    回复删除
    回复
    1. To 音業
      关于QQ的使用我觉得可以分为两种使用身份来谈:一种是日常生活的真实身份;另一种是较为敏感、不想让人知道的网络匿名身份。
      对于真实身份使用QQ
      如果你想要用QQ与日常生活中的同事、朋友、家人交流,那么就不要幻想你能在任何想要了解你身份的人(当然包括政府)面前保持匿名。
      此时让QQ走Tor代理有以下好处:
      1. 让ISP观察不到你使用QQ这件事(注意腾讯依然可以看到你在用QQ,并且能看到你的聊天记录);
      2. 可能(注意仅仅是可能)隐匿你的物理位置。
      此时让QQ走Tor代理有以下坏处:
      1. 让腾讯/朝廷觉得你太过特殊:试想一下有多少人的QQ登录IP是Tor出口节点IP?(据报道,朝廷会特别留意网络行为“怪异”的人)
      2. 很可能降低自己的网速;
      3. 可能因登录地异常而被冻结账户。
      当然这个身份不可能实现匿名不代表没有其他保护自己隐私的安全措施,比如说:
      0. 能不用QQ就不用QQ;
      1. 能用QQ网页版就不用客户端,避免流氓客户端收集窃取你电脑中的信息;
      2. 非要用客户端的话可以单独为其建立一个虚拟机,把它与存放隐私数据的电脑分隔开;
      3. 一定要在移动设备上使用时限制好赋予其的权限。
      对于匿名身份使用QQ
      首先我严重怀疑这层身份是否还有用QQ的必要,因为此时匿名的身份决定你不能与任何知道你真实身份的人联系,那么你对聊天工具的选择范围也就大大增加,这也就允许你使用一些更加安全的通讯软件,具体软件的选择可以参考我之前的这篇博文(http://2xiangzi.blogspot.nl/2015/04/recommend-cryptocat.html),还有我刚更新完的“通讯软件积分榜”(https://drive.google.com/open?id=1lSKnU6iPaVAysf_O7PZroJMLkrzkDxcbM85ybAbxQks)。
      可能有人会说需要用QQ从事反党宣传活动,但是这样做的效果/效率如何,也值得怀疑。不过还是说一说这种情况下,为了达到匿名至少需要怎么做:
      1. 如果注册QQ时需要一个邮箱的话,那么你就需要保证这个邮箱也是匿名的,也就是说这个邮箱从注册到使用最起码是在Tor代理下;
      2. 如果注册QQ时需要一个手机号的话,那么这个手机号也要保证是匿名的,这可能需要用到虚拟手机号服务;
      3. 使用这个QQ时也要走Tor代理,最好能在隔离机中进行。

      另外,你之前的留言(http://2xiangzi.blogspot.com/2015/08/disconnect-search.html)我昨天已经回复了,回复得太慢了,实在是抱歉。

      删除