EFF在5月发表了一份出色的研究报告,详细介绍了对浏览器进行指纹识别的各种方法。请参阅http://www.eff.org/deeplinks/2010/05/every-browser-unique-results-fom-panopticlick。他们发现,在对研究网站的大约100万访问中,有83.6%的浏览器具有唯一的指纹;其中启用Flash或Java的用户占94.2%。这不包括cookie!他们按照重要性的顺序对各种信息进行了排序(即,它们在唯一标识浏览器中的作用):诸如UA字符串,安装了哪些插件以及系统的字体列表之类的信息。我们需要一个一个地研究这些,并尽我们所能减少它提供的信息位数(熵)。在他们的研究中,他们对18.1位熵的指纹分布设置了下限。 (这意味着,随机选择一个浏览器,最多286,777个其他浏览器中的一个将共享其指纹。)
在所有情况下,都是通过HTTP收集或推断数据,或者通过JS代码收集数据,然后通过AJAX将其发布回服务器。
PluginDetect JS库用于检查该平台上的8个常见插件,以及用于估计Acrobat Reader版本的额外代码。数据由AJAX发布。
IE不允许通过navigator.plugins []进行枚举。从Firefox 28(错误757726)开始,Firefox限制了枚举navigator.plugins []的内容可见的插件。此更改不会禁用任何插件。它只是从枚举中隐藏了一些插件名称。网站仍然可以通过直接查询navigator.plugins [](例如navigator.plugins [“ Silverlight插件”])来检查是否安装了特定的隐藏插件。
通过“隐藏” navigator.plugins []枚举中不常见的插件名称,此代码更改将降低浏览器的唯一性。如果网站不使用“ Adobe Acrobat NPAPI插件,版本11.0.02”插件,为什么它需要知道已安装“ Adobe Acrobat NPAPI插件,版本11.0.02”插件?如果网站确实需要知道该插件是否已安装或是否满足最低版本要求,它仍然可以检查navigator.plugins [“ Adobe Acrobat NPAPI插件,版本11.0.02”]或navigator.mimeTypes [“ application / vnd。 fdf“]。enabledPlugin(用于解决有问题的插件,它们在名称中短视包含版本号,因此仅允许查询单个插件版本)。
for(navigator.plugins的插件){console.log(plugin.name); }“ Shockwave Flash”“ QuickTime插件7.7.3”“默认浏览器帮助器”“ Unity Player”“ Google Earth插件”“ Silverlight插件”“ Java Applet插件”“ Adobe Acrobat NPAPI插件,版本11.0.02“” WacomTabletPlugin“ navigator.plugins [” Unity Player“]。name //通过名称“ Unity Player”获取隐藏的插件
但是,通过插件隐藏,相同的JavaScript不会显示太多关于我的浏览器的个人识别信息,因为除Flash,Shockwave(导演),Java和QuickTime之外的所有插件名称都从navigator.plugins []枚举中隐藏:
从理论上讲,所有插件名称都可以隐藏,因为Web内容可以按插件名称查询navigator.plugins []。不幸的是,我们无法隐藏所有插件名称,因为许多流行的网站通过枚举navigator.plugins []并逐一比较插件名称来检查Flash或QuickTime,而不是仅按名称询问navigator.plugins [“ Shockwave Flash”]。这些网站应该是固定的。
可以在about:config pref plugins.enumerable_names中更改隐藏插件名称的策略。首选项的值是用逗号分隔的插件名称前缀列表(因此,前缀“ QuickTime”将与“ QuickTime Plug-in 6.4”和“ QuickTime Plug-in 7.7.3”都匹配)。默认首选项掩盖了所有插件名称,但Flash,Shockwave(导演),Java和QuickTime除外。要隐藏所有插件名称,请将首选项设置为空字符串“”(不带引号)。要隐藏任何插件名称,请将首选项设置为魔术值“ *”(不带引号)。
由Flash或Java applet收集的系统字体(如果已安装),并通过AJAX发布发送。字体列表未排序,这提供了一两个额外的熵。我们可以要求Adobe在默认情况下限制此列表。或要求他们实施API,以便我们向他们提供列表;或(由OOPP实现)替换它们用来获取字体列表的OS API调用,然后给我们自己的字体。这些都不是一件容易的事,但是鉴于这是第一,我们绝对应该在这里做些事情。最快的选择可能是破解我们自己的OS API。
字体列表也可以通过CSS自省来确定。我们也许可以将可用集减少为更少的常用字体。然后,如果脚本尝试对列表进行暴力破解,则退回(以指数形式?)。可以要求网站通过WOFF提供不寻常的字体吗?
从HTTP标头检测到。非常简单的修复程序,但有可能损坏(与任何UA更改一样!)。例如:Mozilla / 5.0(X11; U; Linux i686; zh-CN; rv:1.9.1.7)Gecko / 20100106 Ubuntu / 9.10(karmic)Firefox / 3.5.7。补救措施:删除Firefox和Gecko版本中的最后一个数字,以及Gecko的创建日期;对于Linux,删除发行版和版本;可能会删除CPU。 Windows实际上是最不唯一的,因为OS版本字符串仅标识主要版本(例如XP),到目前为止,大多数用户都使用Windows。
鲍里斯·扎巴尔斯基(Boris Zbarsky)指出,UA的大部分内容都会导致嗅探不良。爱尔兰的“ ga-IE”和“ Minef产量”被检测为IE。网站根据操作系统错误地进行嗅探。网站嗅探了Gecko年而不是Gecko版本。从3.0.9升级到3.0.10可能会破坏事情。相当多的网站都在嗅探“ Firefox”,这对网络的持续自由构成了威胁。因此,从UA字符串中删除内容对兼容性和隐私具有长期的积极影响。
UA欺骗还有另一个问题。由于某些原因,Content-window javascript名称空间中存在Components.classes和Components.interfaces。 Gregory Fleischer使用它来测试是否存在临时接口以对OS和Firefox版本进行指纹识别,直至次要版本(当时的最新版本FF3.5.3)。他还有许多其他指纹识别示例,您也应该调查。 -mikeperry
例如:text / html,* / * ISO-8859-1,utf-8; q = 0.7,*; q = 0.7 gzip,默认设置en,en; q = 0.5。不确定我们在这里可以做很多事情吗?
例如:1280x800x24。除了可能总是报告“ 24”的色彩深度(具有可疑的价值)外,别无所求。
在颜色深度中将“ 32”映射到“ 24”,反之亦然将使熵降低约0.9位。可能值得。
Torbutton针对屏幕分辨率采取了两种对策:量化AvailWidth和AvailHeight,并将Width和Height设置为AvailWidth和AvailHeight的值。如果窗口最大化,Torbutton当前会出错,不这样做。这些措施在私有浏览模式下可能是适当的。 -2010年6月15日Pde 03:12(UTC)
报告的熵仅包括是否启用了以下内容:DOM localStorage,DOM sessionStorage和(对于IE)userData。它没有测试Flash LSO,Silverlight Cookie,HTML5数据库或DOM globalStorage。我们无法采取任何措施来阻止测试它们是否已启用,但是我们可以像使用cookie一样将它们锁定给第三方。
对于Flash和Silverlight,我们需要向它们施加压力,以实现更好的API,以控制和清除存储的数据。毫无疑问,这比该列表上的其他任何内容都重要,尽管在本研究中它被忽略了,因为它不符合他们的指纹定义。我们可以通过非常宽松地将新的Flash API用于私有浏览模式来进行攻击。或使用上述OS API进行操作。
研究中提到但未包括其他指纹识别方法。该研究引用了一份有关指纹服务的Gartner报告,这无疑将很有趣。
无疑,Flash和Java提供了其他有趣的花絮。例如,ActiveX和Silverlight允许查询“ CPU类型和许多其他详细信息”。这里需要更多研究。
“第41个参数查看了100多个参数,并且其算法的核心是一个时差参数,该参数测量用户的PC(低至毫秒)与服务器的PC之间的时间差。”我们无法破坏Date.now的毫秒分辨率,但是可以尝试向其添加一个小的(<100ms)偏移量。这将是按原点生成的,并且会持续相对较短的时间:会话的生命周期,标签的生命周期等。必须注意不能撤消。
时钟偏斜测量实际上并不是浏览器的问题;它倾向于由操作系统在TCP级别公开。假设攻击者可以通过此方法获得有关主机身份的4-6位信息。 -2010年6月15日Pde 02:55(UTC)
这不是100%正确的。根据RFC 1323第3.2和4.2.2节,仅当初始syn数据包(非syn + ack)包含时间戳字段时才可以使用时间戳。这是客户端OS的属性,在某些平台上可以控制。时间戳值也不是绝对的,但通常是任意的毫秒数,没有特定的参考点。 TLS也具有时间戳,但是此值完全由Firefox控制。 -mikeperry
同意可以在OS层关闭TCP RTTM选项。我的天真直觉是,所有现代OS都已将此功能打开,而将其关闭将对避免拥塞产生根本性的干预,并可能使其本身具有指纹。请注意,时钟偏斜是时钟跳动速度的函数,而不是时钟的时间。任意参考点足以测量时钟偏斜。 -2010年12月9日Pde 08:23(PST)
还要注意的是,不仅时钟偏斜,而且可以允许指纹识别的时钟精度-无论是在某些操作在系统上花费的时间还是在用户操作方面。例如,Scout Analytics根据键入节奏为指纹用户提供软件。人们还可以想象定时javascript的紧密循环,它会基于某些资源密集型调用对用户进行指纹识别。一种可能是将“日期”值量化为第二个,然后在私有浏览模式下向后续调用添加随机的,单调增加的毫秒数。 -mikeperry
“ ThreatMetrix声称它可以检测TCP / IP堆栈中的不正常行为,并且可以刺穿代理服务器”。尚不知道这意味着什么。
nmap的主机指纹选项(和源代码)是了解TCP / IP堆栈问题的第一个起点。同样,浏览器对此无能为力。
至于“通过代理服务器刺穿”,我的最佳猜测是它们使用Flash提供的原始套接字基础结构来学习客户端的IP,该基础结构不遵守浏览器的代理设置。不知道Java和Silverlight是否有类似的问题。 -2010年6月15日Pde 02:58(UTC)
可用于收集有关是否安装了某些插件,确切的浏览器版本等信息。在这里,我们可能无能为力。
“ TorButton已经发展为对指纹抗性进行了深思熟虑[19],并且可能正在接受对该项目成功进行必要的审查[15]。NoScript是一种有用的隐私增强技术,似乎降低了指纹识别性。”
“我们只识别出三类具有相对较好的抗指纹性能的浏览器:那些阻止JavaScript的浏览器,那些使用TorButton的浏览器以及某些类型的智能手机。”
我们应该研究TorButton的功能,看看是否可以集成其某些功能。我们还可以向用户推荐它,NoScript和Flashblock。我们可能会建议对相关插件进行改进,例如提供阻止第三方内容但不阻止第一方内容的选项。 (这并不能严格解决任何问题,但是使收集数据更加困难,因为第三方现在依靠第一方来收集数据。)
不幸的是,Flashblock似乎并未阻止Flash读取和写入LSO,因此怀疑它是否可以依赖以防止出现指纹。 -Pde 2010年6月15日03:00(UTC)
诸如地理位置,数据库访问之类的事情要求用户授予给定站点的权限。对于地理定位,这是通过信息栏完成的。我们应该尽一切可能使用户清楚他们所提供的内容,并在隐私面板中集中控制这些权限。这就是UX隐私建议所寻求的。
“在获得了插件和插件提供的信息之后,我们认为HTML5 Canvas是当今浏览器面临的最大的指纹识别威胁。” -Tor项目。原始研究:Pixel Perfect:HTML5中的指纹画布,演示:HTML5画布指纹。