https://panopticlick.eff.org/,又名“您的浏览器的独特性和可跟踪性”。例如,它通常会给我一个独特的分数。最大的熵值来自 navigator.plugins 和通过 java 和 flash 的字体,但链接的 pdf还指出,禁用这些常见插件实际上只会增加唯一性,以及简单地改变用户代理。字体检测似乎也可以通过 css introspection 进行。
可以采取哪些步骤,存在哪些技术选项来对抗浏览器的指纹识别?
https://panopticlick.eff.org/,又名“您的浏览器的独特性和可跟踪性”。例如,它通常会给我一个独特的分数。最大的熵值来自 navigator.plugins 和通过 java 和 flash 的字体,但链接的 pdf还指出,禁用这些常见插件实际上只会增加唯一性,以及简单地改变用户代理。字体检测似乎也可以通过 css introspection 进行。
可以采取哪些步骤,存在哪些技术选项来对抗浏览器的指纹识别?
EFF 使用的指纹技术只不过是网站使用的“正常”Javascript 函数,以便正常运行。可以向外界报告不真实的信息,但您可能会“落后”:
或者有一个非常尴尬的导航。
假设您可以在任何地方使用 Tor 或 VPN 或 openshell 来传输您的 IP 地址,我认为“最安全”的做法是启动虚拟机,在其上安装 Windows 7,然后将其用于任何隐私敏感操作。不要在机器上安装任何不寻常的东西,它会如实报告是一台库存的 Windows 7 机器,是一大群类似机器中的一种。
您还具有机器在您的真实系统中被隔离的优势,并且您可以在闪存中对其进行快照/重新安装。你可以时不时地这样做——之前完成所有导航的“你”消失了,一个新的“你”出现了,历史清晰。
这可能非常有用,因为您可以保留“干净”快照并始终在敏感操作(如家庭银行业务)之前恢复它。一些虚拟机还允许“沙盒”,即虚拟机中的任何操作实际上都不会永久更改其内容——所有系统更改、下载的恶意软件、安装的病毒、注入的键盘记录器,一旦虚拟机关闭,就会消失。
任何其他技术的侵入性都不会降低,并且需要在浏览器或某种匿名代理上进行大量工作,这些匿名代理不仅旨在清理您的标题和 Javascript 响应(以及字体!),而且在一个可信的方式。
在我看来,不仅工作总量会相同(甚至更多),而且会是一种更复杂、更不稳定的工作。
安装最常见的操作系统,使用捆绑的浏览器和软件,抵制拉皮条的诱惑,以及与数十万台类似的刚刚安装、从未维护过的计算机——不是我的计算机——区别开来- 互联网上的机器?
现在我已经安装了一台虚拟 Windows 7 机器,甚至像 Joe Q.Average 那样将它升级到 Windows 10。我没有使用 Tor 或 VPN;外部站点所能看到的只是我从意大利佛罗伦萨连接。有三万个和我一模一样的连接。即使知道我的提供者,这仍然留下大约九千名候选人。这足够匿名吗?
事实证明并非如此。可能仍然存在可以调查的相关性,并具有足够的访问权限。例如,我正在玩一个在线游戏,我的输入被立即发送(字符缓冲,而不是行缓冲)。指纹 digram 和 trigram delays变得可能,并且使用足够大的语料库,确定在线用户 A 与在线用户 B 是同一个人(当然是在同一个在线游戏中)。同样的问题也可能发生在其他地方。
当我上网时,我倾向于总是以相同的顺序访问相同的站点。当然,我经常在几个网站(例如 Stack Overflow)上访问我的“个人页面”。我的浏览器中已经有一个定制的图像分发,根本没有下载,或者被HTTP If-Modified-Since
orIf-None-Match
请求绕过。这种习惯和浏览器帮助的结合也构成了一个特征。
鉴于网站可用的大量标记方法,假设可能只收集了 cookie 和被动数据是不安全的。例如,一个站点可能会宣传需要安装一种名为 的字体Tracking-ff0a7a.otf
,而浏览器会尽职尽责地下载它。该文件不一定会在缓存清除时被删除,并且在随后的访问中它没有被重新下载将证明我已经访问过该站点。字体不能对所有用户都相同,但包含独特的字形组合(例如,字符“1”可能包含“d”,“2”可能包含“e”,“4”可能包含“d” " 再次 - 或者这可以使用很少使用的字体代码点来完成),并且 HTML5 可用于绘制字形字符串 "12345678". 然后,图像将拼写出我独有的十六进制序列“deadbeef”。从所有意图和目的来看,这都是一个 cookie。
为了解决这个问题,我可能需要:
这是一种非常巧妙的“指纹”系统方法,主要包括关闭音频系统,然后通过 HTML5 虚拟播放声音并分析回来。结果将取决于底层音频系统,该系统与硬件相关,甚至与浏览器无关。当然,有一些方法可以通过使用插件注入随机噪声来解决这个问题,但这种行为可能会变得很糟糕,因为你很可能是唯一一个使用这种插件的人(因此有一个嘈杂的音频通道)与您的“平均”配置匹配的池。
我发现一种更好的方法是使用两个不同的 VM 引擎或配置,但您必须自己进行试验和验证。例如,我在使用 4 GB 和 8 GB RAM 和两种不同 ICH7 AC97 音频设置的两个不同 VM 中的同一个 Dell Precision M6800 上有两个不同的指纹(我怀疑可用的额外 RAM 使驱动程序采用不同的采样策略,这反过来产生的指纹略有不同。顺便说一句,我完全是偶然发现的)。我假设我可以使用 VMware 设置第三个虚拟机和/或第四个禁用声音的虚拟机。
不过,我不知道的是,我确实设法获得的指纹是否揭示了它是一个虚拟机的事实(所有 Windows 7 VirtualBoxen 都具有50b1f43716da3103fd74137f205420a8c0a845ec
完整缓冲区的哈希值吗?所有 M6800 都吗?)
以上所有都表明,我最好有充分的理由想要匿名:因为可靠地实现匿名将是后端的巨大痛苦。
在指纹识别期间,采取以下措施:
现在,对于 IP 地址,您可以使用:
对于用户代理:
但是,您将始终以某种方式被指纹识别和识别。这是因为您通常从同一个子网连接,并且使用同一个浏览器。所以要避免这两个,真的很难,因为你需要无数网络上的 VPN 服务器,以及用户代理生成器和标头混淆,它每天或每次启动它时都会设置不同的值。
我自己,我使用 Amazon EC2 免费的微型实例和免费的 OpenVPN 服务器,它每天都会在不同的区域自动停止和自动启动(它本身会使用脚本启动新服务器以通过 AWS API 进行设置) ,并通过 Route 53 API 更新 DNS。它使用 SQUID 作为代理,并且有许多规则可以阻止广告、跟踪以及其他一些事情。它还具有完整的 BGP 表,因为这些 VPN 服务器在网络中工作,但如果您不进行掩饰,则不需要此表。
您还可以让 EC2 实例更改其 IP 地址,而无需实际重新启动它。您可以使用 AWS API 释放弹性 IP 并分配一个新 IP,然后添加到它。如果您同时更改 User-Agent,您将避免指纹识别。
http://aws.amazon.com/articles/1346
例如看这个:
https://calomel.org/squid_ua_random.html
事实上,每天都有不同的 IP 号码和用户代理,谷歌无法识别我,所以我可以看到没有“跟踪我”的广告。
附言。添加新实例时,您需要至少 20GB 的 EBS 根卷。然后你只需做yum install squid
or apt-get install squid
,通过 /etc/ 配置它,然后就可以了。如果您想更改 IP 地址,只需更改其上的弹性 IP - 它确实以两种方式工作 - 您可以访问新实例或访问互联网的方式。
然后你只需要这个:
不要忘记时不时更新实例 yum update
我可以生成可能会自动工作的 AMI 图像。只需启动实例,它设置 OpenVPN,并通过 AWS API 配置 IP、DNS 以及 SQUID 等。也许亚马逊已经有一些 AMI。
看到这个:
http://n00dlestheindelible.blogspot.co.uk/2010/05/secure-anonymous-browsing-with-your-own.html
一些网站会抱怨您使用 VPN 工作。例如,一些提供音乐或视频的网站。虽然大多数网站都可以正常工作,但只有少数例外。
避免任何形式的浏览器指纹识别的技术要求是浏览器返回的所有潜在识别特征都是随机的,因此浏览器返回某一组特征的概率近似于在浏览器群体中观察到该组特征的概率我们希望保持匿名。
打破这一点,假设我们只处理一个特征(比如 User-Agent 标头),并且我们希望确保我们保持匿名。为了便于说明,我们假设 User-Agent 有 50 个可能的值,编号为 1 到 50。
一种可能的策略是使用根据浏览器群体观察到的最常出现的 User-Agent 值。在某些情况下,这可能是一个糟糕的策略,如下图所示:
根据该图,浏览器群体中最常出现的 User-Agent 值仅比其余值略高。如果我们简单地使用最常见的值 (25),指纹识别服务可以(一致地)推断出我们属于(相对较小)2.4% 的浏览器子集。因此,我们已经妥协了我们的匿名性。
请注意,简单地随机生成值而不考虑浏览器数量可能会严重损害匿名性,如下图所示:
从图中可以看出,我们浏览器返回的 User-Agent 的值是(均匀地)随机化的。但是,由于这些值从未在人群中出现,因此在这种情况下(中等复杂的)指纹识别服务可以始终推断出我们的浏览器类型是罕见的——这本身就是一个潜在的识别特征!因此,匿名性受到损害。
保证保持匿名性的唯一策略是匹配我们在浏览器群体中观察到的值的分布,如下图所示:
通过确保我们的浏览器返回的 User-Agent 值是随机的,以便每个值的概率与在浏览器群体中观察到该值的概率相匹配,我们从不承诺识别浏览器群体的特定子集,同时确保我们的浏览器不使用任何很少出现的用户代理版本。这样,匿名性得以维持。
在现实世界的场景中,有许多潜在的识别浏览器特征,为了保持匿名,请注意单独确保每个特征的每个值的概率与总体概率匹配是不够的:我们可能会冒返回值的罕见组合的风险,从而损害我们的匿名性;这可能最终导致我们的浏览器具有唯一性!相反,有必要将上述考虑应用于浏览器群体中浏览器特征的联合分布,即浏览器特征集的观测值的概率。
今天使用的指纹主要依赖于通过尽可能多地利用浏览器的细节来生成尽可能多的熵。即使是细微但短期稳定的细节,例如画布上的精确(硬件和驱动程序版本相关)渲染,也会被利用。收集的信息很可能通过根据所有细节生成足够长的哈希值来压缩,例如。通过将所有细节添加到一个长字符串或根据细节实际绘制一些东西到画布中并对其应用哈希函数。
但是,只要信息被压缩而不是完整存储,指纹就可以通过正面攻击来防御:与其试图使指纹尽可能不唯一,不如尝试使其尽可能唯一,例如。每个连接唯一。
这可以通过篡改细节来轻松实现,这些细节对于网页来说是非常糟糕的做法:
为了规避这种攻击,指纹必须足够模糊才能绕过随机部分,这意味着它不能将数据作为一个整体进行哈希处理,并且必须传输和存储大量信息。
通过屏蔽随机部分来规避攻击意味着只使用网页也强烈依赖的细节,这需要对指纹算法进行永久性调整。必然非随机细节的数量将在一定程度上受到标准化的限制。但是,如果选择得当,它仍可能允许唯一标识。