神刀安全网

通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

通过互联网进行秘密交流的能力,对于异政见分子和激进分子是非常重要的。话又说回来,几乎每个人都会关心网络上的隐私问题。

虽然 Tor网络 本身给用户提供了一个较高的隐私安全级别,让大多数人几乎无法发现使用者的真实IP。但是,这还不足以保护用户的隐私。当你浏览网页的时候,你的身份可能因为浏览器漏洞、cookie、浏览器历史记录、浏览器插件之类的问题而泄露。

Tor浏览器 是一个使用Tor进行预定制的Firefox,在用户浏览量web网页时,能对其隐私进行保护。浏览器插件会被禁用,浏览记录和缓存并非持久存储。只要你关闭了浏览器,一切痕迹都会被抹去。

用户指纹识别问题

防止用户的IP泄露,是一个保护他们隐私的关键点,而且我们还需要考虑许多其他东西。Tor浏览器的一些配置,或许能防止许多可能获取用户隐私的东西,不仅仅是Tor网络本身提供的通信保护。

Tor浏览器试图解决一个普遍性问题,那就是用户指纹。如果用户在某个网站能生成一个独特的指纹,追踪者就可以用来甄别每个访问该网站特定页面的用户,以便及时跟踪这个用户的活动。比如,一年中有相似访问记录的,我们可能判断其为同一用户。

更糟的是,追踪者有可能在你访问正常网络时,将你匹配为在访问Tor网络时的同一指纹。Tor浏览器在这点下了不少功夫,阻止追踪者通过指纹识别用户。

在过去,我们见过了许多识别指纹的方法,Tor浏览器自然作出了相应的对策。比如读取文本的大小,屏幕尺寸,当地时间,操作系统信息等。

浏览器指纹中, Canvas指纹 是非常知名的。然而现在很多可以用来识别用户身份的指纹,在Tor浏览器已近被禁用掉了。

UberCookie

在过去的几周,我能在可控环境内识别出tor浏览器的指纹,我们在这里分享下其中有趣的研究结果,以便进一步讨论如何改善Tor浏览器。

这里提供鉴别指纹的方法是基于Javascript的,现在的Tor浏览器都是默认启用的。我创建了一个简单而有效的POC,并称之为UberCookie。

UberCookie的demo

测量时间

Tor浏览器有个有趣的指纹,那就是Javascript函数Date.getTime()(unix时间),会每100ms执行一次刷新,所以你不能计量低于100ms的事件。这避免了特定web页面的Javascript代码对用户指纹进行匹配计量。因此我尝试了一些事件,为了绕过这个限制,它们会超过100ms。

其实用Javascript有许多办法,可以来衡量在Tor浏览器里低于100ms的事件,有些显而易见,有些则显得非常有趣。

首先,我增加了一个简单的变量,每秒会使用setInterval递增一个计数,即使这个精度并不是毫秒级别的,也是比Date.getTime提供的100ms精度更优的。

另一种测量时间的办法,则是用css3创建一个动画,配置好1ms的间隔,并监听animationiteration事件。

然而,我在web上使用setInterval进行递增能达到更好的效果。

鼠标滚轮指纹

Tor浏览器(大多数浏览器也一样)的鼠标滚轮事件会在web网页中滚动时,泄露潜在的硬件信息。这个事件提供了delta滚轮的信息,然而如果你使用是正常电脑鼠标,delta会是三个。但是如果你使用的是触控板,delta的数量就变为一个变动的值,这个值将与你的触摸板和使用模式挂钩。

通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

鼠标滚轮还会因其滚动速度,泄露操作系统信息和硬件性能信息。

我在这里创建了一个可用的实验POC:

滚轮信息泄露demo

这个演示创建了三个图表,其中一个与滚动速度有关,另一个跟delta挂钩,最后一个与用户滚动次数有关。

鼠标速度指纹

还有一个有趣的指纹可以揭示一些信息,那就是鼠标在网页中移动的速度。因为鼠标移动的速度是靠相关操作系统和硬件进行控制的,如果你使用上面提到的测量时间的策略,可以由Javascript对其进行读取。

测量网页上鼠标移动的平均速度,可能也是非常有趣的。

CPU Benchmark指纹

随着在web上setInterval精度的提高,我们可以创建一个CPU(或者内存)密集脚本,试试用户的浏览器会花多少时间去执行它。

我找了不同的电脑做了测试,在相同Tor浏览器版本的情况下,得到了完全不同的结果。

getClientRects指纹

我在tor浏览器上发现的最有趣的指纹向量是 getClientRects ,阻止从canvas读取返回值,

却会询问javascript的API特定某个DOM元素会在屏幕上如何绘画,在这里并没有任何限制和保护。

getClientRects可以得到精确的像素位置,以及给定的DOM元素画出的框大小。依据分辨率、字体配置和其他因素,getClientRects能得到不同的结果。这能让我们快速轻松地得到指纹向量,这点比固定的canvas指纹更优。

getClientRects在相同页面、相同版本的tor浏览器、不同的电脑上的案例:

电脑1:

通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

电脑2:

通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

正如你所看到的那样,getClientRects在这样的情况下,在相同页面和相同的DOM元素有很大的不同。

实验结果

电脑1上使用ubercookie的POC的案例:

Clientrects:{"x":131.5,"y":462,"width":724,"height":19,"top":462,"right":855.5,"bottom":481,"left":131.5} scrollingmilis:[2,2,0,3,0,1,0,2,3,0,0,3,1,2,2,1,2,1,4,4,35,2,1,3,0,1,0,3,0,1,0,3,0,1,0,3,1,0,3,1,3,0,1,3,2,4,4,8,44,4,1,4,4,405,2,3,2,1,3,1,3,57,2,0,2,2,0,2,2,4,60,2,0,2,2,0,2,2,6,54,2,2,2,0,2,1,4,8] scrollingdeltas:[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] Biggest mouse step: 65 In a few seconds, the result of theCPUbenchmark will appear, please wait... CPU Mean: 3245

电脑2上使用ubercookie的POC的案例(相同版本的Tor浏览器):

Client rects: {"x":159.51666259765625,"y":465.25,"width":664.6500244140625,"height":18.449996948242188,"top":465.25,"right":824.1666870117188,"bottom":483.6999969482422,"left":159.51666259765625} scrolling milis: [0,3,0,2,2,2,2,0,3,0,2,1,2,2,1,3,1,1,4,1,2,1,1,3,1,2,2,3,2,5,3,3,5,3,0,0,2,0,2,0,1,1,0,2,0,3,2,1,1,3,1,3,2,3,1,3,2,2,2,2,0,2,3,2,2,2,244,0,2,1,2,1,3,2,0,2,0,1,2,1,0,2,0,3,1,0,2,1,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,1,4,2,2,2,2,2,4,2] scrolling deltas: [3,0.975,1.65,1.5,1.725,2.25,2.775,2.4,3.15,3.375,3.975,3.675,4.35,4.95,5.625,5.55,5.25,5.25,4.2,6.3,9.975,13.95,7.575,6.9,2.85,5.925,8.85,0.9,4.425,3.675,4.725,2.625,2.4,5.475,2.625,3.675,5.4,5.775,7.275,6.975,8.175,9,8.475,3.45,2.475,2.25,0.6,1.8,11.1,8.4,8.475,8.1,7.5,6.375,8.175,4.95,4.8,4.275,3.525,3.375,1.125,2.7,2.175,1.95,1.65,1.2,1.05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] Biggest mouse step: 40 In a few seconds, the result of the CPU benchmark will appear, please wait... CPU Mean: 4660.5

很明显,getClientRects是完全不同的,它给我们提供了一个有趣的指纹向量。滚动速度milis不同,而且滚动delta也是不同,因为硬件有差异。你可以在上面的数据里看到,电脑1的鼠标是最快的。CPU benchmark提供了不同的结果,电脑1很明显比电脑2要快。

结论

用户即使使用Tor浏览器,我们还是很容易跟踪他们的网络活动,关联他们对不同页面的访问行为的。getClientrects为识别Tor浏览器用户提供了一个非常有趣的指纹向量。CPU benchmark和鼠标滚轮以及鼠标速度,甚至在区分相似用户上,给我们提供了更多判断信息。

*参考来源: jl ,FB小编dawner编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)      

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 通过鼠标滚轮移动数据获取Tor浏览器匿名用户的指纹

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮